Include outline items for c/c++ functions returning pointers-to-pointers, references

Max Brunsfeld and Julia Risley created

Co-authored-by: Julia Risley <julia@zed.dev>

Change summary

crates/zed/src/languages/c/outline.scm   | 64 +++++++++++++++++++++----
crates/zed/src/languages/cpp/outline.scm | 48 +++++++++++++++++++
2 files changed, 100 insertions(+), 12 deletions(-)

Detailed changes

crates/zed/src/languages/c/outline.scm 🔗

@@ -14,17 +14,57 @@
     declarator: (_) @name) @item
 
 (declaration
-    type: (_) @context
-    declarator: (function_declarator
-        declarator: (_) @name
-        parameters: (parameter_list
-            "(" @context
-            ")" @context))) @item
+    (type_qualifier)? @context
+    type: (_)? @context
+    declarator: [
+        (function_declarator
+            declarator: (_) @name
+            parameters: (parameter_list
+                "(" @context
+                ")" @context))
+        (pointer_declarator
+            "*" @context
+            declarator: (function_declarator
+                declarator: (_) @name
+                parameters: (parameter_list
+                    "(" @context
+                    ")" @context)))
+        (pointer_declarator
+            "*" @context
+            declarator: (pointer_declarator
+                "*" @context
+                declarator: (function_declarator
+                    declarator: (_) @name
+                    parameters: (parameter_list
+                        "(" @context
+                        ")" @context))))
+    ]
+) @item
 
 (function_definition
-    type: (_) @context
-    declarator: (function_declarator
-        declarator: (_) @name
-        parameters: (parameter_list
-            "(" @context
-            ")" @context))) @item
+    (type_qualifier)? @context
+    type: (_)? @context
+    declarator: [
+        (function_declarator
+            declarator: (_) @name
+            parameters: (parameter_list
+                "(" @context
+                ")" @context))
+        (pointer_declarator
+            "*" @context
+            declarator: (function_declarator
+                declarator: (_) @name
+                parameters: (parameter_list
+                    "(" @context
+                    ")" @context)))
+        (pointer_declarator
+            "*" @context
+            declarator: (pointer_declarator
+                "*" @context
+                declarator: (function_declarator
+                    declarator: (_) @name
+                    parameters: (parameter_list
+                        "(" @context
+                        ")" @context))))
+    ]
+) @item

crates/zed/src/languages/cpp/outline.scm 🔗

@@ -51,6 +51,22 @@
                 parameters: (parameter_list
                     "(" @context
                     ")" @context)))
+        (pointer_declarator
+            "*" @context
+            declarator: (pointer_declarator
+                "*" @context
+                declarator: (function_declarator
+                    declarator: (_) @name
+                    parameters: (parameter_list
+                        "(" @context
+                        ")" @context))))
+        (reference_declarator
+            ["&" "&&"] @context
+            (function_declarator
+                declarator: (_) @name
+                parameters: (parameter_list
+                    "(" @context
+                    ")" @context)))
     ]
     (type_qualifier)? @context) @item
 
@@ -74,6 +90,22 @@
                 parameters: (parameter_list
                     "(" @context
                     ")" @context)))
+        (pointer_declarator
+            "*" @context
+            declarator: (pointer_declarator
+                "*" @context
+                declarator: (function_declarator
+                    declarator: (_) @name
+                    parameters: (parameter_list
+                        "(" @context
+                        ")" @context))))
+        (reference_declarator
+            ["&" "&&"] @context
+            (function_declarator
+                declarator: (_) @name
+                parameters: (parameter_list
+                    "(" @context
+                    ")" @context)))
     ]
     (type_qualifier)? @context) @item
 
@@ -97,5 +129,21 @@
                 parameters: (parameter_list
                     "(" @context
                     ")" @context)))
+        (pointer_declarator
+            "*" @context
+            declarator: (pointer_declarator
+                "*" @context
+                declarator: (function_declarator
+                    declarator: (_) @name
+                    parameters: (parameter_list
+                        "(" @context
+                        ")" @context))))
+        (reference_declarator
+            ["&" "&&"] @context
+            (function_declarator
+                declarator: (_) @name
+                parameters: (parameter_list
+                    "(" @context
+                    ")" @context)))
     ]
     (type_qualifier)? @context) @item