jline проблемы с escape-символом в завершении

Я работаю над проектом с jline version3 в java, но в завершение мне нужно иметь else if, но он помещает \ в экранирующий пробел в качестве escape-символа, и у меня нет escape-символа, также я пробовал null вместо char[], но он падает с исключением нулевого указателя

также я проверил https://github.com/jline/jline3/issues/173

Ошибка:

        at org.jline.reader.impl.DefaultParser$ArgumentList.escape(DefaultParser.java:383)
        at org.jline.reader.impl.LineReaderImpl$MenuSupport.update(LineReaderImpl.java:4403)
        at org.jline.reader.impl.LineReaderImpl$MenuSupport.next(LineReaderImpl.java:4317)
        at org.jline.reader.impl.LineReaderImpl.doMenu(LineReaderImpl.java:4471)
        at org.jline.reader.impl.LineReaderImpl.doList(LineReaderImpl.java:4614)
        at org.jline.reader.impl.LineReaderImpl.doComplete(LineReaderImpl.java:4149)
        at org.jline.reader.impl.LineReaderImpl.expandOrComplete(LineReaderImpl.java:3875)
        at org.jline.reader.impl.LineReaderImpl.readLine(LineReaderImpl.java:585)
        at org.jline.reader.impl.LineReaderImpl.readLine(LineReaderImpl.java:443)
        at REPLReader.readLine(REPLReader.java:99)
        at Compiler.getInputCode(Compiler.java:24)
        at CompilerMain.lex(CompilerMain.java:75)
        at CompilerMain.compile(CompilerMain.java:15)
        at Main.main(Main.java:59)

person radinParsaei    schedule 05.09.2020    source источник


Ответы (1)


Я предполагаю, что вы используете встроенные средства завершения JLine StringsCompleter и DefaultParser.

Если у вас есть кандидат на завершение, в котором есть пробелы, то либо

  1. символы пробела экранируются, если defaultParser.escapeChars != null или
  2. Кандидат на завершение будет указан, если defaultParser.escapeChars == null.

Вот как StringsCompleter должен работать. См. StringsCompleterTest. методы .java: escapeCharsNull() и escapeChars().

NPE исправлен в фиксации 68a9c1f. Вы должны использовать JLine версии 3.10 или выше.

person mattirn    schedule 07.09.2020
comment
спасибо, но я использую RegexCompleter, и когда я устанавливаю escape-символы в нулевое значение, программа падает с исключением, добавленным к вопросу, вы можете увидеть REPLReader.java в github.com/radinParsaei/Compiler/blob/master/repl/src/main/java/ - person radinParsaei; 08.09.2020
comment
NPE исправлен в фиксации 68a9c1f. Вы должны использовать JLine версии 3.10 или выше. Внутри RegexCompleter вы используете StringsCompleter. Таким образом, в завершении пробелы экранируются или кандидат будет заключен в кавычки (если escapeChars=null) - person mattirn; 08.09.2020
comment
Я создал тикет jline3#567. Исправление будет включено в следующий релиз. - person mattirn; 09.09.2020
comment
спасибо за ваш ответ, но другой вопрос, нужно ли мне удалить как цитирование, так и экранирование символов, потому что else if нельзя цитировать - person radinParsaei; 09.09.2020
comment
Следующий выпуск JLine будет работать так, как вы просили, когда вы установите parser escapeChars как пустой массив char. - person mattirn; 09.09.2020