clast-ai 0.1.2 → 0.2.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 (294) hide show
  1. package/.claude-plugin/marketplace.json +14 -0
  2. package/.claude-plugin/plugin.json +11 -9
  3. package/README.md +468 -398
  4. package/bench/ab/onair-concept.json +22 -0
  5. package/bench/ab/onair-deadcode.json +7 -0
  6. package/bench/ab/onair-hard.json +32 -0
  7. package/bench/ab/onair-impact.json +17 -0
  8. package/bench/ab/onair-refactors.json +18 -0
  9. package/bench/ab/onair-survey.json +17 -0
  10. package/bench/ab/onair-tasks.json +20 -0
  11. package/bench/ab/onair.json +52 -0
  12. package/bench/ab/vscode-concept.json +22 -0
  13. package/bench/ab/vscode-hard.json +32 -0
  14. package/bench/ab/vscode-impact.json +17 -0
  15. package/bench/ab/vscode-refactors.json +18 -0
  16. package/bench/ab/vscode-tasks.json +20 -0
  17. package/bench/ab/vscode.json +52 -0
  18. package/bench/ab.mjs +213 -0
  19. package/bench/bench.mjs +98 -0
  20. package/bench/resolution.mjs +75 -0
  21. package/dist/cli.d.ts +2 -0
  22. package/dist/cli.js +266 -0
  23. package/dist/cli.js.map +1 -0
  24. package/dist/config/defaults.d.ts +12 -2
  25. package/dist/config/defaults.js +38 -31
  26. package/dist/config/defaults.js.map +1 -1
  27. package/dist/config/index.d.ts +1 -1
  28. package/dist/config/index.js +26 -14
  29. package/dist/config/index.js.map +1 -1
  30. package/dist/db/index.d.ts +73 -13
  31. package/dist/db/index.js +481 -39
  32. package/dist/db/index.js.map +1 -1
  33. package/dist/engine.d.ts +15 -0
  34. package/dist/engine.js +28 -0
  35. package/dist/engine.js.map +1 -0
  36. package/dist/indexer/imports.d.ts +6 -0
  37. package/dist/indexer/imports.js +254 -0
  38. package/dist/indexer/imports.js.map +1 -0
  39. package/dist/indexer/index.d.ts +63 -0
  40. package/dist/indexer/index.js +360 -0
  41. package/dist/indexer/index.js.map +1 -0
  42. package/dist/indexer/process.d.ts +22 -0
  43. package/dist/indexer/process.js +42 -0
  44. package/dist/indexer/process.js.map +1 -0
  45. package/dist/indexer/scan.d.ts +43 -0
  46. package/dist/indexer/scan.js +223 -0
  47. package/dist/indexer/scan.js.map +1 -0
  48. package/dist/indexer/worker.d.ts +1 -0
  49. package/dist/indexer/worker.js +23 -0
  50. package/dist/indexer/worker.js.map +1 -0
  51. package/dist/llm/comment-generator.d.ts +17 -19
  52. package/dist/llm/comment-generator.js +46 -80
  53. package/dist/llm/comment-generator.js.map +1 -1
  54. package/dist/llm/index.d.ts +0 -1
  55. package/dist/llm/index.js.map +1 -1
  56. package/dist/llm/prompts.d.ts +0 -1
  57. package/dist/llm/prompts.js +16 -16
  58. package/dist/migrate.d.ts +35 -0
  59. package/dist/migrate.js +194 -0
  60. package/dist/migrate.js.map +1 -0
  61. package/dist/parser/extractor.d.ts +21 -16
  62. package/dist/parser/extractor.js +700 -228
  63. package/dist/parser/extractor.js.map +1 -1
  64. package/dist/parser/index.d.ts +17 -21
  65. package/dist/parser/index.js +115 -171
  66. package/dist/parser/index.js.map +1 -1
  67. package/dist/parser/langs/c.d.ts +3 -0
  68. package/dist/parser/langs/c.js +879 -0
  69. package/dist/parser/langs/c.js.map +1 -0
  70. package/dist/parser/langs/csharp.d.ts +2 -0
  71. package/dist/parser/langs/csharp.js +548 -0
  72. package/dist/parser/langs/csharp.js.map +1 -0
  73. package/dist/parser/langs/dart.d.ts +2 -0
  74. package/dist/parser/langs/dart.js +893 -0
  75. package/dist/parser/langs/dart.js.map +1 -0
  76. package/dist/parser/langs/go.d.ts +2 -0
  77. package/dist/parser/langs/go.js +455 -0
  78. package/dist/parser/langs/go.js.map +1 -0
  79. package/dist/parser/langs/java.d.ts +2 -0
  80. package/dist/parser/langs/java.js +390 -0
  81. package/dist/parser/langs/java.js.map +1 -0
  82. package/dist/parser/langs/php.d.ts +2 -0
  83. package/dist/parser/langs/php.js +486 -0
  84. package/dist/parser/langs/php.js.map +1 -0
  85. package/dist/parser/langs/python.d.ts +2 -0
  86. package/dist/parser/langs/python.js +216 -0
  87. package/dist/parser/langs/python.js.map +1 -0
  88. package/dist/parser/langs/ruby.d.ts +2 -0
  89. package/dist/parser/langs/ruby.js +602 -0
  90. package/dist/parser/langs/ruby.js.map +1 -0
  91. package/dist/parser/langs/rust.d.ts +2 -0
  92. package/dist/parser/langs/rust.js +931 -0
  93. package/dist/parser/langs/rust.js.map +1 -0
  94. package/dist/parser/langs/swift.d.ts +2 -0
  95. package/dist/parser/langs/swift.js +616 -0
  96. package/dist/parser/langs/swift.js.map +1 -0
  97. package/dist/parser/langs/typescript.d.ts +4 -0
  98. package/dist/parser/langs/typescript.js +535 -0
  99. package/dist/parser/langs/typescript.js.map +1 -0
  100. package/dist/parser/registry.d.ts +16 -0
  101. package/dist/parser/registry.js +87 -0
  102. package/dist/parser/registry.js.map +1 -0
  103. package/dist/parser/returns.d.ts +9 -0
  104. package/dist/parser/returns.js +152 -0
  105. package/dist/parser/returns.js.map +1 -0
  106. package/dist/parser/spec.d.ts +165 -0
  107. package/dist/parser/spec.js +188 -0
  108. package/dist/parser/spec.js.map +1 -0
  109. package/dist/query/arity.d.ts +27 -0
  110. package/dist/query/arity.js +187 -0
  111. package/dist/query/arity.js.map +1 -0
  112. package/dist/query/callgraph.d.ts +113 -0
  113. package/dist/query/callgraph.js +332 -0
  114. package/dist/query/callgraph.js.map +1 -0
  115. package/dist/query/format.d.ts +36 -0
  116. package/dist/query/format.js +136 -0
  117. package/dist/query/format.js.map +1 -0
  118. package/dist/query/hierarchy.d.ts +44 -0
  119. package/dist/query/hierarchy.js +441 -0
  120. package/dist/query/hierarchy.js.map +1 -0
  121. package/dist/query/resolve.d.ts +265 -0
  122. package/dist/query/resolve.js +1957 -0
  123. package/dist/query/resolve.js.map +1 -0
  124. package/dist/query/search.d.ts +35 -0
  125. package/dist/query/search.js +379 -0
  126. package/dist/query/search.js.map +1 -0
  127. package/dist/query/words.d.ts +30 -0
  128. package/dist/query/words.js +201 -0
  129. package/dist/query/words.js.map +1 -0
  130. package/dist/server/index.d.ts +1 -3
  131. package/dist/server/index.js +313 -73
  132. package/dist/server/index.js.map +1 -1
  133. package/dist/tools/context.d.ts +35 -0
  134. package/dist/tools/context.js +79 -0
  135. package/dist/tools/context.js.map +1 -0
  136. package/dist/tools/explore.d.ts +51 -0
  137. package/dist/tools/explore.js +779 -0
  138. package/dist/tools/explore.js.map +1 -0
  139. package/dist/tools/impact.d.ts +21 -0
  140. package/dist/tools/impact.js +743 -0
  141. package/dist/tools/impact.js.map +1 -0
  142. package/dist/tools/search.d.ts +59 -0
  143. package/dist/tools/search.js +843 -0
  144. package/dist/tools/search.js.map +1 -0
  145. package/dist/tools/stats.d.ts +26 -0
  146. package/dist/tools/stats.js +604 -0
  147. package/dist/tools/stats.js.map +1 -0
  148. package/dist/types.d.ts +95 -40
  149. package/dist/types.js +9 -1
  150. package/dist/types.js.map +1 -1
  151. package/dist/version.d.ts +2 -0
  152. package/dist/version.js +3 -0
  153. package/dist/version.js.map +1 -0
  154. package/dist/watcher/index.d.ts +18 -16
  155. package/dist/watcher/index.js +94 -77
  156. package/dist/watcher/index.js.map +1 -1
  157. package/package.json +21 -24
  158. package/plugin/server.mjs +72 -0
  159. package/skills/audit/SKILL.md +37 -0
  160. package/skills/deadcode/SKILL.md +33 -0
  161. package/skills/explore/SKILL.md +54 -0
  162. package/skills/impact/SKILL.md +24 -0
  163. package/skills/status/SKILL.md +11 -0
  164. package/src/cli.ts +265 -0
  165. package/src/config/defaults.ts +50 -32
  166. package/src/config/index.ts +23 -14
  167. package/src/db/index.ts +540 -43
  168. package/src/engine.ts +30 -0
  169. package/src/indexer/imports.ts +241 -0
  170. package/src/indexer/index.ts +369 -0
  171. package/src/indexer/process.ts +63 -0
  172. package/src/indexer/scan.ts +226 -0
  173. package/src/indexer/worker.ts +24 -0
  174. package/src/llm/comment-generator.ts +52 -103
  175. package/src/llm/index.ts +80 -80
  176. package/src/llm/prompts.ts +95 -95
  177. package/src/migrate.ts +213 -0
  178. package/src/parser/extractor.ts +643 -256
  179. package/src/parser/index.ts +105 -205
  180. package/src/parser/langs/c.ts +860 -0
  181. package/src/parser/langs/csharp.ts +519 -0
  182. package/src/parser/langs/dart.ts +820 -0
  183. package/src/parser/langs/go.ts +437 -0
  184. package/src/parser/langs/java.ts +361 -0
  185. package/src/parser/langs/php.ts +450 -0
  186. package/src/parser/langs/python.ts +206 -0
  187. package/src/parser/langs/ruby.ts +554 -0
  188. package/src/parser/langs/rust.ts +904 -0
  189. package/src/parser/langs/swift.ts +590 -0
  190. package/src/parser/langs/typescript.ts +499 -0
  191. package/src/parser/registry.ts +88 -0
  192. package/src/parser/returns.ts +137 -0
  193. package/src/parser/spec.ts +309 -0
  194. package/src/query/arity.ts +173 -0
  195. package/src/query/callgraph.ts +473 -0
  196. package/src/query/format.ts +136 -0
  197. package/src/query/hierarchy.ts +447 -0
  198. package/src/query/resolve.ts +1972 -0
  199. package/src/query/search.ts +430 -0
  200. package/src/query/words.ts +183 -0
  201. package/src/server/index.ts +390 -79
  202. package/src/tools/context.ts +82 -0
  203. package/src/tools/explore.ts +860 -0
  204. package/src/tools/impact.ts +748 -0
  205. package/src/tools/search.ts +886 -0
  206. package/src/tools/stats.ts +633 -0
  207. package/src/types.ts +113 -45
  208. package/src/version.ts +2 -0
  209. package/src/watcher/index.ts +82 -88
  210. package/tsconfig.json +6 -3
  211. package/.mcp.json +0 -8
  212. package/commands/clast-status.md +0 -9
  213. package/dist/config/defaults.d.ts.map +0 -1
  214. package/dist/config/index.d.ts.map +0 -1
  215. package/dist/db/index.d.ts.map +0 -1
  216. package/dist/db/queries.d.ts +0 -44
  217. package/dist/db/queries.d.ts.map +0 -1
  218. package/dist/db/queries.js +0 -251
  219. package/dist/db/queries.js.map +0 -1
  220. package/dist/db/schema.d.ts +0 -3
  221. package/dist/db/schema.d.ts.map +0 -1
  222. package/dist/db/schema.js +0 -94
  223. package/dist/db/schema.js.map +0 -1
  224. package/dist/db/types.d.ts +0 -44
  225. package/dist/db/types.d.ts.map +0 -1
  226. package/dist/db/types.js +0 -2
  227. package/dist/db/types.js.map +0 -1
  228. package/dist/llm/comment-generator.d.ts.map +0 -1
  229. package/dist/llm/index.d.ts.map +0 -1
  230. package/dist/llm/prompts.d.ts.map +0 -1
  231. package/dist/parser/call-resolver.d.ts +0 -15
  232. package/dist/parser/call-resolver.d.ts.map +0 -1
  233. package/dist/parser/call-resolver.js +0 -16
  234. package/dist/parser/call-resolver.js.map +0 -1
  235. package/dist/parser/extractor.d.ts.map +0 -1
  236. package/dist/parser/index.d.ts.map +0 -1
  237. package/dist/parser/languages.d.ts +0 -11
  238. package/dist/parser/languages.d.ts.map +0 -1
  239. package/dist/parser/languages.js +0 -74
  240. package/dist/parser/languages.js.map +0 -1
  241. package/dist/server/index.d.ts.map +0 -1
  242. package/dist/server/register-tools.d.ts +0 -7
  243. package/dist/server/register-tools.d.ts.map +0 -1
  244. package/dist/server/register-tools.js +0 -17
  245. package/dist/server/register-tools.js.map +0 -1
  246. package/dist/server/tools/clast-call-graph.d.ts +0 -4
  247. package/dist/server/tools/clast-call-graph.d.ts.map +0 -1
  248. package/dist/server/tools/clast-call-graph.js +0 -70
  249. package/dist/server/tools/clast-call-graph.js.map +0 -1
  250. package/dist/server/tools/clast-comment.d.ts +0 -5
  251. package/dist/server/tools/clast-comment.d.ts.map +0 -1
  252. package/dist/server/tools/clast-comment.js +0 -64
  253. package/dist/server/tools/clast-comment.js.map +0 -1
  254. package/dist/server/tools/clast-file-summary.d.ts +0 -4
  255. package/dist/server/tools/clast-file-summary.d.ts.map +0 -1
  256. package/dist/server/tools/clast-file-summary.js +0 -42
  257. package/dist/server/tools/clast-file-summary.js.map +0 -1
  258. package/dist/server/tools/clast-get-context.d.ts +0 -4
  259. package/dist/server/tools/clast-get-context.d.ts.map +0 -1
  260. package/dist/server/tools/clast-get-context.js +0 -80
  261. package/dist/server/tools/clast-get-context.js.map +0 -1
  262. package/dist/server/tools/clast-reindex.d.ts +0 -5
  263. package/dist/server/tools/clast-reindex.d.ts.map +0 -1
  264. package/dist/server/tools/clast-reindex.js +0 -36
  265. package/dist/server/tools/clast-reindex.js.map +0 -1
  266. package/dist/server/tools/clast-search.d.ts +0 -4
  267. package/dist/server/tools/clast-search.d.ts.map +0 -1
  268. package/dist/server/tools/clast-search.js +0 -29
  269. package/dist/server/tools/clast-search.js.map +0 -1
  270. package/dist/server/tools/clast-status.d.ts +0 -5
  271. package/dist/server/tools/clast-status.d.ts.map +0 -1
  272. package/dist/server/tools/clast-status.js +0 -23
  273. package/dist/server/tools/clast-status.js.map +0 -1
  274. package/dist/types.d.ts.map +0 -1
  275. package/dist/watcher/gitignore.d.ts +0 -9
  276. package/dist/watcher/gitignore.d.ts.map +0 -1
  277. package/dist/watcher/gitignore.js +0 -38
  278. package/dist/watcher/gitignore.js.map +0 -1
  279. package/dist/watcher/index.d.ts.map +0 -1
  280. package/skills/clast-explore/SKILL.md +0 -41
  281. package/src/db/queries.ts +0 -332
  282. package/src/db/schema.ts +0 -106
  283. package/src/db/types.ts +0 -47
  284. package/src/parser/call-resolver.ts +0 -17
  285. package/src/parser/languages.ts +0 -86
  286. package/src/server/register-tools.ts +0 -30
  287. package/src/server/tools/clast-call-graph.ts +0 -82
  288. package/src/server/tools/clast-comment.ts +0 -76
  289. package/src/server/tools/clast-file-summary.ts +0 -59
  290. package/src/server/tools/clast-get-context.ts +0 -97
  291. package/src/server/tools/clast-reindex.ts +0 -52
  292. package/src/server/tools/clast-search.ts +0 -38
  293. package/src/server/tools/clast-status.ts +0 -37
  294. package/src/watcher/gitignore.ts +0 -42
