Первый коммит: модульный монолит ядра (.NET 10) и gRPC-сервисы ai/ml/telegram, фронтенд Vue 3/Vite/Tailwind, документация (ТЗ, инструкция пользователя, техдокументация, код-стайл), бэклог, скрипты развёртывания и архив прототипа LeadRadar.
4.4 KiB
Аудит кода на соответствие код-стайлу «Дейл» (2026-09-11)
Отчёт прохода по всему C#-коду (
src/**/*.cs, 928 файлов, безbin/obj). Правила —docs/spec/Код-стайл-Дейл.md. Проверка: сборка 4 решений + все тесты.
1. Исправлено (применено и проверено)
| Пункт | Правило | Было | Стало | Инструмент |
|---|---|---|---|---|
Блочный <summary> |
§5 | 5286 однострочных/инлайн (833 файла) | 0 | scripts/fix_summary_blocks.py --apply |
| XML-док на private/internal | §5 | 2028 блоков (359 файлов) | 0 (понижены до //) |
scripts/fix_private_docs.py --apply |
Квалификация this. |
§4 | 124 | 0 | разовый Roslyn-инструмент (семантический) |
| Приватные instance-поля | §1 | camelCase (logger) |
_camelCase (_logger) |
разовый Roslyn-инструмент |
Приватные static readonly/const |
§1 | — | Pascal (DefaultTimeout) |
разовый Roslyn-инструмент |
Дополнительно в .editorconfig включены машинные правила, теперь ломающие сборку при нарушении
(TreatWarningsAsErrors=true, EnforceCodeStyleInBuild=true):
dotnet_style_qualification_for_{field,property,method,event} = false:warning— запретthis.;- правила именования
IDE1006: приватные instance-поля_camelCase,const/static readonly— Pascal.
Также проверено и не требует правок: #region нет; trailing whitespace нет; все файлы заканчиваются
переводом строки; кодировка UTF-8; настоящих public-полей нет (публичные члены — свойства); явные
модификаторы доступа соблюдены.
Проверка после правок
dotnet build—Deal.sln,Deal.Telegram.sln,Deal.Ai.sln,Deal.Ml.sln: 0 ошибок / 0 предупреждений.- Тесты: core 1275/1275, telegram 125/125, ai 52/52, ml 38/38 — все пройдены.
- Повторный прогон renamer:
this.— 0, полей к переименованию — 0 (идемпотентно).
2. Осталось — требует решения владельца
-
var— 1529 употреблений. Правило §4: не использовать для встроенных типов и при неочевидном типе. В.editorconfigcsharp_style_var_* = false:silent. Замена требует семантики (вывод типа). Рекомендация: включить анализатор (:warning) +dotnet formatс проверкой. -
Явная реализация интерфейсов (§11). Субъективное «где возможно» — массовая правка может сломать DI/прямые вызовы и тесты. Рекомендация: точечный ревью по 61 интерфейсу, без автоматизации.
-
Дедупликация
<summary>в реализациях через/// <inheritdoc/>(§11). Надёжно детектируется только по семантической модели (сопоставление интерфейс↔класс). В коде уже 674<inheritdoc/>. Рекомендация: Roslyn-анализатор, если нужно добить остаток. -
Переводы строк.
.editorconfigтребуетend_of_line = crlf, фактически: 231 файл CRLF / 697 LF (смешанно). Правка объёмная. Рекомендация: решить — нормализовать под CRLF или зафиксировать LF.
3. Примечание
Пункты 2.1, 2.3 можно закрыть анализаторами Roslyn в Directory.Build.props — это даст автоматическую
проверку на новом коде. Пункт 2.4 — разовое решение по политике переводов строк.