refactor: enforce frontend view model boundaries
This commit is contained in:
@@ -17,6 +17,30 @@
|
||||
CSF сохраняет default meta и прямые story exports; configuration exceptions
|
||||
заданы в [ESLint](../../eslint.config.mjs). Не распространяй их на application code.
|
||||
|
||||
## Читаемость: ESLint и review
|
||||
|
||||
ESLint проверяет ограничение 80 символов (tab = 2), пустые строки между
|
||||
JSX siblings и вокруг многострочных declarations/control-flow/return, вынос
|
||||
функций и условных выражений из JSX props, отдельные Zod schema files,
|
||||
отсутствие SVG в приложении, optional trailing parameters и многострочные
|
||||
сложные union types. Generated artifacts не форматируй вручную.
|
||||
URL, строковые/template/regex literals и комментарии исключены из `max-len`;
|
||||
это исключение для содержимого, а не повод собирать длинные expressions.
|
||||
CSS и Markdown также держи в 80 колонках там, где это не ломает данные/ссылки.
|
||||
|
||||
Review проверяет то, чего синтаксис не доказывает:
|
||||
|
||||
- Пустая строка отделяет смысловые шаги: inputs, вычисления, действие, результат.
|
||||
- Имена derived values описывают значение, например `projectedAmount`.
|
||||
- Тернарник остаётся коротким выбором двух значений. Mapping, несколько веток
|
||||
и многострочное преобразование — отдельная функция с guard и `if/else`.
|
||||
- Union из object shapes оформляй несколькими строками; nullable scalar
|
||||
`null | string` остаётся компактным. Для повторяемого shape используй named type.
|
||||
- Последний необязательный аргумент — `accountId?: string`. Required аргумент
|
||||
перед следующим required параметром может сохранять `T | undefined`.
|
||||
- Helpers и действия размещай по [UI ownership](ui.md#container-vm-и-view);
|
||||
перенос не меняет null/zero, validation, recovery, closures и hook ordering.
|
||||
|
||||
## Hooks и derived state
|
||||
|
||||
Hooks вызываются без условий и ранних выходов перед ними; custom hook нужен
|
||||
|
||||
Reference in New Issue
Block a user