From b12b1e373b487ad5b82c1e7960ce6d7895eb70a9 Mon Sep 17 00:00:00 2001 From: ykiko Date: Sat, 8 Aug 2026 18:30:35 +0800 Subject: [PATCH 1/3] chore(docs): collapsible examples, dated changelogs, bot sync token --- .github/workflows/main.yml | 2 +- docs/en/features/code-action.md | 6 +- docs/en/features/completion.md | 148 +++++++++++- docs/en/features/diagnostics.md | 6 +- docs/en/features/document-links.md | 8 +- docs/en/features/document-symbols.md | 132 ++++++++++- docs/en/features/folding-ranges.md | 107 ++++++++- docs/en/features/formatting.md | 6 +- docs/en/features/hover.md | 8 +- docs/en/features/inlay-hints.md | 209 ++++++++++++++++- docs/en/features/lint.md | 6 +- docs/en/features/navigation.md | 12 +- docs/en/features/semantic-tokens.md | 332 ++++++++++++++++++++++++++- docs/en/features/signature-help.md | 76 +++++- docs/semantic-tokens-example.cpp | 62 ----- tools/feature_docs.ts | 7 + 16 files changed, 1025 insertions(+), 102 deletions(-) delete mode 100644 docs/semantic-tokens-example.cpp diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index b20412eeb..da36af789 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -88,7 +88,7 @@ jobs: - uses: clice-io/docs@main with: project: clice - token: ${{ secrets.PUBLISH_DOCS }} + token: ${{ secrets.CLICE_DOCS }} vscode: needs: changes diff --git a/docs/en/features/code-action.md b/docs/en/features/code-action.md index 218c2048a..3d1dd131e 100644 --- a/docs/en/features/code-action.md +++ b/docs/en/features/code-action.md @@ -74,6 +74,6 @@ Cursor/selection-driven refactorings. ## Changelog -| Date | Change | PR | -| ---- | ---------------------------------------- | --- | -| — | Stub handler (always returns empty list) | — | +| Date | Change | PR | +| ---------- | ---------------------------------------- | --- | +| 2024-09-16 | Stub handler (always returns empty list) | — | diff --git a/docs/en/features/completion.md b/docs/en/features/completion.md index 8bbbd11e5..c7ed0728e 100644 --- a/docs/en/features/completion.md +++ b/docs/en/features/completion.md @@ -11,16 +11,26 @@ Triggered by `<`, `"`, `/` characters. Handled before AST (preamble-level, no co Answered by the server before any compilation, so only the server path exists for this fixture. +
+ Example + ```cpp #include "snap" ``` +
+ - [x] Angled include paths — the same search-path candidates in the angled form +
+ Example + ```cpp #include ``` +
+ **Trigger contexts** @@ -92,10 +102,15 @@ Triggered when cursor is after `import` or `export import`. so the module is known. The statement stays unterminated — a `;` on the line means the import is already complete and nothing is offered. +
+ Example + ```cpp import ma ``` +
+ - [ ] Trigger on space character ([#460](https://github.com/clice-io/clice/pull/460)) @@ -189,6 +204,9 @@ Triggered by `.`, `->`, `::`, or quickSuggestions. Forwarded to Clang `CodeCompl `operator=` keeps no space before `=`, and a conversion operator spells its target type. +
+ Example + ```cpp // The member access expression is left dangling at the point. struct Wallet { @@ -207,8 +225,13 @@ Triggered by `.`, `->`, `::`, or quickSuggestions. Forwarded to Clang `CodeCompl } ``` +
+ - [x] Members of an instantiated class template — the destructor label keeps the written template arguments +
+ Example + ```cpp // The member access expression is left dangling at the point. template @@ -222,8 +245,13 @@ Triggered by `.`, `->`, `::`, or quickSuggestions. Forwarded to Clang `CodeCompl } ``` +
+ - [x] Pointer member access — `->` on a pointer completes the pointee's members +
+ Example + ```cpp // The member access expression is left dangling at the point. struct Node { @@ -238,12 +266,17 @@ Triggered by `.`, `->`, `::`, or quickSuggestions. Forwarded to Clang `CodeCompl } ``` +
+ - [x] Scope-qualified members — after `::` static data, nested types, methods and the injected class name all list Qualified completion is not filtered to the statically-reachable subset: instance fields and the destructor show up alongside the static members and nested types. +
+ Example + ```cpp // The qualified-id is left dangling at the point. struct Config { @@ -262,8 +295,13 @@ Triggered by `.`, `->`, `::`, or quickSuggestions. Forwarded to Clang `CodeCompl } ``` +
+ - [x] Inherited members — a derived object completes its own members and those of its base +
+ Example + ```cpp // The member access expression is left dangling at the point. struct Base { @@ -281,6 +319,8 @@ Triggered by `.`, `->`, `::`, or quickSuggestions. Forwarded to Clang `CodeCompl } ``` +
+ - [x] `->` — pointer member access (with Clang fixup) @@ -383,6 +423,9 @@ Triggered by `.`, `->`, `::`, or quickSuggestions. Forwarded to Clang `CodeCompl - [x] Unqualified lookup with fuzzy prefix matching — strong prefix matches survive, weak subsequence matches and unqualified namespace members do not +
+ Example + ```cpp // The completion expression dangles as an unfinished statement. namespace A { @@ -403,8 +446,13 @@ Triggered by `.`, `->`, `::`, or quickSuggestions. Forwarded to Clang `CodeCompl } ``` +
+ - [x] Class template deduplication — a name that is also constructors and a deduction guide stays a single class entry +
+ Example + ```cpp // The completion prefix dangles as an unfinished statement. template @@ -424,8 +472,13 @@ Triggered by `.`, `->`, `::`, or quickSuggestions. Forwarded to Clang `CodeCompl } ``` +
+ - [x] Constructor labels stay plain — class template constructors and deduction guides complete as the bare class name, never a templated spelling +
+ Example + ```cpp // The completion prefix dangles as an unfinished statement. template @@ -445,15 +498,25 @@ Triggered by `.`, `->`, `::`, or quickSuggestions. Forwarded to Clang `CodeCompl } ``` +
+ - [x] Keyword patterns — keywords complete like any candidate, with plain insert text +
+ Example + ```cpp // The completion prefix cuts the initializer mid-expression. int x = tru ``` +
+ - [x] Namespace-qualified lookup — `ns::` lists the namespace's own members +
+ Example + ```cpp // The qualified-id is left dangling at the point. namespace geometry { @@ -473,8 +536,13 @@ Triggered by `.`, `->`, `::`, or quickSuggestions. Forwarded to Clang `CodeCompl } ``` +
+ - [x] Enum members — a scoped enum lists through `Type::`, an unscoped enumerator completes by bare name +
+ Example + ```cpp // Both completion prefixes dangle; the statements stay // semicolon-terminated so the second marker is not dragged into recovery. @@ -488,8 +556,13 @@ Triggered by `.`, `->`, `::`, or quickSuggestions. Forwarded to Clang `CodeCompl } ``` +
+ - [x] Local shadowing a global — the shadowed global does not appear as a duplicate entry +
+ Example + ```cpp // The completion prefix dangles as an unfinished statement. int counter = 0; @@ -500,8 +573,13 @@ Triggered by `.`, `->`, `::`, or quickSuggestions. Forwarded to Clang `CodeCompl } ``` +
+ - [x] Using-declaration — a name pulled in with `using` completes unqualified +
+ Example + ```cpp // The completion prefix dangles as an unfinished statement. namespace lib { @@ -517,6 +595,8 @@ Triggered by `.`, `->`, `::`, or quickSuggestions. Forwarded to Clang `CodeCompl } ``` +
+ - [x] Qualified name lookup (`std::`) @@ -555,6 +635,9 @@ All options below live in the `[code_completion]` configuration section. - [x] Signature and return type details — the parameter list and return type ride along as label details +
+ Example + ```cpp // The completion prefix cuts the initializer mid-expression. double foooo(int x, float y); @@ -562,8 +645,13 @@ All options below live in the `[code_completion]` configuration section. int x = fo ``` +
+ - [x] Overload bundling — an overload set collapses into one entry with an overload count +
+ Example + ```cpp // The completion prefix cuts the initializer mid-expression. int foooo(int x); @@ -573,8 +661,13 @@ All options below live in the `[code_completion]` configuration section. int x = fooo ``` +
+ - [x] Unbundled overloads — with bundling off, every overload is its own entry with its own signature +
+ Example + ```cpp // The completion prefix cuts the initializer mid-expression. int foooo(int x); @@ -584,8 +677,13 @@ All options below live in the `[code_completion]` configuration section. int x = fooo ``` +
+ - [x] Parameter placeholder snippets — calls insert tab-stop placeholders per argument; a no-argument function stays plain text +
+ Example + ```cpp // The completion prefixes dangle as unfinished statements. int foooo(int x, float y); @@ -603,8 +701,13 @@ All options below live in the `[code_completion]` configuration section. } ``` +
+ - [x] Snippets defer to bundling — while overloads are bundled, argument snippets stay off even when enabled +
+ Example + ```cpp // The completion prefix cuts the initializer mid-expression. int foooo(int x); @@ -613,11 +716,16 @@ All options below live in the `[code_completion]` configuration section. int z = fo ``` +
+ - [x] Default-argument parameters — a parameter with a default value drops out of the signature detail The signature detail keeps only the required parameters; the trailing `int retries = 3` is elided. +
+ Example + ```cpp // The completion prefix cuts the initializer mid-expression. int configure(int timeout, int retries = 3); @@ -625,8 +733,13 @@ All options below live in the `[code_completion]` configuration section. int x = confi ``` +
+ - [x] Variadic signature — a trailing `...` shows in the parameter detail +
+ Example + ```cpp // The completion prefix cuts the initializer mid-expression. int printf_like(const char* fmt, ...); @@ -634,6 +747,8 @@ All options below live in the `[code_completion]` configuration section. int x = printf ``` +
+ - [ ] Template argument placeholders (`enable_template_arguments_snippet`) @@ -766,6 +881,9 @@ All options below live in the `[code_completion]` configuration section. - [x] Underscore filtering — underscore-prefixed internal symbols hide unless the typed prefix itself starts with one +
+ Example + ```cpp // The completion prefixes are undeclared identifiers. The // statements stay semicolon-terminated: an unterminated one puts the @@ -777,8 +895,13 @@ All options below live in the `[code_completion]` configuration section. int y = _p; ``` +
+ - [x] Deprecated tagging — a [[deprecated]] candidate carries the Deprecated tag, its plain sibling does not +
+ Example + ```cpp // The completion prefix cuts the initializer mid-expression. [[deprecated]] int old_thing(int x); @@ -787,11 +910,16 @@ All options below live in the `[code_completion]` configuration section. int z = thing ``` +
+ - [x] Word-boundary fuzzy match — prefix `fb` matches the word starts of `foo_bar_baz` `frobnicate` is only a weak scattered subsequence of `fb` and is dropped; `foo_bar_baz` matches on the `foo`/`bar` word boundaries and survives. +
+ Example + ```cpp // The completion prefix dangles as an unfinished statement. int foo_bar_baz; @@ -802,8 +930,13 @@ All options below live in the `[code_completion]` configuration section. } ``` +
+ - [x] Case-insensitive prefix — a lowercase prefix matches a mixed-case identifier +
+ Example + ```cpp // The completion prefix dangles as an unfinished statement. int MyLongName; @@ -813,11 +946,16 @@ All options below live in the `[code_completion]` configuration section. } ``` +
+ - [x] Prefix outranks subsequence — an exact-prefix candidate sorts above a scattered subsequence match For prefix `fo`, `format_output` is a true prefix and outscores `fast_math_operation`, which only matches as a subsequence. +
+ Example + ```cpp // The completion prefix dangles as an unfinished statement. int format_output; @@ -828,6 +966,8 @@ All options below live in the `[code_completion]` configuration section. } ``` +
+ - [x] Fuzzy matching with word-boundary-aware scoring (camelCase, snake_case) @@ -946,7 +1086,7 @@ Registered: `. < > : " / *`. Space (` `) is planned but not yet merged ([#460](h ## Changelog -| Date | Change | PR | -| ---- | -------------------------------------- | --- | -| — | Initial include/semantic completion | — | -| — | Module import completion (flat prefix) | — | +| Date | Change | PR | +| ---------- | --------------------------------------------------------------------- | -------------------------------------------------- | +| 2026-04-06 | `#include` path completion and module import completion (flat prefix) | [#394](https://github.com/clice-io/clice/pull/394) | +| 2024-12-01 | Initial semantic completion | — | diff --git a/docs/en/features/diagnostics.md b/docs/en/features/diagnostics.md index a6f76b11a..5612038fa 100644 --- a/docs/en/features/diagnostics.md +++ b/docs/en/features/diagnostics.md @@ -113,6 +113,6 @@ Known issues that should be handled correctly: ## Changelog -| Date | Change | PR | -| ---- | ---------------------------------------------------------- | --- | -| — | Clang diagnostics, severity mapping, tags, push publishing | — | +| Date | Change | PR | +| ---------- | ---------------------------------------------------------- | -------------------------------------------------- | +| 2025-07-30 | Clang diagnostics, severity mapping, tags, push publishing | [#164](https://github.com/clice-io/clice/pull/164) | diff --git a/docs/en/features/document-links.md b/docs/en/features/document-links.md index ae4c89a23..96ff0dbf1 100644 --- a/docs/en/features/document-links.md +++ b/docs/en/features/document-links.md @@ -36,6 +36,8 @@ Clickable links from source directives to their resolved target files. ## Changelog -| Date | Change | PR | -| ---- | ----------------------------------------------------------- | --- | -| — | Include directive links (#include, \_\_has_include, #embed) | — | +| Date | Change | PR | +| ---------- | ------------------------------------------------------------- | -------------------------------------------------- | +| 2026-04-11 | `__has_include` argument links via unified directive scanning | [#421](https://github.com/clice-io/clice/pull/421) | +| 2026-04-09 | `#embed` links; links inside the preamble preserved | [#413](https://github.com/clice-io/clice/pull/413) | +| 2025-03-16 | `#include` directive links | [#107](https://github.com/clice-io/clice/pull/107) | diff --git a/docs/en/features/document-symbols.md b/docs/en/features/document-symbols.md index a2d92235b..ec1dfc404 100644 --- a/docs/en/features/document-symbols.md +++ b/docs/en/features/document-symbols.md @@ -13,6 +13,9 @@ Provides the file outline and breadcrumb navigation via `textDocument/documentSy - [x] Nested symbol tree — symbols nest by their written scope; out-of-line definitions appear at their lexical position with qualified names +
+ Example + ```cpp namespace demo { @@ -47,8 +50,13 @@ Provides the file outline and breadcrumb navigation via `textDocument/documentSy } ``` +
+ - [x] Symbol ranges and selection ranges — the range spans the whole declaration; the selection range covers the full written name, including multi-token names like `~Widget`, `operator==` and `operator bool` +
+ Example + ```cpp namespace members { @@ -77,8 +85,13 @@ Provides the file outline and breadcrumb navigation via `textDocument/documentSy } // namespace members ``` +
+ - [ ] Access specifier grouping — `public:` / `private:` / `protected:` as grouping nodes for breadcrumb navigation ([clangd#499](https://github.com/clangd/clangd/issues/499)) +
+ Example + ```cpp class Widget { public: @@ -91,8 +104,13 @@ Provides the file outline and breadcrumb navigation via `textDocument/documentSy }; ``` +
+ - [x] Anonymous and inline scopes — anonymous namespaces, unnamed structs and unions group their members under a placeholder name; inline namespace members stay under the inline namespace node +
+ Example + ```cpp namespace { @@ -122,14 +140,21 @@ Provides the file outline and breadcrumb navigation via `textDocument/documentSy } // namespace misc ``` +
+ - [x] UTF-16 position encoding — columns after non-ASCII text count UTF-16 code units +
+ Example + ```cpp // π ≈ 3.14159, 中文注释 constexpr double 半径 = 2.0; constexpr double π值 = 3.14159; double area(); ``` +
+ ## Symbol Kinds @@ -138,6 +163,9 @@ Provides the file outline and breadcrumb navigation via `textDocument/documentSy - [x] Core symbol kinds — namespaces, classes, structs, unions, enums and their members, functions, variables, fields, structured bindings and lambdas all appear in the outline with a mapped LSP symbol kind +
+ Example + ```cpp namespace kinds { @@ -171,8 +199,13 @@ Provides the file outline and breadcrumb navigation via `textDocument/documentSy } // namespace kinds ``` +
+ - [x] Template declarations — class, function and variable templates carry a `template ` detail prefix; concepts and abbreviated function templates (`concept auto` parameters) appear as well +
+ Example + ```cpp namespace templates { @@ -202,8 +235,13 @@ Provides the file outline and breadcrumb navigation via `textDocument/documentSy } // namespace templates ``` +
+ - [x] Template specializations and deduction guides — explicit and partial specializations of class and variable templates appear with their template arguments in the name; members nest under their specialization; deduction guides render their deduced signature +
+ Example + ```cpp namespace spec { @@ -257,8 +295,13 @@ Provides the file outline and breadcrumb navigation via `textDocument/documentSy } // namespace spec ``` +
+ - [x] Type aliases — `typedef`, `using` aliases and alias templates appear in the outline with a `type alias` detail +
+ Example + ```cpp namespace aliases { @@ -281,8 +324,13 @@ Provides the file outline and breadcrumb navigation via `textDocument/documentSy } // namespace aliases ``` +
+ - [ ] Explicit instantiation directives — the class forms appear as childless symbols; clang mislocates the function and variable forms at the pattern, so they are missing from the outline _(partial)_ ([llvm#191658](https://github.com/llvm/llvm-project/issues/191658)) +
+ Example + ```cpp template struct Box { @@ -303,6 +351,8 @@ Provides the file outline and breadcrumb navigation via `textDocument/documentSy template int zero; ``` +
+ ## Symbol Detail @@ -311,6 +361,9 @@ Provides the file outline and breadcrumb navigation via `textDocument/documentSy - [x] Function signatures — parameter and return types in the `detail` field disambiguate overloads; constructors drop the `void` return type ([clangd#520](https://github.com/clangd/clangd/issues/520), [clangd#601](https://github.com/clangd/clangd/issues/601), [clangd#1232](https://github.com/clangd/clangd/issues/1232)) +
+ Example + ```cpp namespace detail { @@ -327,8 +380,13 @@ Provides the file outline and breadcrumb navigation via `textDocument/documentSy } // namespace detail ``` +
+ - [x] Variable and field types — the declared type in the `detail` field; lambdas render as `(lambda)` +
+ Example + ```cpp namespace detail { @@ -347,8 +405,13 @@ Provides the file outline and breadcrumb navigation via `textDocument/documentSy } // namespace detail ``` +
+ - [x] Default argument stripping — the signature is derived from the function type, so default parameter values never leak into the outline ([clangd#221](https://github.com/clangd/clangd/issues/221)) +
+ Example + ```cpp namespace detail { @@ -361,8 +424,13 @@ Provides the file outline and breadcrumb navigation via `textDocument/documentSy } // namespace detail ``` +
+ - [ ] Base classes in detail — show `: Shape` on derived class declarations +
+ Example + ```cpp struct Shape {}; @@ -371,8 +439,13 @@ Provides the file outline and breadcrumb navigation via `textDocument/documentSy }; ``` +
+ - [x] Multiline signature ranges — the symbol range starts at the beginning of the declaration and spans the full signature, so editor sticky scroll anchors correctly ([clangd#2221](https://github.com/clangd/clangd/issues/2221)) +
+ Example + ```cpp struct Config {}; @@ -382,8 +455,13 @@ Provides the file outline and breadcrumb navigation via `textDocument/documentSy ) {} ``` +
+ - [x] Scoped types — a written class scope appears in the detail exactly once, for nested classes, template-ids, aliases and dependent names alike +
+ Example + ```cpp namespace scoped { @@ -410,6 +488,8 @@ Provides the file outline and breadcrumb navigation via `textDocument/documentSy } // namespace scoped ``` +
+ ## Missing Symbols @@ -418,21 +498,34 @@ Provides the file outline and breadcrumb navigation via `textDocument/documentSy - [ ] Macro definitions — object-like and function-like macro definitions in the outline ([clangd#1744](https://github.com/clangd/clangd/issues/1744)) +
+ Example + ```cpp #define MAX_BUFFER_SIZE 4096 #define CHECK(cond, msg) ((cond) ? 0 : (msg)) ``` +
+ - [ ] Include directives — `#include` entries in the outline ([clangd#2226](https://github.com/clangd/clangd/issues/2226)) +
+ Example + ```cpp #include "config.h" int uses_config(); ``` +
+ - [x] Local symbols — variables and types declared inside function bodies nest under their function ([clangd#616](https://github.com/clangd/clangd/issues/616)) +
+ Example + ```cpp int compute() { int local_sum = 0; @@ -456,8 +549,13 @@ Provides the file outline and breadcrumb navigation via `textDocument/documentSy } ``` +
+ - [ ] Module declarations — `export module`, `module` and `import` declarations in the outline +
+ Example + ```cpp export module app.core; @@ -466,8 +564,13 @@ Provides the file outline and breadcrumb navigation via `textDocument/documentSy export int core_entry(); ``` +
+ - [ ] `#pragma mark` navigation markers — editor section markers as outline entries +
+ Example + ```cpp #pragma mark - Lifecycle @@ -478,8 +581,13 @@ Provides the file outline and breadcrumb navigation via `textDocument/documentSy void draw(); ``` +
+ - [x] Friend function definitions — a friend function defined inline in a class appears under that class +
+ Example + ```cpp struct Owner { friend void inline_friend(Owner& o) {} @@ -490,6 +598,8 @@ Provides the file outline and breadcrumb navigation via `textDocument/documentSy }; ``` +
+ ## Symbol Tags @@ -498,14 +608,22 @@ Provides the file outline and breadcrumb navigation via `textDocument/documentSy - [ ] Deprecated tag — mark `[[deprecated]]` symbols with the LSP `deprecated` symbol tag +
+ Example + ```cpp [[deprecated("use open_v2")]] void open_v1(); void open_v2(); ``` +
+ - [ ] Access and storage indicators — public / private / protected, static, virtual and abstract markers on outline entries ([clangd#2123](https://github.com/clangd/clangd/issues/2123)) +
+ Example + ```cpp class Base { public: @@ -519,6 +637,8 @@ Provides the file outline and breadcrumb navigation via `textDocument/documentSy }; ``` +
+ ## Location Correctness @@ -527,6 +647,9 @@ Provides the file outline and breadcrumb navigation via `textDocument/documentSy - [x] Symbols from macro expansions — a symbol produced by a macro invocation is located at the invocation, not at the macro definition ([clangd#475](https://github.com/clangd/clangd/issues/475)) +
+ Example + ```cpp #define DEFINE_HANDLER(name) void name() @@ -539,8 +662,13 @@ Provides the file outline and breadcrumb navigation via `textDocument/documentSy }; ``` +
+ - [x] Names spelled in macro arguments — the selection range points at the name written in the macro argument; names spelled in the macro body fall back to the invocation site ([clangd#1941](https://github.com/clangd/clangd/issues/1941)) +
+ Example + ```cpp #define VAR(X) int X = 1; @@ -551,6 +679,8 @@ Provides the file outline and breadcrumb navigation via `textDocument/documentSy COUNTER() ``` +
+ ## Changelog @@ -559,4 +689,4 @@ Provides the file outline and breadcrumb navigation via `textDocument/documentSy | ---------- | --------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------- | | 2026-08-01 | Explicit instantiation directives pinned: class forms as childless symbols, function and variable forms missing until clang 23 | [#571](https://github.com/clice-io/clice/pull/571) | | 2026-08-01 | Template specializations, type aliases, full-name selection ranges, macro-argument names; traversal moved onto the semantics node table | [#566](https://github.com/clice-io/clice/pull/566) | -| — | Nested symbol hierarchy, basic symbol kinds | — | +| 2025-01-13 | Nested symbol hierarchy, basic symbol kinds | [#17](https://github.com/clice-io/clice/pull/17) | diff --git a/docs/en/features/folding-ranges.md b/docs/en/features/folding-ranges.md index 2827c7e15..88a6a5505 100644 --- a/docs/en/features/folding-ranges.md +++ b/docs/en/features/folding-ranges.md @@ -11,6 +11,9 @@ - [x] Block folding — functions, classes, structs, unions, enums, namespaces, lambdas +
+ Example + ```cpp namespace geometry { @@ -53,8 +56,13 @@ } // namespace spaced ``` +
+ - [x] Nested compound-statement folding — `if`/`for`/`while` bodies inside functions +
+ Example + ```cpp void process(int count) { if (count > 0) { @@ -75,8 +83,13 @@ } ``` +
+ - [x] Multi-line list folding — function parameters, call arguments, initializer lists, lambda captures +
+ Example + ```cpp void configure( int width, // ┐ @@ -144,8 +157,13 @@ }; ``` +
+ - [x] Access-specifier section folding — `public:` / `protected:` / `private:` regions within a class ([clangd#1455](https://github.com/clangd/clangd/issues/1455)) +
+ Example + ```cpp class Widget { public: // ┐ @@ -157,12 +175,17 @@ }; ``` +
+ - [ ] Preprocessor conditional folding (`#if` / `#ifdef` / `#ifndef` ... `#endif`) _(partial)_ ([clangd#1661](https://github.com/clangd/clangd/issues/1661), [clangd#2059](https://github.com/clangd/clangd/issues/2059)) Branch regions delimited by `#else` fold today; a bare `#if ... #endif` block without an `#else` does not fold yet. clangd#2059 is a duplicate of clangd#1661. +
+ Example + ```cpp #ifdef ENABLE_LOGGING // ┐ void log_message(); // │ no fold yet: bare conditional without #else @@ -175,8 +198,13 @@ #endif // ┘ ``` +
+ - [x] Custom region folding (`#pragma region` / `#pragma endregion`) ([clangd#1623](https://github.com/clangd/clangd/issues/1623)) +
+ Example + ```cpp #pragma region Configuration @@ -186,8 +214,13 @@ #pragma endregion ``` +
+ - [x] Pragma classification — only the first argument token decides region/endregion +
+ Example + ```cpp // The leading declaration ends the preamble so the pragmas below reach the // main-file parse on both the inspect and the server path. @@ -209,8 +242,13 @@ #pragma endregion ``` +
+ - [ ] Comment folding — multi-line `/* */` and consecutive `//` line comments +
+ Example + ```cpp // This is a long // multi-line comment @@ -222,8 +260,13 @@ */ ``` +
+ - [ ] Include region folding — consecutive `#include` directives +
+ Example + ```cpp #include // ┐ #include // │ foldable region @@ -233,8 +276,13 @@ #include "config.h" // ┘ (blank line separates) ``` +
+ - [ ] Raw string literal folding +
+ Example + ```cpp auto sql = R"( SELECT * @@ -243,16 +291,26 @@ )"; // foldable multi-line raw string ``` +
+ - [ ] `using` declaration blocks — consecutive using declarations/directives +
+ Example + ```cpp using std::vector; // ┐ using std::string; // │ foldable using std::map; // ┘ ``` +
+ - [ ] Template parameter list folding +
+ Example + ```cpp template struct Less; @@ -265,8 +323,13 @@ class SortedMap { }; ``` +
+ - [x] Template specializations and instantiations — written specializations and their members fold; instantiated declarations reuse the pattern's source locations and must not fold it again +
+ Example + ```cpp template struct Box { @@ -295,8 +358,13 @@ template struct Box; ``` +
+ - [x] Abbreviated function templates — bodies of functions with `auto` or constrained `auto` parameters fold like any other function +
+ Example + ```cpp template concept Small = sizeof(T) <= 8; @@ -311,8 +379,13 @@ } ``` +
+ - [x] Macro-generated folding — braces and access specifiers spelled through macros fold at the invocation site +
+ Example + ```cpp #define NS_BEGIN namespace ns { #define NS_END } @@ -333,8 +406,13 @@ NS_END ``` +
+ - [x] Coroutine bodies — the written block folds exactly once and the coroutine transformation wrapper adds no duplicate fold; a coroutine lambda keeps its body fold +
+ Example + ```cpp namespace std { @@ -388,8 +466,13 @@ } ``` +
+ - [x] Initializer-list constructions — the constructor's braces and the nested initializer list share delimiters and fold once; a parenthesized list argument keeps both folds +
+ Example + ```cpp namespace std { @@ -419,6 +502,8 @@ }); ``` +
+ ## Refinements @@ -433,6 +518,9 @@ > implement this field will silently ignore it — the folding still works, > only the placeholder text is missing. +
+ Example + ```cpp struct Config { int width; @@ -446,6 +534,8 @@ } ``` +
+ - [ ] Fold from the declaration line for function/class bodies — keep the signature visible when folded ([clangd#2666](https://github.com/clangd/clangd/issues/2666)) > **Client support**: this depends on the client interpreting @@ -456,6 +546,9 @@ > the signature line ([vscode#3352](https://github.com/microsoft/vscode/issues/3352) > — still open). Other clients may differ. +
+ Example + ```cpp struct Config { int width; @@ -470,6 +563,8 @@ } ``` +
+ - [ ] Inactive preprocessor branch indication — visually distinguish or auto-fold inactive `#if`/`#else` branches _(partial)_ The server emits a fold range for the region between the condition and @@ -482,6 +577,9 @@ > is partly a client UX concern. The server can mark these ranges with > `FoldingRangeKind.Region` and clients can choose to auto-fold them. +
+ Example + ```cpp #ifdef _WIN32 // ... Windows code (active) ... @@ -490,8 +588,13 @@ #endif ``` +
+ - [x] Single-line constructs stay unfolded — a fold that hides nothing is noise +
+ Example + ```cpp namespace tiny { } @@ -508,6 +611,8 @@ int result = lambda(42); ``` +
+ ## Changelog @@ -515,4 +620,4 @@ | Date | Change | PR | | ---------- | -------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------- | | 2026-08-01 | Nested compound statements, abbreviated function templates and coroutine bodies; instantiation dedup; semantics-table walk | [#568](https://github.com/clice-io/clice/pull/568) | -| — | Block folding, list folding, access specifiers, preprocessor regions | — | +| 2024-12-17 | Block folding, list folding, access specifiers, preprocessor regions | [#13](https://github.com/clice-io/clice/pull/13) | diff --git a/docs/en/features/formatting.md b/docs/en/features/formatting.md index 3bdd49d10..81e458f09 100644 --- a/docs/en/features/formatting.md +++ b/docs/en/features/formatting.md @@ -29,6 +29,6 @@ Beyond the LSP `textDocument/formatting` request (which formats a single open fi ## Changelog -| Date | Change | PR | -| ---- | ------------------------------------------------------ | --- | -| — | Document formatting, range formatting, include sorting | — | +| Date | Change | PR | +| ---------- | ------------------------------------------------------ | -------------------------------------------------- | +| 2025-08-23 | Document formatting, range formatting, include sorting | [#188](https://github.com/clice-io/clice/pull/188) | diff --git a/docs/en/features/hover.md b/docs/en/features/hover.md index 55640b7ae..940e66443 100644 --- a/docs/en/features/hover.md +++ b/docs/en/features/hover.md @@ -291,8 +291,6 @@ Known issues that should be handled correctly: ## Changelog -| Date | Change | PR | -| ------- | -------------------------------- | ------ | -| 2025-06 | Port clangd hover implementation | [#452] | - -[#452]: https://github.com/clice-io/clice/pull/452 +| Date | Change | PR | +| ---------- | -------------------------------- | -------------------------------------------------- | +| 2026-06-12 | Port clangd hover implementation | [#452](https://github.com/clice-io/clice/pull/452) | diff --git a/docs/en/features/inlay-hints.md b/docs/en/features/inlay-hints.md index 25334aace..bd45f71c9 100644 --- a/docs/en/features/inlay-hints.md +++ b/docs/en/features/inlay-hints.md @@ -13,6 +13,9 @@ clice renders inline annotations for the information the code leaves implicit: p - [x] Parameter name hints — argument names at call sites and constructor calls +
+ Example + ```cpp void draw(int width, int height); @@ -34,8 +37,13 @@ clice renders inline annotations for the information the code leaves implicit: p } ``` +
+ - [x] Hint suppression — arguments that already spell the parameter name, and `/*name=*/` comments ([clangd#1877](https://github.com/clangd/clangd/issues/1877)) +
+ Example + ```cpp void draw(int width, int height); @@ -68,8 +76,13 @@ clice renders inline annotations for the information the code leaves implicit: p } ``` +
+ - [x] Setter and builtin suppression — `setX(x)` and `std::move`/`std::forward` arguments stay bare +
+ Example + ```cpp namespace std { @@ -126,8 +139,13 @@ clice renders inline annotations for the information the code leaves implicit: p } ``` +
+ - [x] Mutable reference markers — `&` flags arguments passed by non-const lvalue reference ([clangd#1123](https://github.com/clangd/clangd/issues/1123)) +
+ Example + ```cpp void mutate(int& value); void observe(const int& value); @@ -141,8 +159,13 @@ clice renders inline annotations for the information the code leaves implicit: p } ``` +
+ - [x] Forwarding resolution — packs forwarded through wrappers resolve to the target's parameter names ([clangd#2324](https://github.com/clangd/clangd/issues/2324)) +
+ Example + ```cpp namespace std { @@ -192,8 +215,13 @@ clice renders inline annotations for the information the code leaves implicit: p } ``` +
+ - [x] Names from definitions — unnamed declaration parameters take the definition's names; leading underscores strip +
+ Example + ```cpp void resize(int, int); @@ -215,8 +243,13 @@ clice renders inline annotations for the information the code leaves implicit: p } ``` +
+ - [x] Function pointers and call operators — indirect calls still name their parameters ([clangd#1734](https://github.com/clangd/clangd/issues/1734), [clangd#1742](https://github.com/clangd/clangd/issues/1742)) +
+ Example + ```cpp struct Callback { void operator()(int status, int detail) const; @@ -234,8 +267,13 @@ clice renders inline annotations for the information the code leaves implicit: p } ``` +
+ - [x] Deducing `this` — the explicit object parameter never hints (C++23) ([clangd#1777](https://github.com/clangd/clangd/issues/1777)) +
+ Example + ```cpp struct Widget { void resize(this Widget& self, int width, int height); @@ -247,12 +285,17 @@ clice renders inline annotations for the information the code leaves implicit: p } ``` +
+ - [x] Dependent calls — parameter names appear even when the callee is only known inside a template Candidates are matched by argument count; only a unique surviving candidate names the parameters, so a call that could still hit several overloads stays bare rather than guessing. +
+ Example + ```cpp template void apply(T scale); @@ -278,8 +321,13 @@ clice renders inline annotations for the information the code leaves implicit: p }; ``` +
+ - [x] Unexpanded packs — a written pack expansion breaks the 1:1 argument mapping and stops hinting +
+ Example + ```cpp void plot(int x, int y, int z); @@ -296,8 +344,13 @@ clice renders inline annotations for the information the code leaves implicit: p } ``` +
+ - [x] Macros at call sites — arguments spelled as macros hint; calls generated inside macro bodies do not ([clangd#2620](https://github.com/clangd/clangd/issues/2620)) +
+ Example + ```cpp void report(double value); void plot(double x, double y); @@ -320,8 +373,13 @@ clice renders inline annotations for the information the code leaves implicit: p } ``` +
+ - [x] Implicit constructor calls — conversions the code never wrote produce no hints of their own +
+ Example + ```cpp struct Seconds { Seconds(int raw); @@ -340,8 +398,13 @@ clice renders inline annotations for the information the code leaves implicit: p } ``` +
+ - [x] Pseudo-object expressions — MS property accesses stay quiet; written subscripts keep the accessor's names +
+ Example + ```cpp int printf(const char* Format, ...); @@ -367,8 +430,13 @@ clice renders inline annotations for the information the code leaves implicit: p } ``` +
+ - [x] Explicit instantiation — an explicit instantiation definition adds no duplicate hints, while its written template arguments hint normally ([clangd#1034](https://github.com/clangd/clangd/issues/1034)) +
+ Example + ```cpp template void apply(T value) {} @@ -387,8 +455,13 @@ clice renders inline annotations for the information the code leaves implicit: p template struct Box; ``` +
+ - [ ] Sloppy name matching — `aParam` does not yet suppress an argument spelled `param` _(partial)_ ([clangd#2248](https://github.com/clangd/clangd/issues/2248)) +
+ Example + ```cpp void draw(int aParam); @@ -399,8 +472,13 @@ clice renders inline annotations for the information the code leaves implicit: p } ``` +
+ - [ ] Inherited constructors — `using Base::Base` calls lose their parameter names _(partial)_ ([clangd#1364](https://github.com/clangd/clangd/issues/1364)) +
+ Example + ```cpp struct Base { Base(int width); @@ -414,8 +492,13 @@ clice renders inline annotations for the information the code leaves implicit: p Derived d(7); ``` +
+ - [x] Anonymous parameters — nothing to name, though a mutable reference still flags `&` +
+ Example + ```cpp void value_sink(int); void ref_sink(int&); @@ -432,8 +515,13 @@ clice renders inline annotations for the information the code leaves implicit: p } ``` +
+ - [x] Operators and literals — operator syntax and user-defined literals stay bare; member and default member initializers hint +
+ Example + ```cpp struct S { S(int param); @@ -457,8 +545,13 @@ clice renders inline annotations for the information the code leaves implicit: p } ``` +
+ - [ ] Packs in constructor arguments — outer calls resolve; hints inside the expansion are still missing _(partial)_ +
+ Example + ```cpp struct Foo { Foo(); @@ -485,6 +578,8 @@ clice renders inline annotations for the information the code leaves implicit: p } ``` +
+ ## Type Hints @@ -493,6 +588,9 @@ clice renders inline annotations for the information the code leaves implicit: p - [x] Deduced `auto` variables — the hint shows the full variable type, qualifiers included +
+ Example + ```cpp int make(); @@ -503,8 +601,13 @@ clice renders inline annotations for the information the code leaves implicit: p } ``` +
+ - [x] Type sugar and the length limit — aliases keep their spelling; over-long types fall back to the sugared name ([clangd#1298](https://github.com/clangd/clangd/issues/1298), [clangd#1357](https://github.com/clangd/clangd/issues/1357)) +
+ Example + ```cpp using Integer = int; @@ -534,8 +637,13 @@ clice renders inline annotations for the information the code leaves implicit: p } ``` +
+ - [x] Structured bindings — each binding hints its canonical type; the aggregate itself stays bare +
+ Example + ```cpp struct Pair { int first; @@ -552,8 +660,13 @@ clice renders inline annotations for the information the code leaves implicit: p } ``` +
+ - [x] Lambdas — variables, deduced return types, and init-captures all hint ([clangd#1163](https://github.com/clangd/clangd/issues/1163)) +
+ Example + ```cpp int compute(); @@ -567,8 +680,13 @@ clice renders inline annotations for the information the code leaves implicit: p } ``` +
+ - [x] Deduced return types — `-> T` after the parameter list, declarations included +
+ Example + ```cpp auto answer() { return 42; @@ -601,8 +719,13 @@ clice renders inline annotations for the information the code leaves implicit: p }; ``` +
+ - [x] `decltype` spellings — the underlying type shows next to the written `decltype` +
+ Example + ```cpp int source(); @@ -628,8 +751,13 @@ clice renders inline annotations for the information the code leaves implicit: p auto constructed = decltype(0){}; ``` +
+ - [x] `auto` parameters — a template with exactly one instantiation reveals the deduced type +
+ Example + ```cpp int twice(auto x) { return x + x; @@ -663,8 +791,13 @@ clice renders inline annotations for the information the code leaves implicit: p template void body(); ``` +
+ - [ ] Explicitly spelled initializers — casts and functional casts still hint redundantly _(partial)_ ([clangd#1749](https://github.com/clangd/clangd/issues/1749)) +
+ Example + ```cpp int compute(); @@ -676,8 +809,13 @@ clice renders inline annotations for the information the code leaves implicit: p } ``` +
+ - [ ] Dependent `auto` — deduction inside an uninstantiated template body stays silent _(partial)_ ([clangd#2275](https://github.com/clangd/clangd/issues/2275)) +
+ Example + ```cpp template void body(T input) { @@ -688,8 +826,13 @@ clice renders inline annotations for the information the code leaves implicit: p } ``` +
+ - [x] Scope suppression — namespace qualifiers drop from hints; class scopes stay +
+ Example + ```cpp namespace outer { namespace inner { @@ -710,8 +853,13 @@ clice renders inline annotations for the information the code leaves implicit: p } // namespace outer ``` +
+ - [x] Tuple-protocol bindings — hints print the canonical type, not `tuple_element::type` +
+ Example + ```cpp struct IntPair { int a; @@ -752,8 +900,13 @@ clice renders inline annotations for the information the code leaves implicit: p auto [x, y] = make(); ``` +
+ - [ ] Instantiated templates — instantiated bodies repeat no hints at the pattern; dependent `auto` could reveal the deduced type while exactly one instantiation exists _(partial)_ ([clangd#2275](https://github.com/clangd/clangd/issues/2275)) +
+ Example + ```cpp void take(int first, int second); @@ -780,6 +933,8 @@ clice renders inline annotations for the information the code leaves implicit: p template struct Twice; ``` +
+ ## Designator Hints @@ -788,6 +943,9 @@ clice renders inline annotations for the information the code leaves implicit: p - [x] Field and index designators — positional aggregate initialization shows `.field=` and `[index]=` ([clangd#2303](https://github.com/clangd/clangd/issues/2303)) +
+ Example + ```cpp struct Point { int x; @@ -809,8 +967,13 @@ clice renders inline annotations for the information the code leaves implicit: p Array pair = {0, 1}; ``` +
+ - [x] Nested aggregates — written braces recurse; omitted braces flatten into `.outer.inner=` +
+ Example + ```cpp struct Inner { int x; @@ -825,8 +988,13 @@ clice renders inline annotations for the information the code leaves implicit: p Outer o{{1, 2}, 3}; ``` +
+ - [x] Anonymous members — unnamed unions and structs vanish from the designator path +
+ Example + ```cpp struct State { union { @@ -841,8 +1009,13 @@ clice renders inline annotations for the information the code leaves implicit: p State s{42}; ``` +
+ - [x] Designator suppression — written designators and `/*name=*/` comments keep their inits bare +
+ Example + ```cpp struct Point { int a; @@ -857,8 +1030,13 @@ clice renders inline annotations for the information the code leaves implicit: p Point p{/*a=*/1, .c = 2, /* .d = */ 3, 4}; ``` +
+ - [x] Aggregates only — constructor calls, copies and idiomatic zero-init produce no designators +
+ Example + ```cpp struct Constructible { Constructible(int amount); @@ -882,8 +1060,13 @@ clice renders inline annotations for the information the code leaves implicit: p Wide zeroed{}; ``` +
+ - [x] Broken initializers — designators survive next to initializers that fail to compile +
+ Example + ```cpp // The first initializer deliberately fails to convert. struct Empty {}; @@ -898,8 +1081,13 @@ clice renders inline annotations for the information the code leaves implicit: p } ``` +
+ - [ ] Parenthesized aggregate initialization — C++20 `Point(1, 2)` gets no hints yet ([clangd#2540](https://github.com/clangd/clangd/issues/2540)) +
+ Example + ```cpp struct Point { int x; @@ -909,6 +1097,8 @@ clice renders inline annotations for the information the code leaves implicit: p Point p(1, 2); ``` +
+ ## Other Hint Kinds @@ -917,6 +1107,9 @@ clice renders inline annotations for the information the code leaves implicit: p - [ ] Template parameter hints — deduced and explicit template arguments at call sites ([clangd#2583](https://github.com/clangd/clangd/issues/2583)) +
+ Example + ```cpp template T convert(U val); @@ -925,8 +1118,13 @@ clice renders inline annotations for the information the code leaves implicit: p float converted = convert(42); ``` +
+ - [ ] CTAD arguments — deduced class template arguments after the template name ([clangd#2331](https://github.com/clangd/clangd/issues/2331)) +
+ Example + ```cpp template struct Pair { @@ -939,8 +1137,13 @@ clice renders inline annotations for the information the code leaves implicit: p Pair pair(1, 2.5); ``` +
+ - [ ] Implicit conversion hints — surface the conversions a call site performs ([clangd#2254](https://github.com/clangd/clangd/issues/2254)) +
+ Example + ```cpp void process(double val); @@ -950,6 +1153,8 @@ clice renders inline annotations for the information the code leaves implicit: p } ``` +
+ ## Block End Hints @@ -1005,6 +1210,6 @@ The `[inlay_hints]` section of `clice.toml` (or the same keys via `initializatio | Date | Change | PR | | ---------- | ------------------------------------------------------------------------------------------------------- | -------------------------------------------------- | -| — | Parameter name hints, type hints, range-scoped queries | — | -| 2026-07-31 | Designator hints, dependent-call parameter hints, `[inlay_hints]` configuration, fixture-generated docs | — | | 2026-08-01 | Instantiation-subtree skip: no duplicate or contradictory hints from instantiated bodies | [#571](https://github.com/clice-io/clice/pull/571) | +| 2026-08-01 | Designator hints, dependent-call parameter hints, `[inlay_hints]` configuration, fixture-generated docs | [#565](https://github.com/clice-io/clice/pull/565) | +| 2025-01-13 | Parameter name hints, type hints, range-scoped queries | [#19](https://github.com/clice-io/clice/pull/19) | diff --git a/docs/en/features/lint.md b/docs/en/features/lint.md index 169f10ce6..89baeb71e 100644 --- a/docs/en/features/lint.md +++ b/docs/en/features/lint.md @@ -58,6 +58,6 @@ Respects standard `.clang-tidy` configuration files in the project tree. ## Changelog -| Date | Change | PR | -| ---- | ---------------------------------------------- | --- | -| — | Stub implementation, dependency graph tracking | — | +| Date | Change | PR | +| ---------- | ---------------------------------------------- | -------------------------------------------------- | +| 2026-07-22 | Stub implementation, dependency graph tracking | [#539](https://github.com/clice-io/clice/pull/539) | diff --git a/docs/en/features/navigation.md b/docs/en/features/navigation.md index 698fc6d59..f4f611366 100644 --- a/docs/en/features/navigation.md +++ b/docs/en/features/navigation.md @@ -584,10 +584,8 @@ Highlight all references to the symbol under cursor within the current file (`te ## Changelog -| Date | Change | PR | -| ---- | -------------------------------------------------------------------------------------------------- | --- | -| — | go-to-definition on include directives and module names | — | -| — | declaration / implementation / typeDefinition; references includeDeclaration includes declarations | — | -| — | Index-based go-to-definition and find references | — | -| — | Call hierarchy (incoming/outgoing) | — | -| — | Type hierarchy (supertypes/subtypes) | — | +| Date | Change | PR | +| ---------- | -------------------------------------------------------------------------------------------------- | -------------------------------------------------- | +| 2026-07-04 | go-to-definition on include directives and module names | [#481](https://github.com/clice-io/clice/pull/481) | +| 2026-07-03 | declaration / implementation / typeDefinition; references includeDeclaration includes declarations | [#480](https://github.com/clice-io/clice/pull/480) | +| 2026-04-02 | Index-based go-to-definition and find references; call hierarchy; type hierarchy | [#382](https://github.com/clice-io/clice/pull/382) | diff --git a/docs/en/features/semantic-tokens.md b/docs/en/features/semantic-tokens.md index 2c41bec08..bf1efcebf 100644 --- a/docs/en/features/semantic-tokens.md +++ b/docs/en/features/semantic-tokens.md @@ -18,6 +18,9 @@ Kinds derived from the token stream itself, independent of the AST. - [x] Comments — line, block and doc comments, including multiline blocks +
+ Example + ```cpp // A line comment. /* a one-line block comment */ @@ -32,8 +35,13 @@ Kinds derived from the token stream itself, independent of the AST. second */ int after_block = 1; ``` +
+ - [x] Literals — numbers, characters and strings, including raw strings +
+ Example + ```cpp int decimal = 42; int hexadecimal = 0xFF; @@ -48,8 +56,13 @@ Kinds derived from the token stream itself, independent of the AST. )"; int after_closing = 2; ``` +
+ - [x] Keywords — including alternative operator spellings and the contextual `final` / `override` +
+ Example + ```cpp bool logic(bool a, bool b) { return a and b or not a; @@ -69,8 +82,13 @@ Kinds derived from the token stream itself, independent of the AST. }; ``` +
+ - [x] Preprocessor directives — `#if` chains keep directive kinds; disabled branches keep lexical kinds; pragma arguments stay plain +
+ Example + ```cpp int before_conditional = 0; @@ -88,8 +106,13 @@ Kinds derived from the token stream itself, independent of the AST. #pragma pack(1) ``` +
+ - [x] Header names — quoted and angled `#include` filenames, including the split `# include` form +
+ Example + ```cpp #include "inc/angled.h" #include @@ -98,8 +121,13 @@ Kinds derived from the token stream itself, independent of the AST. int after_includes = 0; ``` +
+ - [ ] Literal prefixes and suffixes — encoding prefixes, type suffixes, digit separators and UDL suffixes as distinct tokens +
+ Example + ```cpp using size_type = decltype(sizeof(0)); constexpr size_type operator""_kb(unsigned long long n) { @@ -116,15 +144,25 @@ Kinds derived from the token stream itself, independent of the AST. auto udl = 4_kb; ``` +
+ - [ ] Escape sequences — highlighted distinctly inside string and character literals +
+ Example + ```cpp const char* escaped = "hello\nworld"; char hex_escape = '\x41'; ``` +
+ - [ ] Declarator vs operator disambiguation — `*`, `&`, `&&` as declarators vs arithmetic/logical operators ([clangd#1421](https://github.com/clangd/clangd/issues/1421)) +
+ Example + ```cpp int value = 1; int* pointer = &value; @@ -133,16 +171,26 @@ Kinds derived from the token stream itself, independent of the AST. int masked = value & 1; ``` +
+ - [ ] Primitive token type — a distinct kind for built-in types instead of plain `keyword` +
+ Example + ```cpp int number = 0; float ratio = 0.5f; void act(); ``` +
+ - [ ] Bracket token types — matching `()`, `[]`, `{}`, `<>` pairs as distinct kinds +
+ Example + ```cpp template struct Grid { @@ -156,6 +204,8 @@ Kinds derived from the token stream itself, independent of the AST. } ``` +
+ ## Declarations & References @@ -166,6 +216,9 @@ Names classified by the declaration they define or reference. - [x] Namespaces — definitions, references, nested namespaces and namespace aliases +
+ Example + ```cpp namespace demo { namespace inner { @@ -180,8 +233,13 @@ Names classified by the declaration they define or reference. int use_alias = alias::value; ``` +
+ - [x] Types — class, struct, union, enum and type aliases, at definitions and references +
+ Example + ```cpp class Widget {}; struct Point {}; @@ -200,8 +258,13 @@ Names classified by the declaration they define or reference. Mode current = Mode::Fast; ``` +
+ - [x] Functions and methods — declarations, definitions and call sites +
+ Example + ```cpp int twice(int value); @@ -221,8 +284,13 @@ Names classified by the declaration they define or reference. } ``` +
+ - [x] Variables — globals, locals, parameters, fields and enum members +
+ Example + ```cpp struct Holder { int field; @@ -242,8 +310,13 @@ Names classified by the declaration they define or reference. } ``` +
+ - [x] Templates — type and non-type template parameters, with the `templated` modifier on template names +
+ Example + ```cpp template struct Array { @@ -262,8 +335,13 @@ Names classified by the declaration they define or reference. int result = identity(3); ``` +
+ - [x] Concepts — definitions and uses as template constraints +
+ Example + ```cpp template concept Small = sizeof(T) <= 4; @@ -276,8 +354,13 @@ Names classified by the declaration they define or reference. void require_small(T value); ``` +
+ - [x] Labels — `goto` targets and label definitions +
+ Example + ```cpp void retry(bool again) { goto done; @@ -288,11 +371,16 @@ Names classified by the declaration they define or reference. } ``` +
+ - [x] Structured bindings — binding names at definition and use The opening `[` deliberately carries no token; only the binding names themselves are highlighted. +
+ Example + ```cpp struct Pair { int first, second; @@ -304,8 +392,13 @@ Names classified by the declaration they define or reference. } ``` +
+ - [x] Member initializer lists — initialized fields highlighted as fields ([clangd#122](https://github.com/clangd/clangd/issues/122)) +
+ Example + ```cpp struct Widget { int width; @@ -315,8 +408,13 @@ Names classified by the declaration they define or reference. }; ``` +
+ - [x] Using declarations — the introduced name keeps its target's kind ([clangd#2619](https://github.com/clangd/clangd/issues/2619)) +
+ Example + ```cpp namespace tools { inline int helper() { @@ -332,8 +430,13 @@ Names classified by the declaration they define or reference. Gadget gadget; ``` +
+ - [x] Lambda init-captures — the captured name highlighted as a variable ([clangd#868](https://github.com/clangd/clangd/issues/868)) +
+ Example + ```cpp int compute(); @@ -342,15 +445,25 @@ Names classified by the declaration they define or reference. }; ``` +
+ - [x] `sizeof...` — the pack parameter keeps its type-parameter token ([clangd#213](https://github.com/clangd/clangd/issues/213)) +
+ Example + ```cpp template constexpr auto count = sizeof...(Ts); ``` +
+ - [x] `using enum` — the enum name highlighted at the using site ([clangd#1283](https://github.com/clangd/clangd/issues/1283)) +
+ Example + ```cpp enum class Color { Red }; @@ -360,8 +473,13 @@ Names classified by the declaration they define or reference. } ``` +
+ - [x] Deduction guides — the guide name and the guided template highlighted +
+ Example + ```cpp template struct Vec { @@ -373,8 +491,13 @@ Names classified by the declaration they define or reference. Vec(It, It) -> Vec; ``` +
+ - [x] Explicit instantiation — the instantiated template name and its written template arguments highlighted, on the extern declaration and the definition alike ([clangd#316](https://github.com/clangd/clangd/issues/316)) +
+ Example + ```cpp struct Widget {}; @@ -388,6 +511,8 @@ Names classified by the declaration they define or reference. template struct Holder; ``` +
+ - [ ] Dependent names — resolved through the primary template where one is known _(partial)_ ([clangd#154](https://github.com/clangd/clangd/issues/154), [clangd#297](https://github.com/clangd/clangd/issues/297)) Dependent members of a known template (`Box`) resolve to the primary @@ -395,6 +520,9 @@ Names classified by the declaration they define or reference. parameter have no candidate declaration and currently get no token; heuristic coloring for such names remains open. +
+ Example + ```cpp template struct Box { @@ -418,8 +546,13 @@ Names classified by the declaration they define or reference. } ``` +
+ - [x] Variable templates — declarations, definitions, partial and full specializations +
+ Example + ```cpp template extern int pair_value; @@ -437,8 +570,13 @@ Names classified by the declaration they define or reference. int pair_value = 5; ``` +
+ - [x] Out-of-line member definitions — qualified names keep method kinds and modifiers +
+ Example + ```cpp struct Gauge { int read() const; @@ -452,8 +590,13 @@ Names classified by the declaration they define or reference. void Gauge::reset() {} ``` +
+ - [x] Alias templates — the alias name carries the type kind and the `templated` modifier +
+ Example + ```cpp template using Ptr = T*; @@ -467,8 +610,13 @@ Names classified by the declaration they define or reference. Ptr pointer = nullptr; ``` +
+ - [x] Template template parameters — declared and used as types +
+ Example + ```cpp template struct Holder {}; @@ -481,8 +629,13 @@ Names classified by the declaration they define or reference. Adaptor adaptor; ``` +
+ - [x] Lambda captures — by-copy and by-reference captures reference the captured variable; `this` stays a keyword +
+ Example + ```cpp struct S { int field; @@ -500,8 +653,13 @@ Names classified by the declaration they define or reference. }; ``` +
+ - [x] Range-based for — the loop variable at definition and use +
+ Example + ```cpp struct List { int* begin(); @@ -515,8 +673,13 @@ Names classified by the declaration they define or reference. } ``` +
+ - [x] Enum underlying types — the enum-base reference keeps its type kind +
+ Example + ```cpp using Byte = unsigned char; @@ -525,8 +688,13 @@ Names classified by the declaration they define or reference. Flags flags = Flags::A; ``` +
+ - [x] Friend declarations — befriended names resolve to their targets; inline friends define +
+ Example + ```cpp struct Widget; void ping(); @@ -538,11 +706,16 @@ Names classified by the declaration they define or reference. }; ``` +
+ - [ ] Dependent using declarations — `using T::name` in a template body _(partial)_ The introduced name and its uses currently get no token; the reserved dependent-name modifier is not emitted yet. +
+ Example + ```cpp template struct Derived : T { @@ -554,8 +727,13 @@ Names classified by the declaration they define or reference. }; ``` +
+ - [ ] Function explicit instantiation directives — clang builds no node for the directive, so every identifier on it goes unpainted: the name, the template arguments and the parameter types _(partial)_ ([llvm#191658](https://github.com/llvm/llvm-project/issues/191658)) +
+ Example + ```cpp struct Widget {}; @@ -567,8 +745,13 @@ Names classified by the declaration they define or reference. template void convert(Widget); ``` +
+ - [ ] Variable explicit instantiation directives — clang builds no node for the directive, so every identifier on it goes unpainted: the name, the template arguments, even the declarator's type _(partial)_ ([llvm#191658](https://github.com/llvm/llvm-project/issues/191658)) +
+ Example + ```cpp struct Widget {}; @@ -580,8 +763,13 @@ Names classified by the declaration they define or reference. template Widget zero; ``` +
+ - [x] Explicit instantiation member bodies — a dependent name paints as its actual resolution: agreeing kinds keep the modifiers all instantiations share, disagreeing kinds paint a conflict +
+ Example + ```cpp struct A { static void hit(); @@ -616,6 +804,8 @@ Names classified by the declaration they define or reference. template struct E; ``` +
+ ## Modules @@ -624,6 +814,9 @@ Names classified by the declaration they define or reference. - [x] Module declarations — the contextual `module` keyword, dotted module names and the private fragment +
+ Example + ```cpp module; @@ -640,16 +833,26 @@ Names classified by the declaration they define or reference. #endif ``` +
+ - [x] Module partitions — partition names in the module declaration +
+ Example + ```cpp export module demo.core:part; export int partition_value = 1; ``` +
+ - [x] `module` and `import` as identifiers — contextual keywords keep their semantic kinds outside module declarations +
+ Example + ```cpp void f() { struct module {}; @@ -659,6 +862,8 @@ Names classified by the declaration they define or reference. } ``` +
+ ## Token Modifiers @@ -667,6 +872,9 @@ Names classified by the declaration they define or reference. - [x] Declaration vs definition — the modifier distinguishes the two +
+ Example + ```cpp int measure(int value); @@ -679,8 +887,13 @@ Names classified by the declaration they define or reference. struct Sensor {}; ``` +
+ - [x] Static — class-level members and static locals +
+ Example + ```cpp struct Counter { static int total; @@ -695,11 +908,16 @@ Names classified by the declaration they define or reference. } ``` +
+ - [x] Readonly — const and constexpr values, const methods and enum members Readonly is currently value-based: a pointer to const counts as readonly even though the pointer itself can change. +
+ Example + ```cpp enum class Level { High }; @@ -718,8 +936,13 @@ Names classified by the declaration they define or reference. } ``` +
+ - [x] Virtual and abstract — virtual methods, pure virtual methods and abstract classes +
+ Example + ```cpp struct Shape { virtual int area(); @@ -736,8 +959,13 @@ Names classified by the declaration they define or reference. } ``` +
+ - [x] Deprecated — `[[deprecated]]` declarations and their uses +
+ Example + ```cpp [[deprecated("use next_api")]] void old_api(); void next_api(); @@ -747,8 +975,13 @@ Names classified by the declaration they define or reference. } ``` +
+ - [x] Default library — symbols declared in system headers +
+ Example + ```cpp int before_includes = 0; @@ -757,8 +990,13 @@ Names classified by the declaration they define or reference. int used = system_helper(); ``` +
+ - [ ] Scope modifiers — function, class, file and global scope ([clangd#352](https://github.com/clangd/clangd/issues/352)) +
+ Example + ```cpp int global_scope; static int file_scope; @@ -772,8 +1010,13 @@ Names classified by the declaration they define or reference. }; ``` +
+ - [ ] Mutable reference and pointer — arguments passed by non-const reference or pointer ([clangd#839](https://github.com/clangd/clangd/issues/839)) +
+ Example + ```cpp void modify(int& out); void modify_through(int* out); @@ -787,15 +1030,25 @@ Names classified by the declaration they define or reference. } ``` +
+ - [ ] Deduced — mark deduced types such as `auto` and `decltype` +
+ Example + ```cpp auto deduced_int = 1; decltype(deduced_int) same_type = 2; ``` +
+ - [ ] User-defined operators — distinguish overloaded operators from built-in ones ([clangd#1521](https://github.com/clangd/clangd/issues/1521)) +
+ Example + ```cpp struct Vec { Vec operator+(const Vec& other) const; @@ -810,6 +1063,8 @@ Names classified by the declaration they define or reference. } ``` +
+ ## Conflict & Ambiguity @@ -823,6 +1078,9 @@ which clients typically display in a neutral color. - [x] Type vs function — a name naming both renders as `conflict` +
+ Example + ```cpp namespace shop { struct Widget {}; @@ -832,8 +1090,13 @@ which clients typically display in a neutral color. using shop::Widget; ``` +
+ - [x] Type vs variable — a name naming both renders as `conflict` +
+ Example + ```cpp namespace mixed { struct Thing {}; @@ -843,8 +1106,13 @@ which clients typically display in a neutral color. using mixed::Thing; ``` +
+ - [x] Same-kind overload sets — a name naming only functions is no conflict +
+ Example + ```cpp namespace ops { void apply(); @@ -859,11 +1127,16 @@ which clients typically display in a neutral color. } ``` +
+ - [x] Injected class name — the class name used as a constructor call inside the class The written name renders as the class; the constructor reference it implies paints nothing extra — the `(` stays token-free. +
+ Example + ```cpp struct Widget { Widget(int size); @@ -874,6 +1147,8 @@ which clients typically display in a neutral color. }; ``` +
+ ## Token Correctness @@ -888,6 +1163,9 @@ Shapes clice pins deliberately, including issues clangd got wrong. kind and the declaration/definition modifiers, the class name after it stays a reference to the class. +
+ Example + ```cpp struct Session { Session(); @@ -903,21 +1181,31 @@ Shapes clice pins deliberately, including issues clangd got wrong. } ``` +
+ - [x] Anonymous parameters — unnamed parameters produce no tokens The punctuation after an unnamed parameter's type stays token-free. +
+ Example + ```cpp void take_one(int) {} void take_two(int, char* c) {} ``` +
+ - [x] Operator names — the `operator` keyword and call-site punctuation stay plain An operator's written name is keyword plus punctuation, so no name token is painted: `operator` keeps its keyword classification and call sites emit nothing on the operator symbol. +
+ Example + ```cpp struct Value { Value& operator=(const Value& other); @@ -930,8 +1218,13 @@ Shapes clice pins deliberately, including issues clangd got wrong. } ``` +
+ - [x] Destructors of class templates — the `~` shape holds under templates +
+ Example + ```cpp template struct Holder { @@ -942,8 +1235,13 @@ Shapes clice pins deliberately, including issues clangd got wrong. Holder::~Holder() {} ``` +
+ - [x] Conversion operators — written as keywords, converting uses paint nothing extra +
+ Example + ```cpp struct Ratio { operator double() const; @@ -958,8 +1256,13 @@ Shapes clice pins deliberately, including issues clangd got wrong. } ``` +
+ - [x] Pseudo-destructor on a template parameter — the `~` paints nothing; the type name keeps its kind +
+ Example + ```cpp template void reset(T* value) { @@ -967,8 +1270,13 @@ Shapes clice pins deliberately, including issues clangd got wrong. } ``` +
+ - [x] Defaulted and deleted members — special-member names keep their definition tokens +
+ Example + ```cpp struct Session { Session() = default; @@ -977,6 +1285,8 @@ Shapes clice pins deliberately, including issues clangd got wrong. }; ``` +
+ ## Attributes @@ -985,6 +1295,9 @@ Shapes clice pins deliberately, including issues clangd got wrong. - [ ] Attribute names — standard and vendor attributes, and expressions inside them ([clangd#2209](https://github.com/clangd/clangd/issues/2209)) +
+ Example + ```cpp [[nodiscard]] int compute(); [[deprecated("use v2")]] void old_func(); @@ -993,6 +1306,8 @@ Shapes clice pins deliberately, including issues clangd got wrong. struct [[gnu::packed]] Packed {}; ``` +
+ ## Macros @@ -1004,14 +1319,22 @@ them from their expansions belongs to a future expansion-preview feature. - [x] Macro definition and expansion +
+ Example + ```cpp #define SQUARE(x) ((x) * (x)) [[maybe_unused]] static int squared = SQUARE(4); ``` +
+ - [x] Expansion sites and arguments — expansion names are macros, written arguments keep their semantics, definition bodies stay lexical +
+ Example + ```cpp int value = 1; @@ -1027,8 +1350,13 @@ them from their expansions belongs to a future expansion-preview feature. } ``` +
+ - [ ] Object-like vs function-like macros — distinct highlighting for the two forms ([clangd#2649](https://github.com/clangd/clangd/issues/2649)) +
+ Example + ```cpp #define MAX_SIZE 1024 #define CHECK(x) ((x) ? 1 : 0) @@ -1036,6 +1364,8 @@ them from their expansions belongs to a future expansion-preview feature. int checked = CHECK(MAX_SIZE); ``` +
+ ## Other Known Gaps @@ -1087,5 +1417,5 @@ as semantic tokens. | Date | Change | PR | | ---------- | ------------------------------------------------------------------------- | -------------------------------------------------- | -| — | Initial semantic token types and modifiers, full document tokens | — | | 2026-08-01 | Explicit instantiation directive names pinned as unpainted until clang 23 | [#571](https://github.com/clice-io/clice/pull/571) | +| 2024-08-31 | Initial semantic token types and modifiers, full document tokens | — | diff --git a/docs/en/features/signature-help.md b/docs/en/features/signature-help.md index 779c73123..2e68e023b 100644 --- a/docs/en/features/signature-help.md +++ b/docs/en/features/signature-help.md @@ -34,6 +34,9 @@ Registered: `(`, `)`, `{`, `}`, `<`, `>`, `,` - [x] Function overloads — every overload of the callee, each with its parameter list and return type +
+ Example + ```cpp void foo(); void foo(int x); @@ -44,8 +47,13 @@ Registered: `(`, `)`, `{`, `}`, `<`, `>`, `,` } ``` +
+ - [x] Active parameter tracking — the parameter under the cursor is bracketed; the point sits in the second argument +
+ Example + ```cpp void bar(int first, double second, char third); @@ -54,8 +62,13 @@ Registered: `(`, `)`, `{`, `}`, `<`, `>`, `,` } ``` +
+ - [x] Member function overloads — a non-const receiver lists both the const and non-const overloads; the trailing const qualifier is not rendered in the label +
+ Example + ```cpp struct Buffer { int at(int index); @@ -68,8 +81,13 @@ Registered: `(`, `)`, `{`, `}`, `<`, `>`, `,` } ``` +
+ - [x] Default arguments in the label — parameters with defaults render their initializer in the signature +
+ Example + ```cpp void configure(int width, int height = 100, bool visible = true); @@ -78,8 +96,13 @@ Registered: `(`, `)`, `{`, `}`, `<`, `>`, `,` } ``` +
+ - [x] C-style variadic function — named parameters are listed while the trailing ellipsis is elided from the label +
+ Example + ```cpp void record(int code, ...); @@ -88,8 +111,13 @@ Registered: `(`, `)`, `{`, `}`, `<`, `>`, `,` } ``` +
+ - [x] Variadic template pack — the parameter pack renders as the callee's uninstantiated signature +
+ Example + ```cpp template void emit(Args... args); @@ -99,8 +127,13 @@ Registered: `(`, `)`, `{`, `}`, `<`, `>`, `,` } ``` +
+ - [x] Active parameter past a shorter overload — with the cursor in the second argument, only overloads that declare a second parameter remain +
+ Example + ```cpp void draw(); void draw(int x); @@ -111,6 +144,8 @@ Registered: `(`, `)`, `{`, `}`, `<`, `>`, `,` } ``` +
+ - [x] Template instantiation pattern resolution (shows template pattern, not instantiation) @@ -152,6 +187,9 @@ Registered: `(`, `)`, `{`, `}`, `<`, `>`, `,` - [x] Constructors and aggregates — constructor calls render without a return arrow; aggregate initialization lists the fields in braces ([clangd#726](https://github.com/clangd/clangd/issues/726), [clangd#2541](https://github.com/clangd/clangd/issues/2541)) +
+ Example + ```cpp struct Point { int x; @@ -168,8 +206,13 @@ Registered: `(`, `)`, `{`, `}`, `<`, `>`, `,` } ``` +
+ - [x] Function pointer calls — the prototype's parameter names show, not just the types +
+ Example + ```cpp int main() { void (*callback)(int code, double value) = nullptr; @@ -177,8 +220,13 @@ Registered: `(`, `)`, `{`, `}`, `<`, `>`, `,` } ``` +
+ - [x] Template argument lists — template parameters show as the signature; a class template points at its kind, not a return type ([clangd#299](https://github.com/clangd/clangd/issues/299), [clangd#1387](https://github.com/clangd/clangd/issues/1387)) +
+ Example + ```cpp template struct Pair {}; @@ -186,8 +234,13 @@ Registered: `(`, `)`, `{`, `}`, `<`, `>`, `,` Pair p; ``` +
+ - [x] Nested calls — the inner call's help shows at the inner marker and the outer call's help at the outer marker +
+ Example + ```cpp int inner(int a); int outer(int b, int c); @@ -197,8 +250,13 @@ Registered: `(`, `)`, `{`, `}`, `<`, `>`, `,` } ``` +
+ - [x] Functor call — invoking an object routes signature help to its operator() overload +
+ Example + ```cpp struct Adder { int operator()(int a, int b); @@ -210,8 +268,13 @@ Registered: `(`, `)`, `{`, `}`, `<`, `>`, `,` } ``` +
+ - [x] Lambda call — calling a lambda variable offers the closure's operator() parameters +
+ Example + ```cpp int main() { auto square = [](int n) { @@ -221,8 +284,13 @@ Registered: `(`, `)`, `{`, `}`, `<`, `>`, `,` } ``` +
+ - [x] New expression — a new-expression's constructor arguments drive signature help +
+ Example + ```cpp struct Node { Node(int value, Node* next); @@ -233,6 +301,8 @@ Registered: `(`, `)`, `{`, `}`, `<`, `>`, `,` } ``` +
+ - [ ] Inherited constructors — show base class constructors when calling from derived ([clangd#1363](https://github.com/clangd/clangd/issues/1363)) @@ -329,6 +399,6 @@ Registered: `(`, `)`, `{`, `}`, `<`, `>`, `,` ## Changelog -| Date | Change | PR | -| ---- | --------------------------------------------------------------------------- | --- | -| — | Function overload signatures, active parameter tracking, trigger characters | — | +| Date | Change | PR | +| ---------- | --------------------------------------------------------------------------- | --- | +| 2024-10-27 | Function overload signatures, active parameter tracking, trigger characters | — | diff --git a/docs/semantic-tokens-example.cpp b/docs/semantic-tokens-example.cpp deleted file mode 100644 index 4df7a8147..000000000 --- a/docs/semantic-tokens-example.cpp +++ /dev/null @@ -1,62 +0,0 @@ -/* - * Block comment - */ -#include -#include - -#define STRINGIFY(x) #x - -using namespace std; // line comment - -namespace foo { - -typedef struct Struct { - int field; -} Typedef; - -enum Enum { Foo = 1, Bar = 2 }; - -Typedef* globalVar; -extern Typedef* externVar; - -template -class Class { - T n; - -public: - /** - */ - void function(int param1, int param2, int param3) { - int localVar1, localVar2, localVar3; - int* localVar = new int[1]; - std::vector vec = {1, 2, 3}; - this->n = N; - localVar1 = param1 + param2 + localVar3; - - label: - printf("Formatted string %d\n\g", localVar[0]); - printf(R"**(Formatted raw-string %d\n)**", 1); - -/** - * Macro documentation comment - * @param A description - */ -#define FOO(A) A -#ifdef DEBUG - printf("debug"); -#endif - } -}; - -template -concept Concept = requires(T t) { t.field; }; - -template -struct Widget { - Widget(T t); -}; - -template -Widget(T) -> Widget; - -} // namespace foo diff --git a/tools/feature_docs.ts b/tools/feature_docs.ts index f024328fc..c46d9d698 100644 --- a/tools/feature_docs.ts +++ b/tools/feature_docs.ts @@ -343,10 +343,17 @@ function renderItem(fx: Fixture): string { const runs = fx.example.match(/`+/g) ?? []; const longest = runs.reduce((max, run) => Math.max(max, run.length), 0); const fence = "`".repeat(Math.max(3, longest + 1)); + // `
` rather than VitePress's `::: details` container so the + // example collapses on GitHub too. + out.push(""); + out.push("
"); + out.push(" Example"); out.push(""); out.push(` ${fence}cpp`); out.push(...indent(fx.example)); out.push(` ${fence}`); + out.push(""); + out.push("
"); } return out.join("\n"); } From 602490ff8e902040999a5e27b1f40c380450dd24 Mon Sep 17 00:00:00 2001 From: ykiko Date: Sat, 8 Aug 2026 19:01:05 +0800 Subject: [PATCH 2/3] docs: correct changelog provenance for lint, code-action, semantic tokens --- docs/en/features/code-action.md | 2 +- docs/en/features/lint.md | 7 ++++--- docs/en/features/semantic-tokens.md | 3 ++- 3 files changed, 7 insertions(+), 5 deletions(-) diff --git a/docs/en/features/code-action.md b/docs/en/features/code-action.md index 3d1dd131e..87f5c1229 100644 --- a/docs/en/features/code-action.md +++ b/docs/en/features/code-action.md @@ -76,4 +76,4 @@ Cursor/selection-driven refactorings. | Date | Change | PR | | ---------- | ---------------------------------------- | --- | -| 2024-09-16 | Stub handler (always returns empty list) | — | +| 2024-11-24 | Stub handler (always returns empty list) | — | diff --git a/docs/en/features/lint.md b/docs/en/features/lint.md index 89baeb71e..44d07b60a 100644 --- a/docs/en/features/lint.md +++ b/docs/en/features/lint.md @@ -58,6 +58,7 @@ Respects standard `.clang-tidy` configuration files in the project tree. ## Changelog -| Date | Change | PR | -| ---------- | ---------------------------------------------- | -------------------------------------------------- | -| 2026-07-22 | Stub implementation, dependency graph tracking | [#539](https://github.com/clice-io/clice/pull/539) | +| Date | Change | PR | +| ---------- | -------------------------------------------- | -------------------------------------------------- | +| 2026-07-22 | Stub `clice lint` subcommand | [#539](https://github.com/clice-io/clice/pull/539) | +| 2026-03-28 | Dependency graph tracking for included files | [#368](https://github.com/clice-io/clice/pull/368) | diff --git a/docs/en/features/semantic-tokens.md b/docs/en/features/semantic-tokens.md index bf1efcebf..e6c01e4ac 100644 --- a/docs/en/features/semantic-tokens.md +++ b/docs/en/features/semantic-tokens.md @@ -1418,4 +1418,5 @@ as semantic tokens. | Date | Change | PR | | ---------- | ------------------------------------------------------------------------- | -------------------------------------------------- | | 2026-08-01 | Explicit instantiation directive names pinned as unpainted until clang 23 | [#571](https://github.com/clice-io/clice/pull/571) | -| 2024-08-31 | Initial semantic token types and modifiers, full document tokens | — | +| 2024-11-26 | Full document tokens (`textDocument/semanticTokens/full`) | — | +| 2024-09-16 | Initial semantic token types and modifiers | — | From 1515eb096a31b257eabe985e9db04c72c35e3acf Mon Sep 17 00:00:00 2001 From: ykiko Date: Sat, 8 Aug 2026 19:29:20 +0800 Subject: [PATCH 3/3] docs: date signature-help changelog to its enabling PR --- docs/en/features/signature-help.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/en/features/signature-help.md b/docs/en/features/signature-help.md index 2e68e023b..a39256155 100644 --- a/docs/en/features/signature-help.md +++ b/docs/en/features/signature-help.md @@ -399,6 +399,6 @@ Registered: `(`, `)`, `{`, `}`, `<`, `>`, `,` ## Changelog -| Date | Change | PR | -| ---------- | --------------------------------------------------------------------------- | --- | -| 2024-10-27 | Function overload signatures, active parameter tracking, trigger characters | — | +| Date | Change | PR | +| ---------- | --------------------------------------------------------------------------- | -------------------------------------------------- | +| 2025-08-23 | Function overload signatures, active parameter tracking, trigger characters | [#187](https://github.com/clice-io/clice/pull/187) |