Skip to content

Contribution ​

We welcome any contributions!

Please refer to build to build clice, and test and debug to run tests.

Before Submitting ​

  1. Format: Run pixi run format to format all source files.

  2. Tests: All four test suites — unit, integration, smoke and snapshot — must pass (pixi run test).

  3. Commit messages: Use conventional commits:

    <type>(<scope>): <short description>

    Types: feat, fix, refactor, chore, docs, ci, test, perf

    Scopes: match src/ subdirectories or feature names (e.g., completion, server, index).

    Keep the subject line under 70 characters.

Code Style ​

Naming ​

EntityConventionExample
Variables, fields, functionssnake_casefile_path
Classes, enums, conceptsPascalCaseCompileGraph, SymbolKind
Enum valuesPascalCaseGoToDefinition, IncludeAngled
Template parametersPascalCasetypename Result

Class member fields use no prefix or suffix (no m_, no trailing _).

String Parameters ​

Prefer llvm::StringRef > std::string_view > const std::string&.

Modern C++ ​

  • Target C++23. Use std::ranges, std::expected, std::format.
  • Prefer LLVM data structures (SmallVector, DenseMap, StringRef) where appropriate.
  • Do not use <iostream> or C-style I/O.
  • Prefer raw string literals R"(...)" over escaped strings.

Error Handling ​

  • Use if with init-statements to scope error variables.
  • Keep early-return / flat control flow — avoid deep nesting.

Extension Development ​

See extension for editor plugin development.