Skip to content

Commit a89b02e

Browse files
committed
Добавлены подсказки автодополнения
1 parent 9353bf9 commit a89b02e

File tree

3 files changed

+47
-1
lines changed

3 files changed

+47
-1
lines changed

src/main/java/com/annimon/ownlang/parser/Lexer.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import java.util.HashMap;
66
import java.util.List;
77
import java.util.Map;
8+
import java.util.Set;
89

910
/**
1011
*
@@ -105,6 +106,10 @@ public static List<Token> tokenize(String input) {
105106
KEYWORDS.put("include", TokenType.INCLUDE);
106107
}
107108

109+
public static Set<String> getKeywords() {
110+
return KEYWORDS.keySet();
111+
}
112+
108113
private final String input;
109114
private final int length;
110115

src/main/java/com/annimon/ownlang/utils/Repl.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
import com.annimon.ownlang.parser.ast.Statement;
1515
import com.annimon.ownlang.parser.visitors.PrintVisitor;
1616
import com.annimon.ownlang.utils.repl.JLineConsole;
17+
import com.annimon.ownlang.utils.repl.OwnLangCompleter;
1718
import com.annimon.ownlang.utils.repl.ReplConsole;
1819
import com.annimon.ownlang.utils.repl.SystemConsole;
1920
import java.io.IOException;
@@ -22,6 +23,7 @@
2223
import java.util.Locale;
2324
import java.util.Map;
2425
import java.util.stream.Collectors;
26+
import jline.console.completer.CandidateListCompletionHandler;
2527

2628
public final class Repl {
2729

@@ -91,7 +93,12 @@ public static void main(String[] args) {
9193

9294
private static ReplConsole initReplConsole() {
9395
try {
94-
return new JLineConsole();
96+
JLineConsole jline = new JLineConsole();
97+
CandidateListCompletionHandler handler = new CandidateListCompletionHandler();
98+
handler.setPrintSpaceAfterFullCompletion(false);
99+
jline.getConsole().setCompletionHandler(handler);
100+
jline.getConsole().addCompleter(new OwnLangCompleter(HELP, VARS, FUNCS, SOURCE, RESET, EXIT));
101+
return jline;
95102
} catch (IOException ioe) {
96103
return new SystemConsole();
97104
}
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
package com.annimon.ownlang.utils.repl;
2+
3+
import com.annimon.ownlang.lib.Functions;
4+
import com.annimon.ownlang.lib.Variables;
5+
import com.annimon.ownlang.parser.Lexer;
6+
import java.util.Collections;
7+
import java.util.HashSet;
8+
import java.util.List;
9+
import java.util.Set;
10+
import jline.console.completer.StringsCompleter;
11+
12+
public final class OwnLangCompleter extends StringsCompleter {
13+
14+
private final Set<String> staticCandidates;
15+
16+
public OwnLangCompleter(String... candidates) {
17+
staticCandidates = new HashSet<>();
18+
Collections.addAll(staticCandidates, candidates);
19+
}
20+
21+
@Override
22+
public int complete(String buffer, int cursor, List<CharSequence> candidates) {
23+
updateCandidates();
24+
return super.complete(buffer, cursor, candidates);
25+
}
26+
27+
private void updateCandidates() {
28+
getStrings().clear();
29+
getStrings().addAll(Lexer.getKeywords());
30+
getStrings().addAll(staticCandidates);
31+
getStrings().addAll(Variables.variables().keySet());
32+
getStrings().addAll(Functions.getFunctions().keySet());
33+
}
34+
}

0 commit comments

Comments
 (0)