* Update direct dependencies
* Update transient dependencies
* Switch back to `dirs` crate
The `dirs`/`dirs-sys` repositories are unarchived and the crates are
maintained again, while `dirs-next` crates aren't.
* Move theme iteration logic to `GitConfig`
The `git2::Config` type is now encapsulated and the regex is given to
`libgit2` to filter the config entries.
* Move remote url getter to `GitConfig`
* Update to clap 4
* Add help, usage, error-context features to clap
* Add wrap_help clap feature
* Remove DeriveDisplayOrder as it is now default
* Update ValueSource using statement
* Update #[clap(...)] to #[command(...)]
* Update #[clap(...)] to #[arg(...)]
* Update #[structopt(...)] to #[arg(...)]
* Remove value_parser because it is now default
* Return option & argument names as `String` due to lifetime issues
* Remove leading hyphens from arguments long definition
Leading hyphens are no longer accepted.
* Argument names are derived from field names and `snake_case`
* `help` & `version` are no longer added automatically
* Update `clap` to 4.1.8
---------
Co-authored-by: tjquillan <tjquillan@gmail.com>
The command failed because the two empty arguments for the internal `Opt`
parsing actually meant "<binary> <minus_file>" and since `minus_file` is now
parsed with `PathBufValueParser` and the value parser rejects empty values.
* try fix bad alignment in unicode (#1144)
* use width instead of count in wrap_line
* fix fmt
* 3 tests do not need fail
* fix tests
Co-authored-by: Thomas Otto <th1000s@posteo.net>
* ci: improve formatting
* ci.yaml: apply new formatting
* ci: release apple arm binary
* use cross for mac arm
* wip
* do not use cross
* install targets
* Stop ignoring a passing test
edits::tests::test_infer_edits_12 passes so there is no need to ignore
it.
* Refactor Levenshtein tests
Reduce the amount of repetition and specify the Levenshtein distance
explicitly in preparation for changing the Levenshtein calculation and
adding more tests in a future commit. As there are quite a few inputs to
each test use a struct rather than a plain function for the tests as
this effectively provides named parameters for the inputs.
* Highlight deletions before insertions
When a token has moved within a line try to highlight it as a deletion
followed by an insertion. Currently
-'b '
+' b'
is highlighted as
-'b[ ]'
+'[ ]b'
as if the space has moved to the left, instead highlight it as
-'[b] '
+' [b]'
as if the "b" has moved to the right. As the changes to the tests show
this also tends to favor a longer match at the start of the line.
* Don't highlight an unchanged trailing space
Only unchanged space between changed tokens should be highlighted, if
the line ends with an unchanged space then the space should not be
highlighted.
* Try to group highlighted changes together
Sometimes the highlighting of a change is not as clear as it could
be. For example the change
-printf "%s\n" s y y ...
+test_write_lines s y n ...
is highlighted as
-[printf "%]s[\n"] [s ]y y ...
+[test_write_lines ]s y y ...
rather than
-[printf "%s\n"] s y n ...
+[test_write_lines] s y y ...
This is because the Levenshtein distance calculation only checks if
the current tokens match without considering if the previous tokens
matched or not. Adding a small penalty for starting a run of changed
tokens forces the changes to be grouped together whenever possible. A
knock on effect of adding the penalty is that the cost a substitution
needs to be increased relative to the cost of an insertion/deletion
otherwise the lowest cost for "ab" -> "ba" is two substitutions rather
than an insertion, match and deletion.
There are several changes to the tests
- the Levenshtein distance is updated to reflect the new calculation in
tests::align::*
- several new tests are added to tests::align to check the grouping of
different combinations of insertions and deletions
- tests::edits::test_infer_edits_10 shows an improvement in the
highlighting as the unchanged space at the end of the changed tokens
is no longer highlighted. This is because it is no longer considered
to be deleted by the Levenshtein matching as deleting the space
between the deleted words now has a lower cost.
- there is a new test in tests::edits using the example in this
message.
* Stop using substitutions in Levenshtein calculation
Now that the lowest cost edit path groups deletions and insertions
together there seems to be little point in keeping substitutions. Indeed
the lower cost of substitutions compared to a deletion followed by an
insertion can adversely affect the highlighting. If the length of the
line does not change delta will prefer to use substitutions over
deletions and insertions even if it results in unchanged tokens being
marked as changed. For example in
-[a] a a a a a [b b b]
+[c] a a a a a [a c c]
unchanged tokens are marked as deleted and inserted. Without
substitutions this is highlighted as
-a a a a a a [b b b]
+[c ]a a a a a a [c c]
which highlights the insertion at the beginning of the line and the
change at the end of the line more clearly.
There is a change to the distance calculation as substitutions only
contributed the length of the deletion whereas now the same change will
add the length of both the deletion and the insertion. This is addressed
by doubling the contribution of unchanged sections so that the
denominator equals the sum of the distance contributions of the plus
line and minus line.
Remove Provides in Debian package as this is incorrect usage of this flag.
To provide two versions of packages `Conflicts` as used is sufficient.
See Debian Policy Manual (v4.6.1.1) section 7.5
When at it Remove trailing dot in Description header to comply with section 5.6.13
Fixes: https://github.com/dandavison/delta/issues/1210