The renderer and its ariadne dependency sit behind the new
feat_diagnostics cargo feature, on by default. Without it a no-op
stand-in with the same API takes uucore::diagnostics' place, so the
utilities need no cfg of their own: enabled() is always false and
every caller falls back to its plain one-line message.
Each utility keeps a crate-level `diagnostics` feature for standalone
builds, the caret snapshot tests compile out with the renderer, and CI
gains a Build/No-diagnostics job that runs the suite without the
feature and fails if ariadne sneaks back into the dependency tree.
remove a duplicate `syn` v2 dependency for the `encoding` feature of `uucore`:
```console
$ cargo tree --target all -p uucore --features encoding --invert syn@2
warning: nothing to print.
```
The UTF-8 sequence length was derived from char::from(b).len_utf8(), which uses
the leading byte's value as a codepoint rather than decoding the length from its
bit pattern. That is only correct for 2-byte characters; 3- and 4-byte ones were
split into single bytes and each counted as one column, so a following tab
expanded to the wrong column. Derive the length from the leading byte and
measure the display width with unicode-width.
expand and unexpand needed identical logic, so it lives in a new
uucore::char_width helper (char_width_at) instead of being duplicated.
Should make test tests/expand/mb.sh pass
parse_datetime 0.15 returns ParsedDateTime instead of jiff::Zoned;
unwrap the in-range value via into_zoned() at the call sites and treat
out-of-range (Extended) years as unparseable input.