@sammons/code-outline-rust 1.0.0

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.
@@ -0,0 +1,3 @@
1
+ export { RustProvider } from './rust-provider.ts';
2
+ export { extractRustOutline, RUST_CONTAINER_TYPES, RUST_STRUCTURAL_TYPES, } from './rust-traverser.ts';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EACL,kBAAkB,EAClB,oBAAoB,EACpB,qBAAqB,GACtB,MAAM,qBAAqB,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,3 @@
1
+ export { RustProvider } from "./rust-provider.js";
2
+ export { extractRustOutline, RUST_CONTAINER_TYPES, RUST_STRUCTURAL_TYPES, } from "./rust-traverser.js";
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EACL,kBAAkB,EAClB,oBAAoB,EACpB,qBAAqB,GACtB,MAAM,qBAAqB,CAAC"}
@@ -0,0 +1,9 @@
1
+ import type { LanguageProvider, LanguageParseResult, ParseOptions } from '@sammons/code-outline-parser';
2
+ export declare class RustProvider implements LanguageProvider {
3
+ readonly id = "rust";
4
+ readonly extensions: readonly [".rs"];
5
+ private readonly parser;
6
+ constructor();
7
+ parse(source: string, options: ParseOptions): LanguageParseResult;
8
+ }
9
+ //# sourceMappingURL=rust-provider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rust-provider.d.ts","sourceRoot":"","sources":["../src/rust-provider.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,gBAAgB,EAChB,mBAAmB,EACnB,YAAY,EACb,MAAM,8BAA8B,CAAC;AAOtC,qBAAa,YAAa,YAAW,gBAAgB;IACnD,QAAQ,CAAC,EAAE,UAAU;IACrB,QAAQ,CAAC,UAAU,mBAAoB;IACvC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAmB;;IAO1C,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,GAAG,mBAAmB;CAkBlE"}
@@ -0,0 +1,29 @@
1
+ import { createRequire } from 'node:module';
2
+ import TreeSitterParser from 'tree-sitter';
3
+ import { countErrorNodesInTree } from '@sammons/code-outline-parser';
4
+ import { extractRustOutline } from "./rust-traverser.js";
5
+ const requireCjs = createRequire(import.meta.url);
6
+ const RustGrammar = requireCjs('tree-sitter-rust');
7
+ export class RustProvider {
8
+ id = 'rust';
9
+ extensions = ['.rs'];
10
+ parser;
11
+ constructor() {
12
+ this.parser = new TreeSitterParser();
13
+ this.parser.setLanguage(RustGrammar);
14
+ }
15
+ parse(source, options) {
16
+ const bufferSize = Math.max(32 * 1024, Buffer.byteLength(source, 'utf8') + 1);
17
+ const tree = this.parser.parse(source, undefined, { bufferSize });
18
+ const outline = extractRustOutline(tree.rootNode, source, {
19
+ maxDepth: options.maxDepth,
20
+ namedOnly: options.namedOnly,
21
+ });
22
+ return {
23
+ outline,
24
+ hasError: tree.rootNode.hasError,
25
+ errorCount: countErrorNodesInTree(tree.rootNode),
26
+ };
27
+ }
28
+ }
29
+ //# sourceMappingURL=rust-provider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rust-provider.js","sourceRoot":"","sources":["../src/rust-provider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,gBAAgB,MAAM,aAAa,CAAC;AAM3C,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AACrE,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAEzD,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,MAAM,WAAW,GAAG,UAAU,CAAC,kBAAkB,CAAC,CAAC;AAEnD,MAAM,OAAO,YAAY;IACd,EAAE,GAAG,MAAM,CAAC;IACZ,UAAU,GAAG,CAAC,KAAK,CAAU,CAAC;IACtB,MAAM,CAAmB;IAE1C;QACE,IAAI,CAAC,MAAM,GAAG,IAAI,gBAAgB,EAAE,CAAC;QACrC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;IACvC,CAAC;IAED,KAAK,CAAC,MAAc,EAAE,OAAqB;QACzC,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CACzB,EAAE,GAAG,IAAI,EACT,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,CACtC,CAAC;QACF,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,SAAS,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC;QAElE,MAAM,OAAO,GAAG,kBAAkB,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE;YACxD,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,SAAS,EAAE,OAAO,CAAC,SAAS;SAC7B,CAAC,CAAC;QAEH,OAAO;YACL,OAAO;YACP,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,QAAQ;YAChC,UAAU,EAAE,qBAAqB,CAAC,IAAI,CAAC,QAAQ,CAAC;SACjD,CAAC;IACJ,CAAC;CACF"}
@@ -0,0 +1,22 @@
1
+ import type TreeSitterParser from 'tree-sitter';
2
+ import type { NodeInfo } from '@sammons/code-outline-parser';
3
+ export declare const RUST_CONTAINER_TYPES: Set<string>;
4
+ export declare const RUST_STRUCTURAL_TYPES: Set<string>;
5
+ export interface RustTraversalOptions {
6
+ maxDepth: number;
7
+ namedOnly: boolean;
8
+ }
9
+ export declare class RustTraverser {
10
+ extractNodeInfo(node: TreeSitterParser.SyntaxNode, source: string, options: RustTraversalOptions, currentDepth?: number): NodeInfo | null;
11
+ private createNodeInfo;
12
+ private shouldIncludeNode;
13
+ private processChildren;
14
+ private handleSpecialCases;
15
+ private shouldProcessForNamedOnly;
16
+ private canHaveChildren;
17
+ private handleNamedOnlyResult;
18
+ private extractChildren;
19
+ private shouldIncludeChild;
20
+ }
21
+ export declare function extractRustOutline(rootNode: TreeSitterParser.SyntaxNode, source: string, options: RustTraversalOptions): NodeInfo | null;
22
+ //# sourceMappingURL=rust-traverser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rust-traverser.d.ts","sourceRoot":"","sources":["../src/rust-traverser.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,gBAAgB,MAAM,aAAa,CAAC;AAChD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,8BAA8B,CAAC;AAG7D,eAAO,MAAM,oBAAoB,aAyB/B,CAAC;AAEH,eAAO,MAAM,qBAAqB,aAA2B,CAAC;AAiF9D,MAAM,WAAW,oBAAoB;IACnC,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,OAAO,CAAC;CACpB;AAiHD,qBAAa,aAAa;IACxB,eAAe,CACb,IAAI,EAAE,gBAAgB,CAAC,UAAU,EACjC,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,oBAAoB,EAC7B,YAAY,SAAI,GACf,QAAQ,GAAG,IAAI;IAWlB,OAAO,CAAC,cAAc;IA0BtB,OAAO,CAAC,iBAAiB;IAazB,OAAO,CAAC,eAAe;IAoBvB,OAAO,CAAC,kBAAkB;IAwB1B,OAAO,CAAC,yBAAyB;IAOjC,OAAO,CAAC,eAAe;IAcvB,OAAO,CAAC,qBAAqB;IAa7B,OAAO,CAAC,eAAe;IAkCvB,OAAO,CAAC,kBAAkB;CAO3B;AAED,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,gBAAgB,CAAC,UAAU,EACrC,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,oBAAoB,GAC5B,QAAQ,GAAG,IAAI,CAEjB"}
@@ -0,0 +1,301 @@
1
+ import { isErrorNode, SYNTAX_ERROR_NAME } from '@sammons/code-outline-parser';
2
+ export const RUST_CONTAINER_TYPES = new Set([
3
+ 'source_file',
4
+ 'function_item',
5
+ 'function_signature_item',
6
+ 'struct_item',
7
+ 'enum_item',
8
+ 'union_item',
9
+ 'trait_item',
10
+ 'impl_item',
11
+ 'mod_item',
12
+ 'foreign_mod_item',
13
+ 'macro_definition',
14
+ 'declaration_list',
15
+ 'field_declaration_list',
16
+ 'enum_variant_list',
17
+ 'block',
18
+ 'match_expression',
19
+ 'match_block',
20
+ 'match_arm',
21
+ 'if_expression',
22
+ 'else_clause',
23
+ 'for_expression',
24
+ 'while_expression',
25
+ 'loop_expression',
26
+ 'closure_expression',
27
+ ]);
28
+ export const RUST_STRUCTURAL_TYPES = new Set(['source_file']);
29
+ const RUST_TRANSPARENT_TYPES = new Set([
30
+ 'declaration_list',
31
+ 'field_declaration_list',
32
+ 'enum_variant_list',
33
+ 'block',
34
+ ]);
35
+ const RUST_INSIGNIFICANT_TYPES = new Set([
36
+ 'line_comment',
37
+ 'block_comment',
38
+ ',',
39
+ ';',
40
+ ':',
41
+ '::',
42
+ '{',
43
+ '}',
44
+ '(',
45
+ ')',
46
+ '[',
47
+ ']',
48
+ '<',
49
+ '>',
50
+ '=',
51
+ '=>',
52
+ '->',
53
+ '&',
54
+ '*',
55
+ '#',
56
+ '!',
57
+ '.',
58
+ '..',
59
+ '..=',
60
+ '+',
61
+ '|',
62
+ '@',
63
+ '_',
64
+ 'pub',
65
+ 'visibility_modifier',
66
+ 'fn',
67
+ 'struct',
68
+ 'enum',
69
+ 'union',
70
+ 'trait',
71
+ 'impl',
72
+ 'mod',
73
+ 'use',
74
+ 'let',
75
+ 'mut',
76
+ 'const',
77
+ 'static',
78
+ 'extern',
79
+ 'async',
80
+ 'unsafe',
81
+ 'where',
82
+ 'for',
83
+ 'in',
84
+ 'if',
85
+ 'else',
86
+ 'match',
87
+ 'loop',
88
+ 'while',
89
+ 'return',
90
+ 'break',
91
+ 'continue',
92
+ 'move',
93
+ 'ref',
94
+ 'self',
95
+ 'super',
96
+ 'crate',
97
+ 'as',
98
+ 'dyn',
99
+ 'type',
100
+ 'where_clause',
101
+ 'function_modifiers',
102
+ 'extern_modifier',
103
+ 'string_literal',
104
+ 'mutable_specifier',
105
+ ]);
106
+ function isContainerType(type) {
107
+ return RUST_CONTAINER_TYPES.has(type);
108
+ }
109
+ function isStructuralType(type) {
110
+ return RUST_STRUCTURAL_TYPES.has(type);
111
+ }
112
+ function isInsignificantType(type) {
113
+ return RUST_INSIGNIFICANT_TYPES.has(type);
114
+ }
115
+ function isTransparentType(type) {
116
+ return RUST_TRANSPARENT_TYPES.has(type);
117
+ }
118
+ function getText(node, source) {
119
+ return source.slice(node.startIndex, node.endIndex);
120
+ }
121
+ function extractRustName(node, source) {
122
+ switch (node.type) {
123
+ case 'function_item':
124
+ case 'function_signature_item':
125
+ case 'struct_item':
126
+ case 'enum_item':
127
+ case 'union_item':
128
+ case 'trait_item':
129
+ case 'mod_item':
130
+ case 'macro_definition':
131
+ case 'enum_variant':
132
+ case 'type_item':
133
+ case 'const_item':
134
+ case 'static_item':
135
+ case 'associated_type': {
136
+ const nameNode = node.childForFieldName('name');
137
+ return nameNode ? getText(nameNode, source) : undefined;
138
+ }
139
+ case 'field_declaration': {
140
+ const nameNode = node.childForFieldName('name');
141
+ return nameNode ? getText(nameNode, source) : undefined;
142
+ }
143
+ case 'impl_item': {
144
+ return extractImplName(node, source);
145
+ }
146
+ case 'foreign_mod_item': {
147
+ return extractExternBlockName(node, source);
148
+ }
149
+ case 'use_declaration': {
150
+ return extractUseName(node, source);
151
+ }
152
+ default:
153
+ return undefined;
154
+ }
155
+ }
156
+ function extractImplName(node, source) {
157
+ const traitNode = node.childForFieldName('trait');
158
+ const typeNode = node.childForFieldName('type');
159
+ const typeName = typeNode ? getText(typeNode, source) : '?';
160
+ if (traitNode) {
161
+ return `${getText(traitNode, source)} for ${typeName}`;
162
+ }
163
+ return typeName;
164
+ }
165
+ function extractExternBlockName(node, source) {
166
+ for (let i = 0; i < node.childCount; i++) {
167
+ const child = node.child(i);
168
+ if (child?.type === 'extern_modifier') {
169
+ for (let j = 0; j < child.childCount; j++) {
170
+ const inner = child.child(j);
171
+ if (inner?.type === 'string_literal') {
172
+ return `extern ${getText(inner, source)}`;
173
+ }
174
+ }
175
+ }
176
+ }
177
+ return 'extern';
178
+ }
179
+ function extractUseName(node, source) {
180
+ for (let i = 0; i < node.childCount; i++) {
181
+ const child = node.child(i);
182
+ if (!child)
183
+ continue;
184
+ if (child.type === 'use_as_clause' ||
185
+ child.type === 'use_wildcard' ||
186
+ child.type === 'scoped_use_list' ||
187
+ child.type === 'scoped_identifier' ||
188
+ child.type === 'identifier' ||
189
+ child.type === 'use_list') {
190
+ return getText(child, source);
191
+ }
192
+ }
193
+ return undefined;
194
+ }
195
+ export class RustTraverser {
196
+ extractNodeInfo(node, source, options, currentDepth = 0) {
197
+ const info = this.createNodeInfo(node, source);
198
+ if (!this.shouldIncludeNode(info, options)) {
199
+ return this.handleSpecialCases(node, source, options, currentDepth, info);
200
+ }
201
+ this.processChildren(info, node, source, options, currentDepth);
202
+ return info;
203
+ }
204
+ createNodeInfo(node, source) {
205
+ const info = {
206
+ type: node.type,
207
+ start: {
208
+ row: node.startPosition.row,
209
+ column: node.startPosition.column,
210
+ },
211
+ end: {
212
+ row: node.endPosition.row,
213
+ column: node.endPosition.column,
214
+ },
215
+ };
216
+ const name = extractRustName(node, source);
217
+ if (name) {
218
+ info.name = name;
219
+ }
220
+ else if (isErrorNode(node)) {
221
+ info.name = SYNTAX_ERROR_NAME;
222
+ }
223
+ return info;
224
+ }
225
+ shouldIncludeNode(info, options) {
226
+ if (info.name) {
227
+ return true;
228
+ }
229
+ if (options.namedOnly) {
230
+ return isStructuralType(info.type);
231
+ }
232
+ return true;
233
+ }
234
+ processChildren(info, node, source, options, currentDepth) {
235
+ if (this.canHaveChildren(node, currentDepth, options.maxDepth)) {
236
+ const children = this.extractChildren(node, source, options, currentDepth);
237
+ if (children.length > 0) {
238
+ info.children = children;
239
+ }
240
+ }
241
+ }
242
+ handleSpecialCases(node, source, options, currentDepth, info) {
243
+ if (!this.shouldProcessForNamedOnly(info, options)) {
244
+ return null;
245
+ }
246
+ if (this.canHaveChildren(node, currentDepth, options.maxDepth)) {
247
+ const children = this.extractChildren(node, source, options, currentDepth);
248
+ return this.handleNamedOnlyResult(children, info);
249
+ }
250
+ return null;
251
+ }
252
+ shouldProcessForNamedOnly(info, options) {
253
+ return options.namedOnly && !info.name && !isStructuralType(info.type);
254
+ }
255
+ canHaveChildren(node, currentDepth, maxDepth) {
256
+ if (currentDepth >= maxDepth) {
257
+ return false;
258
+ }
259
+ if (isContainerType(node.type) || node.type === 'ERROR') {
260
+ return true;
261
+ }
262
+ return false;
263
+ }
264
+ handleNamedOnlyResult(children, info) {
265
+ if (children.length === 0) {
266
+ return null;
267
+ }
268
+ if (children.length === 1) {
269
+ return children[0];
270
+ }
271
+ return { ...info, children };
272
+ }
273
+ extractChildren(node, source, options, currentDepth) {
274
+ const children = [];
275
+ for (let i = 0; i < node.childCount; i++) {
276
+ const child = node.child(i);
277
+ if (!this.shouldIncludeChild(child)) {
278
+ continue;
279
+ }
280
+ if (options.namedOnly && isTransparentType(child.type)) {
281
+ if (this.canHaveChildren(child, currentDepth + 1, options.maxDepth)) {
282
+ children.push(...this.extractChildren(child, source, options, currentDepth + 1));
283
+ }
284
+ continue;
285
+ }
286
+ const nextDepth = currentDepth + 1;
287
+ const childInfo = this.extractNodeInfo(child, source, options, nextDepth);
288
+ if (childInfo) {
289
+ children.push(childInfo);
290
+ }
291
+ }
292
+ return children;
293
+ }
294
+ shouldIncludeChild(child) {
295
+ return (child !== null && (isErrorNode(child) || !isInsignificantType(child.type)));
296
+ }
297
+ }
298
+ export function extractRustOutline(rootNode, source, options) {
299
+ return new RustTraverser().extractNodeInfo(rootNode, source, options);
300
+ }
301
+ //# sourceMappingURL=rust-traverser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rust-traverser.js","sourceRoot":"","sources":["../src/rust-traverser.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,55 @@
1
+ {
2
+ "name": "@sammons/code-outline-rust",
3
+ "version": "1.0.0",
4
+ "type": "module",
5
+ "description": "Rust language support plugin for @sammons/code-outline-parser",
6
+ "main": "dist/index.js",
7
+ "types": "dist/index.d.ts",
8
+ "publishConfig": {
9
+ "access": "public",
10
+ "registry": "https://registry.npmjs.org/"
11
+ },
12
+ "scripts": {
13
+ "build": "tsc",
14
+ "dev": "tsc --watch",
15
+ "clean": "rm -rf dist *.tsbuildinfo",
16
+ "test": "node --test \"src/*.test.ts\""
17
+ },
18
+ "keywords": [
19
+ "rust",
20
+ "code-outline",
21
+ "parser",
22
+ "plugin"
23
+ ],
24
+ "author": "",
25
+ "license": "MIT",
26
+ "files": [
27
+ "dist"
28
+ ],
29
+ "dependencies": {
30
+ "tree-sitter": "0.21.1",
31
+ "tree-sitter-rust": "0.21.0"
32
+ },
33
+ "peerDependencies": {
34
+ "@sammons/code-outline-parser": ">=2.0.0"
35
+ },
36
+ "peerDependenciesMeta": {
37
+ "@sammons/code-outline-parser": {
38
+ "optional": false
39
+ }
40
+ },
41
+ "devDependencies": {
42
+ "@sammons/code-outline-parser": "workspace:*",
43
+ "@types/node": "24.10.2",
44
+ "typescript": "5.9.3"
45
+ },
46
+ "engines": {
47
+ "node": ">=26.0.0"
48
+ },
49
+ "exports": {
50
+ ".": {
51
+ "types": "./dist/index.d.ts",
52
+ "default": "./dist/index.js"
53
+ }
54
+ }
55
+ }