Nitra IDE plug-ins
От: VladD2 Российская Империя www.nemerle.org
Дата: 03.02.17 15:42
Оценка:
#Имя: Nitra.IdePlugins
Плагины для языков сделанных на Nitra языков можно сгенерировать утилитой Nitra.LanguageCompiler.exe. В солюшене Nitra.sln автоматически генерируются и собираются плагины для Cx# (сам проект сильно недоделан) и для Nitra.

Плагины работают, но я бы оценил их качество на сегодня как "бэта-версия", т.е. возможны баги.

Инсталлятора к ним нет и не будет. Плагины генерируются в формате .vsix, который по сути и есть инсталлятор.

Основной код поддержки VS находится в проекте NitraCommonVSIX. Это тоже .vsix. Для работы сгенерированных плагинов он должен быть установлен в студии. Инсталляция сгенерированных для конкретных языков плагинов добавляет поддержку этих языков.

При сборке Nitra.sln NitraCommonVSIX и плагины для Cx# и Nitra автоматически ставятся в девелоперский Hive (Path-to-VS-2015\Common7\IDE\devenv.exe /rootsuffix Exp).

Плагин для Nitra пока что не полнофункциональный, так как типизация Nitra не полностью переведена на новый движок типизации Nitra (а движок IDE использует именно его). Пока что более менее работает часть, связанная с синтаксисом, а вот в области работы с AST и маппингом много чего недоделано. Это будет исправлено в ближайшие месяцы. Именно над этим мы сейчас и работаем.

Когда будет понятно, то плагины стабильны и когда бдет доделан плагин для Nitra мы разместим NitraCommonVSIX.vsix (базовый планин) и NitraLangVsPackage.vsix (планиг для .nitra) в галерее Майкрософт и их можно будет загружать в диалоге "Extensions and Updates".

Скриншот интеграции с VS для самой Nitra (.nitra-файлов):
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Отредактировано 03.02.2017 16:14 VladD2 . Предыдущая версия . Еще …
Отредактировано 03.02.2017 15:44 VladD2 . Предыдущая версия .
c# plug-in plugin plugins nitra
Re: Nitra IDE plug-ins
От: MAMOHT  
Дата: 16.03.17 13:39
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Инсталлятора к ним нет и не будет. Плагины генерируются в формате .vsix, который по сути и есть инсталлятор.


VD>Основной код поддержки VS находится в проекте NitraCommonVSIX. Это тоже .vsix. Для работы сгенерированных плагинов он должен быть установлен в студии. Инсталляция сгенерированных для конкретных языков плагинов добавляет поддержку этих языков.


Собрал Нитру из исходников, расширения поставил. Как начать новый проект? Вроде бы в Nemerle должен быть подпункт.

  установленные расширения
  Новый проект
Re[2]: Nitra IDE plug-ins
От: VladD2 Российская Империя www.nemerle.org
Дата: 17.03.17 01:30
Оценка:
Здравствуйте, MAMOHT, Вы писали:

MAM>Собрал Нитру из исходников, расширения поставил. Как начать новый проект? Вроде бы в Nemerle должен быть подпункт.


Специальных шаблонов пока нет.

Нужно создать любой немерловый проект (например, консольный). В нем подключить:
* в Macro References: Nitra\bin\Debug\Stage2\Nitra.Compiler.dll
* в References: Nitra\bin\Debug\Stage2\Nitra.Runtime.dll. Если хочется делать язык которому нужны символы дотнета, нужно еще подключить Nitra\DotNet.BackEnd.CCI\bin\Debug\DotNet.BackEnd.CCI.dll и Nitra\bin\Debug\Stage2\DotNetLang.Stage2.dll.

Далее добавляешь в проект файл и даешь ему расширение ".nitra".

Так же имеет смысл создать проект в Nitra.Visualizer (или в Nitra.Visualizer.Old, он стабильнее пока).
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Отредактировано 17.03.2017 1:33 VladD2 . Предыдущая версия .
Re[3]: Nitra IDE plug-ins
От: MAMOHT  
Дата: 17.03.17 07:40
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Здравствуйте, MAMOHT, Вы писали:


VD>Нужно создать любой немерловый проект (например, консольный). В нем подключить:

