要具有自定义关键字,请执行以下操作:
plugin.xml
中定义一种语言,并扩展GPPLanguage类。扩展CLanguageKeywords并覆盖getKeywords以返回super.getKeywords以及自定义关键字:
public class MyLanguageKeywords extends CLanguageKeywords {
public MyLanguageKeywords(ParserLanguage language, IScannerExtensionConfiguration config) {
super(language, config);
}
@Override
public String[] getKeywords() {
String[] cppKeywords = super.getKeywords();
String[] myKeywords = new String[] {
"input",
"output",
"input port",
"output port",
};
return (String[]) ArrayUtils.addAll(cppKeywords, myKeywords);
}
}
实现getAdapter()以返回MyLanguageKeywords的实例
这适用于“输入”和“输出”,但不适用于“输入端口”或“输出端口”。如何仅在“输入端口”或“输出端口”组合中突出显示“端口”的关键字?
答案 0 :(得分:1)
我可以想到两种选择:
修改CDT的词法分析器以支持包含空格的关键字。我不认为您可以使用公共API来完成此操作,而必须修改核心CDT类,例如$uri = CreateUriWithoutIncorrectSlashEncoding "https://server.com/api/v3/projects/foo%2Fbar"
。 (或者,您可以考虑向修补程序上游添加对词法分析器的支持。)
使用语义突出显示突出显示包含空格的关键字。有一个org.eclipse.cdt.internal.core.parser.scanner.Lexer
扩展点,允许插件提供自定义的语义突出显示。
用户体验的不同之处在于,在每次击键之后立即立即应用词法突出显示,而在键入停止后一小段延迟后才应用语义突出显示(因为计算起来更昂贵)。如果将org.eclipse.cdt.ui.semanticHighlighting
和override
关键字当前在C ++中的突出显示方式与其他关键字进行比较,则可以看到这种效果:final
和override
使用语义突出显示,因为它们与上下文相关的关键字。
我还要提到第二种方法是否有效,取决于您的新关键字如何适合语法。必须将它们解析为final
,以便对其应用语义突出显示。