Стиль кода

Соглашения о коде ядра и как применять их с clang-format и clang-tidy.

В корне репозитория ядра лежат файлы .clang-format и .clang-tidy. Форматируйте ими код перед отправкой изменений; на этой странице кратко описано, чего они и существующий код ожидают.

Форматирование

  • Отступы табуляцией, шириной 4 колонки.
  • Строки до 100 колонок.
  • Открывающая фигурная скобка на той же строке, что и оператор.
  • Остальное по стилю Mozilla, на котором основан .clang-format.
namespace plugify {
    class Example {
    public:
        Result<void> Run(std::string_view name) {
            if (name.empty()) {
                return MakeError("Name is empty");
            }
            return {};
        }
    };
}

Именование

ЧтоСтильПример
Классы, структуры, перечисления, функции, методыPascalCaseExtensionLoader, GetManager()
ИнтерфейсыI + PascalCaseILanguageModule, ILogger
Локальные переменные, параметры, публичные поляcamelCasebaseDir, printReport
Приватные члены_camelCase_impl, _data
Константыk + PascalCasekMaxFuncArgs
Значения перечисленийPascalCaseExtensionState::Running

Заголовки и комментарии

  • #pragma once в каждом заголовке.
  • Публичные заголовки в include/plugify/ прячут реализацию за указателем (struct Impl; std::unique_ptr<Impl> _impl;), чтобы устройство экспортируемых классов не менялось при изменении реализации.
  • Публичный API документируйте комментариями Doxygen: /** @brief ... */ перед объявлением и ///< после поля.
  • Ошибки возвращаются как Result<T> (std::expected<T, std::string>), а не выбрасываются.

Инструменты

Отформатировать файл на месте:

clang-format -i src/core/manager.cpp

Запустить статический анализ файла с командами компиляции из папки сборки:

clang-tidy -p build src/core/manager.cpp

Опция CMake PLUGIFY_USE_CLANG_TIDY=ON запускает clang-tidy при сборке. Большинство IDE (Visual Studio, CLion, VS Code) подхватывают оба файла автоматически.