- Fix run detection so that @ has to be first character in a first
argument and it also has additional content, like @path-to-file.
- This fixes issue where `--arg @` would blow up as an normal
option argument.
- Backport #996
- Fixes#1003
- With annotation(@Command) model it's now possible to just
add CommandContext and it will get resolved and doesn't
cause it to appear as an option.
- Backport #779
- Fixes#990
- Revisit how alias commands are added using
@Command annotation when using if/or on class
and/or method level.
- With this change alias handling is more logical
and there's better tests and docs.
- Backport #945
- Fixes#973
- Looks like some infocmp capabilities for making cursor visible
using cvvis doesn't always work. So change to use cnorm instead.
- Terminal instruction of making cursor very visible with cvvis
doesn't mean cursor should be visible, afaik, so i.e. screen
or tmux didn't work.
- Backport #970
- Fixes#972
- Migitates changed behaviour in boot how exceptions are
handled thus caused trouble with exit code mappings
on a shell side.
- Backport #961
- Fixes#962
- In #946 we added new ways to add items to single selector while still
keeping Map<String, String>. Order to keep old sorting behaviour
we try to pass incoming map via new HashMap as that was a way it
worked. This should limit risks for breaking things in a patch release.
- This change makes single/multi same on an api level
where single selector used key/value map and multi
selector used list of SelectItem's.
- We still keep use of map on a single select but those
essentially go directly via SelectItem's.
- Backport #946
- Fixes#957
- Polish mandatory option message by using
same format as in 3.0.x. (old parser)
- Remove prefixed code/position parts from
all messages coming from a parser. (new parser)
- Backport #815
- Fixes#816
- NonInteractiveShellRunner can now shortcircuit into primary command
just running it and passing args.
- Add hooks into autoconfig so that this is easy to configure.
- Backport #755
- Relates #799
- Fix alias command extraction from existing @Command
annotations so that we actually get multiple aliases
defined if more than one defined on a method level.
- Fix rendering issue in a help stg template when
multiple aliases exists.
- Backport #796
- Fixes#798
- Change to have better support for args like:
"--arg1 a --arg2 b"
"--arg1 a --arg2 b c"
"--arg1 a c --arg2 b c"
"c --arg1 a --arg2 b"
where option can have default values and position of
positional args doesn't matter that much.
- Make parser to be aware of if it's handling last option
so that we can differentiate if error can be given i.e.
with too many args, etc.
- Backport #795
- Fixes#797
- New CommandNotFoundResultHandler which handles
CommandNotFound to be able to customize error shown.
- New CommandNotFoundMessageProvider which is a plain
function given a "context" and returns a string.
Context contains common info to provide better
error messages.
- Default provider gives same message but
removes long stacktrace(which previously originated
from a common ThrowableResultHandler.
- Backport #778
- Relates #793
- Longnames in a command option if modified via
name modifier didn't provide enough backmapping
info for command execution experience being accurate.
- Add new getLongNamesModified() into CommandOption
which is populated if name modifier is used.
- Add more hints in CommandExecution for modified
option names.
- This should bring annotation, legacy annotation
and programmatic commands up to date.
- Backport #777
- Fixes#783
- Take 2 of #763
- Revert changes in 06e89dcca3
what comes for `ExtendedDefaultParser`.
- Discard empty args in a `Shell` coming from `ExtendedDefaultParser`
- `ExtendedDefaultParserTests` has more tests, some commented out, to
see some differences for jline default parser impl. Something
to get handled in #517
- New OptionMethodArgumentResolver which is similar
than ShellOptionMethodArgumentResolver for @ShellOption.
- Add missing annotation commands for e2e test command.
- Fixes#767
- Fixes issue when last "word" is within quotes and
cursor is at the end of a line which caused empty
"word" string in an argument list.
- This then caused i.e. string option to have a collection
as an input(if no arity settings used) and via
spring conversions a comma were added.
- Fixes#763
- Annotate ShellComponent with @Reflective and use custom
AvailabilityReflectiveProcessor to find possible method
targets returning Availability.
- Fixes#747
- Add short options as valid tokens in a `CommandModel` so that Lexer
create tokens with accurate info and doesn't then cascade this issue
in Ast and Parser.
- Previously with a command `command -a aaa -b bbb` tokenisation resulted
`COMMAND OPTION ARGUMENT ARGUMENT ARGUMENT` with multiple short options
while it should have been `COMMAND OPTION ARGUMENT OPTION ARGUMENT`.
- Relates #757
- In `CommandRegistration` add `ResolvableType` for `OptionSpec` giving
more spesific handling of a type.
- In `CommandParser` handle source and target types so that we
have generics with `List`, `Set` and arrays working better.
- In `HandlerMethodArgumentResolver` add better handling for
`ConversionService` for generic types.
- In `StandardMethodTargetRegistrar` add better types via `ResolvableType`
now that `CommandRegistration` support it.
- In `OptionConversionCommands` remove converter from `String` to `Set` as
now things should work as is if generic in a `Set` has a converter.
- Backport #694#699
- Fixes#700
- Better alignment for use of positional args without using
an option.
- Should work similarly with old parsing framework.
- Change position where missing options are checked.
- Fixes#701
- Previously CommandParser contained parser which was
scannerless type of brute force parsing of command
line args.
- Contract in that old parser wasn't super clear what
is its role with caller as it was given options
and registration was parsed in a Shell class.
- Add completely new parser package which has better
model and which will be much easier to modify for
future needs.
- Change some interfaces around parsing so that we do
as much in this new parsing model instead of pre-parsing
something in a Shell class.
- We also try to move away from using exceptions as
a message delivery which had its own problems. Instead
introducing parser messages which gives better info
when errors are detected.
- Add ParserConfig class which allows to expose settings
to change some parser features. Later this will be
exposed to user so that some features can be turned on/off
for an actual shell needs.
- Fixes#646
- Now lexing better with valid options
- Only report unrecognised option with double dash
as current parser don't have structure to do
deeper analysis.
- Fixes#651
- This is a first commit to add new annotation model
which eventually will replace old legacy annotations
like ShellComponent, ShellMethod, @ShellOption, etc.
- Adds subset of features needed for parity with manual
use of CommandRegistration.
- Relates #637
- Relates #638
- Relates #639
- Relates #640
- Relates #641
- Issue in #622 is that its command type is `String` and internally
some incoming arguments(it's List) were converted to String by
joining with space. This caused one case with help command to get
conversion via spring's ConversionService(CollectionToStringConverter)
which joins by commas. That was we saw in failed example.
- Remove needed joins in CommandParser and let it just pass List which
then works better with ConversionService.
- This then needs a `command` option type change from String to String[]
which it really is as you should be able to give whole command as
an argument.
- Fixes#622
- New OptionNameModifier which is just a Function<String,String> to
modify a name.
- Can be defined per option in CommandRegistration.
- Can be defined as global default as bean.
- Default implementation for common case types is enabled via boot's
config props under spring.shell.option.naming.case-type
- Support facilities for camel, kebab, snake and pascal conversions.
- Fixes#621