Наваял макрос для генерации типизированного датасета из файла со схемой. Схему можно сгенерировать любым редактором датасета (например, в шарповском проекте) и подключить к немерловому проекту.
Использовать так:
Прежде чем привести код макроса, пара вопросов к знатокам компилятора/интеграции:
1. Позырьте генерации AST (метод Helper.IncludeFile), ибо то, что получилось — скорее хакерство. Там генерируется AST напрямую из немерлового кода. Может есть более другие пути?
2. В интеграции нужно бы выставлять перед парсингом очередного проекта его директорию как текущую. Иначе относительные пути при компиляции и работе IntelliSense оказываются разными (всплывающая подсказка над макросом: "cannot open file DataBase.n: Could not find file '(тут путь решения вместо проекта)\DataBase.n'").
3. Пришлось запатчить NemerleCodeGenerator, ибо нашел несколько ошибок (например, при генерации делегатов). Diff выложил здесь (залейте кто-нибудь, кто права имеет).
4. Может макрос тоже включить в стандартную поставку компилятора? Пригодится.
Здравствуйте, BOleg, Вы писали:
BO>2. В интеграции нужно бы выставлять перед парсингом очередного проекта его директорию как текущую. Иначе относительные пути при компиляции и работе IntelliSense оказываются разными (всплывающая подсказка над макросом: "cannot open file DataBase.n: Could not find file '(тут путь решения вместо проекта)\DataBase.n'").
В Интеграции парсинг тел методов инкрементальный. Закладываться на текущий путь идея плохая. Лучше брать пути оностиельно пути файла в котором объявлен метатарибут. В макросе можно обратиться к локейшону и узнать в каком файле просходит обращение к макросу. Ну, а там уже рассчитывать относительные пути.
BO>3. Пришлось запатчить NemerleCodeGenerator, ибо нашел несколько ошибок (например, при генерации делегатов). Diff выложил здесь (залейте кто-нибудь, кто права имеет).
У меня не удаеся скачать данный файл. Видимо юрла кривая.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, BOleg, Вы писали: BO>2. В интеграции нужно бы выставлять перед парсингом очередного проекта его директорию как текущую. Иначе относительные пути при компиляции и работе IntelliSense оказываются разными (всплывающая подсказка над макросом: "cannot open file DataBase.n: Could not find file '(тут путь решения вместо проекта)\DataBase.n'"). BO>3. Пришлось запатчить NemerleCodeGenerator, ибо нашел несколько ошибок (например, при генерации делегатов). Diff выложил здесь (залейте кто-нибудь, кто права имеет).
Обязательно пакуй всякую экзотику зипом перед выкладыванием на сервер RSDN.
... << RSDN@Home 1.2.0 alpha rev. 677>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.