Forge
csharpdeeb25a2
1using Microsoft.CodeAnalysis.Text;
2
3using CascadeIDE.Models.Editor;
4
5namespace CascadeIDE.Services;
6
7/// <summary>
8/// Преобразование позиции диагностик Roslyn в 1-based координаты редактора/MCP.<br/>
9/// Roslyn <see cref="LinePosition"/> — <b>0-based</b> по строке и символу (UTF-16); JSON команд IDE — <b>1-based</b>.
10/// </summary>
11public static class RoslynLinePositionMapper
12{
13 public static LineNumber ToEditorLineNumber(LinePosition roslynZeroBased) =>
14 LineNumber.TryCreate(roslynZeroBased.Line + 1, out var ln) ? ln : default;
15
16 public static ColumnNumber ToEditorColumnNumber(LinePosition roslynZeroBased) =>
17 ColumnNumber.TryCreate(roslynZeroBased.Character + 1, out var cn) ? cn : default;
18
19 /// <summary>Оба компонента 1-based.</summary>
20 public static (LineNumber Line, ColumnNumber Column) ToEditorLineColumn(LinePosition roslynZeroBased) =>
21 (ToEditorLineNumber(roslynZeroBased), ToEditorColumnNumber(roslynZeroBased));
22}
23
View only · write via MCP/CIDE