google-cpp-style

Google C++ Style Guide rules for writing clean, maintainable C++ code. Use when writing C++, reviewing code, discussing naming conventions, formatting, class…

npx skills add https://github.com/clickhouse/pg_stat_ch --skill google-cpp-style

Google C++ Style Guide

This skill provides the complete Google C++ Style Guide for C++20. Apply these rules when writing or reviewing C++ code.

Quick Reference

TopicKey Rules
NamingTypes: PascalCase, functions: PascalCase, variables: snake_case, constants: kPascalCase, macros: UPPER_CASE
Formatting80 char lines, 2-space indent, spaces (not tabs), { on same line
HeadersSelf-contained, #define guards, include what you use
ClassesPrefer composition over inheritance, explicit constructors, private data members

Core Principles

  1. Optimize for the reader - Code is read more than written
  2. Be consistent - Follow existing patterns in the codebase
  3. Avoid surprising constructs - Prefer clear over clever

Target Version

Code should target C++20. Do not use C++23 features or non-standard extensions.

Detailed References

For complete rules on specific topics:

  • Header Files - Include guards, ordering, forward declarations
  • Scoping - Namespaces, linkage, static/global variables
  • Classes - Constructors, inheritance, operator overloading
  • Functions - Parameters, overloading, default arguments
  • C++ Features - Smart pointers, exceptions, RTTI, lambdas
  • Naming - All naming conventions with examples
  • Comments - Documentation style and requirements
  • Formatting - Whitespace, braces, line length

Common Patterns

Header File Template

#ifndef PROJECT_PATH_FILE_H_
#define PROJECT_PATH_FILE_H_

#include "project/public/header.h"

#include <sys/types.h>

#include <string>
#include <vector>

#include "other/library.h"
#include "project/internal.h"

namespace project {

class MyClass {
 public:
  MyClass();
  explicit MyClass(int value);

  void DoSomething();
  int count() const { return count_; }
  void set_count(int count) { count_ = count; }

 private:
  int count_;
};

}  // namespace project

#endif  // PROJECT_PATH_FILE_H_

Class Declaration Order

class MyClass {
 public:
  // Types and type aliases
  using ValueType = int;

  // Static constants
  static constexpr int kMaxSize = 100;

  // Constructors and assignment
  MyClass();
  MyClass(const MyClass&) = default;
  MyClass& operator=(const MyClass&) = default;

  // Destructor
  ~MyClass();

  // All other methods
  void Process();

 protected:
  // Protected members (if needed)

 private:
  // Private methods
  void InternalHelper();

  // Data members
  int value_;
};

Function Comments

// Returns an iterator positioned at the first entry >= `start_word`.
// Returns nullptr if no such entry exists.
// The client must not use the iterator after the table is destroyed.
std::unique_ptr<Iterator> GetIterator(absl::string_view start_word) const;

Critical Rules Summary

Always Do

  • Use #define guards in all headers
  • Make single-argument constructors explicit
  • Use nullptr (not NULL or 0) for pointers
  • Use override or final for virtual function overrides
  • Declare data members private
  • Initialize variables at declaration

Never Do

  • Use using namespace directives
  • Use C-style casts (use static_cast, etc.)
  • Use exceptions (in Google code)
  • Use non-standard extensions
  • Define macros in headers (when possible)
  • Use std::auto_ptr (use std::unique_ptr)

Mais skills de clickhouse

clickhouse-best-practices
clickhouse
28 regras de melhores práticas do ClickHouse organizadas por design de esquema, otimização de consultas e estratégia de ingestão de dados. Abrange três áreas críticas: seleção de chave primária e tipo de dados (decisões de design imutáveis), otimização de JOIN e consultas, e agrupamento de inserções com prevenção de mutações. Inclui 28 regras priorizadas por impacto, com regras de design de esquema e otimização de consultas marcadas como CRÍTICAS devido ao armazenamento colunar e mecanismos de índice esparso do ClickHouse. Fornece procedimentos de revisão estruturados para...
official
clickhouse-js-node-coding
clickhouse
Write idiomatic application code with the ClickHouse Node.js client (`@clickhouse/client`). Use this skill whenever a user is *building* against the Node.js…
official
clickhousectl-cloud-deploy
clickhouse
Use quando um usuário deseja implantar o ClickHouse na nuvem, ir para produção, usar o ClickHouse Cloud, hospedar um serviço gerenciado do ClickHouse ou migrar de um ambiente local…
official
clickstack-otel-collector
clickhouse
Use when a user wants to wire an OpenTelemetry collector into a Managed ClickStack service on ClickHouse Cloud, either by deploying a new local collector…
official
infra-clickhouse
clickhouse
Sets up and manages ClickHouse using the clickhousectl CLI — installs and runs a local ClickHouse server for development, and creates managed ClickHouse Cloud…
official
infra-postgres
clickhouse
Configura e gerencia o Postgres usando a CLI do clickhousectl — executa um Postgres local com suporte a Docker para desenvolvimento, e cria e opera o ClickHouse gerenciado…
official
clickhouse-best-practices
clickhouse
DEVE SER USADO ao revisar esquemas, consultas ou configurações do ClickHouse. Contém 31 regras que DEVEM ser verificadas antes de fornecer recomendações. Sempre leia…
official
setup
clickhouse
Orienta os usuários na configuração da conexão do servidor ClickHouse MCP incluído neste plugin. Use quando o usuário instalar o plugin pela primeira vez ou tiver problemas…
official