8177079: jshell tool: usability of /help for commands and sub-commands
Reviewed-by: jlahoda
--- a/langtools/src/jdk.jshell/share/classes/jdk/internal/jshell/tool/JShellTool.java Wed Mar 29 16:31:29 2017 -0400
+++ b/langtools/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/langtools/test/jdk/jshell/CommandCompletionTest.java Wed Mar 29 16:31:29 2017 -0400
+++ b/langtools/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/langtools/test/jdk/jshell/ToolSimpleTest.java Wed Mar 29 16:31:29 2017 -0400
+++ b/langtools/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")
);
}