|
1 | 1 | /*
|
2 |
| - * Copyright (c) 2017, 2021, Oracle and/or its affiliates. All rights reserved. |
| 2 | + * Copyright (c) 2017, 2022, Oracle and/or its affiliates. All rights reserved. |
3 | 3 | * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
4 | 4 | *
|
5 | 5 | * The Universal Permissive License (UPL), Version 1.0
|
|
67 | 67 | import org.graalvm.shadowed.org.jline.reader.Macro;
|
68 | 68 | import org.graalvm.shadowed.org.jline.reader.ParsedLine;
|
69 | 69 | import org.graalvm.shadowed.org.jline.reader.UserInterruptException;
|
| 70 | +import org.graalvm.shadowed.org.jline.reader.impl.DefaultParser; |
70 | 71 | import org.graalvm.shadowed.org.jline.terminal.Terminal;
|
71 | 72 | import org.graalvm.shadowed.org.jline.terminal.TerminalBuilder;
|
72 | 73 |
|
@@ -103,18 +104,34 @@ public void setupReader(BooleanSupplier shouldRecord,
|
103 | 104 | builder.completer(new Completer() {
|
104 | 105 | @Override
|
105 | 106 | public void complete(LineReader r, ParsedLine pl, List<Candidate> candidates) {
|
106 |
| - String line = pl.line(); |
107 |
| - if (line != null) { |
108 |
| - List<String> l = completer.apply(line); |
| 107 | + String word = pl.word(); |
| 108 | + if (word != null) { |
| 109 | + List<String> l = completer.apply(word); |
109 | 110 | for (String value : l) {
|
110 | 111 | candidates.add(new Candidate(value, value, null, null, null, null, false));
|
111 | 112 | }
|
112 | 113 | }
|
113 | 114 | }
|
114 | 115 | });
|
115 | 116 | }
|
| 117 | + |
| 118 | + builder.parser(new DefaultParser() { |
| 119 | + @Override |
| 120 | + public boolean isDelimiterChar(CharSequence buffer, int pos) { |
| 121 | + // Never count a last character of a char sequence as delimiter. The REPL completer |
| 122 | + // implemented by `rlcompleter.py` adds a trailing whitespace to keywords, |
| 123 | + // e.g. 'raise '. The default DefaultParser implementation always escaped this |
| 124 | + // whitespace leading to wrong completions like 'raise\ '. |
| 125 | + if (pos == buffer.length() - 1) { |
| 126 | + return false; |
| 127 | + } |
| 128 | + return Character.isWhitespace(buffer.charAt(pos)); |
| 129 | + } |
| 130 | + }); |
| 131 | + |
116 | 132 | reader = builder.build();
|
117 | 133 | reader.option(LineReader.Option.DISABLE_EVENT_EXPANSION, true);
|
| 134 | + reader.option(LineReader.Option.INSERT_TAB, true); |
118 | 135 | reader.setVariable(LineReader.COMMENT_BEGIN, "#");
|
119 | 136 |
|
120 | 137 | // numpad bindings
|
|
0 commit comments