当前位置: 首页 > 知识库问答 >
问题:

如何在Xtext中实现SemanticHighlightingCalculator

霍襦宗
2023-03-14
public class MySemanticHighlightingCalculator implements ISemanticHighlightingCalculator
{

   @Override
   public void provideHighlightingFor(XtextResource resource, IHighlightedPositionAcceptor acceptor)
   {
      if (resource == null || resource.getParseResult() == null)
         return;

      INode root = resource.getParseResult().getRootNode();
      for (INode node : root.getAsTreeIterable())
      {
         if (node.getSemanticElement() instanceof DocCommentElement)
         {
            acceptor.addPosition(node.getOffset(), node.getLength(),
                  MyHighlightingConfiguration.DOCUMENTATION_COMMENT_ID);
         }
      }
   }
}
package org.xtext.example.mydsl.ui;

import java.util.Iterator;
import java.util.List;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.EStructuralFeature;
import org.eclipse.emf.ecore.util.EcoreUtil;
import org.eclipse.xtext.nodemodel.ILeafNode;
import org.eclipse.xtext.nodemodel.INode;
import org.eclipse.xtext.nodemodel.util.NodeModelUtils;
import org.eclipse.xtext.resource.XtextResource;
import org.eclipse.xtext.ui.editor.syntaxcoloring.IHighlightedPositionAcceptor;
import org.eclipse.xtext.ui.editor.syntaxcoloring.ISemanticHighlightingCalculator;

public class YourDslSemanticHighlightingCalculator implements ISemanticHighlightingCalculator {
    
    override provideHighlightingFor(XtextResource resource, IHighlightedPositionAcceptor acceptor) {
          if (resource == null || resource.getParseResult() == null)
            return;
            
//          INode root = resource.getParseResult().getRootNode();
//              for (INode node : root.getAsTreeIterable()) {
//              if (node.getGrammarElement() instanceof CrossReference) {
//                      acceptor.addPosition(node.getOffset(), node.getLength(), 
//                  MyHighlightingConfiguration.CROSS_REF);
//              }   
        
        INode root = resource.getParseResult().getRootNode();
              for (INode node : root.getAsTreeIterable())
              {
                 if (node.getSemanticElement() instanceof DocCommentElement)
                 {
                    acceptor.addPosition(node.getOffset(), node.getLength(),
                          MyHighlightingConfiguration.DOCUMENTATION_COMMENT_ID);
                 }
              }
    }
}
    null

总之,我有一种感觉,我没有按预定的方式去做。那么,打算的方式是什么呢?我应该如何做语义突出显示?

共有1个答案

卢宜然
2023-03-14

可以使用以下方法修复导入:

import org.eclipse.xtext.ide.editor.syntaxcoloring.IHighlightedPositionAcceptor;
import org.eclipse.xtext.ide.editor.syntaxcoloring.ISemanticHighlightingCalculator;

谢谢Christian的评论。大多数人发布他们的代码时没有导入。所以我不知道从哪里进口。

尽管在项目文件夹的上下文菜单中,它们只列出了“New Xtend Class”,但使用Java似乎更好:这样可以解决INode错误。

 类似资料:
  • 从终端创建myDSL语法 起点,包含行列表 每一行都可以选择以LABEL开始,然后以关键字开始 这个语法适用于单引号中有空格的字符串。但是它有很多错误/警告 警告(200):/组织。xtext。实例mydsl/src gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl。g:309:3:决策可以使用多个选项匹配输入,例如“R

  • 问题内容: 当用户访问列表中可见的项目时,如何在底部显示进度栏。 我编写了一个代码,其中使用Web服务获取数据,现在我想填充部分记录,因为我的JSON中大约有 630条记录 。 这是我用来从JSON获取数据并填充到RecyclerView中的整个代码。 这是我的JSON的外观,但是真实的JSON包含600多个记录: 有人可以指导我在我的代码中进行更改的地方吗? 每当用户使用进度条滚动到底部时,我想

  • 问题内容: 我正在使用iOS的Google Maps API,并想使用标记聚类实用程序。我想出了如何显示聚簇标记,但是我想自定义标记。有人可以解释如何设置/更改每个标记或群集标记的图标和标题吗?示例代码将非常有帮助。 到目前为止,这就是我所拥有的。我不知道该如何处理renderClusters和更新函数。 问题答案: 在 Swift 4上 ,我找到了一种针对聚簇标记的干净解决方案,可以为聚簇使用自

  • 问题内容: 我是SwiftUI的新手。我有三个视图,我希望它们在PageView中。我想像滑动浏览器一样滑动每个“视图”,并希望这些小点表示我所在的视图。 问题答案: 页面控制 您的页面浏览量 您的页面视图控制器 假设您有一个类似的观点 您可以像这样在主swiftUI视图中使用此组件。

  • 问题内容: 我有指令,它是带有后退按钮的网站标题,我想单击可返回到上一页。我如何以有角度的方式做到这一点? 我努力了: 这是指令js: 但什么也没发生。我查看了有关$ location 的angular.js API,但未找到有关后退按钮或的任何信息。 问题答案: 您需要在指令中使用链接函数: 参见jsFiddle。

  • 问题内容: 我想知道是否有人知道如何在node.js中实现setTimeout。我相信我在某处读到它不是V8的一部分。我迅速尝试找到实现,但是在source(BIG)中找不到它。例如,我找到了这个timers.js文件,然后例如链接到timer_wrap.cc。但是这些文件并不能完全回答我的所有问题。 V8有实施吗?我想从源头上也可以得出答案。 如何实施?javascript还是本机还是两者结合?