Конфиги
SYNX сам по себе — формат свободный. В нём лежат игровые данные, каталоги, наборы подсказок, справочные примеры; дисциплина имён им не нужна, потому что их словарь принадлежит домену: moveCost, atk, danceability — это язык предметной области, а не небрежность автора. Стандарт в такие файлы не лезет вовсе.
Дисциплина спрашивается только с конфигов, и ровно по одной причине: конфиг у всех сервисов один и тот же по смыслу. Адрес кэша, секрет внутреннего API, TTL сессии, ключ бакета — одни и те же вещи в десятке продуктов. Если в одном сервисе значение зовётся internal_api_secret, в другом internal_secret, а в третьем auth.secret, то следующий человек ищет в новом сервисе то, что у него уже было, не находит и заводит четвёртое имя. Через год конфиги нельзя ни сравнить, ни перенести.
Поэтому правил здесь мало, и они про одно: одно и то же называется одинаково везде.
Одно значение платформы — одно имя
Проверяется сравнением конфигов между собой: если одна и та же переменная окружения читается в разных сервисах под разными путями — это ошибка.
# в одном сервисе
redis
url[required]:env REDIS_URL # путь: redis.url
# в другом то же самое, но иначе
redis_url[required]:env REDIS_URL # путь: redis_url — расхождениеПобеждает написание, уже принятое в большинстве сервисов: переименовать одного дешевле, чем девятерых.
Имя ключа
!active
port[type:int]:env:default:7001 PORT
refresh_ttl_sec[type:int] 900 # не refresh_ttl, не refresh_ttl_seconds
otp_length_count[type:int] 6 # число всегда с единицей
is_signup_open[type:bool] true # булево — с префиксом
db_pool_max_count[type:int] 20 # «max» само по себе не единица- ключ —
snake_case; - число несёт единицу:
_ms _sec _min _hours _days _bytes _kb _mb _cents _pct _count _index; - булево начинается с
is_ has_ can_ should_ was_ will_ must_; - слова-пустышки (
data,info,value,result) запрещены и здесь.
Единица пишется так же, как в коде: _sec, а не _seconds. Разнобой стоит ровно столько же, сколько отсутствие единицы: приходится помнить два варианта.
Где проходит граница
По имени файла: проверяются те, что действительно конфигурируют сервис (app.synx, values.synx, platform.synx), и они перечислены явным списком. Прогон правил по всем файлам формата в нашем репозитории давал 1091 находку, из которых 1036 были придиркой к языку домена, — поэтому граница проведена по списку, а не по расширению.
Комментарии
В конфиге комментарий подписывает раздел, а не пересказывает строку, — правило пяти тегов к нему не применяется. Это единственное послабление, и оно намеренное: # Сервер, # Redis, # Лимиты помогают читать файл и ничего не обещают о «почему».