diff --git a/SQLLinter/Infrastructure/Diagram/FragmentDiagramBuilder.cs b/SQLLinter/Infrastructure/Diagram/FragmentDiagramBuilder.cs deleted file mode 100644 index 0337687..0000000 --- a/SQLLinter/Infrastructure/Diagram/FragmentDiagramBuilder.cs +++ /dev/null @@ -1,51 +0,0 @@ -using System.Text; -using Microsoft.SqlServer.TransactSql.ScriptDom; -using System; -using System.Linq; -using System.Collections.Generic; - -namespace SQLLinter.Infrastructure.Diagram; - -public static class FragmentDiagramBuilder -{ - public static string RenderMermaid(TSqlFragment fragment) - { - if (fragment == null) return string.Empty; - var diagram = BpmnBuilder.Build(fragment); - return MermaidRenderer.RenderMarkdown(diagram); - } - - public static string RenderHtmlSvg(TSqlFragment fragment) - { - if (fragment == null) return string.Empty; - var diagram = BpmnBuilder.Build(fragment); - // Use mermaid HTML instead of SVG fallback - return MermaidRenderer.RenderHtml(diagram); - } - - // keep helpers used by earlier code if needed - private static string Escape(string s) - { - if (s == null) return string.Empty; - return System.Net.WebUtility.HtmlEncode(s).Replace("\n", " ").Replace("\r", " "); - } - - private static string Truncate(string s, int len) - { - if (s == null) return string.Empty; - if (s.Length <= len) return s; - return s.Substring(0, len - 3) + "..."; - } - - private static string SanitizeId(string s) - { - if (string.IsNullOrEmpty(s)) return "id"; - var sb = new StringBuilder(); - foreach (var ch in s) - { - if (char.IsLetterOrDigit(ch)) sb.Append(ch); - else sb.Append('_'); - } - return sb.ToString(); - } -} diff --git a/SQLLinter/Infrastructure/Diagram/MermaidRenderer.cs b/SQLLinter/Infrastructure/Diagram/MermaidRenderer.cs index f243d7a..9c1f667 100644 --- a/SQLLinter/Infrastructure/Diagram/MermaidRenderer.cs +++ b/SQLLinter/Infrastructure/Diagram/MermaidRenderer.cs @@ -43,6 +43,7 @@ public static class MermaidRenderer { var procId = SanitizeId(proc.Id); sb.AppendLine($" subgraph {procId} [\"{Escape(proc.Name)}\"]"); + sb.AppendLine($" direction TB"); var startNodes = proc.Nodes.Where(n => n.Type == BpmnNodeType.Start).ToList(); var taskNodes = proc.Nodes.Where(n => n.Type == BpmnNodeType.Task || n.Type == BpmnNodeType.Gateway).ToList(); @@ -116,17 +117,6 @@ public static class MermaidRenderer return sb.ToString(); } - public static string RenderHtml(BpmnDiagram diagram) - { - var content = ToMermaidContent(diagram); - var sb = new StringBuilder(); - - // Put raw mermaid text inside .mermaid container so mermaid.js can render it - sb.AppendLine("
Нет нарушений
"; + sb.AppendLine("Нарушений правил SQL не обнаружено.
"); + sb.AppendLine("| # | Строка | Колонка | Правило | Описание |
|---|---|---|---|---|
| {rowIndex} | {v.Line} | {v.Column} | {v.RuleName} | {v.Text} |
Нет нарушений
"; - } - - var groupedByFile = violations - .GroupBy(v => v.FileName) - .OrderBy(g => g.Key); - - var sb = new StringBuilder(); - GenerateBeginningHtml(sb); - - int fileIndex = 0; - foreach (var fileGroup in groupedByFile) - { - string divId = $"file_{fileIndex}"; - sb.AppendLine($"| # | Строка | Колонка | Правило | Описание |
|---|
| # | +Строка | +Колонка | +Правило | +Описание | +
|---|---|---|---|---|
| {rowIndex} | {v.Line} | {v.Column} | {v.RuleName} | {v.Text} |
| {row} | +{v.Line} | +{v.Column} | +{v.RuleName} | +{EscapeHtml(v.Text)} | +