Как отказаться от сгенерированных элементов Xtext?

Я разрабатываю DSL с Xtext. Я хочу отказаться от некоторых языковых элементов. У меня есть файл Xtext, из которого генерируются языковые элементы. Я хочу, чтобы эти элементы устарели.

К сожалению, добавление @Deprecated к элементу ничего не дает, даже если редактор не жалуется. Я не смог найти ничего об устаревании и Xtext.


person Tobi    schedule 13.05.2019    source источник


Ответы (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
    }
}

приводит к

Редактор

person Christian Dietrich    schedule 13.05.2019
comment
В языке = XtextGeneratorLanguage { validator = { generateDeprecationValidation = true } } ? Нет, к сожалению, это, кажется, ничего не делает. Возможно, добавление @Deprecated к определению в файле ‹language›.xtext неправильно? - person Tobi; 14.05.2019
comment
нет, это работает нормально. не могли бы вы дать подробные шаги того, что вы делаете - person Christian Dietrich; 14.05.2019
comment
также: какую версию Xtext вы используете? - person Christian Dietrich; 14.05.2019
comment
Мы используем версию 2.17. Мы создаем расширение VSCode для dsl и dsl. Расширение должно отображать определенные элементы как устаревшие. Я поместил этот @Deprecated Button: {Button} в языковой файл xtext и валидатор в XtextGeneratorLanguage в файле Generator.mwe2. Но VSCode ничего нам не показывает. Если это просто проблема с VSCode, смогу ли я увидеть что-то в сгенерированном файле для кнопки? Либо в интерфейсе, либо в реализации? Потому что там тоже ничего нет - person Tobi; 15.05.2019
comment
нет, он сгенерирован в валидаторе. вы должны быть в состоянии воспроизвести это с помощью модульного теста (вы также можете легко отладить его) - person Christian Dietrich; 15.05.2019