Page:
Код стайл аудит 2026 09 11
Pages
API карта
Home
Архитектура 05 deal architecture design
Архитектура 09 unified card
Архитектура 10 operator analytics contract
Архитектура 10 unified api contract
Бэклог
Инструкция пользователя
Код стайл аудит 2026 09 11
Код стайл
План 2026 09 04 channel discovery
План 2026 09 11 codestyle остатки
План roadmap
План scaffold
План stage1 tenancy
План stage10 operator analytics
План stage11 i18n
План stage12 observability hardening
План stage2 settings
План stage3 kanban
План stage4 pipeline
План stage5 projects
План stage6 services
План stage7 saas
План stage9 unified card
Ревью 2026 09 08 code quality review
Ревью 2026 09 10 docs audit
Ревью 2026 09 10 tz compliance audit
Ревью 2026 09 11 docs final sweep
Спека 2026 09 04 channel discovery design
Спека 2026 09 11 source attachments вопросы
Спека 2026 09 11 source contract design
Спека 2026 09 11 структура проектов design
Статус разработки
ТЗ
Техническая документация
Clone
This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
Перенесено из репозитория (
docs/spec/Код-стайл-аудит-2026-09-11.md). Актуальная версия — здесь, в вики.
Аудит кода на соответствие код-стайлу «Дейл» (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. Остатки — решения (закрыто 2026-09-11, вечер)
var— закрыто. В.editorconfigвключён ломающий сборку гейтcsharp_style_var_for_built_in_types = false:warning(запрет только для встроенных типов — как в §4); режимы «очевидный тип» и «прочие» оставленыsilentосознанно: правка субъективна и потребовала бы ~1600 механических замен. Остаток встроенных типов выправленdotnet format style --diagnostics IDE0008по всем 5 решениям (51 файл); сборка 5 sln — 0/0.- Явная реализация интерфейсов (§11) — выполнено (вечер, решение владельца, вариант A). 161 член
в 30 прод-файлах конвертирован codemod'ом
scripts/make_explicit.py(частичные классы и многострочные сигнатуры учтены); потребители конкретных типов перетипизированы на интерфейсы (8 мест в проде, 17 тест-файлов);Card/семействоI*Cardоставлены implicit — это DTO, их члены и есть публичный API. Правило закреплено в §11 код-стайла: классы напрямую не вызываем (DTO/хелперы/экстеншены — исключения). - Дедупликация
<summary>через<inheritdoc/>— закрыто: дублей нет. Проверено двумя независимыми сканами (сопоставление по тексту и по имени члена интерфейса: 39 интерфейсов, 229 задокументированных членов) — реализаций, дублирующих summary интерфейсного члена, в продакшн-коде нет; случаев «<param>+ дублирующий summary» не существует. - Переводы строк — решено: LF. Обоснование: инструменты проекта (Python/Node-скрипты, codemod'ы) пишут LF;
shell-скрипты с CRLF не работают на Linux CI (
sh scripts/ci.shв GitHub Actions); фактическое большинство файлов уже было LF. Применено:.gitattributes(* text=auto eol=lf+ бинарные исключения),.editorconfig→end_of_line = lf, конвертировано 1029 трекаемых файлов,git add --renormalize. Побочный эффект: починены 42 CRLF-.sh (9 вscripts/— до этого первый удалённый прогон CI падал бы).
Попутно исправлено (2026-09-11, вечер)
- Повторный прогон
scripts/fix_private_docs.py --apply: понижено 12 XML-доков на private/internal (extension-файлы). - Добавлены недостающие
<summary>:IContainerRules.Keywords/Stack,ITenantContext.TenantId/HasTenant. - Переведены на русский англоязычные
//-комментарии (3 шт. из 18 найденных; остальные — имена сущностей/заголовки секций тестов, не англоязычный текст). - Из индекса убраны случайно закоммиченные
archive/**/__pycache__/*.pyc(2 шт., уже в.gitignore). - STATUS.md: удалён устаревший блок «Осталось (в backlog)» в шапке (пункты закрыты generic-контрактом источника).
- Дочистка по контрольному скану краткости: удалены 73 очевидных
<param name="ct|cancellationToken">(«Токен отмены.» — пересказ сигнатуры, §5) в 17 файлах; ужаты 3 summary (2 многосентенционных, 1 длинное). Контроль:<remarks>— 0, inline-<summary>— 0, многосентенционных summary — 0, TODO — 0.