diff --git a/spring-shell-core/src/main/java/org/springframework/shell/core/command/DefaultCommandParser.java b/spring-shell-core/src/main/java/org/springframework/shell/core/command/DefaultCommandParser.java index cd8088800..08084a70c 100644 --- a/spring-shell-core/src/main/java/org/springframework/shell/core/command/DefaultCommandParser.java +++ b/spring-shell-core/src/main/java/org/springframework/shell/core/command/DefaultCommandParser.java @@ -77,6 +77,14 @@ public ParsedInput parse(String input) { // add command and sub commands ParsedInput.Builder parsedInputBuilder = ParsedInput.builder().commandName(commandName); + + if (words.size() == 2 && (words.get(1).equals("--help") || words.get(1).equals("-h"))) { + parsedInputBuilder.addOption(CommandOption.with().shortName('h').longName("help").value("true").build()); + ParsedInput parsedInput = parsedInputBuilder.build(); + log.debug("Parsed input: " + parsedInput); + return parsedInput; + } + for (String subCommand : subCommands) { parsedInputBuilder.addSubCommand(subCommand); } diff --git a/spring-shell-core/src/test/java/org/springframework/shell/core/command/DefaultCommandParserTests.java b/spring-shell-core/src/test/java/org/springframework/shell/core/command/DefaultCommandParserTests.java index e8cebf30e..b59fe2161 100644 --- a/spring-shell-core/src/test/java/org/springframework/shell/core/command/DefaultCommandParserTests.java +++ b/spring-shell-core/src/test/java/org/springframework/shell/core/command/DefaultCommandParserTests.java @@ -21,6 +21,7 @@ import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.Arguments; import org.junit.jupiter.params.provider.MethodSource; +import org.junit.jupiter.params.provider.ValueSource; import java.util.stream.Stream; @@ -314,6 +315,24 @@ static Stream parseWithBooleanOptionData() { Arguments.of("mycommand -o", "", 'o', Boolean.class, "true")); } + @ParameterizedTest + @ValueSource(strings = { "mycommand --help", "mycommand -h" }) + void testParseWithHelpOption(String input) { + // given + Command command = createCommand("mycommand", "My test command"); + command.getOptions().add(CommandOption.with().longName("option").shortName('o').build()); + commandRegistry.registerCommand(command); + // when + ParsedInput parsedInput = parser.parse(input); + + // then + assertEquals("mycommand", parsedInput.commandName()); + assertEquals(1, parsedInput.options().size()); + assertEquals("help", parsedInput.options().get(0).longName()); + assertEquals('h', parsedInput.options().get(0).shortName()); + assertEquals("true", parsedInput.options().get(0).value()); + } + private static Command createCommand(String name, String description) { return new AbstractCommand(name, description) { @Override