【问题标题】:How to deprecate generated Xtext elements?如何弃用生成的 Xtext 元素?
【发布时间】:2019-05-16 01:09:03
【问题描述】:

我正在用 Xtext 开发一个 dsl。我想弃用一些语言元素。我有一个生成语言元素的 Xtext 文件。我希望显示这些元素已被弃用。

在元素上添加@Deprecated 很遗憾,即使编辑器没有抱怨,也没有任何作用。我找不到任何关于弃用和 Xtext 的信息。

【问题讨论】:

    标签: dsl xtext xtend


    【解决方案1】:

            validator = {
                generateDeprecationValidation = true
            }
    

    对工作流程没有帮助?

    Model:
        greetings+=Greeting*;
    
    @Deprecated 
    Greeting:
        'Hello' name=ID '!';
    

    这将生成

    public abstract class AbstractMyDslValidator extends AbstractDeclarativeValidator {
    
        @Override
        protected List<EPackage> getEPackages() {
            List<EPackage> result = new ArrayList<EPackage>();
            result.add(org.xtext.example.mydsl.myDsl.MyDslPackage.eINSTANCE);
            return result;
        }
    
        @Check
        public void checkDeprecatedGreeting(Greeting element) {
            addIssue("This part of the language is marked as deprecated and might get removed in the future!", element, MyDslConfigurableIssueCodesProvider.DEPRECATED_MODEL_PART);
        }
    }
    

    这样这个单元测试就会失败

    @ExtendWith(InjectionExtension)
    @InjectWith(MyDslInjectorProvider)
    class MyDslParsingTest {
        @Inject ParseHelper<Model> parseHelper
        @Inject extension ValidationTestHelper
        @Test
        def void loadModel() {
            val result = parseHelper.parse('''
                Hello Xtext!
            ''')
            Assertions.assertNotNull(result)
            val errors = result.eResource.errors
            Assertions.assertTrue(errors.isEmpty, '''Unexpected errors: «errors.join(", ")»''')
            result.assertNoIssues
        }
    }
    

    结果

    【讨论】:

    • 在语言 = XtextGeneratorLanguage { 验证器 = { generateDeprecationValidation = true } } 中?不,可悲的是,这似乎无济于事。在 .xtext 文件中的定义上添加 @Deprecated 可能是错误的吗?
    • 不,工作正常。你能详细说明你在做什么吗
    • 还有:您使用哪个 Xtext 版本?
    • 我们使用 2.17 版本。我们正在为 dsl 和 dsl 创建一个 VSCode 扩展。扩展应该将某些元素显示为已弃用。我已将此@Deprecated Button: {Button} 放入语言 xtext 文件中,并将验证器放入 Generator.mwe2 文件中的 XtextGeneratorLanguage 中。但是 VSCode 什么也没告诉我们。如果这只是 VSCode 的问题,我应该能够在生成的文件中看到“按钮”的内容吗?无论是在接口还是实现?因为那里也什么都没有
    • 没有生成到验证器中。您应该能够通过单元测试来重现这一点(您也可以在那里轻松调试)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-25
    相关资源
    最近更新 更多