Mercurial > hg > openjdk > jdk9 > langtools
changeset 4072:573dfe4c63d4
8177079: jshell tool: usability of /help for commands and sub-commands
Reviewed-by: jlahoda
author | rfield |
---|---|
date | Wed, 29 Mar 2017 16:07:30 -0700 |
parents | 3b47c6cb966e |
children | 132f24d279d1 |
files | src/jdk.jshell/share/classes/jdk/internal/jshell/tool/JShellTool.java test/jdk/jshell/CommandCompletionTest.java test/jdk/jshell/ToolSimpleTest.java |
diffstat | 3 files changed, 31 insertions(+), 6 deletions(-) [+] |
line wrap: on
line diff
--- a/src/jdk.jshell/share/classes/jdk/internal/jshell/tool/JShellTool.java Wed Mar 29 16:31:29 2017 -0400 +++ b/src/jdk.jshell/share/classes/jdk/internal/jshell/tool/JShellTool.java Wed Mar 29 16:07:30 2017 -0700 @@ -1429,9 +1429,15 @@ List<Suggestion> result; int pastSpace = code.indexOf(' ') + 1; // zero if no space if (pastSpace == 0) { + // initially suggest commands (with slash) and subjects, + // however, if their subject starts without slash, include + // commands without slash + boolean noslash = code.length() > 0 && !code.startsWith("/"); result = new FixedCompletionProvider(commands.values().stream() .filter(cmd -> cmd.kind.showInHelp || cmd.kind == CommandKind.HELP_SUBJECT) - .map(c -> c.command + " ") + .map(c -> ((noslash && c.command.startsWith("/")) + ? c.command.substring(1) + : c.command) + " ") .toArray(String[]::new)) .completionSuggestions(code, cursor, anchor); } else if (code.startsWith("/se")) { @@ -2087,8 +2093,11 @@ ArgTokenizer at = new ArgTokenizer("/help", arg); String subject = at.next(); if (subject != null) { + // check if the requested subject is a help subject or + // a command, with or without slash Command[] matches = commands.values().stream() - .filter(c -> c.command.startsWith(subject)) + .filter(c -> c.command.startsWith(subject) + || c.command.substring(1).startsWith(subject)) .toArray(Command[]::new); if (matches.length == 1) { String cmd = matches[0].command; @@ -2113,6 +2122,18 @@ } return true; } else { + // failing everything else, check if this is the start of + // a /set sub-command name + String[] subs = Arrays.stream(SET_SUBCOMMANDS) + .filter(s -> s.startsWith(subject)) + .toArray(String[]::new); + if (subs.length > 0) { + for (String sub : subs) { + hardrb("help.set." + sub); + hard(""); + } + return true; + } errormsg("jshell.err.help.arg", arg); } }
--- a/test/jdk/jshell/CommandCompletionTest.java Wed Mar 29 16:31:29 2017 -0400 +++ b/test/jdk/jshell/CommandCompletionTest.java Wed Mar 29 16:07:30 2017 -0700 @@ -23,7 +23,7 @@ /* * @test - * @bug 8144095 8164825 8169818 8153402 8165405 + * @bug 8144095 8164825 8169818 8153402 8165405 8177079 * @summary Test Command Completion * @modules jdk.compiler/com.sun.tools.javac.api * jdk.compiler/com.sun.tools.javac.main @@ -173,7 +173,9 @@ "/save ", "/set "), a -> assertCompletion(a, "/help /set |", false, "editor", "feedback", "format", "mode", "prompt", "start", "truncation"), - a -> assertCompletion(a, "/help /edit |", false) + a -> assertCompletion(a, "/help /edit |", false), + a -> assertCompletion(a, "/help dr|", false, + "drop ") ); }
--- a/test/jdk/jshell/ToolSimpleTest.java Wed Mar 29 16:31:29 2017 -0400 +++ b/test/jdk/jshell/ToolSimpleTest.java Wed Mar 29 16:07:30 2017 -0700 @@ -23,7 +23,7 @@ /* * @test - * @bug 8153716 8143955 8151754 8150382 8153920 8156910 8131024 8160089 8153897 8167128 8154513 8170015 8170368 8172102 8172103 8165405 8173073 8173848 8174041 8173916 8174028 8174262 8174797 + * @bug 8153716 8143955 8151754 8150382 8153920 8156910 8131024 8160089 8153897 8167128 8154513 8170015 8170368 8172102 8172103 8165405 8173073 8173848 8174041 8173916 8174028 8174262 8174797 8177079 * @summary Simple jshell tool tests * @modules jdk.compiler/com.sun.tools.javac.api * jdk.compiler/com.sun.tools.javac.main @@ -350,7 +350,9 @@ (a) -> assertHelp(a, "/help short", "shortcuts", "<tab>"), (a) -> assertHelp(a, "/? /li", "/list -all", "snippets"), (a) -> assertHelp(a, "/help /set prompt", "optionally contain '%s'", "quoted"), - (a) -> assertHelp(a, "/help /help", "/help <command>") + (a) -> assertHelp(a, "/help /help", "/help <command>"), + (a) -> assertHelp(a, "/help li", "/list -start"), + (a) -> assertHelp(a, "/help fe", "/set feedback -retain") ); }