Стиль кодирования

Типы вершин графа. enum class VertexType { Input, ///< Вход схемы. Output, ///< Выход схемы. Constant, ///< Константа. Gate, ///< Логический элемент. SubGraph ///< Подграф. };.

В этом документе собраны расширенные правила стиля для репозиториев CircuitGen. Они соответствуют смыслу английской версии и дают дополнительные практические пояснения для русскоязычной разработки.

Базовые правила

  1. Используйте LF-окончания строк в исходных файлах (.cpp, .h, .hpp, ...).
  2. Базовый отступ — 2 пробела, TAB-символы не допускаются.
  3. Максимальная длина строки — 80 символов.
  4. Не используйте несколько пустых строк подряд.
  5. Применяйте UpperCamelCase для имен классов, enum, структур, типов, union.
  6. Применяйте lowerCamelCase для имен функций, методов и объектов.
  7. Для переменных используйте prefix_lowerCamelCase:
    • d_ — поля классов;
    • i_ — параметры функций/методов.
  8. Открывающая скобка { ставится в той же строке, что и оператор/сигнатура.
  9. Публичные API и ключевые функции должны иметь комментарии в формате Doxygen.
  10. Порядок #include:
    • заголовки проекта;
    • сторонние библиотеки;
    • системные заголовки.

Внутри каждой группы #include сортируйте в алфавитном порядке.

Дополнительные требования

  • Все предупреждения компилятора должны быть устранены до слияния в основную ветку.
  • Изменения стиля не должны менять поведение кода.

Правила документирования (Doxygen)

Расширенные правила ниже уточняют пункт 9 из базового списка.

  1. Основные описания и TODO размещайте в .hpp, рядом с декларациями API.
  2. Документация оформляется через ///.
  3. Для функций/методов используйте @brief.
  4. Параметры описывайте через @param <name> <description>.
  5. Возвращаемое значение описывайте через @return.
  6. Бросаемые исключения описывайте через @throw.
  7. Для примеров кода используйте блок @code ... @endcode.
  8. Для перекрестных ссылок используйте @see.
  9. Для enum используйте @brief и комментируйте значения перечисления.

Короткий пример:

double divide(double i_dividend, double i_divisor);

Подробные примеры документирования

Полное описание класса

class Graph
{
private:
  int d_verticesCount;
  std::vector<std::vector<int>> d_adj;

public:
  explicit Graph(int i_verticesCount)
      : d_verticesCount(i_verticesCount), d_adj(i_verticesCount)
  {
  }

  void addEdge(int i_from, int i_to);
};

Полное описание функции с

/// std::runtime_error} Если делитель равен нулю. double divide(double i_dividend, double i_divisor) { if (i_divisor == 0.0) { throw std::runtime_error("Division by zero"); } return i_dividend / i_divisor; } ### Пример enum с комментариями значений hpp /// ### Пример перекрестной ссылки hpp /// Строит топологический порядок. ///

English: CodeStyle.md