VD>* в Macro References: Nitra\bin\Debug\Stage2\Nitra.Compiler.dll
VD>* в References: Nitra\bin\Debug\Stage2\Nitra.Runtime.dll. Если хочется делать язык которому нужны символы дотнета, нужно еще подключить Nitra\DotNet.BackEnd.CCI\bin\Debug\DotNet.BackEnd.CCI.dll и Nitra\bin\Debug\Stage2\DotNetLang.Stage2.dll.

VD>Далее добавляешь в проект файл и даешь ему расширение ".nitra".


  непруха
------ Сборка начата: проект: Test_Nitra_01, Конфигурация: Debug Any CPU ------
C:\Program Files (x86)\Nemerle\Net-4.0\Nemerle.MSBuild.targets(289,5): warning : using type `[Nitra.Runtime.Stage2, Version=1.0.9999.0, Culture=neutral, PublicKeyToken=e080a9c724e2bfcd]Nitra.Declarations.TypeSymbol' that was defined in more than one assembly: `[Nitra.Runtime, Version=1.0.9999.0, Culture=neutral, PublicKeyToken=e080a9c724e2bfcd]Nitra.Declarations.TypeSymbol' (the first version was used)
C:\Program Files (x86)\Nemerle\Net-4.0\Nemerle.MSBuild.targets(289,5): warning : using type `[Nitra.Runtime.Stage2, Version=1.0.9999.0, Culture=neutral, PublicKeyToken=e080a9c724e2bfcd]Nitra.Declarations.SymbolBase' that was defined in more than one assembly: `[Nitra.Runtime, Version=1.0.9999.0, Culture=neutral, PublicKeyToken=e080a9c724e2bfcd]Nitra.Declarations.SymbolBase' (the first version was used)
C:\Program Files (x86)\Nemerle\Net-4.0\Nemerle.MSBuild.targets(289,5): warning : using type `[Nitra.Runtime.Stage2, Version=1.0.9999.0, Culture=neutral, PublicKeyToken=e080a9c724e2bfcd]Nitra.Declarations.Scope' that was defined in more than one assembly: `[Nitra.Runtime, Version=1.0.9999.0, Culture=neutral, PublicKeyToken=e080a9c724e2bfcd]Nitra.Declarations.Scope' (the first version was used)
C:\Program Files (x86)\Nemerle\Net-4.0\Nemerle.MSBuild.targets(289,5): warning : using type `[Nitra.Runtime.Stage2, Version=1.0.9999.0, Culture=neutral, PublicKeyToken=e080a9c724e2bfcd]Nitra.Declarations.TableScope' that was defined in more than one assembly: `[Nitra.Runtime, Version=1.0.9999.0, Culture=neutral, PublicKeyToken=e080a9c724e2bfcd]Nitra.Declarations.TableScope' (the first version was used)
C:\Program Files (x86)\Nemerle\Net-4.0\Nemerle.MSBuild.targets(289,5): warning : using type `[Nitra.Runtime.Stage2, Version=1.0.9999.0, Culture=neutral, PublicKeyToken=e080a9c724e2bfcd]Nitra.Declarations.BindableAst' that was defined in more than one assembly: `[Nitra.Runtime, Version=1.0.9999.0, Culture=neutral, PublicKeyToken=e080a9c724e2bfcd]Nitra.Declarations.BindableAst' (the first version was used)
C:\Program Files (x86)\Nemerle\Net-4.0\Nemerle.MSBuild.targets(289,5): warning : using type `[Nitra.Runtime.Stage2, Version=1.0.9999.0, Culture=neutral, PublicKeyToken=e080a9c724e2bfcd]Nitra.Declarations.Type' that was defined in more than one assembly: `[Nitra.Runtime, Version=1.0.9999.0, Culture=neutral, PublicKeyToken=e080a9c724e2bfcd]Nitra.Declarations.Type' (the first version was used)
C:\Program Files (x86)\Nemerle\Net-4.0\Nemerle.MSBuild.targets(289,5): warning : using type `[Nitra.Runtime.Stage2, Version=1.0.9999.0, Culture=neutral, PublicKeyToken=e080a9c724e2bfcd]Nitra.Declarations.Container' that was defined in more than one assembly: `[Nitra.Runtime, Version=1.0.9999.0, Culture=neutral, PublicKeyToken=e080a9c724e2bfcd]Nitra.Declarations.Container' (the first version was used)
C:\Program Files (x86)\Nemerle\Net-4.0\Nemerle.MSBuild.targets(289,5): warning : using type `[Nitra.Runtime.Stage2, Version=1.0.9999.0, Culture=neutral, PublicKeyToken=e080a9c724e2bfcd]Nitra.Declarations.AstBase' that was defined in more than one assembly: `[Nitra.Runtime, Version=1.0.9999.0, Culture=neutral, PublicKeyToken=e080a9c724e2bfcd]Nitra.Declarations.AstBase' (the first version was used)
C:\Program Files (x86)\Nemerle\Net-4.0\Nemerle.MSBuild.targets(289,5): warning : using type `[Nitra.Runtime.Stage2, Version=1.0.9999.0, Culture=neutral, PublicKeyToken=e080a9c724e2bfcd]Nitra.Declarations.DeclarationBase' that was defined in more than one assembly: `[Nitra.Runtime, Version=1.0.9999.0, Culture=neutral, PublicKeyToken=e080a9c724e2bfcd]Nitra.Declarations.DeclarationBase' (the first version was used)
C:\Program Files (x86)\Nemerle\Net-4.0\Nemerle.MSBuild.targets(289,5): warning : using type `[Nitra.Runtime.Stage2, Version=1.0.9999.0, Culture=neutral, PublicKeyToken=e080a9c724e2bfcd]Nitra.Declarations.IRef' that was defined in more than one assembly: `[Nitra.Runtime, Version=1.0.9999.0, Culture=neutral, PublicKeyToken=e080a9c724e2bfcd]Nitra.Declarations.IRef' (the first version was used)
C:\Program Files (x86)\Nemerle\Net-4.0\Nemerle.MSBuild.targets(289,5): warning : using type `[Nitra.Runtime.Stage2, Version=1.0.9999.0, Culture=neutral, PublicKeyToken=e080a9c724e2bfcd]Nitra.Declarations.ResolutionAlgorithm`2[TSymbol, TConcreteSymbol]' that was defined in more than one assembly: `[Nitra.Runtime, Version=1.0.9999.0, Culture=neutral, PublicKeyToken=e080a9c724e2bfcd]Nitra.Declarations.ResolutionAlgorithm`2[TSymbol, TConcreteSymbol]' (the first version was used)
C:\Program Files (x86)\Nemerle\Net-4.0\Nemerle.MSBuild.targets(289,5): warning : using type `[Nitra.Runtime.Stage2, Version=1.0.9999.0, Culture=neutral, PublicKeyToken=e080a9c724e2bfcd]Nitra.Declarations.Ref`1[TSymbol]' that was defined in more than one assembly: `[Nitra.Runtime, Version=1.0.9999.0, Culture=neutral, PublicKeyToken=e080a9c724e2bfcd]Nitra.Declarations.Ref`1[TSymbol]' (the first version was used)
C:\Program Files (x86)\Nemerle\Net-4.0\Nemerle.MSBuild.targets(289,5): warning : using type `[Nitra.Runtime.Stage2, Version=1.0.9999.0, Culture=neutral, PublicKeyToken=e080a9c724e2bfcd]Nitra.Declarations.Some[TSymbol]' that was defined in more than one assembly: `[Nitra.Runtime, Version=1.0.9999.0, Culture=neutral, PublicKeyToken=e080a9c724e2bfcd]Nitra.Declarations.Some[TSymbol]' (the first version was used)
C:\Program Files (x86)\Nemerle\Net-4.0\Nemerle.MSBuild.targets(289,5): warning : using type `[Nitra.Runtime.Stage2, Version=1.0.9999.0, Culture=neutral, PublicKeyToken=e080a9c724e2bfcd]Nitra.Declarations.Unresolved[TSymbol]' that was defined in more than one assembly: `[Nitra.Runtime, Version=1.0.9999.0, Culture=neutral, PublicKeyToken=e080a9c724e2bfcd]Nitra.Declarations.Unresolved[TSymbol]' (the first version was used)
C:\Program Files (x86)\Nemerle\Net-4.0\Nemerle.MSBuild.targets(289,5): warning : using type `[Nitra.Runtime.Stage2, Version=1.0.9999.0, Culture=neutral, PublicKeyToken=e080a9c724e2bfcd]Nitra.Declarations.Ambiguous[TSymbol]' that was defined in more than one assembly: `[Nitra.Runtime, Version=1.0.9999.0, Culture=neutral, PublicKeyToken=e080a9c724e2bfcd]Nitra.Declarations.Ambiguous[TSymbol]' (the first version was used)
C:\Program Files (x86)\Nemerle\Net-4.0\Nemerle.MSBuild.targets(289,5): warning : using type `[Nitra.Runtime.Stage2, Version=1.0.9999.0, Culture=neutral, PublicKeyToken=e080a9c724e2bfcd]Nitra.Declarations.Ref`1[TSymbol]' that was defined in more than one assembly: `[Nitra.Runtime, Version=1.0.9999.0, Culture=neutral, PublicKeyToken=e080a9c724e2bfcd]Nitra.Declarations.Ref`1[TSymbol]' (the first version was used)
C:\Program Files (x86)\Nemerle\Net-4.0\Nemerle.MSBuild.targets(289,5): warning : using type `[Nitra.Runtime.Stage2, Version=1.0.9999.0, Culture=neutral, PublicKeyToken=e080a9c724e2bfcd]Nitra.Declarations.ContainerSymbol' that was defined in more than one assembly: `[Nitra.Runtime, Version=1.0.9999.0, Culture=neutral, PublicKeyToken=e080a9c724e2bfcd]Nitra.Declarations.ContainerSymbol' (the first version was used)
C:\Program Files (x86)\Nemerle\Net-4.0\Nemerle.MSBuild.targets(289,5): warning : using type `[Nitra.Runtime.Stage2, Version=1.0.9999.0, Culture=neutral, PublicKeyToken=e080a9c724e2bfcd]Nitra.Declarations.IAstList`1[T]' that was defined in more than one assembly: `[Nitra.Runtime, Version=1.0.9999.0, Culture=neutral, PublicKeyToken=e080a9c724e2bfcd]Nitra.Declarations.IAstList`1[T]' (the first version was used)
C:\Program Files (x86)\Nemerle\Net-4.0\Nemerle.MSBuild.targets(289,5): error : internal compiler error: got ArgumentException (Не удается привязать целевой метод, поскольку его сигнатура или прозрачность безопасности несовместима с сигнатурой или прозрачностью безопасности типа делегата.)
в System.Delegate.CreateDelegate(Type type, MethodInfo method, Boolean throwOnBindFailure)
в System.Delegate.CreateDelegate(Type type, MethodInfo method)
в Nitra.Serialization2.MetadataReader.GetDeserializationHandler(Int32 id) в D:\dev\nitra\Nitra\Nitra.Runtime\Serialization2\MetadataReader.n:строка 145
в Nitra.Serialization2.MetadataReader.ReadObject[T](BinaryReader reader) в D:\dev\nitra\Nitra\Nitra.Runtime\Serialization2\MetadataReader.n:строка 44
в Nitra.Serialization2.MetadataReader.ReadRoot(DeclarationSymbol root, Stream stream) в D:\dev\nitra\Nitra\Nitra.Runtime\Serialization2\MetadataReader.n:строка 119
в DotNet.CompilationUnit._N_visitAssembly_170515(_N_closureOf_LoadNitraMetadata_170474 _N_LoadNitraMetadata_cp_170514, Byte assemblyId) в D:\dev\nitra\Nitra\Nitra.Grammar\AST\DotNet\CompilationUnit.n:строка 229
в DotNet.CompilationUnit.LoadNitraMetadata(CancellationToken cancellationToken, Project project, ManagerClass manager, NamespaceSymbol rootNamespace) в D:\dev\nitra\Nitra\Nitra.Grammar\AST\DotNet\CompilationUnit.n:строка 240
в DotNet.CompilationUnit.RefreshReferences(CancellationToken cancellationToken, Project project) в D:\dev\nitra\Nitra\Nitra.Grammar\AST\DotNet\CompilationUnit.n:строка 80
в Nitra.ProjectSystem.Project.UpdateProperties(CancellationToken cancellationToken) в D:\dev\nitra\Nitra\Nitra.Runtime\ProjectSystem\Project.n:строка 148
в Nitra.ProjectSystem.Project.UpdateProperties() в D:\dev\nitra\Nitra\Nitra.Runtime\ProjectSystem\Project.n:строка 133
в Nitra.Compiler.CompilingNitraProject.BeforeTypedMembers() в D:\dev\nitra\Nitra\Nitra.Compiler\CompilingNitraProject.Passes.n:строка 23
в Nitra.InvokeNitraCompiler_assembly_preaddMacro._N__N_method_lambda__42433.apply_void() в D:\dev\nitra\Nitra\Nitra.Compiler\Macros\Macros.n:строка 0
в Nemerle.Compiler.MacroColorizator.InGlobalColor(FunctionVoid fn)
в Nitra.InvokeNitraCompiler_assembly_preaddMacro.Run(Typer _N__1, list`1 parms) в D:\dev\nitra\Nitra\Nitra.Compiler\Macros\Macros.n:строка 28
в Nemerle.Compiler.TypesManager.AttributeMacroExpansion.Expand()
в Nemerle.Compiler.TypesManager.ExpandMacros()
в Nemerle.Compiler.TypesManager.Run()
в Nemerle.Compiler.ManagerClass.Run()
в Nemerle.CommandlineCompiler.MainClass.main_with_catching()
Сборка проекта "Test_Nitra_01.nproj" завершена с ошибкой.
Re[4]: Nitra IDE plug-ins
От: VladD2 Российская Империя www.nemerle.org
Дата: 17.03.17 16:07
Оценка:
Здравствуйте, MAMOHT, Вы писали:

VD>>Нужно создать любой немерловый проект (например, консольный). В нем подключить:

VD>>* в Macro References: Nitra\bin\Debug\Stage2\Nitra.Compiler.dll
VD>>* в References: Nitra\bin\Debug\Stage2\Nitra.Runtime.dll. Если хочется делать язык которому нужны символы дотнета, нужно еще подключить Nitra\DotNet.BackEnd.CCI\bin\Debug\DotNet.BackEnd.CCI.dll и Nitra\bin\Debug\Stage2\DotNetLang.Stage2.dll.

VD>>Далее добавляешь в проект файл и даешь ему расширение ".nitra".


Нда. Тогда возьми сборки с первой стадии. В принципе теперь вторая это просто само-тестирование.

Т.е. сделай тоже самое, только бери сборки из каталога Stage1, а не Stage2 и бери те, что не имеют суффикса ".Stage2".

Для начала подключи только Nitra\bin\Debug\Stage1\Nitra.Compiler.dll в макрореференс и Nitra\bin\Debug\Stage1\Nitra.Runtime.dll. После этого должен начать компилирвоаться минимальный файл, пустой или вроде:
using Nemerle;
using Nemerle.Collections;
using Nemerle.Text;
using Nemerle.Utility;

using System;
using System.Collections.Generic;
using System.Linq;

namespace NitraTest
{
}
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[4]: Nitra IDE plug-ins
От: VladD2 Российская Империя www.nemerle.org
Дата: 19.03.17 12:06
Оценка:
Здравствуйте, MAMOHT, Вы писали:

MAM>непруха


Ну, как? Все получилось?

Для более быстрого отклика можно дергать меня по скайпу: vc.rsdn.ru
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[5]: Nitra IDE plug-ins
От: MAMOHT  
Дата: 20.03.17 06:19
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Здравствуйте, MAMOHT, Вы писали:


MAM>>непруха


VD>Ну, как? Все получилось?


VD>Для более быстрого отклика можно дергать меня по скайпу: vc.rsdn.ru


У меня ноут домашний крякнул, чипсет выгорел. Так что только по будням на работе.

Да, все получилось, как бы собирается, компилируется.

Только непонятно.
Могу писать в файл *.nitra откровенный бред. Такое ощущение, что компилятор туда даже не заходит.

А если описать сексию language, то начинаются проблемы
  скрин


Я могу в скайп стучать с телефон, когда сюда что-то напишу. Уведомлялка, типа
Re[6]: Nitra IDE plug-ins
От: VladD2 Российская Империя www.nemerle.org
Дата: 20.03.17 13:59
Оценка:
Здравствуйте, MAMOHT, Вы писали:

MAM>Только непонятно.

MAM>Могу писать в файл *.nitra откровенный бред. Такое ощущение, что компилятор туда даже не заходит.

MAM>А если описать сексию language, то начинаются проблемы


Написал более подробную инструкцию и сделал ролик демонстрирующий этот процесс:
Создание нового проекта Nitra

Попробуй повторить в точности.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.