Autocomplete python中自定义lexer上的QSCINTILA自动完成

Autocomplete python中自定义lexer上的QSCINTILA自动完成,autocomplete,lexer,qscintilla,Autocomplete,Lexer,Qscintilla,全部, 我正在使用QSCINTILA语法突出显示并自动完成我的领域特定语言(DSL) 我通过重新实现(QsciLexerCustom)编写了一个自定义lexer,我正在尝试使用自动完成。 我的问题是,自动完成不能像我想要的那样工作。 我希望我的自定义lexer像python一样工作。也就是说,如果我在api中添加'toto.titi.tata',当我在qscintilla编辑器中键入'toto'时,它会提示我'titi.tata'。到目前为止,它建议我去托托·提提·塔塔( 我试着在我的lexer

全部,

我正在使用QSCINTILA语法突出显示并自动完成我的领域特定语言(DSL)

我通过重新实现(QsciLexerCustom)编写了一个自定义lexer,我正在尝试使用自动完成。 我的问题是,自动完成不能像我想要的那样工作。 我希望我的自定义lexer像python一样工作。也就是说,如果我在api中添加'toto.titi.tata',当我在qscintilla编辑器中键入'toto'时,它会提示我'titi.tata'。到目前为止,它建议我去托托·提提·塔塔(

我试着在我的lexer中添加“自动完成单词分隔符”,但它不起作用。 如何使我的自定义lexer像python一样自动完成工作? 非常感谢

Lexer = customlexer(self.text)
api = QsciAPIs(Lexer)
api.add('toto.titi.tata')
api.prepare()
Lexer.setAPIs(api)
self.text.setLexer(Lexer)

class lexer(QsciLexerCustom):
    def __init__(self, parent):
        QsciLexerCustom.__init__(self, parent)

    def autoCompletionWordSeparators(self):
        return ['.']

目前的QScintila API无法实现这一点

主要的障碍是,您需要在
qscilexcustom
子类中重新实现的许多虚拟方法都不是公共的。这就是为什么您的示例中的代码不起作用的原因-当设置lexer时,您的
autoCompletionWordSeparators
方法被忽略,而
qscilexcustom
中的基类方法被称为instead(返回一个空列表)

您可能还认为您可以使用它来解决这个问题,但是,唉,这只有在没有设置lexer的情况下才有效

解决此问题的唯一方法是自己实现自动完成(这是可行的,但需要大量的工作),或者在上发出功能请求,以便将必要的虚拟方法添加到公共API中,以用于
qsciler


有问题的方法是(名称以黑体显示,而不是作为链接显示)。

这并不能回答问题,但我已经在QSCINTILA中为自定义词法器实现了autocomplete,但我还必须创建自定义解析器来查找代码中的类和函数定义,您可以通过QSCINTILA轻松使用低级闪烁api调用来显示自动完成框,但是填充它需要自定义解析器。这也可能有帮助: