-
Notifications
You must be signed in to change notification settings - Fork 218
Language REPL Support
JLine prints command/method descriptions and syntax errors on status bar. In addition, the location of the error in the input area is highlighted.
LineReader reader = LineReaderBuilder.builder()
.terminal(terminal)
.completer(completer)
.parser(parser)
.variable(LineReader.SECONDARY_PROMPT_PATTERN, "%M%P > ")
.variable(LineReader.INDENTATION, 2)
.build();
tailtipWidgets = new TailTipWidgets(reader, commandDescription, 5, TipType.COMPLETER);
.....
.....
CmdDesc commandDescription(CmdLine line) {
CmdDesc out = null;
switch (line.getDescriptionType()) {
case COMMAND:
out = myCommandDescription(line);
break;
case METHOD:
out = methodDescription(line);
break;
case SYNTAX:
out = syntaxDescription(line);
break;
}
return out;
}
After each edit, widget _tailtip-self-insert
requests method/command description. Description is requested by invoking method commandDescription()
for
- method: if the left side of the cursor we have an unclosed opening parenthesis.
- syntax: the last character entered is closing parenthesis
- command: cursor is at the end of line,
args[0]
is completed and it is not a case 1. or 2.
In order to avoid description recalculations the command and method descriptions are saved in permanent and temporary cache respectively. Permanent cache will be created on TailTipWidgets
constructor and it is possible to populate also using method setCmdDescs()
. Temporary cache will be cleared by widget _tailtip-accept-line
.
Note that description request decisions are taken from partially completed statement that can contain errors like missing quotes and parenthesis. The final decision for description compilation should be done by commandDescription()
method which has the knowledge of app commands and scripting language syntax. When description request is out of context for example method/syntax description is requested for command argument commandDescription()
can return new CmdDesc(false)
/null
to ignore the request and keep/clear current description.
In addition to the methods methodDescription()
and syntaxDescription()
application will need also completer implementation for used scripting language. Autosuggestion as usual will call completer only when cursor is at the end of line. Thus JLine variable insert-bracket
should be false
and autopairing disabled in order to obtain correct behaviour.