@oisheek_c/codeforge 1.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (141) hide show
  1. package/LICENSE +0 -0
  2. package/README.md +7 -0
  3. package/apps/cli/bin/codeforge.cmd +2 -0
  4. package/apps/cli/src/bootstrap.js +115 -0
  5. package/apps/cli/src/cli.js +189 -0
  6. package/apps/cli/src/dev/git.js +17 -0
  7. package/apps/cli/src/dev/index.js +68 -0
  8. package/apps/cli/src/dev/provider.js +48 -0
  9. package/apps/cli/src/dev/scanner.js +14 -0
  10. package/apps/cli/src/index.js +31 -0
  11. package/bin/codeforge.js +2 -0
  12. package/package.json +63 -0
  13. package/packages/agent/contextBuilder.js +234 -0
  14. package/packages/agent/executor.js +1729 -0
  15. package/packages/agent/fallback.js +129 -0
  16. package/packages/agent/index.js +26 -0
  17. package/packages/agent/intent.js +73 -0
  18. package/packages/agent/modelSelector.js +469 -0
  19. package/packages/agent/planner.js +379 -0
  20. package/packages/agent/rag.js +412 -0
  21. package/packages/agent/ragSelector.js +570 -0
  22. package/packages/agent/router.js +121 -0
  23. package/packages/agent/thinking.js +54 -0
  24. package/packages/agent/toolCalls.js +258 -0
  25. package/packages/config/config.js +391 -0
  26. package/packages/config/defaults.js +72 -0
  27. package/packages/config/index.js +2 -0
  28. package/packages/core/approvalPolicy.js +140 -0
  29. package/packages/core/context.js +0 -0
  30. package/packages/core/message.js +0 -0
  31. package/packages/core/plan.js +0 -0
  32. package/packages/core/reasoning.js +0 -0
  33. package/packages/core/result.js +0 -0
  34. package/packages/core/retrieval.js +0 -0
  35. package/packages/core/tool.js +536 -0
  36. package/packages/git/branch.js +7 -0
  37. package/packages/git/commit.js +16 -0
  38. package/packages/git/diff.js +15 -0
  39. package/packages/git/git.js +35 -0
  40. package/packages/git/index.js +6 -0
  41. package/packages/git/remote.js +9 -0
  42. package/packages/git/status.js +11 -0
  43. package/packages/memory/index.js +0 -0
  44. package/packages/memory/project.js +0 -0
  45. package/packages/memory/session.js +0 -0
  46. package/packages/prompts/builder.js +43 -0
  47. package/packages/prompts/coder.js +38 -0
  48. package/packages/prompts/index.js +5 -0
  49. package/packages/prompts/planner.js +49 -0
  50. package/packages/prompts/reviewer.js +38 -0
  51. package/packages/prompts/system.js +94 -0
  52. package/packages/providers/index.js +31 -0
  53. package/packages/providers/openrouter.js +380 -0
  54. package/packages/reasoning/budget.js +0 -0
  55. package/packages/reasoning/chain.js +0 -0
  56. package/packages/reasoning/coder.js +0 -0
  57. package/packages/reasoning/evaluator.js +0 -0
  58. package/packages/reasoning/index.js +8 -0
  59. package/packages/reasoning/planner.js +0 -0
  60. package/packages/reasoning/reflector.js +0 -0
  61. package/packages/reasoning/reviewer.js +0 -0
  62. package/packages/reasoning/router.js +0 -0
  63. package/packages/retrieval/budget.js +92 -0
  64. package/packages/retrieval/cache.js +84 -0
  65. package/packages/retrieval/embeddings.js +147 -0
  66. package/packages/retrieval/graph.js +151 -0
  67. package/packages/retrieval/imports.js +74 -0
  68. package/packages/retrieval/index.js +9 -0
  69. package/packages/retrieval/parser/extractors/calls.js +43 -0
  70. package/packages/retrieval/parser/extractors/comments.js +49 -0
  71. package/packages/retrieval/parser/extractors/diagnostics.js +21 -0
  72. package/packages/retrieval/parser/extractors/exports.js +71 -0
  73. package/packages/retrieval/parser/extractors/imports.js +40 -0
  74. package/packages/retrieval/parser/extractors/index.js +12 -0
  75. package/packages/retrieval/parser/extractors/metrics.js +78 -0
  76. package/packages/retrieval/parser/extractors/symbols.js +51 -0
  77. package/packages/retrieval/parser/extractors/todos.js +53 -0
  78. package/packages/retrieval/parser/helpers.js +138 -0
  79. package/packages/retrieval/parser/index.js +10 -0
  80. package/packages/retrieval/parser/languages/c.js +14 -0
  81. package/packages/retrieval/parser/languages/cpp.js +21 -0
  82. package/packages/retrieval/parser/languages/csharp.js +14 -0
  83. package/packages/retrieval/parser/languages/go.js +14 -0
  84. package/packages/retrieval/parser/languages/index.js +12 -0
  85. package/packages/retrieval/parser/languages/java.js +14 -0
  86. package/packages/retrieval/parser/languages/javascript.js +14 -0
  87. package/packages/retrieval/parser/languages/php.js +14 -0
  88. package/packages/retrieval/parser/languages/python.js +14 -0
  89. package/packages/retrieval/parser/languages/ruby.js +14 -0
  90. package/packages/retrieval/parser/languages/rust.js +14 -0
  91. package/packages/retrieval/parser/languages/swift.js +14 -0
  92. package/packages/retrieval/parser/languages/typescript.js +14 -0
  93. package/packages/retrieval/parser/languages.js +218 -0
  94. package/packages/retrieval/parser/parseFile.js +79 -0
  95. package/packages/retrieval/parser/parseRepository.js +78 -0
  96. package/packages/retrieval/parser/queries/c.js +148 -0
  97. package/packages/retrieval/parser/queries/cpp.js +198 -0
  98. package/packages/retrieval/parser/queries/csharp.js +151 -0
  99. package/packages/retrieval/parser/queries/go.js +124 -0
  100. package/packages/retrieval/parser/queries/index.js +35 -0
  101. package/packages/retrieval/parser/queries/java.js +128 -0
  102. package/packages/retrieval/parser/queries/javascript.js +181 -0
  103. package/packages/retrieval/parser/queries/php.js +140 -0
  104. package/packages/retrieval/parser/queries/python.js +110 -0
  105. package/packages/retrieval/parser/queries/ruby.js +105 -0
  106. package/packages/retrieval/parser/queries/rust.js +175 -0
  107. package/packages/retrieval/parser/queries/swift.js +134 -0
  108. package/packages/retrieval/parser/queries/typescript.js +202 -0
  109. package/packages/retrieval/parser/registry.js +107 -0
  110. package/packages/retrieval/parser/traverse.js +82 -0
  111. package/packages/retrieval/parser/types.js +239 -0
  112. package/packages/retrieval/parser.js +78 -0
  113. package/packages/retrieval/ranker.js +73 -0
  114. package/packages/retrieval/retriever.js +910 -0
  115. package/packages/retrieval/symbols.js +145 -0
  116. package/packages/scanner/detect.js +69 -0
  117. package/packages/scanner/ignore.js +12 -0
  118. package/packages/scanner/index.js +2 -0
  119. package/packages/scanner/root.js +21 -0
  120. package/packages/scanner/scanner.js +35 -0
  121. package/packages/scanner/tree.js +45 -0
  122. package/packages/terminal/activity.js +514 -0
  123. package/packages/terminal/banner.js +34 -0
  124. package/packages/terminal/colors.js +16 -0
  125. package/packages/terminal/dashboard.js +94 -0
  126. package/packages/terminal/index.js +19 -0
  127. package/packages/terminal/logger.js +43 -0
  128. package/packages/terminal/prompt.js +11 -0
  129. package/packages/terminal/renderer.js +1209 -0
  130. package/packages/terminal/spinner.js +9 -0
  131. package/packages/tools/editFile.js +261 -0
  132. package/packages/tools/filesystem.js +82 -0
  133. package/packages/tools/index.js +24 -0
  134. package/packages/tools/readFile.js +101 -0
  135. package/packages/tools/registry.js +227 -0
  136. package/packages/tools/searchFiles.js +322 -0
  137. package/packages/tools/shell.js +352 -0
  138. package/packages/tools/writeFile.js +212 -0
  139. package/packages/utils/constants.js +0 -0
  140. package/packages/utils/helpers.js +0 -0
  141. package/packages/utils/logger.js +0 -0
