Forge
csharp4405de34
1namespace CascadeIDE.Services;
2
3/// <summary>
4/// Опциональная отладка inlay: каталог <see cref="InlayLogPaths" /> (по умолчанию <c>…/cascade-ide/.inlay-logs</c> рядом с <c>CascadeIDE.sln</c>, вне <c>bin</c>).
5/// <list type="bullet">
6/// <item><c>CASCADE_INLAY_TRACE=1</c> (или <c>true</c>) — семантика: <c>inlay-trace.log</c>.</item>
7/// <item><c>CASCADE_INLAY_DEBUG=1</c> — <c>inlay-debug.log</c>, <c>VarInlay</c> / <c>VisualLine</c> (тот же каталог).</item>
8/// <item>Явный путь: <c>CASCADE_INLAY_LOG_DIR</c> (абсолютный каталог) перекрывает разрешение по умолчанию.</item>
9/// </list>
10/// </summary>
11internal static class InlayHintTrace
12{
13 public static bool IsEnabled =>
14 string.Equals(Environment.GetEnvironmentVariable("CASCADE_INLAY_TRACE"), "1", StringComparison.OrdinalIgnoreCase)
15 || string.Equals(Environment.GetEnvironmentVariable("CASCADE_INLAY_TRACE"), "true", StringComparison.OrdinalIgnoreCase);
16
17 public static bool IsDebug =>
18 string.Equals(Environment.GetEnvironmentVariable("CASCADE_INLAY_DEBUG"), "1", StringComparison.OrdinalIgnoreCase)
19 || string.Equals(Environment.GetEnvironmentVariable("CASCADE_INLAY_DEBUG"), "true", StringComparison.OrdinalIgnoreCase);
20
21 public static void Log(string message)
22 {
23 if (!IsEnabled) return;
24 var line = $"{DateTimeOffset.Now:O} {message}";
25 // В stdio MCP stdout зарезервирован под JSON-RPC; диагностический текст туда не пишем.
26
27 try
28 {
29 var dir = InlayLogPaths.GetLogDirectory();
30 Directory.CreateDirectory(dir);
31 var path = Path.Combine(dir, "inlay-trace.log");
32 File.AppendAllText(path, line + Environment.NewLine);
33 }
34 catch
35 {
36 // ignore
37 }
38 }
39
40 /// <summary>Точка отрисовки inlay (<see cref="VarInlayHintElementGenerator" /> / <c>InlayRun.Draw</c>).</summary>
41 public static void LogInlayDraw(string message) => LogDebug("InlayDraw " + message);
42
43 public static void LogDebug(string message)
44 {
45 if (!IsDebug) return;
46 var line = $"{DateTimeOffset.Now:O} {message}";
47 // В stdio MCP stdout зарезервирован под JSON-RPC; диагностический текст туда не пишем.
48
49 try
50 {
51 var dir = InlayLogPaths.GetLogDirectory();
52 Directory.CreateDirectory(dir);
53 var path = Path.Combine(dir, "inlay-debug.log");
54 File.AppendAllText(path, line + Environment.NewLine);
55 }
56 catch
57 {
58 // ignore
59 }
60 }
61}
62
View only · write via MCP/CIDE