From 286728b7e32588e3ef5abc6d99705fee5efe3dec Mon Sep 17 00:00:00 2001
From: ozacod <47009516+ozacod@users.noreply.github.com>
Date: Tue, 6 Jan 2026 22:38:16 +0300
Subject: [PATCH] languages: Fix C/C++ outline for mixed storage classes and
type qualifiers (#46135)
Current tree sitter configuration for the outline was not working
correctly since the rule required a strict order, firstly
storage_class_specifier then type_qualifier. This resulted in a failure
to recognize types such as "constexpr int", "const double", etc. This PR
proposes a solution with diagnostic capture of type and storage
qualifiers which ensures full context capture and works well with C++.
Before:
After:
Release Notes:
- Fixed outline configuration for C++ variables with complex specifiers.
---
crates/languages/src/cpp/outline.scm | 11 ++++++++---
1 file changed, 8 insertions(+), 3 deletions(-)
diff --git a/crates/languages/src/cpp/outline.scm b/crates/languages/src/cpp/outline.scm
index f833919e7a..1f20bf693c 100644
--- a/crates/languages/src/cpp/outline.scm
+++ b/crates/languages/src/cpp/outline.scm
@@ -46,8 +46,10 @@
name: (_) @name) @item
(declaration
- (storage_class_specifier) @context
- (type_qualifier)? @context
+ [
+ (storage_class_specifier)
+ (type_qualifier)
+ ]* @context
type: (_) @context
declarator: (init_declarator
; The declaration may define multiple variables, using @item on the
@@ -129,7 +131,10 @@
(type_qualifier)? @context) @item
(field_declaration
- (type_qualifier)? @context
+ [
+ (storage_class_specifier)
+ (type_qualifier)
+ ]* @context
type: (_) @context
declarator: [
(field_identifier) @name