Linux/mono ide fixes (#3330)

* Update CodeCompletionActions.cs 

Показ Code Completion Window по Ctrl-Space, если курсор находится сразу после точки (как сделано в Win версии). Текущее поведение - после точки ccw не показывать, только если курсор переместить на несколько символов вправо от точки.

* [LIN][IDE] Update TextView.cs - fix GetVisualColumn with empty content

На некоторых дистрибутивах Линукс (Убунту в частности) возникает ошибка времени выполнения IDE,
Описываю действия - открываю сохраненную на диске программу, запускаю, закрываю, копирую текст программы  и вставляю в новую вкладку, не сохраняя, запускаю и закрываю -- в логах пошли ошибки.. но такое не всегда происходит, иногда ошибок нет.. но похоже всё таки, что проявляется, когда есть вкладка с не сохраненным кодом. Причем интересно дефолтный каталог не сохраненной программы зависит от того, из какого каталога загружалась "сохраненная" программа, но не некий "по умолчанию".

В результате иследований дошли до функции GetVisualColumn() которая подсчитывает количество столбцов текста в редактируемом документе на основе анализа графического отображения, но в случае если текст отсутствует (Document.Content  == ""), на Linux/Mono происходит краш. Предлагаю избегать подсчёта столбцов при отсутствии текста, а сразу возвращать 9 (ноль)

* [LIN][IDE] AssemblyResolveScope.cs -- fix OnAssemblyResolve event 

На некоторых дистрибутивах Linux (Ubuntu 22.04 в частности). При загрузке больших исходников, например GraphABC.pas или GraphABCHelper.pas в IDE на Linux/Mono могут перестать открываться новые вкладки редактора IDE и другие элементы интерфейса IDE. Было обнаружено, что в обработчик OnAssemblyResolve в этом случае приходит значиние поля входной переменной args.RequestingAssembly равное null. Это происходит по какой то причине и не всегда. Но если обрабатывать эту ситуацию, то IDE работает стабильно в этом случае.
This commit is contained in:
Nikolay Kuznetsov 2025-09-29 18:59:10 +03:00 committed by GitHub
parent 9e4b2bcca9
commit 5996f4bbc2
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 7 additions and 4 deletions

View file

@ -778,9 +778,10 @@ namespace ICSharpCode.TextEditor
public int GetVisualColumn(int logicalLine, int logicalColumn) public int GetVisualColumn(int logicalLine, int logicalColumn)
{ {
int column = 0; int column = 0;
using (Graphics g = textArea.CreateGraphics()) { if (TextArea.Document.TextContent.Length > 0) //fix crush under linux after clear document content - no content = zero columns
CountColumns(ref column, 0, logicalColumn, logicalLine, g); using (Graphics g = textArea.CreateGraphics()) {
} CountColumns(ref column, 0, logicalColumn, logicalLine, g);
}
return column; return column;
} }

View file

@ -146,6 +146,8 @@ namespace PascalABCCompiler.NetHelper
private Assembly OnAssemblyResolve(object obj, ResolveEventArgs args) private Assembly OnAssemblyResolve(object obj, ResolveEventArgs args)
{ {
if (args.RequestingAssembly == null) //fix Linux/Mono IDE missworking after loading a huge pas source such as GraphABC.pas or GraphABCHelper.pas
return null;
var requestedName = new AssemblyName(args.Name); var requestedName = new AssemblyName(args.Name);
if (_assembliesByName.TryGetValue(requestedName.Name, out var assembly)) if (_assembliesByName.TryGetValue(requestedName.Name, out var assembly))
return assembly; return assembly;