picocli.shell.jline3.PicocliJLineCompleter Maven / Gradle / Ivy
package picocli.shell.jline3;
import org.jline.reader.LineReader;
import org.jline.reader.Completer;
import org.jline.reader.Candidate;
import org.jline.reader.ParsedLine;
import picocli.AutoComplete;
import picocli.CommandLine.Model.CommandSpec;
import java.util.List;
import java.util.ArrayList;
import java.lang.CharSequence;
/**
* Implementation of the JLine 3 {@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.9
*/
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 candidates with a list of possible completions for the command line.
*
* The list of candidates will be sorted and filtered by the LineReader, so that
* the list of candidates displayed to the user will usually be smaller than
* the list given by the completer. Thus it is not necessary for the completer
* to do any matching based on the current buffer. On the contrary, in order
* for the typo matcher to work, all possible candidates for the word being
* completed should be returned.
*
* @param reader The line reader
* @param line The parsed command line
* @param candidates The {@link List} of candidates to populate
*/
//@Override
public void complete(LineReader reader, ParsedLine line, List candidates) {
// let picocli generate completion candidates for the token where the cursor is at
String[] words = new String[line.words().size()];
words = line.words().toArray(words);
List cs = new ArrayList();
AutoComplete.complete(spec,
words,
line.wordIndex(),
0,
line.cursor(),
cs);
for(CharSequence c: cs){
candidates.add(new Candidate((String)c));
}
}
}
© 2015 - 2024 Weber Informatics LLC | Privacy Policy