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,486 @@
1
+ import { COMPLEX_RECEIVER, field } from '../spec.js';
2
+ // Namespaces are deliberately not visited: `namespace X;` and `namespace X { }`
3
+ // neither create a symbol nor a qualified-name prefix, so qnames are
4
+ // `Class.method` regardless of the namespace form.
5
+ /** `Foo` / `\A\B\Foo` / `namespace\Foo` -> `Foo`. */
6
+ function shortName(node) {
7
+ if (!node)
8
+ return null;
9
+ if (node.type === 'name')
10
+ return node.text;
11
+ if (node.type === 'qualified_name') {
12
+ for (let i = node.namedChildCount - 1; i >= 0; i--) {
13
+ const c = node.namedChild(i);
14
+ if (c && c.type === 'name')
15
+ return c.text;
16
+ }
17
+ }
18
+ return null;
19
+ }
20
+ /** Literal content of a plain (non-interpolated) string, else null. */
21
+ function literal(node) {
22
+ if (!node || (node.type !== 'string' && node.type !== 'encapsed_string'))
23
+ return null;
24
+ if (node.namedChildCount !== 1)
25
+ return null;
26
+ const c = node.namedChild(0);
27
+ return c && c.type === 'string_content' ? c.text : null;
28
+ }
29
+ /** First visibility keyword among the direct children, or null. */
30
+ function visibility(node) {
31
+ for (const c of node.namedChildren) {
32
+ if (!c)
33
+ continue;
34
+ if (c.type === 'visibility_modifier')
35
+ return c.text;
36
+ // Modifiers always precede the name / elements.
37
+ if (c.type === 'name' || c.type === 'property_element' || c.type === 'const_element' || c.type === 'formal_parameters')
38
+ break;
39
+ }
40
+ return null;
41
+ }
42
+ function isPublic(node) {
43
+ const v = visibility(node);
44
+ // `public(set)`-style asymmetric visibility still reads as public.
45
+ return v === null || v.startsWith('public');
46
+ }
47
+ /** Start of the declaration proper, skipping leading `#[Attributes]`. */
48
+ function declStart(node) {
49
+ const attrs = field(node, 'attributes');
50
+ if (!attrs || attrs.startIndex !== node.startIndex)
51
+ return node.startIndex;
52
+ const next = attrs.nextSibling;
53
+ return next ? next.startIndex : attrs.endIndex;
54
+ }
55
+ /** Signature: declaration text without attributes, up to the body. */
56
+ function signature(node, ctx, body = field(node, 'body')) {
57
+ const start = declStart(node);
58
+ let end = body && body.startIndex > start ? body.startIndex : node.endIndex;
59
+ if (end - start > 400)
60
+ end = start + 400;
61
+ return ctx.src.slice(start, end).replace(/\s*[;{]\s*$/, '');
62
+ }
63
+ /** base_clause -> extends, class_interface_clause -> implements, `use Trait;` -> implements. */
64
+ function heritage(node, body, sym, ctx) {
65
+ for (const c of node.namedChildren) {
66
+ if (!c)
67
+ continue;
68
+ if (c.type === 'base_clause') {
69
+ for (const n of c.namedChildren)
70
+ ctx.inherit(sym, shortName(n), 'extends');
71
+ }
72
+ else if (c.type === 'class_interface_clause') {
73
+ for (const n of c.namedChildren)
74
+ ctx.inherit(sym, shortName(n), 'implements');
75
+ }
76
+ }
77
+ if (!body)
78
+ return;
79
+ for (const m of body.namedChildren) {
80
+ if (!m)
81
+ continue;
82
+ if (m.type === 'use_declaration') {
83
+ for (const n of m.namedChildren)
84
+ ctx.inherit(sym, shortName(n), 'implements');
85
+ }
86
+ else if (m.type === 'method_declaration') {
87
+ promotedProperties(m, ctx);
88
+ }
89
+ }
90
+ }
91
+ /** `__construct(private Foo $foo)` declares property `foo` on the class. */
92
+ function promotedProperties(method, ctx) {
93
+ const params = field(method, 'parameters');
94
+ if (!params || params.namedChildCount === 0)
95
+ return;
96
+ const name = field(method, 'name');
97
+ if (!name || name.text.toLowerCase() !== '__construct')
98
+ return;
99
+ for (const p of params.namedChildren) {
100
+ if (!p || p.type !== 'property_promotion_parameter')
101
+ continue;
102
+ const v = field(p, 'name');
103
+ if (!v)
104
+ continue;
105
+ const vis = field(p, 'visibility')?.text ?? null;
106
+ ctx.def(p, {
107
+ name: v.text.replace(/^&?\s*\$/, ''),
108
+ kind: 'property',
109
+ sig: ctx.src.slice(declStart(p), v.endIndex),
110
+ exported: vis === null || vis.startsWith('public'),
111
+ scope: false,
112
+ });
113
+ }
114
+ }
115
+ const typeDecl = (kind) => (node, ctx) => {
116
+ const name = field(node, 'name');
117
+ if (!name)
118
+ return;
119
+ const body = field(node, 'body');
120
+ const sym = ctx.def(node, { name: name.text, kind, sig: signature(node, ctx, body), exported: true });
121
+ heritage(node, body, sym, ctx);
122
+ };
123
+ /** `new class(...) extends Base { ... }` (Laravel migrations, test doubles). */
124
+ const anonymousClass = (node, ctx) => {
125
+ const body = field(node, 'body');
126
+ const sym = ctx.def(node, { name: 'class@anonymous', kind: 'class', sig: signature(node, ctx, body), exported: false });
127
+ heritage(node, body, sym, ctx);
128
+ };
129
+ // ---------------------------------------------------------------------------
130
+ // Receiver type hints
131
+ // ---------------------------------------------------------------------------
132
+ const varName = (node) => node.text.replace(/^&?\s*(\.\.\.)?\s*\$/, '');
133
+ /** Docblock types that denote a single class: no arrays, generics or shapes. */
134
+ function docType(raw) {
135
+ return /[\[<{(]/.test(raw) ? null : raw;
136
+ }
137
+ /** Typed parameter -> local hint; a promoted constructor parameter is also a field. */
138
+ function paramHint(p, ctx) {
139
+ const type = field(p, 'type');
140
+ if (!type)
141
+ return;
142
+ const name = field(p, 'name');
143
+ if (!name)
144
+ return;
145
+ const n = varName(name);
146
+ const t = type.text;
147
+ ctx.typeHint(n, t);
148
+ if (p.type === 'property_promotion_parameter')
149
+ ctx.typeHint(n, t, true);
150
+ }
151
+ /**
152
+ * Hints for the parameters of a named function / method: declared types
153
+ * first, then `@param Foo $x` from the docblock for the untyped ones (the
154
+ * first hint for a name wins).
155
+ */
156
+ function signatureHints(node, ctx) {
157
+ const params = field(node, 'parameters');
158
+ if (!params || params.namedChildCount === 0)
159
+ return;
160
+ for (const p of params.namedChildren) {
161
+ if (p && (p.type === 'simple_parameter' || p.type === 'property_promotion_parameter'))
162
+ paramHint(p, ctx);
163
+ }
164
+ const doc = node.previousSibling;
165
+ if (!doc || doc.type !== 'comment')
166
+ return;
167
+ const text = doc.text;
168
+ if (!text.includes('@param'))
169
+ return;
170
+ for (const m of text.matchAll(/@param\s+(\S+)\s+(?:\.\.\.)?\$(\w+)/g)) {
171
+ ctx.typeHint(m[2], docType(m[1]));
172
+ }
173
+ }
174
+ /** Parameters of closures and arrow functions (named functions are handled by their own visitor). */
175
+ const parameter = (node, ctx) => {
176
+ const owner = node.parent?.parent;
177
+ if (owner && (owner.type === 'method_declaration' || owner.type === 'function_definition'))
178
+ return;
179
+ paramHint(node, ctx);
180
+ };
181
+ /** Class named by a `new Foo(...)` expression: `Foo`, or null for anonymous / dynamic classes. */
182
+ function createdClass(node) {
183
+ for (const c of node.namedChildren) {
184
+ if (!c)
185
+ continue;
186
+ if (c.type === 'name' || c.type === 'qualified_name')
187
+ return shortName(c);
188
+ if (c.type === 'arguments' || c.type === 'anonymous_class')
189
+ return null;
190
+ }
191
+ return null;
192
+ }
193
+ /**
194
+ * `$x = new Foo(...)` -> local hint; `$this->x = new Foo(...)` -> field hint;
195
+ * `$this->x = $x` -> the field takes the declared type of the parameter `$x`.
196
+ */
197
+ const assignmentExpr = (node, ctx) => {
198
+ const right = field(node, 'right');
199
+ if (!right)
200
+ return;
201
+ const isNew = right.type === 'object_creation_expression';
202
+ if (!isNew && right.type !== 'variable_name')
203
+ return;
204
+ const left = field(node, 'left');
205
+ if (!left)
206
+ return;
207
+ if (left.type === 'variable_name') {
208
+ if (isNew)
209
+ ctx.typeHint(varName(left), createdClass(right));
210
+ }
211
+ else if (left.type === 'member_access_expression') {
212
+ const obj = field(left, 'object');
213
+ const name = field(left, 'name');
214
+ if (obj && name && obj.type === 'variable_name' && name.type === 'name' && obj.text === '$this') {
215
+ ctx.typeHint(name.text, isNew ? createdClass(right) : ctx.typeOf(varName(right)), true);
216
+ }
217
+ }
218
+ };
219
+ /** `catch (FooException $e)`; multi-catch is ambiguous and skipped. */
220
+ const catchClause = (node, ctx) => {
221
+ const type = field(node, 'type');
222
+ const name = field(node, 'name');
223
+ if (!type || !name || type.namedChildCount !== 1)
224
+ return;
225
+ ctx.typeHint(varName(name), type.text);
226
+ };
227
+ /** Inline `@var Foo $x` annotations (short comments only, to stay cheap). */
228
+ const comment = (node, ctx) => {
229
+ if (node.endIndex - node.startIndex > 120)
230
+ return;
231
+ const m = /@var\s+(\S+)\s+\$(\w+)/.exec(node.text);
232
+ if (m)
233
+ ctx.typeHint(m[2], docType(m[1]));
234
+ };
235
+ const functionDef = (node, ctx) => {
236
+ const name = field(node, 'name');
237
+ if (!name)
238
+ return;
239
+ ctx.def(node, { name: name.text, kind: 'function', sig: signature(node, ctx), exported: true });
240
+ signatureHints(node, ctx);
241
+ };
242
+ const methodDecl = (node, ctx) => {
243
+ const name = field(node, 'name');
244
+ if (!name)
245
+ return;
246
+ ctx.def(node, { name: name.text, kind: 'method', sig: signature(node, ctx), exported: isPublic(node) });
247
+ signatureHints(node, ctx);
248
+ };
249
+ /** `protected static ?string $a = 1, $b;` -> one property per element. */
250
+ const propertyDecl = (node, ctx) => {
251
+ const exported = isPublic(node);
252
+ // Declared type, else a `@var Foo` docblock (the usual style in pre-7.4 code).
253
+ let type = field(node, 'type')?.text ?? null;
254
+ if (type === null) {
255
+ const doc = node.previousSibling;
256
+ if (doc && doc.type === 'comment') {
257
+ const m = /@var\s+(\S+)/.exec(doc.text);
258
+ if (m)
259
+ type = docType(m[1]);
260
+ }
261
+ }
262
+ let prefix = null;
263
+ for (const el of node.namedChildren) {
264
+ if (!el || el.type !== 'property_element')
265
+ continue;
266
+ const v = field(el, 'name') ?? el.namedChild(0);
267
+ if (!v)
268
+ continue;
269
+ if (type)
270
+ ctx.typeHint(varName(v), type);
271
+ if (prefix === null)
272
+ prefix = ctx.src.slice(declStart(node), el.startIndex);
273
+ ctx.def(el, {
274
+ name: v.text.replace(/^&?\s*\$/, ''),
275
+ kind: 'property',
276
+ range: node,
277
+ sig: prefix + v.text,
278
+ exported,
279
+ scope: false,
280
+ });
281
+ }
282
+ };
283
+ /** `const A = 1, B = 2;` at file level or in a class / interface / enum. */
284
+ const constDecl = (node, ctx) => {
285
+ const exported = isPublic(node);
286
+ let prefix = null;
287
+ for (const el of node.namedChildren) {
288
+ if (!el || el.type !== 'const_element')
289
+ continue;
290
+ const n = el.namedChild(0);
291
+ if (!n || n.type !== 'name')
292
+ continue;
293
+ if (prefix === null)
294
+ prefix = ctx.src.slice(declStart(node), el.startIndex);
295
+ const text = el.endIndex - el.startIndex > 160 ? n.text : el.text;
296
+ ctx.def(el, { name: n.text, kind: 'constant', range: node, sig: prefix + text, exported, scope: false });
297
+ }
298
+ };
299
+ const enumCase = (node, ctx) => {
300
+ const name = field(node, 'name');
301
+ if (!name)
302
+ return;
303
+ ctx.def(node, { name: name.text, kind: 'constant', sig: signature(node, ctx, null), exported: true, scope: false });
304
+ };
305
+ const functionCall = (node, ctx) => {
306
+ const fn = field(node, 'function');
307
+ if (!fn)
308
+ return;
309
+ const name = shortName(fn);
310
+ if (!name)
311
+ return;
312
+ if (name === 'define') {
313
+ // define('NAME', value) declares a global constant.
314
+ const stmt = node.parent;
315
+ const first = field(node, 'arguments')?.namedChild(0);
316
+ const lit = literal(first?.type === 'argument' ? first.namedChild(0) : first);
317
+ if (lit && /^[A-Za-z_\\][\w\\]*$/.test(lit)) {
318
+ const range = stmt && stmt.type === 'expression_statement' ? stmt : node;
319
+ const short = lit.slice(lit.lastIndexOf('\\') + 1);
320
+ let end = node.endIndex;
321
+ const nl = ctx.src.indexOf('\n', node.startIndex);
322
+ if (nl !== -1 && nl < end)
323
+ end = nl;
324
+ ctx.def(node, {
325
+ name: short,
326
+ kind: 'constant',
327
+ range,
328
+ sig: ctx.src.slice(node.startIndex, end),
329
+ exported: true,
330
+ scope: false,
331
+ });
332
+ return;
333
+ }
334
+ }
335
+ ctx.call(name, node);
336
+ };
337
+ /**
338
+ * Receiver of a member call: `$user`, `$this`, `$this->repo` as text;
339
+ * `(new Foo(...))->bar()` -> `Foo` (resolves like a static-style call);
340
+ * anything else (call chains, indexing, ...) -> COMPLEX_RECEIVER. Never null:
341
+ * a member call must not be mistaken for a bare `foo()` call.
342
+ */
343
+ function receiverOf(node) {
344
+ if (!node)
345
+ return COMPLEX_RECEIVER;
346
+ switch (node.type) {
347
+ case 'variable_name':
348
+ case 'member_access_expression':
349
+ case 'nullsafe_member_access_expression':
350
+ case 'scoped_property_access_expression':
351
+ case 'relative_scope': {
352
+ if (node.endIndex - node.startIndex > 48)
353
+ return COMPLEX_RECEIVER;
354
+ const t = node.text.replace('?->', '->');
355
+ return /[\s(\[{'"]/.test(t) ? COMPLEX_RECEIVER : t;
356
+ }
357
+ case 'name':
358
+ case 'qualified_name':
359
+ return shortName(node) ?? COMPLEX_RECEIVER;
360
+ case 'parenthesized_expression': {
361
+ const inner = node.namedChild(0);
362
+ return (inner && inner.type === 'object_creation_expression' && createdClass(inner)) || COMPLEX_RECEIVER;
363
+ }
364
+ case 'object_creation_expression':
365
+ // PHP 8.4: `new Foo()->bar()`.
366
+ return createdClass(node) || COMPLEX_RECEIVER;
367
+ default:
368
+ return COMPLEX_RECEIVER;
369
+ }
370
+ }
371
+ const memberCall = (node, ctx) => {
372
+ const name = field(node, 'name');
373
+ if (!name || name.type !== 'name')
374
+ return;
375
+ ctx.call(name.text, node, receiverOf(field(node, 'object')));
376
+ };
377
+ const scopedCall = (node, ctx) => {
378
+ const name = field(node, 'name');
379
+ if (!name || name.type !== 'name')
380
+ return;
381
+ const scope = field(node, 'scope');
382
+ // `Foo::bar()`, `\A\Foo::bar()` -> receiver Foo; parent/self/static kept as is.
383
+ ctx.call(name.text, node, receiverOf(scope));
384
+ };
385
+ const RELATIVE = new Set(['static', 'self', 'parent']);
386
+ const objectCreation = (node, ctx) => {
387
+ for (const c of node.namedChildren) {
388
+ if (!c)
389
+ continue;
390
+ if (c.type === 'name' || c.type === 'qualified_name') {
391
+ const name = shortName(c);
392
+ if (name && !RELATIVE.has(name))
393
+ ctx.call(name, node);
394
+ return;
395
+ }
396
+ if (c.type === 'arguments' || c.type === 'anonymous_class')
397
+ return;
398
+ }
399
+ };
400
+ /** `use A\B;`, `use A\B as C, D\E;`, `use A\{B, C as D};`, `use function A\f;` */
401
+ const useDecl = (node, ctx) => {
402
+ let prefix = '';
403
+ let group = null;
404
+ for (const c of node.namedChildren) {
405
+ if (!c)
406
+ continue;
407
+ if (c.type === 'namespace_name')
408
+ prefix = c.text.replace(/^\\+|\\+$/g, '') + '\\';
409
+ else if (c.type === 'namespace_use_group')
410
+ group = c;
411
+ }
412
+ for (const clause of (group ?? node).namedChildren) {
413
+ if (!clause || clause.type !== 'namespace_use_clause')
414
+ continue;
415
+ let target = null;
416
+ for (const c of clause.namedChildren) {
417
+ if (c && (c.type === 'qualified_name' || c.type === 'name')) {
418
+ target = c;
419
+ break;
420
+ }
421
+ }
422
+ if (!target)
423
+ continue;
424
+ const full = prefix + target.text.replace(/^\\+/, '').replace(/\s+/g, '');
425
+ const original = full.slice(full.lastIndexOf('\\') + 1);
426
+ const alias = field(clause, 'alias')?.text;
427
+ // `use Contracts\Pipeline as PipelineContract`: bind the alias, remember what it stands for.
428
+ ctx.imp(full, node, [alias && alias !== original ? `${alias}=${original}` : original]);
429
+ }
430
+ };
431
+ /** `require 'x.php'`, `include_once __DIR__ . '/x.php'` */
432
+ const includeExpr = (node, ctx) => {
433
+ let arg = node.namedChild(0);
434
+ if (arg && arg.type === 'parenthesized_expression')
435
+ arg = arg.namedChild(0);
436
+ if (!arg)
437
+ return;
438
+ const lit = literal(arg);
439
+ if (lit) {
440
+ ctx.imp(lit, node);
441
+ return;
442
+ }
443
+ if (arg.type === 'binary_expression') {
444
+ // __DIR__ . '/x.php' is relative to the including file.
445
+ const left = field(arg, 'left');
446
+ const right = literal(field(arg, 'right'));
447
+ if (right && left && left.type === 'name' && left.text === '__DIR__') {
448
+ ctx.imp('.' + (right.startsWith('/') ? right : '/' + right), node);
449
+ }
450
+ }
451
+ };
452
+ export const php = {
453
+ id: 'php',
454
+ grammar: 'php',
455
+ extensions: ['.php'],
456
+ identifiers: ['name'],
457
+ comments: ['comment'],
458
+ visit: {
459
+ class_declaration: typeDecl('class'),
460
+ interface_declaration: typeDecl('interface'),
461
+ trait_declaration: typeDecl('trait'),
462
+ enum_declaration: typeDecl('enum'),
463
+ anonymous_class: anonymousClass,
464
+ function_definition: functionDef,
465
+ method_declaration: methodDecl,
466
+ simple_parameter: parameter,
467
+ property_promotion_parameter: parameter,
468
+ assignment_expression: assignmentExpr,
469
+ catch_clause: catchClause,
470
+ comment,
471
+ property_declaration: propertyDecl,
472
+ const_declaration: constDecl,
473
+ enum_case: enumCase,
474
+ function_call_expression: functionCall,
475
+ member_call_expression: memberCall,
476
+ nullsafe_member_call_expression: memberCall,
477
+ scoped_call_expression: scopedCall,
478
+ object_creation_expression: objectCreation,
479
+ namespace_use_declaration: useDecl,
480
+ require_expression: includeExpr,
481
+ require_once_expression: includeExpr,
482
+ include_expression: includeExpr,
483
+ include_once_expression: includeExpr,
484
+ },
485
+ };
486
+ //# sourceMappingURL=php.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"php.js","sourceRoot":"","sources":["../../../src/parser/langs/php.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import type { LangSpec } from '../spec.js';
2
+ export declare const python: LangSpec;