Целью проект является интеграцию с Nemerle с Microsoft VS. В данное время поддерживается VS 2008 и Nemerle Studio (бесплатная версия основанная на VS Shell). Предыдущие версии были рассчитаны на VS 2005, но нами было принято решение отказаться от ее поддержки. В будущем будут поддерживаться следующие версии VS (VS 2010).
На данный момент реализованы следующие возможности:
Автодополнение при вводе. +
Отображение подсказок при наведении курсора мыши на идентификатор. +
Полноценная подсветка синтаксиса (с учетом макросов и типов, импортируемых в конкретный файл). +
Подсказки к параметрам функций. +
Навигация по коду (переход к определению, поиск вхождений, комбобоксы навигации по коду открытого файла). +
Простые сниппеты (шаблоны кода). +
Отладка. Поддерживаются базовые возможности отладки: просмотр содержимого переменных и выражений (к сожалению, пока только в формате C#), точки останова, пошаговое исполнение. Из проблем можно отметить не всегда корректное отображение значений переменных при скрытии переменных переменными с аналогичными именами.+/-
Использование макросов из сборок подключенных к тому же решению (Solution). Вы можете объединить проект содержащий макросы и проекты использующие эти макросы в одно решение. При этом макросы будут работать во время разработки и их поведение будет обновляться сразу после перекомпиляции сборки с макросами (пока что так же требуется переоткрыть файл в котором используется макрос).
Поддержка визуального проектирования для Web-проектов. +/-
Поддержка WPF. +/-
+ – Реализовано. Работает в большинстве случаев.
+/- – Реализовано частично или частенько не работает корректно.
В последствии, возможно будет реализованы:
Поиск по семантическим конструкциям.
Поддержка автоматических сниппетов генерируемых в runtime-е для импортированных макросов.
Поддержка SVN.
Полноценная отладка.
Работоспособность комбобоксов в файлов не подключенных к проектам открытым в IDE.
Дополнительные виды рефакторинга.
Intellisense и рефакторинг в коде макросов. Сейчас можно обойти их отсутствие размещая код макроса в обычном модуле и помещая в код макроса вызов метода из этого модуля.
Другие прелести, которые я забыл перечислить.
Лицензия
Свободная (в стиле BSD). Вы можете использовать как сам компилятор и интеграцию, так и любой код из этого проекта. При этом вы всего лишь должны упоминать авторов в about-ах, readme и т.п. своих продуктов, а так же изменяя код оставлять все копирайты и ссылаться на них.
Как загрузить и собрать проект
Внимательно прочитайте инструкцию до конца!
Для сборки проекта на сегодня требуется:
Иметь установленный клиент SVN (такой как TortoiseSVN).*
Иметь установленным .NET 3.5 и VS 2008 (с или без SP1) с установленными модулями для C# и C++.*
Скачать и установить VS SDK. Для VS 2008 SP1 вам следует скачать и установить VS SDK версии 1.1. Это можно сделать здесь. Если у вас установлена VS 2008 без SP1 вам, вам следует скачать и установить VS SDK 1.0 (брать здесь). Разница между ними не большая, но предпочтительно использовать VS SDK 1.1. и VS 2008 с установленным SP1. SP1 можно взять здечь. Если вы ставите VS с нуля, то имеет смысл ставить версию с интегрированным SP1 (если вы подписчик MSDN, то можете найти ее там). Внимание! Без установки VS SDK или установив не подходящую версию вы не сможете скомпилировать проект интеграции (но сможете собрать сам компилятор).
Если вы пользуетесь файловыми менеджерами, консольными окнами или другими программами позволяющими запускать процессы, то перезапустите их. Иначе у вас могут возникнуть проблемы с компиляцией вследствие того, что изменение в окружении не будет видно в этих приложениях (сессиях).
Загрузить или обновить последнюю версию исходников компилятора Nemerle из SVN. Если вы входите в 1commiters (т.е. группу разработчиков Nemerle), то следует воспользоваться следующей ссылкой https://nemerle.googlecode.com/svn/nemerle/trunk/ (начинается с https!). Если вы не входите в список разработчиков, то вы можете получить код доступный только на чтение по ссылке http://code.google.com/p/nemerle/source/browse/nemerle/trunk/. Обратите внимание на то, что это не просто http-ссылка, но и SVN-ссыка! Для упрощения работы с SVN лучше всего использовать TortoiseSVN (этот плагин встраивается в Windows Explorer + Total Commander и позволяет управлять работой с SVN по средствам контекстного меню). Если компиляция проекта не просходит, то прежде чем писать в форум попробуйте обновить и перекомпилровать исходники как комилятора, так и интеграции. Для этого проще всего удалить все содержимое основной директории за исключением скрытой папки .svn или _svn (зависит от настроек TortoiseSVN) и выбрать пункт «SVN Update». Подробнее смотри Hacking. *
Если вы устанавливали бинарные файлы Nemerle версии 0.9.3.x с помощью инсталлятора с сайта http://nemerle.org, то нужно удалить переменную среды окружения с именем «Nemerle» или убрать из нее кавычки (это ошибка была в инсталляторе версии 0.9.3) и прописать туда путь в который будут класться актуальные версии компилятора (лучше просто удалить эту переменную). Внимание! Работать с проектом можно только на последней версии компилятора скомпилированной самостоятельно из исходников полученных из SVN. Беря из SVN новые файлы Интеграции вы обязательноо должны обновить и исходники компилятора. Причем после обновления исходников вам нужно закрыть все программы которые могут блокировать исполнимые файлы компилятора (особенно VS), перекомпилировать и перерегистрировать файлы компилятора.
Скачать и установить на компьютер NUnit версии 2.2.8. или выше. См. подробности ниже.
Скомпилировать проект решение (Solution) Nemerle.VSIP.sln с помощью командного файла VsIntegration\build_dev.cmd или открыв его в VS 2008.
Сборка проекта под Windows Vista и Windows 7
Указанные выше ОС используют новую подсистему UAC. Так же в этих ОС ограничены права на запись в некоторые каталоги и ветки реестра которые были доступны в просшлых версиях ОС Windows.
Регистрация компонентов компилятора и интеграции с VS в этих ОС требует наличия прав администратора. Более того, даже если вы обладаете правами администратора подсистема UAC по-умолчанию будет препятствовать копированию компонентов в нужные каталоги и их регистрации. Чтобы избежать этого вам требуется запускать сборку проектов из процесса обладающего правами администратора. Самый простой способ добиться этого – воспользоваться наследованием прав процессов. Если вы используете файловый менеджер (такой как Total Commander или FAR), то проще всего будет запустить его копию с правами администратора. Это можно сделать или выбрав пункт «Run as admonistrator» из контекстного меню шортката, или настроив свойства шортката (лучше всего создать специальную копию шортката).
Учтите, что шоткатов на cmd-файлы не позволяют настроить запуск этого файла из под администратора! Но вы сможете вручную запускать их, выбирая соответствующий пункт контекстного меню.
Если вы проделали данные шаги, но интеграция или компилятор не скомпилировались, или не работают, то прежде чем писать вопросы в форумы еще раз ВНИМАТЕЛЬНО прочтите перечисленные выше пункты. Они почти наверняка включают ответ на вопрос «почему у меня не работает...».
Использование
Если вам нужно запустить интеграцию без отладки (просто для работы или тестирования), создайте шортка (.lnk-файл) содержащий следующую командную строку: «%VS90COMNTOOLS%..\..\Common7\IDE\devenv.exe /ranu /rootsuffix Exp» и запускайте VS с интеграцией с помощью этого шортката (путь к VS можно прописать напрямую).
Запуск под отладкой
Если вы хотите запускать Интеграцию под отладкой (для отладки интеграции или макросов), сделать активным (отлаживаемым) проектом проект Nemerle.VisualStudio.
Пропишите в свойствах проекта Nemerle.VisualStudio, на закладке Debug, в поле «Start external program:» путь к VS - «%VS90COMNTOOLS%..\..\Common7\IDE\devenv.exe». (Примечание: путь должен быть полным! Но вы можете попытаться внести строчку «$(VS90COMNTOOLS)..\..\Common7\IDE\devenv.exe» непосредственно в файл «Nemerle.VsIntegration\Nemerle.VsIntegration.csproj.user»*). И в поле «Command line arguments:» значение «/ranu /rootsuffix Exp».
Запустить Nemerle.VSIP.sln на выполнение.
Если вы все сделали правильно, то должна открыться экспериментальная версия VS 2008, в которой можно будет создать и протестировать Nemerle-проект (*.nproj-файлы).
Если при запуске в экспериментальной версии VS 2008 и у вас возникли проблемы, то прежде чем писать об этом в форум или багтрекер прочтите раздел Q&A и еще раз прочитайте данное руководство (от начала, до конца и очень внимательно).
Сборка компилятора из исходников с помощью MSBuild
Для сборки компилятора из исходников с помощью MSBuild можно воспользоваться пакетными файлами лежащими в корневом каталоге проекта компилятора на SVN. Вот их описание:
Build.cmd — Собирает проект в два прохода. Это с одной стороны гарантирует, что компилятор собирается сам на себе, а с другой, позволяет компилировать код в случаях изменений во внутренних макросах компилятора. Если делаете изменение компилятора, и хотите закоммитить в SVN новые бинарные модули (содержимое каталога boot), то обязательно воспользуйтесь именно этим пакетным файлом для сборки проекта.
Build-1-phase.cmd — Сборка проекта в один проход. В два раза быстрее предыдущего варианта, но не позволяет компилировать некоторые изменения в макросах и может породить бинарники компилятора которые будут не в силах собрать себя из своих же исходников. Никогда не коммитьте содержимое каталога boot собранное этим пакетным файлом!
Reg.cmd — Копирует скомпилированные сборки в каталог %ProgramFiles%\Nemerle и подвергает их прекомпиляции с помощью утилиты NGEN.EXE. Это делает модули доступными для обоих видов интеграции с VS и ускоряет время загрузки компилятора (что существенно ускоряет время компиляции маленьких проектов).
BuildAndReg.cmd — Выполняет компиляцию проекта с помощью пакетного файла Build.cmd после чего в случае успеха вызывает Reg.cmd. Таким образом, он производит двухпроходную компиляцию и прекомпиляцию сборок.
BuildAndReg-1-phase.cmd — Делает то же что и BuildAndReg.cmd, но производит компиляцию в один проход (как в случае с Build-1-phase.cmd). Используйте этот файл, когда обновляете исходники компилятора из SVN, и вам требуется отладочная информация для сборок компилятора.
BuildAndReg-Release.cmd — Делает то же что и BuildAndReg.cmd но компилирует релиз-версии сборок. При этом не генерируется отладочная информация и генерируется XML-документация (из-за чего время компиляции замедляется примерно вдвое). Используйте этот файл, если хотите получить наиболее быстрый вариант, если вам не нужна отладочная информация для модулей компилятора и вы хотите получить наиболее быстрые модули компилятора для реальной работы с другими проектами. Так же используйте этот файл, если вам требуется закоммитить на сервер бинарные модули компилятора.
Reg-boot.cmd – ускоряет перекомпиляцию исходников компилятора. Этот файл нужно запускаеть если вы скачали новые boot-файлы компилятора или провели двухстадийную компиляцию.
Для автоматизированной сборки проекта интеграции вы можете использовать build.cmd и build_dev.cmd.
Сборка проектов компилятора с использованием GNU make
Это способ, который используют сами разработчики компилятора. К сожалению, при этом вам придется установить на свой рабочий компьютер Cygwin. Подробности смотрите на nemerle.org.
Возможные проблемы
Выявление проблем и их устранение
Чаще всего возникают следующие проблемы при установке необходимых зависимостей и сборке проектов:
Устанавливается несоответствующие версии VS и VS SDK. Обратите внимание, что VS 2008 соответствует VS SDK 1.0, а VS 2008 SP1 VS SDK 1.1. Кроме того следует четко понимать, что .NET SDK и VS SDK – это разные вещи. .NET SDK в урезанном режиме поставляется с VS 2008, так что отдельно его ставить нет необходимости.
При установке VS не устанавливаются пакеты поддержки C# (крайне редко) и/или C++ (чаще). Оба пакета обязательны для сборки интеграции! Кроме того для сборки интеграции нельзя использовать Express-версии данных продуктов.
Сборка проектов происходит непосредственно после установки VS 2008 или VS SDK из приложений третьих фирм (например, файловых менеджеров вроде Total Commander или FAR). Эти приложения запоминают окружение. Это приводит к тому, что новые переменные окружения не видны в старых сессиях. Перезапустите эти приложения прежде чем начинать компиляцию из них!
Обновлена только часть исходников. Помните, что собрать работающую «интеграцию» можно только с соответствующей версией компилятора!
Вы пытаетесь скомпилировать только компилятор или только «интеграцию». Опять же помните, что «интеграция» использует компилятор, так что они должны быть одной версии (собраны одновременно). Пересборка компилятора приведет к неработоспособности «интеграции». Компиляция же «интеграции» с несоответствующими версиями компилятора может вовсе не удаться. После перекомпиляции бинарников Nemerle нужно произвести принудительную перекомпиляцию всего проекта интеграции.
Заблокированы файлы. Если вы попытаетесь перекомпилировать бинарники Nemerle при открытой студии в которой хоть раз производилась компиляция предшествующей версией компилятора, то на стадии регистрации вы увидите море мелькающего текста, а количество скопированных файлов будет отличаться от 4, 1, 5. Просто закройте студию и повторите компиляцию и pre-JIT.
Недостаток прав. См. предупреждение «Сборка проекта под Windows Vista и Windows 7» (выше).
Все скомпилировалось, но при запуске появляются какие-то ошибки. Проверьте, что в выводе компилятора и утилит не присутствует сообщений об ошибках.
Как включиться в процесс разработки интеграции с VS 2008 и компилятора Nemerle?
Вы должны иметь google-account или почту на http://gmail.com (вроде бы она автоматически является google-account-ом).
Так же вам потребуется получить пароль для SVN. Его можно сгенерировать (или посмотреть если он уже сгенерирован) выбрав ссылку googlecode.com password на странице http://code.google.com/p/nemerle/source/checkout. Для того чтобы увидеть эту ссылку вы должны войти (Sign in) в google-account.
Если у вас есть google-account, то вы можете попросить любого из владельцев (Owner) проекта добавить вас в список commiter-ов. Здесь находится список владельцев проекта можно. Например, вы можете отправить просьбу о добавлении вас в список commiter-ов на vc@rsdn.ru.
Нужно понимать, что это очень ответственное дело и что от ваших исправлений зависит работоспособность проекта. Так что нужно быть очень аккуратным, внимательным. Вносимые изменения должны быть четко обоснованными и разумными. Если в чем-то сомневаетесь, то лучше сначала спросите в конференции Nemerle или на форуме http://rsdn.ru/Forum/?group=prj.nemerle.
Исправляя чужой код старайтесь придерживаться стиля кодирования принятого в данном исходнике и проекте.
Старайтесь своими действиями не раздражать окружающих.
По началу, до получения личного логина в SVN-репозитории Nemerle можно (и даже желательно) присылать патчи (созданные средствами SVN, см. контекстное меню в TortoiseSVN) с исправлениями тем, кто в проекте уже давно (из RSDN-неров это я и IT) или посылайте патчи как аттачи к сообщениям в конференции по Nemerle. Помните, что аттач не должен быть больше 100 кб.
Процесс подключения к конференции описан здесь. Ее историю можно найти здесь.
Более свежую информацию «о связи с сообществом Nemerle» можно найти здесь.
В проекте интеграции с VS 2008 имеются Unit-тесты. Чтобы их запускать на рабочую машину нужно установить NUnit (http://nunit.org) версии 2.2.8 или старше.
ПРЕДУПРЕЖДЕНИЕ
Без инсталляции NUnit вы будете получать сообщения об ошибках при компиляции, так как на сборки NUnit-а имеются ссылки из проектов интеграции.
При отладке под VS 2008 встречается неприятная проблема – после некоторого временного промежутка отладчик «отваливается». Это делает отладку сложных проблем очень неудобной. Unit-тесты являются отличной заменой интерактивному режиму. В проекте Nemerle.Compiler.Utils в подкаталоге Nemerle.Completion2\Tests лежат Unit-тесты относящие к этому проекту (т.е. к IntelliSense Engine пока что имеющий имя Completion Engine).
Файлы:
Nemerle.Completion2\Tests\Content\Class1.n
Nemerle.Completion2\Tests\Content\Class1-2.n
содержат код, разбор которого производится при тестах. В будущем к ним может прибавиться и другой код (файлы или даже целые проекты).
В файле Nemerle.Completion2\Tests\Tests.Init.n содержится инициализация IntelliSense Engine и различные хэлпер-методы (например, методы для эмуляции получения текста из IDE).
В файле Nemerle.Completion2\Tests\Tests.n содержатся сами тесты.
СОВЕТ
Если вы обнаружили ошибку, то попытайтесь воспроизвести ее в Unit-тесте. Это позволит в кратчайшие сроки устранить ее.
Так же вы можете использовать Unit-тесты для изучения IntelliSense-движка и для самостоятельной отладки. Главное, чтобы ваши тесты не были очень долгими.
Любой из материалов, опубликованных на этом сервере, не может быть воспроизведен в какой бы
то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских
прав.