在Xtext中自动对齐数据

时间:2017-06-15 04:49:41

标签: xtext

我有一个自定义解析器规则,我在其中定义了所有关键字,例如_self,_for,_loop等。因此,如果我输入_s并单击Ctrl +空格键,它会显示_self.But我需要的甚至是虽然我键入self或SE,但它应该自动指定为_self.Is有可能吗?如果是这样,有人可以为此建议一个解决方案。提前致谢

1 个答案:

答案 0 :(得分:0)

有许多事情需要注意

  1. 需要一个提案,只有一个提案。否则,用户必须选择要应用的prosal并且不进行自动插入
  2. 根据错误恢复创建提案,因此您可能无法获得所需的提案
  3. 所以我们假设你有一个像

    这样的语法
    Model:
        greetings+=Greeting*;
    
    Greeting:
        '_self' name=ID '!';
    

    之类的模型文件
    SE
    

    然后错误恢复将正常工作" _self"将添加到提案列表

    1. 根据模型中的当前前缀过滤提案。这将是你可以开始定制的地方。
    2. e.g。这非常幼稚的impl

      import org.eclipse.xtext.ui.editor.contentassist.FQNPrefixMatcher;
      
      public class MyPrefixMatcher extends FQNPrefixMatcher {
      
          @Override
          public boolean isCandidateMatchingPrefix(String name, String prefix) {
              return super.isCandidateMatchingPrefix(name, prefix) || super.isCandidateMatchingPrefix(name, "_" + prefix);
          }
      
      }
      

      并且不要忘记绑定

      import org.eclipse.xtend.lib.annotations.FinalFieldsConstructor
      import org.eclipse.xtext.ui.editor.contentassist.PrefixMatcher
      import org.xtext.example.mydsl4.ui.contentassist.MyPrefixMatcher
      
      @FinalFieldsConstructor
      class MyDslUiModule extends AbstractMyDslUiModule {
      
          override Class<? extends PrefixMatcher> bindPrefixMatcher() {
              return MyPrefixMatcher;
          }
      
      }
      
      1. 除了实际输入的文本之外,还有另一个功能根本不使用提案,如果它识别出某些内容,则可以用其他内容替换它。此功能称为&#34;自动编辑&#34;。 xtext中的扩展点为IAutoEditStrategy / AbstractEditStrategyProvider