我正在做一个小型的学术任务,我应该使用Xtext为NuSMV语言(一种模型检查语言)实现一个eclipse插件。提供了xtext语法(带有一些小错误)。 我创建了一个Xtext项目,并将其命名为“smv.project”,语言名称为“NuSMV”,扩展名为“* .smv”。我已经将提供的Xtext语法转换为smv.project / src / NuSMV.xtext,生成了工件,并创建了运行时eclipse。似乎工作正常,除了那些小错误(在我看来源于语法)。
现在,我的下一步是更改DSL中的默认颜色。显然,每个用户在使用我的插件时都可以在eclipse菜单中为自己做这件事,但是我想要改变DEFAULT颜色。我已经阅读了Xtext文档的语法着色。它很短,有许多我不理解的术语。我所理解的是在Xtext,Lexical和Semantic中有两种语法着色。我不明白每个人的意思,但在我看来,词汇着色更简单,所以我去了。 文档说我应该实现IHighlightingConfiguration接口。它显示了一个名为DefaultHighlightingConfiguration的实现示例(完整源代码可以在这里看到https://github.com/eclipse/xtext/blob/master/plugins/org.eclipse.xtext.ui/src/org/eclipse/xtext/ui/editor/syntaxcoloring/DefaultHighlightingConfiguration.java)。我已经将这个实现应用到我的项目中,smv.project.ui / src / smv.project.ui.editor.syntaxcoloring。当然,我在文件的开头更改了“package”行。 我已将所有红色值更改为255以查看差异。 我再次生成了工件,创建了运行时eclipse,创建了一个* .smv文件,但颜色是相同的。
我的猜测是我需要在一些变量或配置类中设置我的新类...我试图在示例的存储库中搜索“DefaultHighlightingConfiguration”,并发现它在文件XtextProposalProvider.java中使用(完整源代码{第235行中的{3}}) - 我们正在重写getKeywordDisplayString()。所以我去了我的存储库中已经存在的NuSMVProposalProvider.java并尝试添加相同的行:
@Override
protected StyledString getKeywordDisplayString(Keyword keyword) {
return stylerFactory.createFromXtextStyle(keyword.getValue(),
defaultLexicalHighlightingConfiguration.keywordTextStyle());
}
这是我完整的NuSMVProposalProvider.xtend:
/*
* generated by Xtext
*/
package smv.project.ui.contentassist
import smv.project.ui.contentassist.AbstractNuSMVProposalProvider
import javax.inject.Inject
import org.eclipse.xtext.ui.editor.syntaxcoloring.DefaultHighlightingConfiguration
import org.eclipse.jface.viewers.StyledString
import org.eclipse.xtext.Keyword
/**
* see http://www.eclipse.org/Xtext/documentation.html#contentAssist on how to customize content assistant
*/
class NuSMVProposalProvider extends AbstractNuSMVProposalProvider {
@Inject
private DefaultHighlightingConfiguration defaultLexicalHighlightingConfiguration;
@Override
protected StyledString getKeywordDisplayString(Keyword keyword) {
return stylerFactory.createFromXtextStyle(keyword.getValue(),
defaultLexicalHighlightingConfiguration.keywordTextStyle());
}
}
然而,出现了下一个错误:
我的问题是:
非常感谢!! :) 柴
答案 0 :(得分:1)
NuSMVProposalProvider还没有结束。 我没有必要在那里添加任何代码。 我正在寻找的是在NuSMVUiModule.java中添加下一行:
public Class<? extends IHighlightingConfiguration> bindIHighlightingConfiguration () {
return DefaultHighlightingConfiguration.class;
}
感谢大家的评论! 柴