И ещё, то что ?. в глобальных выражениях падает есть на гитхабе, а то что оно не форматируется даже в блоке имеет смысл туда добавлять?
begin
var a:=new byte[0];
var b := a?.Max;
end.
Компилируется нормально, но форматирование выдаёт:
System.NotImplementedException: Метод или операция не реализована.
в CodeFormatters.CodeFormatter.DefaultVisit(syntax_tree_node sn)
в CodeFormatters.CodeFormatter.visit_node(syntax_tree_node sn)
в CodeFormatters.CodeFormatter.visit(var_def_statement _var_def_statement)
в CodeFormatters.CodeFormatter.visit_node(syntax_tree_node sn)
в CodeFormatters.CodeFormatter.visit_node(syntax_tree_node sn)
в CodeFormatters.CodeFormatter.visit(statement_list _statement_list)
в CodeFormatters.CodeFormatter.visit_node(syntax_tree_node sn)
в CodeFormatters.CodeFormatter.visit_node(syntax_tree_node sn)
в CodeFormatters.CodeFormatter.visit(program_module _program_module)
в CodeFormatters.CodeFormatter.visit_node(syntax_tree_node sn)
в CodeFormatters.CodeFormatter.FormatTree(String Text, compilation_unit cu, Int32 cursor_line, Int32 cursor_col)
в VisualPascalABC.CodeFormattingAction.Execute(TextArea textArea)
в System.Windows.Forms.ToolStripItem.RaiseEvent(Object key, EventArgs e)
в System.Windows.Forms.ToolStripButton.OnClick(EventArgs e)
в System.Windows.Forms.ToolStripItem.HandleClick(EventArgs e)
в System.Windows.Forms.ToolStripItem.HandleMouseUp(MouseEventArgs e)
в System.Windows.Forms.ToolStrip.OnMouseUp(MouseEventArgs mea)
в System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
в System.Windows.Forms.Control.WndProc(Message& m)
в System.Windows.Forms.ToolStrip.WndProc(Message& m)
в System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
На сколько я понял что TMy<T> воспринимает как TMy< T > (то_из_чего_преобразуется), то есть его раскладывает сначала на сравнение оператором < имени шаблона и имени класса T, а затем получившееся <errortype> (то что возвращает оператор сравнения) сравнивает с тем из чего вы преобразуете (то есть Value в вашем случае). Если поставить & перед < - его воспринимает как начало уточнения шаблона а не как оператор, так работает:
type
TMy<T> = class(System.ICloneable)
public
Value: T;
constructor(value_: T);
begin
Value := value_;
end;
function Clone(): object := new TMy<T>(Value);
function CloneAs() := TMy&<T>(Clone());
end;
begin
end.
Ну да, должен, но именно в этом случае кажись только компиляция не проходит, а анализатор кода в порядке (хотя не понятно как то вышло). Ну и пусть удобно ведь. Это не единственный случай когда анализатор кода продолжает подсказывать в ошибочном коде, к примеру это признано фичей:
Анализатор кода написан не по полной грамматике PascalABC.NET, а по упрощённой. В частности, отдельно разбирается выражение до точки. И у нас он не может предусмотреть все фичи языка. Если бы мог, то нуждался бы в существенно более долгом алгоритме - после нажатия точки мы бы ждали секунды три.
Для чего писать сообщение об ошибках в версии ГОДИЧНОЙ давности? С тех пор столько уже ошибок выявлено (и, как водится, новые добавлены)… Проверять надо всегда на самой свежей версии.
Сейчас актуальна версия 3.3.5, сборка 1650 от 01.04.2018.
Почему когда сам набираешь текст при переименовании все нормально, но когда пытаешься вставить какое то слово в название то получаешь что-то на подобии этого?
Потому что фича (namespace) сырая, пусть сначала анализатор кода сделают, глядишь - и это починится.
Приведите пример как было, что куда вставляли и что вышло, при чём не скриншотом а кодом. Архивом если это только в проектах Windows.Forms наблюдается.
Вот архив: Пример.rar (40,2 КБ). Это изначально что было. Попробуйте переименовать какой нибудь из модулей, например, но не набирая название новое, а вставляя какое-нибудь слово в название.