Forge
csharpdeeb25a2
1using CascadeIDE.Models;
2
3namespace CascadeIDE.Features.UiChrome;
4
5/// <summary>
6/// Пороги <c>[loc_limits]</c> из merged <c>workspace.toml</c> (бандл + <c>.cascade/workspace.toml</c>).
7/// Low: loc &lt; <see cref="MediumMin"/>; Medium: <see cref="MediumMin"/> &lt;= loc &lt; <see cref="HighMin"/>; High: loc &gt;= <see cref="HighMin"/>.
8/// </summary>
9public static class LocLimitsRuntime
10{
11 public const int DefaultMediumMin = 300;
12 public const int DefaultHighMin = 800;
13
14 /// <summary>Нижняя граница Medium (непустые строки).</summary>
15 public static int MediumMin { get; private set; } = DefaultMediumMin;
16
17 /// <summary>Нижняя граница High (непустые строки).</summary>
18 public static int HighMin { get; private set; } = DefaultHighMin;
19
20 internal static void ResetToCodeDefaults()
21 {
22 MediumMin = DefaultMediumMin;
23 HighMin = DefaultHighMin;
24 }
25
26 internal static void ApplyWorkspaceToml(Features.Workspace.RepositoryWorkspaceToml? w)
27 {
28 ResetToCodeDefaults();
29 var limits = w?.LocLimits;
30 if (limits is null)
31 return;
32
33 var m = limits.MediumMin ?? DefaultMediumMin;
34 var h = limits.HighMin ?? DefaultHighMin;
35 if (m < 1 || h < 1 || m >= h)
36 {
37 global::System.Diagnostics.Debug.WriteLine(
38 $"LocLimitsRuntime: invalid loc_limits (medium_min={m}, high_min={h}) — using defaults {DefaultMediumMin}/{DefaultHighMin}.");
39 return;
40 }
41
42 MediumMin = m;
43 HighMin = h;
44 }
45
46 public static LocSizeTier TierFor(int nonEmptyLineCount)
47 {
48 if (nonEmptyLineCount < MediumMin)
49 return LocSizeTier.Low;
50 if (nonEmptyLineCount < HighMin)
51 return LocSizeTier.Medium;
52 return LocSizeTier.High;
53 }
54}
55
View only · write via MCP/CIDE