【问题标题】:xtext: autoimport and -validate current packagextext:自动导入和验证当前​​包
【发布时间】:2015-05-28 22:51:58
【问题描述】:

我有两个相互关联的问题,我知道如何“步行”解决(使用自定义验证器和范围提供程序)。但我很惊讶它们在 xtext 中不能开箱即用,所以无论如何我都会问(以防我错过了什么)。

我有这个 DSL:

Model:
    'package' name=QualifiedName
    imports+=Import*
    entities+=Entity*;

Import:
    'import' importedNamespace=QualifiedName;

Entity:
    name=ID '{'
    references += Reference*
    '}';

Reference:
    name=ID':'entitiy=[Entity]
;

QualifiedName:
    ID('.'ID)*
;

除了在同一个文件中定义多个实体之外,我还希望能够定义多个“存在”在同一个包中的文件。我在这里有两个问题:

1) 我发现没有明显的方法可以轻松地自动导入当前包中的所有元素。所以如果我有一个文件

package com.test

EntityA {}

还有第二个

package com.test

import com.test.EntityA // fails if I remove this line

EntityB{
  refToA:EntityA        // I could make qualified names work here.
                        // But that is not the goal.
}

除非我明确导入它(这是我想避免的),否则无法解析对 EntityA 的引用,尽管它们位于同一个命名空间中。

那么:有没有一种方法可以轻松地为“当前”包启用输出导入?

2) 我启用了org.eclipse.xtext.validation.NamesAreUniqueValidator,它适用于同一文件中定义的实体。但是如果我像这样重新定义一个导入的实体

package com.test

import com.test.EntityA

EntityB{
  refToA:EntityA
}

EntityA {}

我没有收到预期的验证错误。有没有什么我可以做的,而无需编写自己的验证器?

谢谢。

【问题讨论】:

    标签: xtext


    【解决方案1】:

    要使自动导入工作,您需要使用 Xbase 和

    Model:
        'package' name=QualifiedName
        importSection=XImportSection?
    

    要使用 Xbase,请将其附加到您的语法中:with org.eclipse.xtext.xbase.Xbase

    详情请见http://www.lorenzobettini.it/2013/01/the_ximportsection_in_xbase_2_4/

    第二个问题只能通过您自己的验证器 AFAIK 来解决。原因是你可以有一个语法允许:

    import com.test.EntityA as X
    
    private EntityA extends X {}
    

    【讨论】:

    • 嗨亚伦。非常感谢您的回答。您对第一部分的解决方案有效,但不是我所希望的:我现在可以在该特定位置使用其限定名称引用 Entity。但我希望用EntityA 来引用它(经过尝试,它不适用于您的提案)。我会尽量在我的问题中更清楚地说明这一点。
    • 你对第二部分的回答是有道理的。
    • Xtext 的哪个版本?
    • 第一部分是对的。我再次检查,您必须使用 Xbase 和 importSection=XImportSection?
    • 嗨亚伦。再次感谢。我用 XImportSection 对其进行了测试。这仍然不是我想要的。现在我得到了引用实体的自动完成功能,但仍然需要使用限定名称(或导入)。猜猜这是最好的。我会接受您的回答,并在我真正需要/编写它时立即发布我的自定义范围提供程序/验证器。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-12
    • 2011-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多