google-cpp-style

Các quy tắc trong Hướng dẫn Phong cách C++ của Google để viết mã C++ sạch, dễ bảo trì. Sử dụng khi viết C++, xem xét mã, thảo luận về quy ước đặt tên, định dạng, lớp…

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)

Thêm skills từ clickhouse

clickhouse-best-practices
clickhouse
28 quy tắc thực hành tốt nhất cho ClickHouse được tổ chức theo thiết kế lược đồ, tối ưu hóa truy vấn và chiến lược nhập dữ liệu. Bao gồm ba lĩnh vực quan trọng: lựa chọn khóa chính và kiểu dữ liệu (các quyết định thiết kế không thể thay đổi), tối ưu hóa JOIN và truy vấn, cũng như gộp lô chèn và tránh đột biến. Bao gồm 28 quy tắc được ưu tiên theo mức độ tác động, với các quy tắc thiết kế lược đồ và tối ưu hóa truy vấn được đánh dấu QUAN TRỌNG do cơ chế lưu trữ cột và chỉ mục thưa của
clickhouse-js-node-coding
clickhouse
Tham khảo: https://clickhouse.com/docs/integrations/javascript
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…
clickhousectl-cloud-deploy
clickhouse
Sử dụng khi người dùng muốn triển khai ClickHouse lên đám mây, chuyển sang môi trường sản xuất, sử dụng ClickHouse Cloud, lưu trữ dịch vụ ClickHouse được quản lý, hoặc di chuyển từ hệ thống cục bộ…
clickstack-otel-collector
clickhouse
Sử dụng khi người dùng muốn kết nối một bộ thu thập OpenTelemetry vào dịch vụ Managed ClickStack trên ClickHouse Cloud, bằng cách triển khai một bộ thu thập cục bộ mới…
infra-clickhouse
clickhouse
Thiết lập và quản lý ClickHouse bằng CLI clickhousectl — cài đặt và chạy máy chủ ClickHouse cục bộ cho môi trường phát triển, đồng thời tạo các phiên bản ClickHouse Cloud được quản lý…
infra-postgres
clickhouse
Thiết lập và quản lý Postgres bằng CLI clickhousectl — chạy Postgres cục bộ dựa trên Docker cho mục đích phát triển, đồng thời tạo và vận hành ClickHouse được quản lý…
clickhouse-best-practices
clickhouse
PHẢI SỬ DỤNG khi xem xét lược đồ ClickHouse, truy vấn hoặc cấu hình. Chứa 31 quy tắc PHẢI được kiểm tra trước khi đưa ra khuyến nghị. Luôn đọc…