picocli.shell.jline2.PicocliJLineCompleter Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of picocli-shell-jline2 Show documentation
Show all versions of picocli-shell-jline2 Show documentation
Picocli Shell JLine2 - easily build interactive shell applications with JLine 2 and picocli.
package picocli.shell.jline2;
import jline.console.completer.ArgumentCompleter;
import jline.console.completer.Completer;
import picocli.AutoComplete;
import picocli.CommandLine.Model.CommandSpec;
import java.util.List;
/**
* Implementation of the JLine 2 {@link Completer} interface that generates completion
* candidates for the specified command line based on the {@link CommandSpec} that
* this {@code PicocliJLineCompleter} was constructed with.
*
* @since 3.7
*/
public class PicocliJLineCompleter implements Completer {
private final CommandSpec spec;
/**
* Constructs a new {@code PicocliJLineCompleter} for the given command spec.
* @param spec the command specification to generate completions for. Must be non-{@code null}.
*/
public PicocliJLineCompleter(CommandSpec spec) {
if (spec == null) { throw new NullPointerException("spec"); }
this.spec = spec;
}
/**
* Populates the specified list with completion candidates for the specified buffer
* based on the command specification that this shell was constructed with.
*
* @param buffer the command line string
* @param cursor the position of the cursor in the command line string
* @param candidates the list to populate with completion candidates that would produce
* valid options, parameters or subcommands at the cursor position
* in the command line
* @return the cursor position in the buffer for which the completion will be relative,
* or {@code -1} if no completions are found
*/
//@Override
public int complete(String buffer, int cursor, List candidates) {
// use the jline internal parser to split the line into tokens
ArgumentCompleter.ArgumentList list =
new ArgumentCompleter.WhitespaceArgumentDelimiter().delimit(buffer, cursor);
// let picocli generate completion candidates for the token where the cursor is at
return AutoComplete.complete(spec,
list.getArguments(),
list.getCursorArgumentIndex(),
list.getArgumentPosition(),
cursor,
candidates);
}
}