@@ -0,0 +1,616 @@
1
+ import { field, simpleReceiver } from '../spec.js';
2
+ const MAX_SIG_SLICE = 400;
3
+ const MAX_TYPE_TEXT = 120;
4
+ const MAX_INLINE_VALUE = 60;
5
+ /** Bodies whose direct children are members of a type. */
6
+ const MEMBER_BODIES = new Set(['class_body', 'enum_class_body', 'protocol_body']);
7
+ /**
8
+ * Types declared so far in the file being extracted (simple name -> symbol),
9
+ * so `extension Foo: Bar` can attach the conformance to Foo. The Ctx object
10
+ * is created once per file.
11
+ */
12
+ const declaredTypes = new WeakMap();
13
+ function modifiersOf(node) {
14
+ const first = node.firstChild;
15
+ return first && first.type === 'modifiers' ? first : null;
16
+ }
17
+ /** `private` / `fileprivate` (but not `private(set)`, which only restricts the setter). */
18
+ function isPrivate(mods) {
19
+ if (!mods)
20
+ return false;
21
+ for (const c of mods.children) {
22
+ if (!c || c.type !== 'visibility_modifier')
23
+ continue;
24
+ const first = c.firstChild;
25
+ if (c.childCount === 1 && first && (first.type === 'private' || first.type === 'fileprivate'))
26
+ return true;
27
+ }
28
+ return false;
29
+ }
30
+ /** Offset where the signature starts: after leading attributes (`@MainActor`, `@available(...)`). */
31
+ function sigStart(node, mods) {
32
+ if (!mods)
33
+ return node.startIndex;
34
+ for (const c of mods.children) {
35
+ if (!c)
36
+ continue;
37
+ if (c.type === 'attribute' || c.type === 'comment' || c.type === 'multiline_comment')
38
+ continue;
39
+ return c.startIndex;
40
+ }
41
+ const next = mods.nextSibling;
42
+ return next ? next.startIndex : node.startIndex;
43
+ }
44
+ function sliceSig(ctx, start, end) {
45
+ if (end - start > MAX_SIG_SLICE)
46
+ end = start + MAX_SIG_SLICE;
47
+ return ctx.src.slice(start, end).replace(/\s*[{=]\s*$/, '');
48
+ }
49
+ /** Signature from after the attributes up to `stop` (a body node) or the node end. */
50
+ function signature(node, mods, ctx, stop) {
51
+ const start = sigStart(node, mods);
52
+ return sliceSig(ctx, start, stop && stop.startIndex > start ? stop.startIndex : node.endIndex);
53
+ }
54
+ const MAX_SIG = 236;
55
+ /**
56
+ * Signature of a callable. Long parameter lists are elided in the middle
57
+ * (`func f(a: A, ...) -> R`) so the return type survives truncation.
58
+ */
59
+ function callableSignature(node, mods, ctx, stop) {
60
+ const start = sigStart(node, mods);
61
+ let end = stop && stop.startIndex > start ? stop.startIndex : node.endIndex;
62
+ if (end - start <= MAX_SIG)
63
+ return sliceSig(ctx, start, end);
64
+ if (end - start > 4000)
65
+ end = start + 4000;
66
+ const full = ctx.src.slice(start, end).replace(/\s+/g, ' ').replace(/\s*[{=]\s*$/, '').trim();
67
+ if (full.length <= MAX_SIG)
68
+ return full;
69
+ const open = full.indexOf('(');
70
+ if (open === -1)
71
+ return full;
72
+ // Matching close of the parameter list and the top-level commas inside it.
73
+ let depth = 0;
74
+ let close = -1;
75
+ const commas = [];
76
+ for (let i = open; i < full.length; i++) {
77
+ const ch = full[i];
78
+ if (ch === '(' || ch === '[' || ch === '{')
79
+ depth++;
80
+ else if (ch === ')' || ch === ']' || ch === '}') {
81
+ if (--depth === 0) {
82
+ close = i;
83
+ break;
84
+ }
85
+ }
86
+ else if (ch === ',' && depth === 1)
87
+ commas.push(i);
88
+ }
89
+ if (close === -1)
90
+ return full;
91
+ const tail = full.slice(close);
92
+ const budget = MAX_SIG - tail.length - 4;
93
+ let cut = -1;
94
+ for (const c of commas) {
95
+ if (c > budget)
96
+ break;
97
+ cut = c;
98
+ }
99
+ if (cut === -1)
100
+ return full;
101
+ return full.slice(0, cut + 1) + ' ...' + tail;
102
+ }
103
+ /** Identifier text without the backticks of escaped names (`default`). */
104
+ function identText(node) {
105
+ const t = node.text;
106
+ return t.charCodeAt(0) === 96 ? t.replace(/`/g, '') : t;
107
+ }
108
+ /** Standard-library protocols that often come first in a class's inheritance clause. */
109
+ const KNOWN_PROTOCOLS = new Set([
110
+ 'Sendable', 'Codable', 'Decodable', 'Encodable', 'Hashable', 'Equatable', 'Comparable', 'Identifiable',
111
+ 'CustomStringConvertible', 'CustomDebugStringConvertible', 'Error', 'LocalizedError', 'ObservableObject',
112
+ 'AnyObject', 'Sequence', 'Collection', 'CaseIterable', 'RawRepresentable', 'View',
113
+ ]);
114
+ /** Dotted name of a `user_type` without generic arguments: `Foo.Bar<T>` -> `Foo.Bar`. */
115
+ function userTypeName(node) {
116
+ if (!node)
117
+ return null;
118
+ if (node.type === 'type_identifier' || node.type === 'simple_identifier')
119
+ return node.text;
120
+ if (node.type !== 'user_type')
121
+ return null;
122
+ let out = '';
123
+ for (const c of node.namedChildren) {
124
+ if (c && c.type === 'type_identifier')
125
+ out = out ? out + '.' + c.text : c.text;
126
+ }
127
+ return out || null;
128
+ }
129
+ /** Raw type text for ctx.typeHint, or null for types that never name a class (arrays, tuples, closures). */
130
+ function hintType(type) {
131
+ let n = type ?? null;
132
+ for (let i = 0; n && i < 4; i++) {
133
+ switch (n.type) {
134
+ case 'user_type':
135
+ return n.endIndex - n.startIndex > MAX_TYPE_TEXT ? userTypeName(n) : n.text;
136
+ case 'type_identifier':
137
+ return n.text;
138
+ case 'optional_type':
139
+ n = field(n, 'wrapped') ?? n.namedChild(0);
140
+ break;
141
+ case 'existential_type': // any Foo
142
+ case 'opaque_type': // some Foo
143
+ n = n.namedChild(n.namedChildCount - 1);
144
+ break;
145
+ default:
146
+ return null;
147
+ }
148
+ }
149
+ return null;
150
+ }
151
+ /** Class constructed by an initialiser expression: `Foo()`, `Foo<T>(x)`, `y as! Foo`. */
152
+ function constructedType(value) {
153
+ if (!value)
154
+ return null;
155
+ switch (value.type) {
156
+ case 'call_expression': {
157
+ const callee = value.firstChild;
158
+ if (callee && callee.type === 'simple_identifier') {
159
+ const name = callee.text;
160
+ return /^[A-Z]/.test(name) ? name : null;
161
+ }
162
+ return null;
163
+ }
164
+ case 'constructor_expression':
165
+ return hintType(field(value, 'constructed_type'));
166
+ case 'as_expression':
167
+ return hintType(field(value, 'name'));
168
+ default:
169
+ return null;
170
+ }
171
+ }
172
+ const TYPE_KINDS = {
173
+ class: 'class',
174
+ struct: 'struct',
175
+ enum: 'enum',
176
+ actor: 'class',
177
+ };
178
+ /** class / struct / enum / actor / extension: the grammar uses one node type for all of them. */
179
+ const classDeclaration = (node, ctx) => {
180
+ const nameNode = field(node, 'name');
181
+ if (!nameNode)
182
+ return;
183
+ const kindNode = field(node, 'declaration_kind');
184
+ const keyword = kindNode ? kindNode.type : 'class';
185
+ const mods = modifiersOf(node);
186
+ if (keyword === 'extension') {
187
+ // Not a symbol: members are named after the extended type.
188
+ const name = userTypeName(nameNode);
189
+ if (!name)
190
+ return;
191
+ const known = declaredTypes.get(ctx);
192
+ if (known) {
193
+ const sym = known.get(name.slice(name.lastIndexOf('.') + 1));
194
+ if (sym !== undefined) {
195
+ for (const c of node.namedChildren) {
196
+ if (c && c.type === 'inheritance_specifier')
197
+ ctx.inherit(sym, userTypeName(field(c, 'inherits_from')), 'implements');
198
+ }
199
+ }
200
+ }
201
+ ctx.scope(name);
202
+ return;
203
+ }
204
+ const name = nameNode.text;
205
+ const kind = TYPE_KINDS[keyword] ?? 'class';
206
+ const sym = ctx.def(node, {
207
+ name,
208
+ kind,
209
+ sig: signature(node, mods, ctx, field(node, 'body')),
210
+ exported: !isPrivate(mods),
211
+ });
212
+ let known = declaredTypes.get(ctx);
213
+ if (!known)
214
+ declaredTypes.set(ctx, (known = new Map()));
215
+ if (!known.has(name))
216
+ known.set(name, sym);
217
+ let first = keyword === 'class';
218
+ for (const c of node.namedChildren) {
219
+ if (!c || c.type !== 'inheritance_specifier')
220
+ continue;
221
+ const base = userTypeName(field(c, 'inherits_from'));
222
+ if (!base)
223
+ continue;
224
+ ctx.inherit(sym, base, first && !KNOWN_PROTOCOLS.has(base) ? 'extends' : 'implements');
225
+ first = false;
226
+ }
227
+ };
228
+ const protocolDeclaration = (node, ctx) => {
229
+ const nameNode = field(node, 'name');
230
+ if (!nameNode)
231
+ return;
232
+ const mods = modifiersOf(node);
233
+ const name = nameNode.text;
234
+ const sym = ctx.def(node, {
235
+ name,
236
+ kind: 'interface',
237
+ sig: signature(node, mods, ctx, field(node, 'body')),
238
+ exported: !isPrivate(mods),
239
+ });
240
+ let known = declaredTypes.get(ctx);
241
+ if (!known)
242
+ declaredTypes.set(ctx, (known = new Map()));
243
+ if (!known.has(name))
244
+ known.set(name, sym);
245
+ for (const c of node.namedChildren) {
246
+ if (c && c.type === 'inheritance_specifier')
247
+ ctx.inherit(sym, userTypeName(field(c, 'inherits_from')), 'extends');
248
+ }
249
+ };
250
+ function isMember(node) {
251
+ const p = node.parent;
252
+ return !!p && MEMBER_BODIES.has(p.type);
253
+ }
254
+ /** Members of a protocol take the protocol's visibility. */
255
+ function memberExported(node, mods) {
256
+ if (isPrivate(mods))
257
+ return false;
258
+ const body = node.parent;
259
+ if (body && (body.type === 'protocol_body' || node.type === 'enum_entry')) {
260
+ const decl = body.parent;
261
+ if (decl && isPrivate(modifiersOf(decl)))
262
+ return false;
263
+ }
264
+ return true;
265
+ }
266
+ /** `func`, protocol method requirements and operator functions (`static func == (...)`). */
267
+ const functionDeclaration = (node, ctx) => {
268
+ const nameNode = field(node, 'name');
269
+ if (!nameNode || nameNode.endIndex - nameNode.startIndex > 100)
270
+ return;
271
+ const mods = modifiersOf(node);
272
+ ctx.def(node, {
273
+ name: identText(nameNode),
274
+ kind: isMember(node) ? 'method' : 'function',
275
+ sig: callableSignature(node, mods, ctx, field(node, 'body')),
276
+ exported: memberExported(node, mods),
277
+ });
278
+ };
279
+ const fixedName = (name) => (node, ctx) => {
280
+ const mods = modifiersOf(node);
281
+ let stop = field(node, 'body');
282
+ if (!stop) {
283
+ // subscript: the accessor block has no field name.
284
+ const last = node.lastChild;
285
+ if (last && last.type === 'computed_property')
286
+ stop = last;
287
+ }
288
+ ctx.def(node, {
289
+ name,
290
+ kind: 'method',
291
+ sig: callableSignature(node, mods, ctx, stop),
292
+ exported: memberExported(node, mods),
293
+ });
294
+ };
295
+ const typealiasDeclaration = (node, ctx) => {
296
+ const nameNode = field(node, 'name');
297
+ if (!nameNode)
298
+ return;
299
+ const mods = modifiersOf(node);
300
+ ctx.def(node, {
301
+ name: nameNode.text,
302
+ kind: 'type',
303
+ sig: signature(node, mods, ctx, null),
304
+ exported: memberExported(node, mods),
305
+ });
306
+ };
307
+ /** `case a = 1, b(Int)`: one constant per name. */
308
+ const enumEntry = (node, ctx) => {
309
+ const exported = memberExported(node, modifiersOf(node));
310
+ let name = null;
311
+ let end = 0;
312
+ const flush = () => {
313
+ if (!name)
314
+ return;
315
+ ctx.def(node, {
316
+ name: identText(name),
317
+ kind: 'constant',
318
+ sig: 'case ' + sliceSig(ctx, name.startIndex, end),
319
+ scope: false,
320
+ exported,
321
+ });
322
+ };
323
+ const count = node.childCount;
324
+ for (let i = 0; i < count; i++) {
325
+ const c = node.child(i);
326
+ if (!c)
327
+ continue;
328
+ const f = node.fieldNameForChild(i);
329
+ if (f === 'name' && c.type === 'simple_identifier') {
330
+ flush();
331
+ name = c;
332
+ end = c.endIndex;
333
+ }
334
+ else if ((f === 'data_contents' || f === 'raw_value') && name) {
335
+ end = c.endIndex;
336
+ }
337
+ }
338
+ flush();
339
+ };
340
+ function bindingsOf(node) {
341
+ const out = [];
342
+ let cur = null;
343
+ const count = node.childCount;
344
+ for (let i = 0; i < count; i++) {
345
+ const c = node.child(i);
346
+ if (!c || !c.isNamed)
347
+ continue;
348
+ switch (c.type) {
349
+ case 'pattern': {
350
+ const id = field(c, 'bound_identifier');
351
+ cur = id ? { name: id, type: null, value: null, block: null, end: c.endIndex } : null;
352
+ if (cur)
353
+ out.push(cur);
354
+ break;
355
+ }
356
+ case 'type_annotation':
357
+ if (cur) {
358
+ cur.type = c.namedChild(c.namedChildCount - 1);
359
+ cur.end = c.endIndex;
360
+ }
361
+ break;
362
+ case 'computed_property':
363
+ case 'willset_didset_block':
364
+ case 'protocol_property_requirements':
365
+ if (cur && !cur.block)
366
+ cur.block = c;
367
+ break;
368
+ case 'modifiers':
369
+ case 'value_binding_pattern':
370
+ case 'comment':
371
+ case 'multiline_comment':
372
+ case 'type_constraints':
373
+ break;
374
+ default:
375
+ if (cur && !cur.value && !cur.block) {
376
+ cur.value = c;
377
+ cur.end = c.endIndex;
378
+ }
379
+ }
380
+ }
381
+ return out;
382
+ }
383
+ function isLet(node) {
384
+ for (const c of node.children) {
385
+ if (!c)
386
+ continue;
387
+ if (c.type === 'value_binding_pattern')
388
+ return c.firstChild?.type === 'let';
389
+ if (c.type === 'pattern')
390
+ return c.firstChild?.firstChild?.type === 'let';
391
+ }
392
+ return false;
393
+ }
394
+ /**
395
+ * Stored and computed properties, protocol property requirements and
396
+ * top-level `let` / `var`. Locals are not symbols: they only contribute a
397
+ * receiver type hint.
398
+ */
399
+ const propertyDeclaration = (node, ctx) => {
400
+ const parent = node.parent;
401
+ if (!parent)
402
+ return;
403
+ const member = MEMBER_BODIES.has(parent.type);
404
+ const bindings = bindingsOf(node);
405
+ if (!member && parent.type !== 'source_file') {
406
+ if (!ctx.inCallable())
407
+ return;
408
+ for (const b of bindings) {
409
+ const type = hintType(b.type) ?? constructedType(b.value);
410
+ if (type)
411
+ ctx.typeHint(identText(b.name), type);
412
+ }
413
+ return;
414
+ }
415
+ const mods = modifiersOf(node);
416
+ const exported = memberExported(node, mods);
417
+ const kind = member ? 'property' : isLet(node) ? 'constant' : 'variable';
418
+ // Inside an extension there is no class symbol to carry the hint; it would land on the file.
419
+ const hintable = !member || ctx.parentKind() !== null;
420
+ const start = sigStart(node, mods);
421
+ const single = bindings.length === 1;
422
+ for (const b of bindings) {
423
+ const name = identText(b.name);
424
+ let sig;
425
+ if (single) {
426
+ let end = b.block ? b.block.startIndex : node.endIndex;
427
+ if (b.value && (b.value.endIndex - b.value.startIndex > MAX_INLINE_VALUE || b.value.endPosition.row !== b.value.startPosition.row)) {
428
+ end = b.value.startIndex;
429
+ }
430
+ else if (b.block && b.block.type === 'protocol_property_requirements') {
431
+ end = node.endIndex; // `var x: Int { get set }` is short and part of the contract
432
+ }
433
+ sig = sliceSig(ctx, start, end);
434
+ }
435
+ else {
436
+ // `var a: Int = 0, b: Int`: modifiers + keyword + this binding.
437
+ const head = ctx.src.slice(start, Math.min(bindings[0].name.startIndex, start + MAX_SIG_SLICE));
438
+ const end = b.value && b.value.endIndex - b.value.startIndex > MAX_INLINE_VALUE ? b.value.startIndex : b.end;
439
+ sig = head + sliceSig(ctx, b.name.startIndex, end);
440
+ }
441
+ // Only one definition can own the scope of the visited node.
442
+ ctx.def(node, { name, kind, sig, exported, scope: single ? undefined : false });
443
+ if (hintable) {
444
+ const type = hintType(b.type) ?? constructedType(b.value);
445
+ if (type)
446
+ ctx.typeHint(name, type);
447
+ }
448
+ }
449
+ };
450
+ /** Function, initialiser and subscript parameters: `label name: Type`. */
451
+ const parameter = (node, ctx) => {
452
+ const name = field(node, 'name');
453
+ const type = node.lastNamedChild;
454
+ if (!name || !type || type.startIndex === name.startIndex)
455
+ return;
456
+ ctx.typeHint(name.text, hintType(type));
457
+ };
458
+ /** Closure parameters with explicit types: `{ (v: Value) in ... }`. */
459
+ const lambdaParameter = (node, ctx) => {
460
+ if (!ctx.inCallable())
461
+ return;
462
+ parameter(node, ctx);
463
+ };
464
+ /** `if let t: Thing = make()`, `guard let ...`, `for item: Item in items`. */
465
+ const typeAnnotation = (node, ctx) => {
466
+ const parent = node.parent;
467
+ if (!parent || parent.type === 'property_declaration' || parent.type === 'protocol_property_declaration')
468
+ return;
469
+ if (!ctx.inCallable())
470
+ return;
471
+ const prev = node.previousSibling;
472
+ if (!prev)
473
+ return;
474
+ const id = prev.type === 'pattern' ? field(prev, 'bound_identifier') : prev;
475
+ if (id && id.type === 'simple_identifier')
476
+ ctx.typeHint(id.text, hintType(node.namedChild(node.namedChildCount - 1)));
477
+ };
478
+ /** `if let s = x as? Session`, `guard let s = x as? Session`. */
479
+ const asExpression = (node, ctx) => {
480
+ const eq = node.previousSibling;
481
+ if (!eq || eq.type !== '=')
482
+ return;
483
+ const id = eq.previousSibling;
484
+ if (id && id.type === 'simple_identifier' && ctx.inCallable())
485
+ ctx.typeHint(id.text, hintType(field(node, 'name')));
486
+ };
487
+ /** Receiver text of a member call: `a`, `self.session`, `a?` / `a!` without the sigil, or '?'. */
488
+ function receiverOf(target) {
489
+ if (target && target.type === 'simple_identifier')
490
+ return identText(target);
491
+ const r = simpleReceiver(target);
492
+ if (!r)
493
+ return '?';
494
+ if (r === '?')
495
+ return r;
496
+ return r.replace(/[?!]/g, '') || '?';
497
+ }
498
+ const callExpression = (node, ctx) => {
499
+ const suffix = node.lastChild;
500
+ if (suffix && suffix.type === 'call_suffix') {
501
+ // Subscript access `items[0]` is parsed as a call.
502
+ const args = suffix.firstChild;
503
+ if (args && args.type === 'value_arguments' && args.firstChild?.type === '[')
504
+ return;
505
+ }
506
+ let callee = node.firstChild;
507
+ for (let i = 0; callee && i < 5; i++) {
508
+ switch (callee.type) {
509
+ case 'simple_identifier':
510
+ ctx.call(identText(callee), node);
511
+ return;
512
+ case 'navigation_expression': {
513
+ const name = field(field(callee, 'suffix'), 'suffix');
514
+ if (!name || name.type !== 'simple_identifier')
515
+ return;
516
+ const target = field(callee, 'target');
517
+ const method = identText(name);
518
+ if (method === 'init' && target && target.type === 'simple_identifier') {
519
+ // `Foo.init(x)` constructs a Foo.
520
+ const cls = target.text;
521
+ if (/^[A-Z]/.test(cls) && cls !== 'Self') {
522
+ ctx.call(cls, node);
523
+ return;
524
+ }
525
+ }
526
+ // `Foo().bar()` / `Foo<T>().bar()`: the receiver's class is evident.
527
+ // (The grammar puts a leading `try` / `await` on the receiver: `try Foo().bar()`.)
528
+ let made = target;
529
+ if (made && (made.type === 'try_expression' || made.type === 'await_expression'))
530
+ made = field(made, 'expr');
531
+ const rtype = made && (made.type === 'call_expression' || made.type === 'constructor_expression')
532
+ ? constructedType(made)
533
+ : null;
534
+ ctx.call(method, node, receiverOf(target), rtype);
535
+ return;
536
+ }
537
+ case 'prefix_expression': {
538
+ const target = field(callee, 'target');
539
+ if (callee.firstChild?.type === '.') {
540
+ // Implicit member: `.custom(r: 1)`, `.init(x)`.
541
+ if (target && target.type === 'simple_identifier')
542
+ ctx.call(target.text, node, '?');
543
+ return;
544
+ }
545
+ callee = target;
546
+ break;
547
+ }
548
+ case 'try_expression':
549
+ case 'await_expression':
550
+ callee = field(callee, 'expr');
551
+ break;
552
+ default:
553
+ // The grammar parses `a + f(x)` as a call whose callee is `a + f`: the real callee is the right operand.
554
+ callee = field(callee, 'rhs');
555
+ }
556
+ }
557
+ };
558
+ /** `Foo<Int>(x: 1)`. */
559
+ const constructorExpression = (node, ctx) => {
560
+ const name = userTypeName(field(node, 'constructed_type'));
561
+ if (name)
562
+ ctx.call(name.slice(name.lastIndexOf('.') + 1), node);
563
+ };
564
+ const IMPORT_KINDS = new Set(['struct', 'class', 'enum', 'protocol', 'typealias', 'func', 'let', 'var']);
565
+ /** `import Foundation`, `@testable import X`, `import struct Foo.Bar`. */
566
+ const importDeclaration = (node, ctx) => {
567
+ let path = null;
568
+ let kinded = false;
569
+ for (const c of node.children) {
570
+ if (!c)
571
+ continue;
572
+ if (c.type === 'identifier') {
573
+ path = c;
574
+ break;
575
+ }
576
+ if (!c.isNamed && IMPORT_KINDS.has(c.type))
577
+ kinded = true;
578
+ }
579
+ if (!path || path.endIndex - path.startIndex > 200)
580
+ return;
581
+ const source = path.text.replace(/\s+/g, '');
582
+ const dot = source.lastIndexOf('.');
583
+ if (kinded && dot > 0)
584
+ ctx.imp(source.slice(0, dot), node, [source.slice(dot + 1)]);
585
+ else
586
+ ctx.imp(source, node);
587
+ };
588
+ export const swift = {
589
+ id: 'swift',
590
+ grammar: 'swift',
591
+ extensions: ['.swift'],
592
+ identifiers: ['simple_identifier', 'type_identifier'],
593
+ comments: ['comment', 'multiline_comment'],
594
+ visit: {
595
+ class_declaration: classDeclaration,
596
+ protocol_declaration: protocolDeclaration,
597
+ function_declaration: functionDeclaration,
598
+ protocol_function_declaration: functionDeclaration,
599
+ init_declaration: fixedName('init'),
600
+ deinit_declaration: fixedName('deinit'),
601
+ subscript_declaration: fixedName('subscript'),
602
+ typealias_declaration: typealiasDeclaration,
603
+ associatedtype_declaration: typealiasDeclaration,
604
+ enum_entry: enumEntry,
605
+ property_declaration: propertyDeclaration,
606
+ protocol_property_declaration: propertyDeclaration,
607
+ parameter,
608
+ lambda_parameter: lambdaParameter,
609
+ type_annotation: typeAnnotation,
610
+ as_expression: asExpression,
611
+ call_expression: callExpression,
612
+ constructor_expression: constructorExpression,
613
+ import_declaration: importDeclaration,
614
+ },
615
+ };
616
+ //# sourceMappingURL=swift.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"swift.js","sourceRoot":"","sources":["../../../src/parser/langs/swift.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { LangSpec } from '../spec.js';
2
+ export declare const javascript: LangSpec;
3
+ export declare const typescript: LangSpec;
4
+ export declare const tsx: LangSpec;