Use elixir internal distance function instead of a library for command similarity comparison.
Elixir provides String.jaro_distance function, which is similar to the levenstain distance. This allows us to remove a dependency.
This commit is contained in:
parent
9231b21305
commit
7edf3d87ca
|
|
@ -16,9 +16,8 @@
|
|||
defmodule RabbitMQ.CLI.Core.Parser do
|
||||
alias RabbitMQ.CLI.Core.{CommandModules, Config}
|
||||
|
||||
# This assumes the average word letter count in
|
||||
# the English language is 5.
|
||||
@levenshtein_distance_limit 5
|
||||
# Use the same jaro distance limit as in Elixir `did_you_mean`
|
||||
@jaro_distance_limit 0.77
|
||||
|
||||
def default_switches() do
|
||||
[
|
||||
|
|
@ -167,19 +166,18 @@ defmodule RabbitMQ.CLI.Core.Parser do
|
|||
nil
|
||||
end
|
||||
|
||||
defp command_suggestion(cmd_name, module_map) do
|
||||
defp command_suggestion(typed, module_map) do
|
||||
suggestion =
|
||||
module_map
|
||||
|> Map.keys()
|
||||
|> Enum.map(fn cmd ->
|
||||
{cmd, Simetric.Levenshtein.compare(cmd, cmd_name)}
|
||||
|> Enum.map(fn existing ->
|
||||
{existing, String.jaro_distance(existing, typed)}
|
||||
end)
|
||||
|> Enum.min_by(fn {_, distance} -> distance end)
|
||||
|> Enum.max_by(fn {_, distance} -> distance end)
|
||||
|
||||
case suggestion do
|
||||
{cmd, distance} when distance <= @levenshtein_distance_limit ->
|
||||
{cmd, distance} when distance >= @jaro_distance_limit ->
|
||||
{:suggest, cmd}
|
||||
|
||||
_ ->
|
||||
nil
|
||||
end
|
||||
|
|
|
|||
|
|
@ -88,7 +88,6 @@ defmodule RabbitMQCtl.MixfileBase do
|
|||
elixir_deps = [
|
||||
{:json, "~> 1.0.0"},
|
||||
{:csv, "~> 2.0.0"},
|
||||
{:simetric, "~> 0.2.0"},
|
||||
|
||||
{:amqp, "~> 0.2.2", only: :test},
|
||||
{:dialyxir, "~> 0.5", only: :test, runtime: false},
|
||||
|
|
|
|||
Loading…
Reference in New Issue