2013-12-09 4 views
0

Выполняя DSL-материал, я хотел бы добавить несколько псевдонимов к существующей макрокоманде, и, если возможно, я бы хотел не указывать определение macroTransform. То есть я хочу объявить псевдоним для «заголовка макроса» вместо реализации макроса.Добавление псевдонимов для макрокоманд

Я делал некоторые неудачные попытки. Например, учитывая исходный заголовок аннотаций,

class original extends StaticAnnotation { 
    def macroTransform(annottees: Any*) = macro originalImpl 
} 

Я попытался сделать псевдоним, используя псевдоним типа:

type alias1 = original 
@alias1 trait Whatever 

Кроме того, я развернула наследующую версию аннотаций:

class alias2 extends original 
@alias2 trait Whatever 

Однако ни один из них не раскрывает. Есть ли удобный способ сделать это?

ответ

1

До сих пор это невозможно, потому что typechecker использует очень ограниченный алгоритм разрешения имен, чтобы выяснить, относится ли данный идентификатор к аннотации макроса. В пределах ограничений этого алгоритма, к сожалению, невозможно объединить. Я создал отчет об ошибке в https://github.com/scalamacros/paradise/issues/8.

Смежные вопросы