Groovy DSL-скрипты

Я написал глобальное преобразование AST, которое должно применяться к сценариям DSL, и сейчас нахожусь в процессе выбора наилучшего способа идентифицировать определенные сценарии groovy как эти сценарии DSL.

Я рассматривал следующие варианты:

  1. Пользовательское расширение файла; Самым большим недостатком здесь является поддержка IDE: многие из них едва поддерживают компиляцию/редактирование файлов с нестандартными расширениями (вы можете настроить редактор, но он требует некоторой настройки).
  2. Специальный суффикс имени файла (префикс), но в этом случае суффикс должен быть действительно уникальным (и, следовательно, относительно длинным), чтобы избежать случайного преобразования обычных файлов groovy (мой текущий выбор).
  3. Локальное преобразование AST, применяемое к классу сценария, имеет недостаток, заключающийся в том, что для каждого сценария необходимо написать некоторый шаблонный код.
  4. Наличие уникального первого оператора в сценариях, который идентифицирует DSL.

Какой вариант, на ваш взгляд, лучше выбрать и почему? Есть ли в моем распоряжении другие варианты, о которых я не подумал?


person Nutel    schedule 10.07.2012    source источник


Ответы (1)


Если вы компилируете сценарии DSL с помощью GroovyShell, вы можете использовать CompilerConfiguration.addCompilationCustomizer(ASTTransformationCustomizer(YourGlobalASTTransformation)) для применения к ним преобразования.

person musketyr    schedule 11.07.2012
comment
По соображениям производительности я хотел бы применять преобразования во время компиляции. Также это позволяет мне запускать скрипты как execute(ClassName) вместо execute("path/to/the/script/ClassName.groovy") - person Nutel; 11.07.2012