@@ -0,0 +1,218 @@
1
+ /**
2
+ * packages/retrieval/parser/languages.js
3
+ *
4
+ * Language registry.
5
+ * Maps language identifiers to Tree-sitter grammars.
6
+ */
7
+
8
+ import JavaScript from "tree-sitter-javascript";
9
+ import TypeScript from "tree-sitter-typescript";
10
+ import Python from "tree-sitter-python";
11
+ import Go from "tree-sitter-go";
12
+ import Rust from "tree-sitter-rust";
13
+ import Java from "tree-sitter-java";
14
+ import C from "tree-sitter-c";
15
+ import CPP from "tree-sitter-cpp";
16
+ import CSharp from "tree-sitter-c-sharp";
17
+ import PHP from "tree-sitter-php";
18
+ import Ruby from "tree-sitter-ruby";
19
+ import Swift from "tree-sitter-swift";
20
+
21
+ const LANGUAGES = new Map([
22
+ [
23
+ "javascript",
24
+ {
25
+ id: "javascript",
26
+ grammar: JavaScript,
27
+ extensions: [".js", ".mjs", ".cjs"],
28
+ aliases: ["javascript", "js"],
29
+ },
30
+ ],
31
+
32
+ [
33
+ "jsx",
34
+ {
35
+ id: "jsx",
36
+ grammar: JavaScript,
37
+ extensions: [".jsx"],
38
+ aliases: ["jsx"],
39
+ },
40
+ ],
41
+
42
+ [
43
+ "typescript",
44
+ {
45
+ id: "typescript",
46
+ grammar: TypeScript.typescript,
47
+ extensions: [".ts", ".mts", ".cts"],
48
+ aliases: ["typescript", "ts"],
49
+ },
50
+ ],
51
+
52
+ [
53
+ "tsx",
54
+ {
55
+ id: "tsx",
56
+ grammar: TypeScript.tsx,
57
+ extensions: [".tsx"],
58
+ aliases: ["tsx"],
59
+ },
60
+ ],
61
+
62
+ [
63
+ "python",
64
+ {
65
+ id: "python",
66
+ grammar: Python,
67
+ extensions: [".py"],
68
+ aliases: ["python", "py"],
69
+ },
70
+ ],
71
+
72
+ [
73
+ "go",
74
+ {
75
+ id: "go",
76
+ grammar: Go,
77
+ extensions: [".go"],
78
+ aliases: ["go", "golang"],
79
+ },
80
+ ],
81
+
82
+ [
83
+ "rust",
84
+ {
85
+ id: "rust",
86
+ grammar: Rust,
87
+ extensions: [".rs"],
88
+ aliases: ["rust", "rs"],
89
+ },
90
+ ],
91
+
92
+ [
93
+ "java",
94
+ {
95
+ id: "java",
96
+ grammar: Java,
97
+ extensions: [".java"],
98
+ aliases: ["java"],
99
+ },
100
+ ],
101
+
102
+ [
103
+ "c",
104
+ {
105
+ id: "c",
106
+ grammar: C,
107
+ extensions: [".c", ".h"],
108
+ aliases: ["c"],
109
+ },
110
+ ],
111
+
112
+ [
113
+ "cpp",
114
+ {
115
+ id: "cpp",
116
+ grammar: CPP,
117
+ extensions: [
118
+ ".cpp",
119
+ ".cc",
120
+ ".cxx",
121
+ ".hpp",
122
+ ".hh",
123
+ ".hxx",
124
+ ],
125
+ aliases: ["cpp", "c++"],
126
+ },
127
+ ],
128
+
129
+ [
130
+ "csharp",
131
+ {
132
+ id: "csharp",
133
+ grammar: CSharp,
134
+ extensions: [".cs"],
135
+ aliases: ["csharp", "c#"],
136
+ },
137
+ ],
138
+
139
+ [
140
+ "php",
141
+ {
142
+ id: "php",
143
+ grammar: PHP,
144
+ extensions: [".php"],
145
+ aliases: ["php"],
146
+ },
147
+ ],
148
+
149
+ [
150
+ "ruby",
151
+ {
152
+ id: "ruby",
153
+ grammar: Ruby,
154
+ extensions: [".rb"],
155
+ aliases: ["ruby", "rb"],
156
+ },
157
+ ],
158
+
159
+ [
160
+ "swift",
161
+ {
162
+ id: "swift",
163
+ grammar: Swift,
164
+ extensions: [".swift"],
165
+ aliases: ["swift"],
166
+ },
167
+ ],
168
+ ]);
169
+
170
+ const EXTENSIONS = new Map();
171
+
172
+ for (const language of LANGUAGES.values()) {
173
+ for (const extension of language.extensions) {
174
+ EXTENSIONS.set(extension.toLowerCase(), language.id);
175
+ }
176
+ }
177
+
178
+ /**
179
+ * Returns language metadata.
180
+ */
181
+ export function getLanguage(name) {
182
+ return LANGUAGES.get(name) ?? null;
183
+ }
184
+
185
+ /**
186
+ * Returns the Tree-sitter grammar.
187
+ */
188
+ export function getGrammar(name) {
189
+ return getLanguage(name)?.grammar ?? null;
190
+ }
191
+
192
+ /**
193
+ * Returns whether a language is supported.
194
+ */
195
+ export function supportsLanguage(name) {
196
+ return LANGUAGES.has(name);
197
+ }
198
+
199
+ /**
200
+ * Returns all registered languages.
201
+ */
202
+ export function getLanguages() {
203
+ return [...LANGUAGES.values()];
204
+ }
205
+
206
+ /**
207
+ * Returns all language identifiers.
208
+ */
209
+ export function getLanguageNames() {
210
+ return [...LANGUAGES.keys()];
211
+ }
212
+
213
+ /**
214
+ * Returns the language identifier for a file extension.
215
+ */
216
+ export function getLanguageFromExtension(extension) {
217
+ return EXTENSIONS.get(extension.toLowerCase()) ?? null;
218
+ }
@@ -0,0 +1,79 @@
1
+ /**
2
+ * packages/retrieval/parser/parseFile.js
3
+ */
4
+
5
+ import fs from "node:fs/promises";
6
+ import path from "node:path";
7
+ import crypto from "node:crypto";
8
+
9
+ import { getLanguageFromExtension } from "./languages.js";
10
+ import { getParser, getQueries } from "./registry.js";
11
+ import { traverse } from "./traverse.js";
12
+ import { createParsedFile } from "./types.js";
13
+
14
+ export async function parseFile(filePath) {
15
+ const source = await fs.readFile(filePath, "utf8");
16
+
17
+ const extension = path.extname(filePath);
18
+
19
+ const language = getLanguageFromExtension(extension);
20
+
21
+ if (!language) {
22
+ return createParsedFile({
23
+ path: filePath,
24
+ name: path.basename(filePath),
25
+ extension,
26
+ supported: false,
27
+ source,
28
+ });
29
+ }
30
+
31
+
32
+ const parser = getParser(language);
33
+
34
+
35
+ const tree = parser.parse(source);
36
+
37
+ const queries = getQueries(language);
38
+
39
+
40
+ const result = traverse({
41
+ tree,
42
+ source,
43
+ file: filePath,
44
+ language,
45
+ queries,
46
+ });
47
+
48
+
49
+ return createParsedFile({
50
+ path: filePath,
51
+
52
+ name: path.basename(filePath),
53
+
54
+ extension,
55
+
56
+ language,
57
+
58
+ hash: crypto
59
+ .createHash("sha256")
60
+ .update(source)
61
+ .digest("hex"),
62
+
63
+ size: Buffer.byteLength(source),
64
+
65
+ source,
66
+
67
+ ast: tree,
68
+
69
+ imports: result.imports,
70
+ exports: result.exports,
71
+ symbols: result.symbols,
72
+ calls: result.calls,
73
+ comments: result.comments,
74
+ todos: result.todos,
75
+
76
+ diagnostics: result.diagnostics,
77
+ metrics: result.metrics,
78
+ });
79
+ }
@@ -0,0 +1,78 @@
1
+ /**
2
+ * packages/retrieval/parser/parseRepository.js
3
+ */
4
+
5
+ import { parseFile } from "./parseFile.js";
6
+
7
+ /**
8
+ * Parse an indexed repository.
9
+ *
10
+ * @param {Array} repositoryIndex
11
+ * @param {Object|null} cache
12
+ * @returns {Promise<Object>}
13
+ */
14
+ export async function parseRepository(
15
+ repositoryIndex,
16
+ cache = null
17
+ ) {
18
+ const files = [];
19
+
20
+ for (const file of repositoryIndex) {
21
+ const filePath =
22
+ typeof file === "string"
23
+ ? file
24
+ : file.path;
25
+
26
+ const fileHash =
27
+ typeof file === "string"
28
+ ? null
29
+ : file.hash;
30
+
31
+ try {
32
+ // Cache hit
33
+ if (
34
+ cache &&
35
+ fileHash &&
36
+ cache.has(filePath, fileHash)
37
+ ) {
38
+ const cached = cache.get(filePath);
39
+
40
+ if (cached?.parsed) {
41
+ files.push(cached.parsed);
42
+ continue;
43
+ }
44
+ }
45
+
46
+ const parsed = await parseFile(filePath);
47
+
48
+ if (cache && fileHash) {
49
+ cache.set(
50
+ filePath,
51
+ fileHash,
52
+ {
53
+ parsed,
54
+ }
55
+ );
56
+ }
57
+
58
+ files.push(parsed);
59
+ } catch (error) {
60
+ console.error(`Failed to parse ${filePath}`);
61
+ console.error(error.stack);
62
+ }
63
+ }
64
+
65
+ if (cache) {
66
+ await cache.save();
67
+ }
68
+
69
+ return {
70
+ files,
71
+
72
+ metrics: {
73
+ total: repositoryIndex.length,
74
+ parsed: files.filter(f => f.supported).length,
75
+ skipped: files.filter(f => !f.supported).length,
76
+ },
77
+ };
78
+ }
@@ -0,0 +1,148 @@
1
+ /**
2
+ * Tree-sitter queries for C.
3
+ *
4
+ * Stable capture namespaces:
5
+ *
6
+ * @symbol.struct
7
+ * @symbol.union
8
+ * @symbol.enum
9
+ * @symbol.typedef
10
+ * @symbol.function
11
+ * @symbol.prototype
12
+ * @symbol.variable
13
+ * @symbol.constant
14
+ * @symbol.macro
15
+ *
16
+ * @import
17
+ * @export
18
+ * @call
19
+ * @comment
20
+ * @todo
21
+ */
22
+
23
+ export const SYMBOLS = `
24
+ ;; ============================================================
25
+ ;; Structs
26
+ ;; ============================================================
27
+
28
+ (struct_specifier
29
+ name: (type_identifier) @symbol.struct)
30
+
31
+ ;; ============================================================
32
+ ;; Unions
33
+ ;; ============================================================
34
+
35
+ (union_specifier
36
+ name: (type_identifier) @symbol.union)
37
+
38
+ ;; ============================================================
39
+ ;; Enums
40
+ ;; ============================================================
41
+
42
+ (enum_specifier
43
+ name: (type_identifier) @symbol.enum)
44
+
45
+ ;; ============================================================
46
+ ;; Typedefs
47
+ ;; ============================================================
48
+
49
+ (type_definition
50
+ declarator: (type_identifier) @symbol.typedef)
51
+
52
+ (type_definition
53
+ declarator: (identifier) @symbol.typedef)
54
+
55
+ ;; ============================================================
56
+ ;; Function Definitions
57
+ ;; ============================================================
58
+
59
+ (function_definition
60
+ declarator:
61
+ (function_declarator
62
+ declarator: (identifier) @symbol.function))
63
+
64
+ ;; ============================================================
65
+ ;; Function Prototypes
66
+ ;; ============================================================
67
+
68
+ (declaration
69
+ declarator:
70
+ (function_declarator
71
+ declarator: (identifier) @symbol.prototype))
72
+
73
+ ;; ============================================================
74
+ ;; Global Variables
75
+ ;; ============================================================
76
+
77
+ (declaration
78
+ declarator:
79
+ (init_declarator
80
+ declarator: (identifier) @symbol.variable))
81
+
82
+ (declaration
83
+ declarator:
84
+ (identifier) @symbol.variable)
85
+
86
+ ;; ============================================================
87
+ ;; Enum Constants
88
+ ;; ============================================================
89
+
90
+ (enumerator
91
+ name: (identifier) @symbol.constant)
92
+
93
+ ;; ============================================================
94
+ ;; Macros
95
+ ;; ============================================================
96
+
97
+ (preproc_def
98
+ name: (identifier) @symbol.macro)
99
+
100
+ (preproc_function_def
101
+ name: (identifier) @symbol.macro)
102
+ `;
103
+
104
+ export const IMPORTS = `
105
+ ;; ============================================================
106
+ ;; #include
107
+ ;; ============================================================
108
+
109
+ (preproc_include) @import
110
+ `;
111
+
112
+ export const EXPORTS = `
113
+ `;
114
+ export const CALLS = `
115
+ ;; ============================================================
116
+ ;; foo()
117
+ ;; ============================================================
118
+
119
+ (call_expression
120
+ function: (identifier) @call)
121
+
122
+ ;; ============================================================
123
+ ;; ptr->foo()
124
+ ;; obj.foo()
125
+ ;; ============================================================
126
+
127
+ (call_expression
128
+ function:
129
+ (field_expression
130
+ field: (field_identifier) @call))
131
+
132
+ ;; ============================================================
133
+ ;; (*fp)()
134
+ ;; ============================================================
135
+
136
+ (call_expression
137
+ function:
138
+ (pointer_expression) @call)
139
+ `;
140
+
141
+ export const COMMENTS = `
142
+ (comment) @comment
143
+ `;
144
+
145
+ export const TODOS = `
146
+ (comment) @todo
147
+ (#match? @todo "(?i)(TODO|FIXME|BUG|HACK|XXX|NOTE)")
148
+ `;
@@ -0,0 +1,198 @@
1
+ /**
2
+ * Tree-sitter queries for C++.
3
+ *
4
+ * Stable capture namespaces:
5
+ *
6
+ * @symbol.namespace
7
+ * @symbol.class
8
+ * @symbol.struct
9
+ * @symbol.union
10
+ * @symbol.enum
11
+ * @symbol.typedef
12
+ * @symbol.alias
13
+ * @symbol.template
14
+ * @symbol.function
15
+ * @symbol.constructor
16
+ * @symbol.destructor
17
+ * @symbol.method
18
+ * @symbol.operator
19
+ * @symbol.field
20
+ * @symbol.variable
21
+ * @symbol.constant
22
+ * @symbol.macro
23
+ *
24
+ * @import
25
+ * @export
26
+ * @call
27
+ * @comment
28
+ * @todo
29
+ */
30
+
31
+ export const SYMBOLS = `
32
+ ;; ============================================================
33
+ ;; Namespaces
34
+ ;; ============================================================
35
+
36
+ (namespace_definition
37
+ name: (namespace_identifier) @symbol.namespace)
38
+
39
+ ;; ============================================================
40
+ ;; Classes
41
+ ;; ============================================================
42
+
43
+ (class_specifier
44
+ name: (type_identifier) @symbol.class)
45
+
46
+ ;; ============================================================
47
+ ;; Structs
48
+ ;; ============================================================
49
+
50
+ (struct_specifier
51
+ name: (type_identifier) @symbol.struct)
52
+
53
+ ;; ============================================================
54
+ ;; Unions
55
+ ;; ============================================================
56
+
57
+ (union_specifier
58
+ name: (type_identifier) @symbol.union)
59
+
60
+ ;; ============================================================
61
+ ;; Enums
62
+ ;; ============================================================
63
+
64
+ (enum_specifier
65
+ name: (type_identifier) @symbol.enum)
66
+
67
+ ;; ============================================================
68
+ ;; Typedefs
69
+ ;; ============================================================
70
+
71
+ (type_definition
72
+ declarator: (_) @symbol.typedef)
73
+
74
+ ;; ============================================================
75
+ ;; Using aliases
76
+ ;; ============================================================
77
+
78
+ (alias_declaration
79
+ name: (type_identifier) @symbol.alias)
80
+
81
+ ;; ============================================================
82
+ ;; Templates
83
+ ;; ============================================================
84
+
85
+ (template_declaration
86
+ declaration: (_) @symbol.template)
87
+
88
+ ;; ============================================================
89
+ ;; Constructors
90
+ ;; ============================================================
91
+
92
+ (function_definition
93
+ declarator:
94
+ (function_declarator
95
+ declarator: (identifier) @symbol.constructor)
96
+ (#match? @symbol.constructor "^[A-Z]"))
97
+
98
+ ;; ============================================================
99
+ ;; Destructors
100
+ ;; ============================================================
101
+
102
+ (function_definition
103
+ declarator:
104
+ (function_declarator
105
+ declarator: (destructor_name) @symbol.destructor))
106
+
107
+ ;; ============================================================
108
+ ;; Functions
109
+ ;; ============================================================
110
+
111
+ (function_definition
112
+ declarator:
113
+ (function_declarator
114
+ declarator: (identifier) @symbol.function))
115
+
116
+ ;; ============================================================
117
+ ;; Methods
118
+ ;; ============================================================
119
+
120
+ (field_declaration
121
+ declarator:
122
+ (function_declarator
123
+ declarator: (field_identifier) @symbol.method))
124
+
125
+ ;; ============================================================
126
+ ;; Operator overloads
127
+ ;; ============================================================
128
+
129
+ (function_definition
130
+ declarator:
131
+ (function_declarator
132
+ declarator: (operator_name) @symbol.operator))
133
+
134
+ ;; ============================================================
135
+ ;; Fields
136
+ ;; ============================================================
137
+
138
+ (field_declaration
139
+ declarator: (_) @symbol.field)
140
+
141
+ ;; ============================================================
142
+ ;; Variables
143
+ ;; ============================================================
144
+
145
+ (declaration
146
+ declarator: (_) @symbol.variable)
147
+
148
+ ;; ============================================================
149
+ ;; Enum constants
150
+ ;; ============================================================
151
+
152
+ (enumerator
153
+ name: (identifier) @symbol.constant)
154
+
155
+ ;; ============================================================
156
+ ;; Macros
157
+ ;; ============================================================
158
+
159
+ (preproc_def
160
+ name: (identifier) @symbol.macro)
161
+
162
+ (preproc_function_def
163
+ name: (identifier) @symbol.macro)
164
+ `;
165
+
166
+ export const IMPORTS = `
167
+ (preproc_include) @import
168
+ `;
169
+
170
+ export const EXPORTS = `
171
+ `;
172
+
173
+ export const CALLS = `
174
+ ;; foo()
175
+
176
+ (call_expression
177
+ function: (identifier) @call)
178
+
179
+ ;; obj.foo()
180
+
181
+ (call_expression
182
+ function:
183
+ (field_expression
184
+ field: (field_identifier) @call))
185
+
186
+ ;; ns::foo()
187
+
188
+ (call_expression
189
+ function:
190
+ (qualified_identifier
191
+ name: (identifier) @call))
192
+
193
+ ;; (*fp)()
194
+
195
+ (call_expression
196
+ function:
197
+ (pointer_expression) @call)
198
+ `;