Eclipse IDE - 通过通用文本编辑器扩展点突出显示的Costum语言语法

时间:2017-08-08 11:00:12

标签: java eclipse eclipse-plugin

我一直在尝试为Eclipse IDE编写一个插件,为自定义通用语言执行语法突出显示和代码完成。

在氧气项目版本(v4.7)中,更改注释使用通用文本编辑器并使用扩展点宣布扩展它的所谓新方法。甚至提供了代码片段:

  

使用这个新的编辑器,现在更容易丰富新的通用编辑器,因此您可以为新语言添加相对容易的支持。它重用现有的Eclipse编辑器基础结构,但是使用通用编辑器,您不需要实现编辑器来为新文件内容类型提供功能。相反,您可以通过扩展点使通用编辑器更智能。   以下示例显示如何通过扩展名为通用编辑器提供功能:

<extension point="org.eclipse.ui.genericeditor.contentAssistProcessors">
   <contentAssistProcessor
         class="org.eclipse.ui.genericeditor.examples.dotproject.NaturesAndProjectsContentAssistProcessor"
         contentType="org.eclipse.ui.genericeditor.examples.dotproject">
   </contentAssistProcessor>
</extension>
<extension point="org.eclipse.ui.genericeditor.hoverProviders">
   <hoverProvider
         class="org.eclipse.ui.genericeditor.examples.dotproject.NatureLabelHoverProvider"
         contentType="org.eclipse.ui.genericeditor.examples.dotproject"
         id="natureLabelHoverProvider">
   </hoverProvider>
</extension>
<extension point="org.eclipse.ui.genericeditor.presentationReconcilers">
   <presentationReconciler
         class="org.eclipse.ui.genericeditor.examples.dotproject.BlueTagsPresentationReconciler"
         contentType="org.eclipse.ui.genericeditor.examples.dotproject">
   </presentationReconciler>
</extension>
  

这些新扩展点接收常规平台类(IPresentationReconcilier,ITextHover,ICompletionProposalComputer)作为参数,以向通用编辑器添加行为。不需要新的Java API。

     

以下是添加一些最小Gradle语法突出显示支持的简单示例:

public class GradlePR extends PresentationReconciler {

    private IToken quoteToken = new Token(new TextAttribute(new Color(Display.getCurrent(), new RGB(139, 69, 19))));
    private IToken numberToken = new Token(new TextAttribute(new Color(Display.getCurrent(), new RGB(0, 0, 255))));
    private IToken commentToken = new Token(new TextAttribute(new Color(Display.getCurrent(), new RGB(0, 100, 0))));

    public GradlePR() {
        RuleBasedScanner scanner = new RuleBasedScanner();

        IRule[] rules = new IRule[5];
        rules[0] = new SingleLineRule("'", "'", quoteToken);
        rules[1] = new SingleLineRule("\"","\"", quoteToken);
        rules[2] = new PatternRule("//", null, commentToken, (char)0, true);
        rules[3] = new NumberRule(numberToken);

        rules[4] = new GradleWordRule();

        scanner.setRules(rules);

        DefaultDamagerRepairer dr = new DefaultDamagerRepairer(scanner);
        this.setDamager(dr, IDocument.DEFAULT_CONTENT_TYPE);
        this.setRepairer(dr, IDocument.DEFAULT_CONTENT_TYPE);
    }

}

(原始来源:https://www.eclipse.org/eclipse/news/4.7/M3/#generic-editor

我已经设法用已经实现的通用文本编辑器打开一个新的插件项目。自动生成的plugin.xml文件已包含上面引用的第一个代码块(即如果我没有记错,则为扩展点定义)。

我是Eclipse插件的新手,对Java也不是很坚定。所以我无法弄清楚从第二个代码块放置代码的位置,以便在编辑器中实际实现更改以及如何将它与扩展点连接。

非常感谢方向上的任何指针,或指向某些进一步阅读的链接(理想情况下非常基本)或白痴级别教程! 感谢。

2 个答案:

答案 0 :(得分:0)

这是相关的博客文章,其中还包括幻灯片共享平台: Generic editor & language servers

答案 1 :(得分:0)

Eclipse发行说明中的​​示例代码似乎类似于此展示插件中的GradlePresentationReconcilerhttps://github.com/vogellacompany/codeexamples-ide/tree/dbfa485ca9b6f0aed653b3a466c055e24b01bb90/com.vogella.ide.editor.gradle

我得到了基于展示的语法高亮部分。