complete/zsh: improve --hyperlink-format completion#3102
complete/zsh: improve --hyperlink-format completion#3102okdana wants to merge 1 commit intoBurntSushi:masterfrom
Conversation
also don't re-define helper functions if they exist
|
We were discussing with @ilyagr about the removal of duplicate hyperlink alias names in #3096 (here's my draft of this idea if you're interested). If this would end up being accepted, what would you think about adding a |
|
oh. i was semi-conscious of the fact that i was getting e-mails about that, which is why i thought to do this. but i must've forgot about it already by the time i went to actually work on it, i never even looked at it yes, that would be convenient though i think, in contrast to the encodings, it makes sense for these to have descriptions for what they actually do. since they're auto-generated it could be as simple as the strings they expand to. so something like then again the man page isn't explicit about them either so w/e |
|
Either having the strings they expand to or adding a custom description to Lots of variants are possible here, and also for the main page. |
|
I made #3103 to be used as a baseline, but didn't add descriptions yet since they wouldn't be used. Adding them won't be a problem if needed. |
Also don't re-define helper functions if they exist. Closes #3102
|
Thank you! I took this as-is, except I added descriptions to the new |
Also don't re-define helper functions if they exist. Closes #3102
Also don't re-define helper functions if they exist. Closes #3102
Also don't re-define helper functions if they exist. Closes #3102
⚠️ **CAUTION: this is a major update, indicating a breaking change!**⚠️ This MR contains the following updates: | Package | Update | Change | |---|---|---| | [BurntSushi/ripgrep](https://github.com/BurntSushi/ripgrep) | major | `14.1.1` -> `15.0.0` | MR created with the help of [el-capitano/tools/renovate-bot](https://gitlab.com/el-capitano/tools/renovate-bot). **Proposed changes to behavior should be submitted there as MRs.** --- ### Release Notes <details> <summary>BurntSushi/ripgrep (BurntSushi/ripgrep)</summary> ### [`v15.0.0`](https://github.com/BurntSushi/ripgrep/blob/HEAD/CHANGELOG.md#1500-2025-10-15) [Compare Source](BurntSushi/ripgrep@14.1.1...15.0.0) \=================== ripgrep 15 is a new major version release of ripgrep that mostly has bug fixes, some minor performance improvements and minor new features. Here are some highlights: - Several bugs around gitignore matching have been fixed. This includes a commonly reported bug related to applying gitignore rules from parent directories. - A memory usage regression when handling very large gitignore files has been fixed. - `rg -vf file`, where `file` is empty, now matches everything. - The `-r/--replace` flag now works with `--json`. - A subset of Jujutsu (`jj`) repositories are now treated as if they were git repositories. That is, ripgrep will respect `jj`'s gitignores. - Globs can now use nested curly braces. Platform support: - `aarch64` for Windows now has release artifacts. - `powerpc64` no longer has release artifacts generated for it. The CI release workflow stopped working, and I didn't deem it worth my time to debug it. If someone wants this and can test it, I'd be happy to add it back. - ripgrep binaries are now compiled with full LTO enabled. You may notice small performance improvements from this and a modest decrease in binary size. Performance improvements: - [PERF #​2111](BurntSushi/ripgrep#2111): Don't resolve helper binaries on Windows when `-z/--search-zip` isn't used. - [PERF #​2865](BurntSushi/ripgrep#2865): Avoid using path canonicalization on Windows when emitting hyperlinks. - [PERF #​3184](BurntSushi/ripgrep#3184): Improve performance of large values with `-A/--after-context`. Bug fixes: - [BUG #​829](BurntSushi/ripgrep#829), [BUG #​2731](BurntSushi/ripgrep#2731), [BUG #​2747](BurntSushi/ripgrep#2747), [BUG #​2770](BurntSushi/ripgrep#2770), [BUG #​2778](BurntSushi/ripgrep#2778), [BUG #​2836](BurntSushi/ripgrep#2836), [BUG #​2933](BurntSushi/ripgrep#2933), [BUG #​3067](BurntSushi/ripgrep#3067): Fix bug related to gitignores from parent directories. - [BUG #​1332](BurntSushi/ripgrep#1332), [BUG #​3001](BurntSushi/ripgrep#3001): Make `rg -vf file` where `file` is empty match everything. - [BUG #​2177](BurntSushi/ripgrep#2177): Ignore a UTF-8 BOM marker at the start of `.gitignore` (and similar files). - [BUG #​2750](BurntSushi/ripgrep#2750): Fix memory usage regression for some truly large gitignore files. - [BUG #​2944](BurntSushi/ripgrep#2944): Fix a bug where the "bytes searched" in `--stats` output could be incorrect. - [BUG #​2990](BurntSushi/ripgrep#2990): Fix a bug where ripgrep would mishandle globs that ended with a `.`. - [BUG #​2094](BurntSushi/ripgrep#2094), [BUG #​3076](BurntSushi/ripgrep#3076): Fix bug with `-m/--max-count` and `-U/--multiline` showing too many matches. - [BUG #​3100](BurntSushi/ripgrep#3100): Preserve line terminators when using `-r/--replace` flag. - [BUG #​3108](BurntSushi/ripgrep#3108): Fix a bug where `-q --files-without-match` inverted the exit code. - [BUG #​3131](BurntSushi/ripgrep#3131): Document inconsistency between `-c/--count` and `--files-with-matches`. - [BUG #​3135](BurntSushi/ripgrep#3135): Fix rare panic for some classes of large regexes on large haystacks. - [BUG #​3140](BurntSushi/ripgrep#3140): Ensure hyphens in flag names are escaped in the roff text for the man page. - [BUG #​3155](BurntSushi/ripgrep#3155): Statically compile PCRE2 into macOS release artifacts on `aarch64`. - [BUG #​3173](BurntSushi/ripgrep#3173): Fix ancestor ignore filter bug when searching whitelisted hidden files. - [BUG #​3178](BurntSushi/ripgrep#3178): Fix bug causing incorrect summary statistics with `--json` flag. - [BUG #​3179](BurntSushi/ripgrep#3179): Fix gitignore bug when searching absolute paths with global gitignores. - [BUG #​3180](BurntSushi/ripgrep#3180): Fix a panicking bug when using `-U/--multiline` and `-r/--replace`. Feature enhancements: - Many enhancements to the default set of file types available for filtering. - [FEATURE #​1872](BurntSushi/ripgrep#1872): Make `-r/--replace` work with `--json`. - [FEATURE #​2708](BurntSushi/ripgrep#2708): Completions for the fish shell take ripgrep's config file into account. - [FEATURE #​2841](BurntSushi/ripgrep#2841): Add `italic` to the list of available style attributes in `--color`. - [FEATURE #​2842](BurntSushi/ripgrep#2842): Directories containing `.jj` are now treated as git repositories. - [FEATURE #​2849](BurntSushi/ripgrep#2849): When using multithreading, schedule files to search in order given on CLI. - [FEATURE #​2943](BurntSushi/ripgrep#2943): Add `aarch64` release artifacts for Windows. - [FEATURE #​3024](BurntSushi/ripgrep#3024): Add `highlight` color type, for styling non-matching text in a matching line. - [FEATURE #​3048](BurntSushi/ripgrep#3048): Globs in ripgrep (and the `globset` crate) now support nested alternates. - [FEATURE #​3096](BurntSushi/ripgrep#3096): Improve completions for `--hyperlink-format` in bash and fish. - [FEATURE #​3102](BurntSushi/ripgrep#3102): Improve completions for `--hyperlink-format` in zsh. </details> --- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever MR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this MR and you won't be reminded about this update again. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this MR, check this box --- This MR has been generated by [Renovate Bot](https://github.com/renovatebot/renovate). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0MS4xNDguNiIsInVwZGF0ZWRJblZlciI6IjQxLjE0OC42IiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6WyJSZW5vdmF0ZSBCb3QiXX0=-->
15.0.0 (2025-10-15) =================== ripgrep 15 is a new major version release of ripgrep that mostly has bug fixes, some minor performance improvements and minor new features. Here are some highlights: * Several bugs around gitignore matching have been fixed. This includes a commonly reported bug related to applying gitignore rules from parent directories. * A memory usage regression when handling very large gitignore files has been fixed. * `rg -vf file`, where `file` is empty, now matches everything. * The `-r/--replace` flag now works with `--json`. * A subset of Jujutsu (`jj`) repositories are now treated as if they were git repositories. That is, ripgrep will respect `jj`'s gitignores. * Globs can now use nested curly braces. Platform support: * `aarch64` for Windows now has release artifacts. * `powerpc64` no longer has release artifacts generated for it. The CI release workflow stopped working, and I didn't deem it worth my time to debug it. If someone wants this and can test it, I'd be happy to add it back. * ripgrep binaries are now compiled with full LTO enabled. You may notice small performance improvements from this and a modest decrease in binary size. Performance improvements: * [PERF #2111](BurntSushi/ripgrep#2111): Don't resolve helper binaries on Windows when `-z/--search-zip` isn't used. * [PERF #2865](BurntSushi/ripgrep#2865): Avoid using path canonicalization on Windows when emitting hyperlinks. * [PERF #3184](BurntSushi/ripgrep#3184): Improve performance of large values with `-A/--after-context`. Bug fixes: * [BUG #829](BurntSushi/ripgrep#829), [BUG #2731](BurntSushi/ripgrep#2731), [BUG #2747](BurntSushi/ripgrep#2747), [BUG #2770](BurntSushi/ripgrep#2770), [BUG #2778](BurntSushi/ripgrep#2778), [BUG #2836](BurntSushi/ripgrep#2836), [BUG #2933](BurntSushi/ripgrep#2933), [BUG #3067](BurntSushi/ripgrep#3067): Fix bug related to gitignores from parent directories. * [BUG #1332](BurntSushi/ripgrep#1332), [BUG #3001](BurntSushi/ripgrep#3001): Make `rg -vf file` where `file` is empty match everything. * [BUG #2177](BurntSushi/ripgrep#2177): Ignore a UTF-8 BOM marker at the start of `.gitignore` (and similar files). * [BUG #2750](BurntSushi/ripgrep#2750): Fix memory usage regression for some truly large gitignore files. * [BUG #2944](BurntSushi/ripgrep#2944): Fix a bug where the "bytes searched" in `--stats` output could be incorrect. * [BUG #2990](BurntSushi/ripgrep#2990): Fix a bug where ripgrep would mishandle globs that ended with a `.`. * [BUG #2094](BurntSushi/ripgrep#2094), [BUG #3076](BurntSushi/ripgrep#3076): Fix bug with `-m/--max-count` and `-U/--multiline` showing too many matches. * [BUG #3100](BurntSushi/ripgrep#3100): Preserve line terminators when using `-r/--replace` flag. * [BUG #3108](BurntSushi/ripgrep#3108): Fix a bug where `-q --files-without-match` inverted the exit code. * [BUG #3131](BurntSushi/ripgrep#3131): Document inconsistency between `-c/--count` and `--files-with-matches`. * [BUG #3135](BurntSushi/ripgrep#3135): Fix rare panic for some classes of large regexes on large haystacks. * [BUG #3140](BurntSushi/ripgrep#3140): Ensure hyphens in flag names are escaped in the roff text for the man page. * [BUG #3155](BurntSushi/ripgrep#3155): Statically compile PCRE2 into macOS release artifacts on `aarch64`. * [BUG #3173](BurntSushi/ripgrep#3173): Fix ancestor ignore filter bug when searching whitelisted hidden files. * [BUG #3178](BurntSushi/ripgrep#3178): Fix bug causing incorrect summary statistics with `--json` flag. * [BUG #3179](BurntSushi/ripgrep#3179): Fix gitignore bug when searching absolute paths with global gitignores. * [BUG #3180](BurntSushi/ripgrep#3180): Fix a panicking bug when using `-U/--multiline` and `-r/--replace`. Feature enhancements: * Many enhancements to the default set of file types available for filtering. * [FEATURE #1872](BurntSushi/ripgrep#1872): Make `-r/--replace` work with `--json`. * [FEATURE #2708](BurntSushi/ripgrep#2708): Completions for the fish shell take ripgrep's config file into account. * [FEATURE #2841](BurntSushi/ripgrep#2841): Add `italic` to the list of available style attributes in `--color`. * [FEATURE #2842](BurntSushi/ripgrep#2842): Directories containing `.jj` are now treated as git repositories. * [FEATURE #2849](BurntSushi/ripgrep#2849): When using multithreading, schedule files to search in order given on CLI. * [FEATURE #2943](BurntSushi/ripgrep#2943): Add `aarch64` release artifacts for Windows. * [FEATURE #3024](BurntSushi/ripgrep#3024): Add `highlight` color type, for styling non-matching text in a matching line. * [FEATURE #3048](BurntSushi/ripgrep#3048): Globs in ripgrep (and the `globset` crate) now support nested alternates. * [FEATURE #3096](BurntSushi/ripgrep#3096): Improve completions for `--hyperlink-format` in bash and fish. * [FEATURE #3102](BurntSushi/ripgrep#3102): Improve completions for `--hyperlink-format` in zsh.
15.0.0 (2025-10-15) =================== ripgrep 15 is a new major version release of ripgrep that mostly has bug fixes, some minor performance improvements and minor new features. Here are some highlights: * Several bugs around gitignore matching have been fixed. This includes a commonly reported bug related to applying gitignore rules from parent directories. * A memory usage regression when handling very large gitignore files has been fixed. * `rg -vf file`, where `file` is empty, now matches everything. * The `-r/--replace` flag now works with `--json`. * A subset of Jujutsu (`jj`) repositories are now treated as if they were git repositories. That is, ripgrep will respect `jj`'s gitignores. * Globs can now use nested curly braces. Platform support: * `aarch64` for Windows now has release artifacts. * `powerpc64` no longer has release artifacts generated for it. The CI release workflow stopped working, and I didn't deem it worth my time to debug it. If someone wants this and can test it, I'd be happy to add it back. * ripgrep binaries are now compiled with full LTO enabled. You may notice small performance improvements from this and a modest decrease in binary size. Performance improvements: * [PERF #2111](BurntSushi/ripgrep#2111): Don't resolve helper binaries on Windows when `-z/--search-zip` isn't used. * [PERF #2865](BurntSushi/ripgrep#2865): Avoid using path canonicalization on Windows when emitting hyperlinks. * [PERF #3184](BurntSushi/ripgrep#3184): Improve performance of large values with `-A/--after-context`. Bug fixes: * [BUG #829](BurntSushi/ripgrep#829), [BUG #2731](BurntSushi/ripgrep#2731), [BUG #2747](BurntSushi/ripgrep#2747), [BUG #2770](BurntSushi/ripgrep#2770), [BUG #2778](BurntSushi/ripgrep#2778), [BUG #2836](BurntSushi/ripgrep#2836), [BUG #2933](BurntSushi/ripgrep#2933), [BUG #3067](BurntSushi/ripgrep#3067): Fix bug related to gitignores from parent directories. * [BUG #1332](BurntSushi/ripgrep#1332), [BUG #3001](BurntSushi/ripgrep#3001): Make `rg -vf file` where `file` is empty match everything. * [BUG #2177](BurntSushi/ripgrep#2177): Ignore a UTF-8 BOM marker at the start of `.gitignore` (and similar files). * [BUG #2750](BurntSushi/ripgrep#2750): Fix memory usage regression for some truly large gitignore files. * [BUG #2944](BurntSushi/ripgrep#2944): Fix a bug where the "bytes searched" in `--stats` output could be incorrect. * [BUG #2990](BurntSushi/ripgrep#2990): Fix a bug where ripgrep would mishandle globs that ended with a `.`. * [BUG #2094](BurntSushi/ripgrep#2094), [BUG #3076](BurntSushi/ripgrep#3076): Fix bug with `-m/--max-count` and `-U/--multiline` showing too many matches. * [BUG #3100](BurntSushi/ripgrep#3100): Preserve line terminators when using `-r/--replace` flag. * [BUG #3108](BurntSushi/ripgrep#3108): Fix a bug where `-q --files-without-match` inverted the exit code. * [BUG #3131](BurntSushi/ripgrep#3131): Document inconsistency between `-c/--count` and `--files-with-matches`. * [BUG #3135](BurntSushi/ripgrep#3135): Fix rare panic for some classes of large regexes on large haystacks. * [BUG #3140](BurntSushi/ripgrep#3140): Ensure hyphens in flag names are escaped in the roff text for the man page. * [BUG #3155](BurntSushi/ripgrep#3155): Statically compile PCRE2 into macOS release artifacts on `aarch64`. * [BUG #3173](BurntSushi/ripgrep#3173): Fix ancestor ignore filter bug when searching whitelisted hidden files. * [BUG #3178](BurntSushi/ripgrep#3178): Fix bug causing incorrect summary statistics with `--json` flag. * [BUG #3179](BurntSushi/ripgrep#3179): Fix gitignore bug when searching absolute paths with global gitignores. * [BUG #3180](BurntSushi/ripgrep#3180): Fix a panicking bug when using `-U/--multiline` and `-r/--replace`. Feature enhancements: * Many enhancements to the default set of file types available for filtering. * [FEATURE #1872](BurntSushi/ripgrep#1872): Make `-r/--replace` work with `--json`. * [FEATURE #2708](BurntSushi/ripgrep#2708): Completions for the fish shell take ripgrep's config file into account. * [FEATURE #2841](BurntSushi/ripgrep#2841): Add `italic` to the list of available style attributes in `--color`. * [FEATURE #2842](BurntSushi/ripgrep#2842): Directories containing `.jj` are now treated as git repositories. * [FEATURE #2849](BurntSushi/ripgrep#2849): When using multithreading, schedule files to search in order given on CLI. * [FEATURE #2943](BurntSushi/ripgrep#2943): Add `aarch64` release artifacts for Windows. * [FEATURE #3024](BurntSushi/ripgrep#3024): Add `highlight` color type, for styling non-matching text in a matching line. * [FEATURE #3048](BurntSushi/ripgrep#3048): Globs in ripgrep (and the `globset` crate) now support nested alternates. * [FEATURE #3096](BurntSushi/ripgrep#3096): Improve completions for `--hyperlink-format` in bash and fish. * [FEATURE #3102](BurntSushi/ripgrep#3102): Improve completions for `--hyperlink-format` in zsh.
15.0.0 (2025-10-15) =================== ripgrep 15 is a new major version release of ripgrep that mostly has bug fixes, some minor performance improvements and minor new features. Here are some highlights: * Several bugs around gitignore matching have been fixed. This includes a commonly reported bug related to applying gitignore rules from parent directories. * A memory usage regression when handling very large gitignore files has been fixed. * `rg -vf file`, where `file` is empty, now matches everything. * The `-r/--replace` flag now works with `--json`. * A subset of Jujutsu (`jj`) repositories are now treated as if they were git repositories. That is, ripgrep will respect `jj`'s gitignores. * Globs can now use nested curly braces. Platform support: * `aarch64` for Windows now has release artifacts. * `powerpc64` no longer has release artifacts generated for it. The CI release workflow stopped working, and I didn't deem it worth my time to debug it. If someone wants this and can test it, I'd be happy to add it back. * ripgrep binaries are now compiled with full LTO enabled. You may notice small performance improvements from this and a modest decrease in binary size. Performance improvements: * [PERF #2111](BurntSushi/ripgrep#2111): Don't resolve helper binaries on Windows when `-z/--search-zip` isn't used. * [PERF #2865](BurntSushi/ripgrep#2865): Avoid using path canonicalization on Windows when emitting hyperlinks. * [PERF #3184](BurntSushi/ripgrep#3184): Improve performance of large values with `-A/--after-context`. Bug fixes: * [BUG #829](BurntSushi/ripgrep#829), [BUG #2731](BurntSushi/ripgrep#2731), [BUG #2747](BurntSushi/ripgrep#2747), [BUG #2770](BurntSushi/ripgrep#2770), [BUG #2778](BurntSushi/ripgrep#2778), [BUG #2836](BurntSushi/ripgrep#2836), [BUG #2933](BurntSushi/ripgrep#2933), [BUG #3067](BurntSushi/ripgrep#3067): Fix bug related to gitignores from parent directories. * [BUG #1332](BurntSushi/ripgrep#1332), [BUG #3001](BurntSushi/ripgrep#3001): Make `rg -vf file` where `file` is empty match everything. * [BUG #2177](BurntSushi/ripgrep#2177): Ignore a UTF-8 BOM marker at the start of `.gitignore` (and similar files). * [BUG #2750](BurntSushi/ripgrep#2750): Fix memory usage regression for some truly large gitignore files. * [BUG #2944](BurntSushi/ripgrep#2944): Fix a bug where the "bytes searched" in `--stats` output could be incorrect. * [BUG #2990](BurntSushi/ripgrep#2990): Fix a bug where ripgrep would mishandle globs that ended with a `.`. * [BUG #2094](BurntSushi/ripgrep#2094), [BUG #3076](BurntSushi/ripgrep#3076): Fix bug with `-m/--max-count` and `-U/--multiline` showing too many matches. * [BUG #3100](BurntSushi/ripgrep#3100): Preserve line terminators when using `-r/--replace` flag. * [BUG #3108](BurntSushi/ripgrep#3108): Fix a bug where `-q --files-without-match` inverted the exit code. * [BUG #3131](BurntSushi/ripgrep#3131): Document inconsistency between `-c/--count` and `--files-with-matches`. * [BUG #3135](BurntSushi/ripgrep#3135): Fix rare panic for some classes of large regexes on large haystacks. * [BUG #3140](BurntSushi/ripgrep#3140): Ensure hyphens in flag names are escaped in the roff text for the man page. * [BUG #3155](BurntSushi/ripgrep#3155): Statically compile PCRE2 into macOS release artifacts on `aarch64`. * [BUG #3173](BurntSushi/ripgrep#3173): Fix ancestor ignore filter bug when searching whitelisted hidden files. * [BUG #3178](BurntSushi/ripgrep#3178): Fix bug causing incorrect summary statistics with `--json` flag. * [BUG #3179](BurntSushi/ripgrep#3179): Fix gitignore bug when searching absolute paths with global gitignores. * [BUG #3180](BurntSushi/ripgrep#3180): Fix a panicking bug when using `-U/--multiline` and `-r/--replace`. Feature enhancements: * Many enhancements to the default set of file types available for filtering. * [FEATURE #1872](BurntSushi/ripgrep#1872): Make `-r/--replace` work with `--json`. * [FEATURE #2708](BurntSushi/ripgrep#2708): Completions for the fish shell take ripgrep's config file into account. * [FEATURE #2841](BurntSushi/ripgrep#2841): Add `italic` to the list of available style attributes in `--color`. * [FEATURE #2842](BurntSushi/ripgrep#2842): Directories containing `.jj` are now treated as git repositories. * [FEATURE #2849](BurntSushi/ripgrep#2849): When using multithreading, schedule files to search in order given on CLI. * [FEATURE #2943](BurntSushi/ripgrep#2943): Add `aarch64` release artifacts for Windows. * [FEATURE #3024](BurntSushi/ripgrep#3024): Add `highlight` color type, for styling non-matching text in a matching line. * [FEATURE #3048](BurntSushi/ripgrep#3048): Globs in ripgrep (and the `globset` crate) now support nested alternates. * [FEATURE #3096](BurntSushi/ripgrep#3096): Improve completions for `--hyperlink-format` in bash and fish. * [FEATURE #3102](BurntSushi/ripgrep#3102): Improve completions for `--hyperlink-format` in zsh.
here's better completion for
--hyperlink-formatthree known annoyances:
zsh doesn't perform brace expansion on single words, so users might be inclined to leave the variable braces unquoted, as in
--hyperlink-format=foo://{path}. but i guess it generally assumes that it might and handles it at an earlier stage, which means our function doesn't even know the{is there. this causes unexpected behaviour. there is also a bug (i assume zsh's rather than mine but idk) where it re-inserts the{in a weird place, e.g.\{ho{st\}zsh converts the the argument in
--opt=argstyle options to the\-escaped (rather than quoted) form when completing it, which is not pleasant with the syntax used here and exacerbates the above issueif you have like
--hyperlink-format '{}, press tab between the{}, and then press}after adding one of the matches, it won't swallow the extra}off the top of my head idk if there's anything to be done about the first two. the last one can probably be fixed with
compadd -Ror sth. but tbh i got bored of the problemif these limitations bother you i can simplify it so it only tries to complete the aliases i guess
i also made it so helper functions aren't re-defined if they exist. this is a convention of many completion functions that allows end-users to more easily define their own helpers if they want them to behave differently. i just forgot to do it before