将包含两个单词的关键字添加到CDT

时间:2019-07-09 10:40:51

标签: java eclipse eclipse-cdt

要具有自定义关键字,请执行以下操作:

  • 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的实例

这适用于“输入”和“输出”,但不适用于“输入端口”或“输出端口”。如何仅在“输入端口”或“输出端口”组合中突出显示“端口”的关键字?

1 个答案:

答案 0 :(得分:1)

我可以想到两种选择:

  1. 修改CDT的词法分析器以支持包含空格的关键字。我不认为您可以使用公共API来完成此操作,而必须修改核心CDT类,例如$uri = CreateUriWithoutIncorrectSlashEncoding "https://server.com/api/v3/projects/foo%2Fbar" 。 (或者,您可以考虑向修补程序上游添加对词法分析器的支持。)

  2. 使用语义突出显示突出显示包含空格的关键字。有一个org.eclipse.cdt.internal.core.parser.scanner.Lexer扩展点,允许插件提供自定义的语义突出显示。

用户体验的不同之处在于,在每次击键之后立即立即应用词法突出显示,而在键入停止后一小段延迟后才应用语义突出显示(因为计算起来更昂贵)。如果将org.eclipse.cdt.ui.semanticHighlightingoverride关键字当前在C ++中的突出显示方式与其他关键字进行比较,则可以看到这种效果:finaloverride使用语义突出显示,因为它们与上下文相关的关键字。

我还要提到第二种方法是否有效,取决于您的新关键字如何适合语法。必须将它们解析为final,以便对其应用语义突出显示。