mirror of
https://github.com/fish-shell/fish-shell.git
synced 2026-05-18 17:11:15 -03:00
Added an -S/--strict-longopts option to argparse.
This flag disables a very surprising and confusing feature I found in the code of wgetopt.rs: the ability to abbreviate the names of long options and the ability to parse long options with a single "-". This commit addresses #7341, but unlike pull request #11220, it does so in a backwards compatible way: one must use the new -S/--strict-longotps flag to disable the old legacy behaviour. Unlike pull request #11220 however, this flag only applies to ``argparse``, and not to any builtins used by fish. Note that forcing the flag -S/--strict-longotps on (i.e. in src/wgetopt.rs, replacing both uses of `self.strict_long_opts` with `true`), does not cause any of the current test cases to fail. However, third-party fish scripts may be depending on the current behaviour.
This commit is contained in:
@@ -50,6 +50,21 @@ The following ``argparse`` options are available. They must appear before all *O
|
||||
**-i** or **--ignore-unknown**
|
||||
Deprecated. This is like **--move-unknown**, except that unknown options and their arguments are kept in ``$argv`` and not moved to ``$argv_opts``. Unlike **--move-unknown**, this option makes it impossible to distinguish between an unknown option and non-option argument that starts with a ``-`` (since any ``--`` seperator in ``$argv`` will be removed).
|
||||
|
||||
**-S** or **--strict-longopts**
|
||||
This makes the parsing of long options more strict. In particular, *without* this flag, if ``long`` is a known long option flag, ``--long`` and ``--long=<value>`` can be abbreviated as:
|
||||
|
||||
- ``-long`` and ``-long=<value>``, but *only* if there is no short flag ``l``.
|
||||
|
||||
- ``--lo`` and ``--lo=<value>``, but *only* if there is no other long flag that starts with ``lo``. Similarly with any other non-empty prefix of ``long``.
|
||||
|
||||
- ``-lo`` and ``-lo=<value>`` (i.e. combining the above two).
|
||||
|
||||
With the ``--strict-longopts`` flag, the above three are parse errors: one must use the syntax ``--long`` or ``--long=<value>`` to use a long option called ``long``.
|
||||
|
||||
This flag has no effect on the parsing of unknown options (which are parsed as if this flag is on).
|
||||
|
||||
This option may be on all the time in the future, so do not rely on the behaviour without it.
|
||||
|
||||
**-s** or **--stop-nonopt**
|
||||
Causes scanning the arguments to stop as soon as the first non-option argument is seen. Among other things, this is useful to implement subcommands that have their own options.
|
||||
|
||||
|
||||
Reference in New Issue
Block a user