Per Copilot review on #987: _zsh_highlight_main__type's cache is keyed on the command name alone, so classifying a name once under PATH_DIRS (e.g. as a plain top-level command) would silently poison later lookups of that same name after sudo -- and vice versa -- regardless of the PATH_DIRS removal, since the cache lookup happens before $options_to_set is even consulted. Give _zsh_highlight_main__type an explicit no_cache parameter, and add _zsh_highlight_main__type_maybe_no_pathdirs(), a small wrapper that only shadows $options_to_set (and only bypasses the cache) when PATH_DIRS was actually present to remove -- so a user without PATH_DIRS set sees this codepath do nothing at all. Both call sites in the main word-classification block now go through this wrapper instead of duplicating the shadowing logic inline. Strengthened sudo-path_dirs.zsh to classify the same name twice in one buffer (plain, then sudo-prefixed) specifically to exercise this cache interaction, not just the PATH_DIRS removal in isolation. Verified via WSL zsh 5.9: make test passes (same 28 pre-existing TODO failures, zero new), and the strengthened test fails as expected (observes "command" instead of "unknown-token" on the sudo-prefixed occurrence) when run against the pre-fix highlighter. |
||
|---|---|---|
| .. | ||
| brackets | ||
| cursor | ||
| line | ||
| main | ||
| pattern | ||
| regexp | ||
| root | ||
| README.md | ||
README.md
zsh-syntax-highlighting / highlighters
Navigate into the individual highlighters' documentation to see
what styles ($ZSH_HIGHLIGHT_STYLES keys) each highlighter defines.
Refer to the documentation on highlighters for further information.