This is related to #546. That was a documentation problem, but there are
some code problems that are related.
The first is that an unknown migration line is a panic in the CLI. This
is a byproduct of the fact that rivermigrate.New checks the migration
line name, but doesn't return an error, so it'd panic instead.
Here, I'm suggesting that we do a small breaking change by having
rivermigrate.New return a possible error. It's not great, but it's
something that'll easy for people to fix, and might help avoid some
future panics. An alternative possibility would be to add a new
NewWithError or something of that nature, but it'd make the API a
little uglier.
Along with that change, we also bring in a change to suggest migration
lines in case of an unknown one using Levenshtein distances. This is
aimed at preventing totally unactionable errors in the event of very
simple misspellings (e.g. "workflow" versus "workflows"). Cobra actually
already has a similar feature built-in for command misspellings.
I vendored in this repo [1] as a Levenshtein implementation and did a
little code clean up. I don't want to add another Go module dependency
for such a simple algorithm (it's just a dozen lines), and I believe
their MIT license should be compatible.
This is related to #546. That was a documentation problem, but there are some code problems that are related.
The first is that an unknown migration line is a panic in the CLI. This is a byproduct of the fact that
rivermigrate.New
checks the migration line name, but doesn't return an error, so it'd panic instead.Here, I'm suggesting that we do a small breaking change by having
rivermigrate.New
return a possible error. It's not great, but it's something that'll easy for people to fix, and might help avoid some future panics. An alternative possibility would be to add a newNewWithError
or something of that nature, but it'd make the API a little uglier.Along with that change, we also bring in a change to suggest migration lines in case of an unknown one using Levenshtein distances. This is aimed at preventing totally unactionable errors in the event of very simple misspellings (e.g. "workflow" versus "workflows"). Cobra actually already has a similar feature built-in for command misspellings.
I vendored in this repo [1] as a Levenshtein implementation and did a little code clean up. I don't want to add another Go module dependency for such a simple algorithm (it's just a dozen lines), and I believe their MIT license should be compatible.
[1] https://github.com/agnivade/levenshtein/tree/master