Всё никак не мог себя заставить изучить нитру, довольно специфическая тема.
А вот попалась ручная реализация Liquid парсера https://github.com/sebastienros/fluid
И захотелось сделать такой-же на нитре
Язык довольно простой https://shopify.github.io/liquid/
Будет интересно сравнить по скорости.
С чего начать? Что-то не нашёл как начинать свой проект на нитра.
Создал проэкт, модуль, синтакс, получаю ошибку на совсем безобидном примере. Что не так?
namespace Parser
{
syntax module NLiquidSyntax
{
using Nitra.Core;
using Nitra.CStyleComments;
[StartRule]
syntax Start = "hello";
}
}
1>------ Rebuild All started: Project: NLiquid, Configuration: Debug Any CPU ------
1>D:\Dev\GitHub\Nitra\Boot2\Net-4.0\Nitra.Runtime.dll(1,1): warning : Failed to read metadata from referenced assembly: Unknown member 'Fir'.
1>D:\Dev\GitHub\Nitra\Boot2\Net-4.0\Nitra.Runtime.dll(1,1): warning : Failed to read metadata from referenced assembly: assertion failed in file CompilingNitraProject.n, line 59: Cannot get Nemerle type for symbol ''
1>C:\Program Files (x86)\Nemerle\Net-4.0\Nemerle.MSBuild.targets(289,5): error : internal compiler error: got some unknown exception of type System.NullReferenceException: Object reference not set to an instance of an object.
1> at Nitra.Typing.SyntaxModuleBodyContext._N_appendSymbol__74998.apply(TokenLiteralSymbol symbol, Map`2 map) in D:\Dev\GitHub\Nitra\Boot2\Nitra.Grammar\Context\SyntaxModuleBodyContext.n:line 30
1> at Nemerle.Collections.NList.FoldLeft[T,TOut](list`1 l, TOut acc, Function`3 f)
1> at Nitra.Typing.SyntaxModuleBodyContext._N_walk_75025(_N_closureOf_get_TokenNamesMap_74988 _N_get_TokenNamesMap_cp_75024, Context baseContext) in D:\Dev\GitHub\Nitra\Boot2\Nitra.Grammar\Context\SyntaxModuleBodyContext.n:line 38
1> at Nitra.Typing.SyntaxModuleBodyContext._N_walk_75025(_N_closureOf_get_TokenNamesMap_74988 _N_get_TokenNamesMap_cp_75024, Context baseContext) in D:\Dev\GitHub\Nitra\Boot2\Nitra.Grammar\Context\SyntaxModuleBodyContext.n:line 38
1> at Nitra.Typing.SyntaxModuleBodyContext.get_TokenNamesMap() in D:\Dev\GitHub\Nitra\Boot2\Nitra.Grammar\Context\SyntaxModuleBodyContext.n:line 43
1> at Nitra.Utils.MakeLiteralName(option`1 fieldName, String value, Context context) in D:\Dev\GitHub\Nitra\Boot2\Nitra.Grammar\Utils.n:line 267
1> at Nitra.Utils.StringRuleTyping(Location loc, String value, option`1 fieldName, Context context) in D:\Dev\GitHub\Nitra\Boot2\Nitra.Grammar\Utils.n:line 527
1> at NitraSyntaxParseTree.RuleExpression.String.Typing(option`1 _baseRule, PrecedenceInfo _precedenceInfo, option`1 _fieldName, Context context, RuleDefinitionOptions _options) in D:\Dev\GitHub\Nitra\Boot2\Nitra.Grammar\NitraSyntax.nitra:line 2350
1> at NitraSyntaxParseTree.SimpleRule.MakeTypedRule() in D:\Dev\GitHub\Nitra\Boot2\Nitra.Grammar\NitraSyntax.nitra:line 1596
1> at NitraSyntaxParseTree.SimpleRule.Typing() in D:\Dev\GitHub\Nitra\Boot2\Nitra.Grammar\NitraSyntax.nitra:line 1600
1> at NitraSyntaxParseTree.SyntaxModuleMember.SimpleRule.Typing() in D:\Dev\GitHub\Nitra\Boot2\Nitra.Grammar\NitraSyntax.nitra:line 1049
1> at NitraSyntaxParseTree.NamespaceMember.SyntaxModule.Typing() in D:\Dev\GitHub\Nitra\Boot2\Nitra.Grammar\NitraSyntax.nitra:line 918
1> at NitraSyntaxParseTree.NamespaceBody.Typing() in D:\Dev\GitHub\Nitra\Boot2\Nitra.Grammar\NitraSyntax.nitra:line 99
1> at NitraSyntaxParseTree.NamespaceMember.Namespace.Typing() in D:\Dev\GitHub\Nitra\Boot2\Nitra.Grammar\NitraSyntax.nitra:line 882
1> at NitraSyntaxParseTree.Start.Typing() in D:\Dev\GitHub\Nitra\Boot2\Nitra.Grammar\NitraSyntax.nitra:line 84
1> at Nitra.Compiler.CompilingNitraProject.TypeSyntaxModules(List`1 parseTree) in D:\Dev\GitHub\Nitra\Boot2\Nitra.Compiler\CompilingNitraProject.Passes.n:line 160
1> at Nitra.Compiler.CompilingNitraProject.BeforeTypedMembers() in D:\Dev\GitHub\Nitra\Boot2\Nitra.Compiler\CompilingNitraProject.Passes.n:line 350
1> at Nitra.InvokeNitraCompiler_assembly_preaddMacro._N__N_method_lambda__42293.apply_void() in D:\Dev\GitHub\Nitra\Boot2\Nitra.Compiler\Macros\Macros.n:line 0
1> at Nemerle.Compiler.MacroColorizator.InGlobalColor(FunctionVoid fn)
1> at Nitra.InvokeNitraCompiler_assembly_preaddMacro.Run(Typer _N__1, list`1 parms) in D:\Dev\GitHub\Nitra\Boot2\Nitra.Compiler\Macros\Macros.n:line 27
1> at Nemerle.Compiler.TypesManager.AttributeMacroExpansion.Expand()
1> at Nemerle.Compiler.TypesManager.ExpandMacros()
1> at Nemerle.Compiler.TypesManager.Run()
1> at Nemerle.Compiler.ManagerClass.Run()
1> at Nemerle.CommandlineCompiler.MainClass.main_with_catching()
1>Done building project "NLiquid.nproj" -- FAILED.
1>
1>1 error, 2 warnings.
Здравствуйте, ifle, Вы писали:
I>Создал проэкт, модуль, синтакс, получаю ошибку на совсем безобидном примере. Что не так?
У меня собирается.
Запусти RebuildBoot.cmd после чего пересобери нитру.
... << RSDN@Home 1.0.0 alpha 5 rev. 0>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Извиняюсь, что сразу не заметил вопрос.
I>С чего начать? Что-то не нашёл как начинать свой проект на нитра.
1. Собрать Нитру. Инструкция здесь: https://github.com/rsdn/nitra/wiki/Nitra-Build-process
2. Создать проект с синтаксическим модулем и описанием языка. Это ты уже пытался сделать. Надо повторить еще раз. Вот инструкция.
3. Скомпилировать проект и получить длл со своим языком.
4. Создать солюшен с в Nitra.Vizsualizer.exe и добавить туда описание своего языка (которое будет в длл-и).
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Не собирается последняя версия нитры.
Получаю такие ошибки:
Error Type 'DotNet.BaseTypeReferenceSet' does not contain any method marked with 'Nitra.Staging.CollectAttribute' attribute. Nitra.Grammar D:\Dev\GitHub\nitra\Nitra\Nitra.Grammar\AST\Language.nitra 28
Error Type 'DotNet.BaseTypeReferenceSet' does not contain any method marked with 'Nitra.Staging.CollectAttribute' attribute. Nitra.Grammar D:\Dev\GitHub\nitra\Nitra\Nitra.Grammar\AST\Language.nitra 29
Error Type 'DotNet.BaseTypeReferenceSet' does not contain any method marked with 'Nitra.Staging.CollectAttribute' attribute. Nitra.Grammar D:\Dev\GitHub\nitra\Nitra\Nitra.Grammar\AST\Members\Ast.nitra 24
Error Type 'DotNet.BaseTypeReferenceSet' does not contain any method marked with 'Nitra.Staging.CollectAttribute' attribute. Nitra.Grammar D:\Dev\GitHub\nitra\Nitra\Nitra.Grammar\AST\Members\Ast.nitra 25
Error Type 'DotNet.BaseTypeReferenceSet' does not contain any method marked with 'Nitra.Staging.CollectAttribute' attribute. Nitra.Grammar D:\Dev\GitHub\nitra\Nitra\Nitra.Grammar\AST\Members\AstMembers\AstMember.nitra 80
Error The "CreateZipPackage" task failed unexpectedly.
System.TypeLoadException: Could not load type 'Microsoft.VisualStudio.Setup.PartialManifestType' from assembly 'Microsoft.VisualStudio.Setup.Common, Version=1.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'.
at Microsoft.VisualStudio.Sdk.BuildTasks.CreateZipPackageBase.Execute()
at Microsoft.Build.BackEnd.TaskExecutionHost.Microsoft.Build.BackEnd.ITaskExecutionHost.Execute()
at Microsoft.Build.BackEnd.TaskBuilder.<ExecuteInstantiatedTask>d__26.MoveNext() CSharp.VisualStudio.Plugin
Здравствуйте, VladD2, Вы писали:
VD>Здравствуйте, ifle, Вы писали:
I>>С чего начать? Что-то не нашёл как начинать свой проект на нитра.
VD>Если что можешь стучаться мне на Скайп: vc.rsdn.ru VD>Это будет оперативнее.
Спасибо.
Здравствуйте, ifle, Вы писали:
I>Не собирается последняя версия нитры.
Что-то ты сделал не так. Ты берешь мастер?
Надо проверить по шгам.
1. Что установлена последняя версия Немерла. Ее надо или собрать из исходников, или установить с сайта.
2. Очистить репозиторий. Лучше всего это сделать гитом. В ГитЭкстеншон для этого есть команда Command\Clean working directory...
3. Собрать бут запустив BuildBoot.cmd. При этом все копии VS нужно закрыть. И вообще закрыть все что может "держать" файлы.
4. После этого открыть NitraTools.sln и попробовать собрать.
Ну, и нужно проверить окружение. Какая версия студии стоит?
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
VD>Что-то ты сделал не так. Ты берешь мастер?
Да
VD>Надо проверить по шгам. VD>1. Что установлена последняя версия Немерла. Ее надо или собрать из исходников, или установить с сайта.
Стоит последняя версия. Установил с сайта
VD>2. Очистить репозиторий. Лучше всего это сделать гитом. В ГитЭкстеншон для этого есть команда Command\Clean working directory...
Я заного клонировал репозиторий
VD>3. Собрать бут запустив BuildBoot.cmd. При этом все копии VS нужно закрыть. И вообще закрыть все что может "держать" файлы.
Собирается нормально
VD>4. После этого открыть NitraTools.sln и попробовать собрать.
NitraTools.sln компилируется нормально, падает Nitra-Stagt1.sln
VD>Ну, и нужно проверить окружение. Какая версия студии стоит?
VS2017 v15.3
То что у тебя был в первый раз больше похоже на какой-то клинч сборок.
А еще лучше поставь себе TeamViewer и по скайпу явки и пароли пришли, чтобы я очно глянул.
I>NitraTools.sln компилируется нормально, падает Nitra-Stagt1.sln
В принципе для начала роботы над языком этого достаточно. В Nitra-Stagt1.sln компилируются плагины для Студии. Они тебе пока что не сильно нужны.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, VladD2, Вы писали:
VD>Здравствуйте, ifle, Вы писали:
VD>>>Ну, и нужно проверить окружение. Какая версия студии стоит? I>>VS2017 v15.3
VD>15.3? А он уже зарелизен? Или это превью?
Уже зарелизили 15.3, ASP.NET Core 2, .NET Core 2. .NET Standart 2
А как работать с Nitra.Visualizer.exe. Он завязан на клиент\сервер. Как их поднять?
Боюсь у тебя какой-нибудь пре-релиз в котором могут быть косяки.
15.2 пока апдэйт не предлагает.
I>А как работать с Nitra.Visualizer.exe. Он завязан на клиент\сервер? Как их поднять?
Просто запустить и все. Сервер он сам поднимет.
Если нужно будет отлаживать свой код, надо будет приатачиться отладчиком к серверу. Но это все в будущем. Пока что нужно минимально освоиться. Сделать первые шаги. Написать грамматику...
Сейчас тебе нужно сделать тестовый проект в Nitra.Visualizer.exe. Его настройка, это как раз самая косячная часть Nitra.Visualizer-а.
Твоя задача добиться запуска простейшего теста.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
VD>Боюсь у тебя какой-нибудь пре-релиз в котором могут быть косяки.
Я сегодня поставил.
VD>15.2 пока апдэйт не предлагает.
Они дозируют по регионам I>>А как работать с Nitra.Visualizer.exe. Он завязан на клиент\сервер? Как их поднять?
VD>Просто запустить и все. Сервер он сам поднимет
Получаю такой ассерт
Здравствуйте, ifle, Вы писали:
I>Получаю такой ассерт I>Image: nitra1.jpg
Это нормально. Ты текст то прочти. Просто жми Ignore (или Retry, если нужна отладка). Этот ассерт нужен, чтобы подключаться к серверу на ранних стадиях его загрузки.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, VladD2, Вы писали:
VD>Здравствуйте, ifle, Вы писали:
VD>Это нормально. Ты текст то прочти. Просто жми Ignore (или Retry, если нужна отладка). Этот ассерт нужен, чтобы подключаться к серверу на ранних стадиях его загрузки.
Ну мне то это сообщение ни очём не говорит.
Создал тест, а он падает. Что-то не так видимо сделал.
А есть где-то описание, как работать с Nitra.Visualizer?
System.NullReferenceException occurred
HResult=0x80004003
Message=Object reference not set to an instance of an object.
Source=<Cannot evaluate the exception source>
StackTrace:
at Nitra.ClientServer.Messages.Config.Serialize(BinaryWriter writer)
at Nitra.ClientServer.Messages.ClientMessage.ProjectStartLoading.Serialize(BinaryWriter writer)
at Nitra.ClientServer.Client.NitraClient.Send(ClientMessage msg) in D:\Dev\GitHub\Nitra\Nitra\ClientServer\Nitra.ClientServer.Client\NitraClient.n:line 118
at Nitra.ViewModels.SolutionVm.Activate(NitraClient client) in D:\Dev\GitHub\Nitra\Nitra.TestsLauncher\ViewModels\SolutionVm.n:line 70
at Nitra.Visualizer.MainWindow.ActivateVm(IClientHost oldVm, IClientHost newVm, NitraClient client) in D:\Dev\GitHub\nitra\Nitra.Visualizer\MainWindow.xaml.cs:line 1239
at Nitra.Visualizer.MainWindow.ChangeCurrentTest(SuiteVm newTestSuite, SolutionVm newSolution, ProjectVm newProject, FileVm newTest) in D:\Dev\GitHub\nitra\Nitra.Visualizer\MainWindow.xaml.cs:line 992
at Nitra.Visualizer.MainWindow.ProcessSelectTestTreeNode(RoutedPropertyChangedEventArgs`1 e) in D:\Dev\GitHub\nitra\Nitra.Visualizer\MainWindow.xaml.cs:line 927
at Nitra.Visualizer.MainWindow._testsTreeView_SelectedItemChanged(Object sender, RoutedPropertyChangedEventArgs`1 e) in D:\Dev\GitHub\nitra\Nitra.Visualizer\MainWindow.xaml.cs:line 908
at System.Windows.RoutedPropertyChangedEventArgs`1.InvokeEventHandler(Delegate genericHandler, Object genericTarget)
at System.Windows.RoutedEventArgs.InvokeHandler(Delegate handler, Object target)
at System.Windows.RoutedEventHandlerInfo.InvokeHandler(Object target, RoutedEventArgs routedEventArgs)
at System.Windows.EventRoute.InvokeHandlersImpl(Object source, RoutedEventArgs args, Boolean reRaised)
at System.Windows.UIElement.RaiseEventImpl(DependencyObject sender, RoutedEventArgs args)
at System.Windows.UIElement.RaiseEvent(RoutedEventArgs e)
at System.Windows.Controls.TreeView.OnSelectedItemChanged(RoutedPropertyChangedEventArgs`1 e)
at System.Windows.Controls.TreeView.ChangeSelection(Object data, TreeViewItem container, Boolean selected)
at System.Windows.Controls.TreeViewItem.Select(Boolean selected)
at System.Windows.Controls.TreeViewItem.OnGotFocus(RoutedEventArgs e)
at System.Windows.UIElement.IsFocused_Changed(DependencyObject d, DependencyPropertyChangedEventArgs e)
at System.Windows.DependencyObject.OnPropertyChanged(DependencyPropertyChangedEventArgs e)
at System.Windows.FrameworkElement.OnPropertyChanged(DependencyPropertyChangedEventArgs e)
at System.Windows.DependencyObject.NotifyPropertyChange(DependencyPropertyChangedEventArgs args)
at System.Windows.DependencyObject.UpdateEffectiveValue(EntryIndex entryIndex, DependencyProperty dp, PropertyMetadata metadata, EffectiveValueEntry oldEntry, EffectiveValueEntry& newEntry, Boolean coerceWithDeferredReference, Boolean coerceWithCurrentValue, OperationType operationType)
at System.Windows.DependencyObject.SetValueCommon(DependencyProperty dp, Object value, PropertyMetadata metadata, Boolean coerceWithDeferredReference, Boolean coerceWithCurrentValue, OperationType operationType, Boolean isInternal)
at System.Windows.DependencyObject.SetValue(DependencyPropertyKey key, Object value)
at System.Windows.Input.FocusManager.OnFocusedElementChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
at System.Windows.DependencyObject.OnPropertyChanged(DependencyPropertyChangedEventArgs e)
at System.Windows.FrameworkElement.OnPropertyChanged(DependencyPropertyChangedEventArgs e)
at System.Windows.DependencyObject.NotifyPropertyChange(DependencyPropertyChangedEventArgs args)
at System.Windows.DependencyObject.UpdateEffectiveValue(EntryIndex entryIndex, DependencyProperty dp, PropertyMetadata metadata, EffectiveValueEntry oldEntry, EffectiveValueEntry& newEntry, Boolean coerceWithDeferredReference, Boolean coerceWithCurrentValue, OperationType operationType)
at System.Windows.DependencyObject.SetValueCommon(DependencyProperty dp, Object value, PropertyMetadata metadata, Boolean coerceWithDeferredReference, Boolean coerceWithCurrentValue, OperationType operationType, Boolean isInternal)
at System.Windows.Input.FocusManager.SetFocusedElement(DependencyObject element, IInputElement value)
at System.Windows.Input.KeyboardNavigation.UpdateFocusedElement(DependencyObject focusTarget)
at System.Windows.FrameworkElement.OnGotKeyboardFocus(Object sender, KeyboardFocusChangedEventArgs e)
at System.Windows.Input.KeyboardFocusChangedEventArgs.InvokeEventHandler(Delegate genericHandler, Object genericTarget)
at System.Windows.RoutedEventArgs.InvokeHandler(Delegate handler, Object target)
at System.Windows.RoutedEventHandlerInfo.InvokeHandler(Object target, RoutedEventArgs routedEventArgs)
at System.Windows.EventRoute.InvokeHandlersImpl(Object source, RoutedEventArgs args, Boolean reRaised)
at System.Windows.UIElement.RaiseEventImpl(DependencyObject sender, RoutedEventArgs args)
at System.Windows.UIElement.RaiseTrustedEvent(RoutedEventArgs args)
at System.Windows.UIElement.RaiseEvent(RoutedEventArgs args, Boolean trusted)
at System.Windows.Input.InputManager.ProcessStagingArea()
at System.Windows.Input.InputManager.ProcessInput(InputEventArgs input)
at System.Windows.Input.KeyboardDevice.ChangeFocus(DependencyObject focus, Int32 timestamp)
at System.Windows.Input.KeyboardDevice.TryChangeFocus(DependencyObject newFocus, IKeyboardInputProvider keyboardInputProvider, Boolean askOld, Boolean askNew, Boolean forceToNullIfFailed)
at System.Windows.Input.KeyboardDevice.Focus(DependencyObject focus, Boolean askOld, Boolean askNew, Boolean forceToNullIfFailed)
at System.Windows.Input.KeyboardDevice.Focus(IInputElement element)
at System.Windows.UIElement.Focus()
at System.Windows.Controls.TreeViewItem.OnMouseLeftButtonDown(MouseButtonEventArgs e)
at System.Windows.UIElement.OnMouseLeftButtonDownThunk(Object sender, MouseButtonEventArgs e)
at System.Windows.Input.MouseButtonEventArgs.InvokeEventHandler(Delegate genericHandler, Object genericTarget)
at System.Windows.RoutedEventArgs.InvokeHandler(Delegate handler, Object target)
at System.Windows.RoutedEventHandlerInfo.InvokeHandler(Object target, RoutedEventArgs routedEventArgs)
at System.Windows.EventRoute.InvokeHandlersImpl(Object source, RoutedEventArgs args, Boolean reRaised)
at System.Windows.UIElement.ReRaiseEventAs(DependencyObject sender, RoutedEventArgs args, RoutedEvent newEvent)
at System.Windows.UIElement.OnMouseDownThunk(Object sender, MouseButtonEventArgs e)
at System.Windows.Input.MouseButtonEventArgs.InvokeEventHandler(Delegate genericHandler, Object genericTarget)
at System.Windows.RoutedEventArgs.InvokeHandler(Delegate handler, Object target)
at System.Windows.RoutedEventHandlerInfo.InvokeHandler(Object target, RoutedEventArgs routedEventArgs)
at System.Windows.EventRoute.InvokeHandlersImpl(Object source, RoutedEventArgs args, Boolean reRaised)
at System.Windows.UIElement.RaiseEventImpl(DependencyObject sender, RoutedEventArgs args)
at System.Windows.UIElement.RaiseTrustedEvent(RoutedEventArgs args)
at System.Windows.UIElement.RaiseEvent(RoutedEventArgs args, Boolean trusted)
at System.Windows.Input.InputManager.ProcessStagingArea()
at System.Windows.Input.InputManager.ProcessInput(InputEventArgs input)
at System.Windows.Input.InputProviderSite.ReportInput(InputReport inputReport)
at System.Windows.Interop.HwndMouseInputProvider.ReportInput(IntPtr hwnd, InputMode mode, Int32 timestamp, RawMouseActions actions, Int32 x, Int32 y, Int32 wheel)
at System.Windows.Interop.HwndMouseInputProvider.FilterMessage(IntPtr hwnd, WindowMessage msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
at System.Windows.Interop.HwndSource.InputFilterMessage(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
at MS.Win32.HwndWrapper.WndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
at MS.Win32.HwndSubclass.DispatcherCallbackOperation(Object o)
at System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs)
at System.Windows.Threading.ExceptionWrapper.TryCatchWhen(Object source, Delegate callback, Object args, Int32 numArgs, Delegate catchHandler)
at System.Windows.Threading.Dispatcher.LegacyInvokeImpl(DispatcherPriority priority, TimeSpan timeout, Delegate method, Object args, Int32 numArgs)
at MS.Win32.HwndSubclass.SubclassWndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam)
at MS.Win32.UnsafeNativeMethods.DispatchMessage(MSG& msg)
at System.Windows.Threading.Dispatcher.PushFrameImpl(DispatcherFrame frame)
at System.Windows.Threading.Dispatcher.PushFrame(DispatcherFrame frame)
at System.Windows.Application.RunDispatcher(Object ignore)
at System.Windows.Application.RunInternal(Window window)
at System.Windows.Application.Run(Window window)
at System.Windows.Application.Run()
at Nitra.Visualizer.App.Main()
Здравствуйте, ifle, Вы писали:
I>Создал тест, а он падает. Что-то не так видимо сделал.
Посмотрел код. Там баг связанный с тем, что не изменяется имя сюита (поле вверху диалога) и из-за этого при изменении "New suite" на что-т другое начинают лететь ислючения.
Можно создать сюит не меняя имени (т.е. оставить "New suite"), потом закрыть Визуалайзер и изменить имя получившейся директории.
Баг пока не пофиксил. Код писал не я, так что нужно время на изучение нюансов.
PS
Если хочешь, могу тебе через TeamViewer все настроить.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.