Forge
csharpdeeb25a2
1using CascadeIDE.Models;
2
3namespace CascadeIDE.Features.Documents;
4
5/// <summary>
6/// Нормализация путей и поиск узла в дереве решения без исключений на кривых <see cref="SolutionItem.FullPath"/>.
7/// </summary>
8internal static class SolutionTreePath
9{
10 /// <summary><see cref="CanonicalFilePath.TryNormalize"/> — без исключений на невалидных строках (дерево, MCP, карта намерений).</summary>
11 public static bool TryGetFullPath(string path, out string fullPath) =>
12 CanonicalFilePath.TryNormalize(path, out fullPath);
13
14 /// <summary>Обход дерева: узлы с путями, которые нельзя нормализовать, пропускаются (не бросают).</summary>
15 public static SolutionItem? FindItemByFullPath(IEnumerable<SolutionItem> items, string normalizedFullPath)
16 {
17 foreach (var node in items)
18 {
19 if (node.FullPath is not null
20 && TryGetFullPath(node.FullPath, out var nodeFull)
21 && string.Equals(nodeFull, normalizedFullPath, StringComparison.OrdinalIgnoreCase))
22 return node;
23 var found = FindItemByFullPath(node.Children, normalizedFullPath);
24 if (found is not null)
25 return found;
26 }
27
28 return null;
29 }
30}
31
View only · write via MCP/CIDE