Skip to content

Commit

Permalink
GroovyCommand: improved command tab-completions
Browse files Browse the repository at this point in the history
  • Loading branch information
mattirn committed Jun 6, 2020
1 parent c6a09bd commit fe63207
Showing 1 changed file with 28 additions and 17 deletions.
45 changes: 28 additions & 17 deletions groovy/src/main/java/org/jline/script/GroovyCommand.java
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
package org.jline.script;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.EnumSet;
import java.util.HashMap;
import java.util.HashSet;
Expand All @@ -19,6 +20,8 @@
import org.jline.console.CommandInput;
import org.jline.console.CommandMethods;
import org.jline.console.impl.AbstractCommandRegistry;
import org.jline.builtins.Completers.OptDesc;
import org.jline.builtins.Completers.OptionCompleter;
import org.jline.console.CmdDesc;
import org.jline.console.CommandRegistry;
import org.jline.console.Printer;
Expand Down Expand Up @@ -78,7 +81,7 @@ public GroovyCommand(Set<Command> commands, GroovyEngine engine, Printer printer
}
commandExecute.put(Command.INSPECT, new CommandMethods(this::inspect, this::inspectCompleter));
commandExecute.put(Command.CONSOLE, new CommandMethods(this::console, this::defaultCompleter));
commandExecute.put(Command.GRAB, new CommandMethods(this::grab, this::grabCompleter));
commandExecute.put(Command.GRAB, new CommandMethods(this::grab, this::defaultCompleter));
registerCommands(commandName, commandExecute);
commandDescs.put(Command.INSPECT, inspectCmdDesc());
commandDescs.put(Command.CONSOLE, consoleCmdDesc());
Expand Down Expand Up @@ -183,23 +186,23 @@ public Object inspect(CommandInput input) {
Object obj = input.xargs()[id];
ObjectInspector inspector = new ObjectInspector(obj);
Object out = null;
Map<String,Object> options = new HashMap<>();
if (option.equals("-m") || option.equals("--methods")) {
out = inspector.methods();
} else if (option.equals("-n") || option.equals("--metaMethods")) {
out = inspector.metaMethods();
} else if (option.equals("-i") || option.equals("--info")) {
out = inspector.properties();
options.put(Printer.VALUE_STYLE, "classpath:/org/jline/groovy/gron.nanorc");
} else if (consoleUi && (option.equals("-g") || option.equals("--gui"))) {
ObjectBrowser.inspect(obj);
} else {
throw new IllegalArgumentException("Unknown option: " + option);
}
Map<String,Object> options = new HashMap<>();
options.put(Printer.SKIP_DEFAULT_OPTIONS, true);
options.put(Printer.COLUMNS, ObjectInspector.METHOD_COLUMNS);
options.put(Printer.MAX_DEPTH, 1);
options.put(Printer.INDENTION, 4);
options.put(Printer.VALUE_STYLE, "classpath:/org/jline/groovy/gron.nanorc");
printer.println(options, out);
} catch (Exception e) {
saveException(e);
Expand Down Expand Up @@ -286,31 +289,39 @@ private List<String> variables() {
return out;
}

public List<Completer> inspectCompleter(String command) {
List<Completer> out = new ArrayList<>();
ArgumentCompleter ac = new ArgumentCompleter(NullCompleter.INSTANCE
, new StringsCompleter("--help", "--methods", "--metaMethods", "--gui", "--info"
,"-?", "-n", "-m", "-i", "-g")
, new StringsCompleter(this::variables)
, NullCompleter.INSTANCE);
out.add(ac);
private List<OptDesc> compileOptDescs(String command) {
List<OptDesc> out = new ArrayList<>();
Command cmd = Command.valueOf(command.toUpperCase());
for (Map.Entry<String,List<AttributedString>> entry : commandDescs.get(cmd).getOptsDesc().entrySet()) {
String[] option = entry.getKey().split("\\s+");
String desc = entry.getValue().get(0).toString();
if (option.length == 2) {
out.add(new OptDesc(option[0], option[1], desc));
} else if (option[0].charAt(1) == '-') {
out.add(new OptDesc(null, option[0], desc));
} else {
out.add(new OptDesc(option[0], null, desc));
}
}
return out;
}

public List<Completer> grabCompleter(String command) {
private List<Completer> inspectCompleter(String command) {
List<Completer> out = new ArrayList<>();
ArgumentCompleter ac = new ArgumentCompleter(NullCompleter.INSTANCE
, new StringsCompleter("--help", "-?", "--list", "-l")
, NullCompleter.INSTANCE);
, new OptionCompleter(Arrays.asList(new StringsCompleter(this::variables), NullCompleter.INSTANCE)
, compileOptDescs(command), 1)
);
out.add(ac);
return out;
}

public List<Completer> defaultCompleter(String command) {
private List<Completer> defaultCompleter(String command) {
List<Completer> out = new ArrayList<>();
ArgumentCompleter ac = new ArgumentCompleter(NullCompleter.INSTANCE
, new StringsCompleter("--help", "-?")
, NullCompleter.INSTANCE);
, new OptionCompleter(NullCompleter.INSTANCE
, compileOptDescs(command), 1)
);
out.add(ac);
return out;
}
Expand Down

0 comments on commit fe63207

Please sign in to comment.