Если в коде, который генерируется, возникает ошибка компиляции (например, нету свойства в классе), то локейшен ошибки совпадает с локейшеном всего макроса, что мне не нравится. Я вручную проставляю локейшены (result.Location = elem.Location), но это почему-то ничего не меняет.
Здравствуйте, hardcase, Вы писали:
H>Для этого есть макрос locate, он устанавливает в стеке локешонов требуемое значение, которое попадет в квазицитаты:
Это... Орлы! Добавьте к нему человеческий синтаксис, чтобы можно было писать так:
locate (location)
someExpression;
Давно надо было это сделать. Не понимаю почему поляки это сразу не сделали.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, catbert, Вы писали:
C>Если в коде, который генерируется, возникает ошибка компиляции (например, нету свойства в классе), то локейшен ошибки совпадает с локейшеном всего макроса, что мне не нравится. Я вручную проставляю локейшены (result.Location = elem.Location), но это почему-то ничего не меняет.
C>ЧЯДНТ?
Хардкейс уже подсказал решение. Поясню только ЧТДНТ. Дело в том, что локешнов в генерируемом, с помощью квази-цитирования, коде больше чем может показаться на первый взгляд. Например, ссылка на переменную или поле — это весьма сложный составной объект. И локешон надо задавать не только переменной верхнеуровневым конструкциям, но и тем, что лежат внутри. По уму это надо как-то автоматизировать (распространять локешоны вниз).
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, hardcase, Вы писали:
H>Здравствуйте, catbert, Вы писали:
C>>ЧЯДНТ?
H>Для этого есть макрос locate, он устанавливает в стеке локешонов требуемое значение, которое попадет в квазицитаты:
H>
Здравствуйте, catbert, Вы писали:
C>Ого... работает... я только сейчас заметил эту функциональность вообще
Я про ренейм и говрил. Если он работает, значит локешоны для переменных заданы верно.
Попрбуй следующее. После инициализации через свой макрос напиши присвоение одного из свойств/полей что были проинициализированы внутри макроса. Далее наведи курсор мыши на это поле (как внутри макроса, так и во внешнем присвоении). При этом это поле должно подсвечиваться в обоих случаях (синим), плюс должно подсвечиваться определение поля (розовым), если оно определено в этом же проекте.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, catbert, Вы писали:
C>Вдогонку, как настроить Code Folding для своих макросов?
Никак. Фолдинг делается только по стандартным конструкциям. В следующей версии надо будет подумать над возможностью экспорта информации о фолдинге из макросов. Или тупо делать фолдинг ко скобкам (но это может начать тормозить).
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, VladD2, Вы писали:
VD>Я про ренейм и говрил. Если он работает, значит локешоны для переменных заданы верно.
VD>Попрбуй следующее. После инициализации через свой макрос напиши присвоение одного из свойств/полей что были проинициализированы внутри макроса. Далее наведи курсор мыши на это поле (как внутри макроса, так и во внешнем присвоении). При этом это поле должно подсвечиваться в обоих случаях (синим), плюс должно подсвечиваться определение поля (розовым), если оно определено в этом же проекте.
Для свойств и полей подсветка не работает... видимо где-то локейт не понимает мои махинации с неймами.
Можно конечно все PExpr'ы вручную конструировать, но куда тогда красота квазицитирования денется?