| 1 | using CascadeIDE.Contracts; |
| 2 | |
| 3 | namespace CascadeIDE.Features.Editor.Application.Presentation; |
| 4 | |
| 5 | /// <summary> |
| 6 | /// Текст полосы **HUD banner** над редактором (ADR 0021 §9, 0085 — не путать с inline Editor HUD). |
| 7 | /// Слой презентации: без DAL, без C#-сервисов; только форматирование сегментов. |
| 8 | /// </summary> |
| 9 | [ComputingUnit] |
| 10 | public static class EditorHudBannerTextComposer |
| 11 | { |
| 12 | public static string? FormatDiagnosticSummary(int errorCount, int warningCount) |
| 13 | { |
| 14 | if (errorCount > 0 && warningCount > 0) |
| 15 | return $"{errorCount} ошибок, {warningCount} предупреждений"; |
| 16 | if (errorCount > 0) |
| 17 | return errorCount == 1 ? "1 ошибка" : $"{errorCount} ошибок"; |
| 18 | if (warningCount > 0) |
| 19 | return warningCount == 1 ? "1 предупреждение" : $"{warningCount} предупреждений"; |
| 20 | return null; |
| 21 | } |
| 22 | |
| 23 | public static string? FormatReferenceOccurrenceSummary(int count) |
| 24 | { |
| 25 | if (count <= 0) |
| 26 | return null; |
| 27 | return count == 1 |
| 28 | ? "1 вхождение в файле" |
| 29 | : $"{count} вхождений в файле"; |
| 30 | } |
| 31 | |
| 32 | public static string? Combine(string? diagnosticPart, string? referencePart) |
| 33 | { |
| 34 | if (diagnosticPart is null && referencePart is null) |
| 35 | return null; |
| 36 | if (diagnosticPart is not null && referencePart is not null) |
| 37 | return $"{diagnosticPart} · {referencePart}"; |
| 38 | return diagnosticPart ?? referencePart; |
| 39 | } |
| 40 | } |
| 41 | |
View only · write via MCP/CIDE