blob: 98a18cbca718c0b8c09aad83672e0b5f8139b3ba [file] [log] [blame]
/*
* Copyright (c) 2002-2019, the original author or authors.
*
* This software is distributable under the BSD license. See the terms of the
* BSD license in the documentation provided with this software.
*
* https://opensource.org/licenses/BSD-3-Clause
*/
package jdk.internal.org.jline.reader;
import java.util.Objects;
/**
* A completion candidate.
*
* @author <a href="mailto:gnodet@gmail.com">Guillaume Nodet</a>
*/
public class Candidate implements Comparable<Candidate> {
private final String value;
private final String displ;
private final String group;
private final String descr;
private final String suffix;
private final String key;
private final boolean complete;
/**
* Simple constructor with only a single String as an argument.
*
* @param value the candidate
*/
public Candidate(String value) {
this(value, value, null, null, null, null, true);
}
/**
* Constructs a new Candidate.
*
* @param value the value
* @param displ the display string
* @param group the group
* @param descr the description
* @param suffix the suffix
* @param key the key
* @param complete the complete flag
*/
public Candidate(String value, String displ, String group, String descr, String suffix, String key, boolean complete) {
this.value = Objects.requireNonNull(value);
this.displ = Objects.requireNonNull(displ);
this.group = group;
this.descr = descr;
this.suffix = suffix;
this.key = key;
this.complete = complete;
}
/**
* The value that will be used for the actual completion.
* This string should not contain ANSI sequences.
* @return the value
*/
public String value() {
return value;
}
/**
* The string that will be displayed to the user.
* This string may contain ANSI sequences.
* @return the display string
*/
public String displ() {
return displ;
}
/**
* The group name for this candidate.
* Candidates can be grouped together and this string is used
* as a key for the group and displayed to the user.
* @return the group
*
* @see LineReader.Option#GROUP
* @see LineReader.Option#AUTO_GROUP
*/
public String group() {
return group;
}
/**
* Description of this candidate, usually a small help message
* to understand the meaning of this candidate.
* This string may contain ANSI sequences.
* @return the description
*/
public String descr() {
return descr;
}
/**
* The suffix is added when this candidate is displayed.
* However, if the next character entered does not match,
* the suffix will be automatically removed.
* This string should not contain ANSI sequences.
* @return the suffix
*
* @see LineReader.Option#AUTO_REMOVE_SLASH
* @see LineReader#REMOVE_SUFFIX_CHARS
*/
public String suffix() {
return suffix;
}
/**
* Candidates which have the same key will be merged together.
* For example, if a command has multiple aliases, they can be merged
* if they are using the same key.
* @return the key
*/
public String key() {
return key;
}
/**
* Boolean indicating whether this candidate is complete or
* if the completer may further expand the candidate value
* after this candidate has been selected.
* This can be the case when completing folders for example.
* If the candidate is complete and is selected, a space
* separator will be added.
* @return the completion flag
*/
public boolean complete() {
return complete;
}
@Override
public int compareTo(Candidate o) {
return value.compareTo(o.value);
}
}