trail-code 0.0.0-stage → 0.28.0-semantic.3
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.
- package/LICENSE +21 -0
- package/README.md +567 -2
- package/dist/ai/crux.d.ts +88 -0
- package/dist/ai/crux.d.ts.map +1 -0
- package/dist/ai/crux.js +219 -0
- package/dist/ai/crux.js.map +1 -0
- package/dist/ai/failure.d.ts +60 -0
- package/dist/ai/failure.d.ts.map +1 -0
- package/dist/ai/failure.js +86 -0
- package/dist/ai/failure.js.map +1 -0
- package/dist/ai/llm/anthropic.d.ts +37 -0
- package/dist/ai/llm/anthropic.d.ts.map +1 -0
- package/dist/ai/llm/anthropic.js +144 -0
- package/dist/ai/llm/anthropic.js.map +1 -0
- package/dist/ai/llm/factory.d.ts +28 -0
- package/dist/ai/llm/factory.d.ts.map +1 -0
- package/dist/ai/llm/factory.js +36 -0
- package/dist/ai/llm/factory.js.map +1 -0
- package/dist/ai/llm/litellm.d.ts +34 -0
- package/dist/ai/llm/litellm.d.ts.map +1 -0
- package/dist/ai/llm/litellm.js +45 -0
- package/dist/ai/llm/litellm.js.map +1 -0
- package/dist/ai/llm/openai.d.ts +145 -0
- package/dist/ai/llm/openai.d.ts.map +1 -0
- package/dist/ai/llm/openai.js +629 -0
- package/dist/ai/llm/openai.js.map +1 -0
- package/dist/ai/llm/orcarouter.d.ts +34 -0
- package/dist/ai/llm/orcarouter.d.ts.map +1 -0
- package/dist/ai/llm/orcarouter.js +45 -0
- package/dist/ai/llm/orcarouter.js.map +1 -0
- package/dist/ai/llm/recover-tool.d.ts +21 -0
- package/dist/ai/llm/recover-tool.d.ts.map +1 -0
- package/dist/ai/llm/recover-tool.js +109 -0
- package/dist/ai/llm/recover-tool.js.map +1 -0
- package/dist/ai/llm/types.d.ts +122 -0
- package/dist/ai/llm/types.d.ts.map +1 -0
- package/dist/ai/llm/types.js +33 -0
- package/dist/ai/llm/types.js.map +1 -0
- package/dist/ai/providers.d.ts +59 -0
- package/dist/ai/providers.d.ts.map +1 -0
- package/dist/ai/providers.js +54 -0
- package/dist/ai/providers.js.map +1 -0
- package/dist/ai/summarize.d.ts +25 -0
- package/dist/ai/summarize.d.ts.map +1 -0
- package/dist/ai/summarize.js +34 -0
- package/dist/ai/summarize.js.map +1 -0
- package/dist/ai/synthesize.d.ts +40 -0
- package/dist/ai/synthesize.d.ts.map +1 -0
- package/dist/ai/synthesize.js +230 -0
- package/dist/ai/synthesize.js.map +1 -0
- package/dist/ask/ask.d.ts +199 -0
- package/dist/ask/ask.d.ts.map +1 -0
- package/dist/ask/ask.js +1291 -0
- package/dist/ask/ask.js.map +1 -0
- package/dist/ask/file-rank.d.ts +72 -0
- package/dist/ask/file-rank.d.ts.map +1 -0
- package/dist/ask/file-rank.js +160 -0
- package/dist/ask/file-rank.js.map +1 -0
- package/dist/ask/file-selection.d.ts +22 -0
- package/dist/ask/file-selection.d.ts.map +1 -0
- package/dist/ask/file-selection.js +66 -0
- package/dist/ask/file-selection.js.map +1 -0
- package/dist/ask/fuse.d.ts +195 -0
- package/dist/ask/fuse.d.ts.map +1 -0
- package/dist/ask/fuse.js +344 -0
- package/dist/ask/fuse.js.map +1 -0
- package/dist/ask/graphrank.d.ts +61 -0
- package/dist/ask/graphrank.d.ts.map +1 -0
- package/dist/ask/graphrank.js +130 -0
- package/dist/ask/graphrank.js.map +1 -0
- package/dist/ask/index-file.d.ts +44 -0
- package/dist/ask/index-file.d.ts.map +1 -0
- package/dist/ask/index-file.js +128 -0
- package/dist/ask/index-file.js.map +1 -0
- package/dist/ask/semantic.d.ts +42 -0
- package/dist/ask/semantic.d.ts.map +1 -0
- package/dist/ask/semantic.js +293 -0
- package/dist/ask/semantic.js.map +1 -0
- package/dist/bin/graft.d.ts +3 -0
- package/dist/bin/graft.d.ts.map +1 -0
- package/dist/bin/graft.js +14 -0
- package/dist/bin/graft.js.map +1 -0
- package/dist/bin/trail.d.ts +3 -0
- package/dist/bin/trail.d.ts.map +1 -0
- package/dist/bin/trail.js +13 -0
- package/dist/bin/trail.js.map +1 -0
- package/dist/blast/blast-cli.d.ts +35 -0
- package/dist/blast/blast-cli.d.ts.map +1 -0
- package/dist/blast/blast-cli.js +155 -0
- package/dist/blast/blast-cli.js.map +1 -0
- package/dist/blast/blast.d.ts +128 -0
- package/dist/blast/blast.d.ts.map +1 -0
- package/dist/blast/blast.js +383 -0
- package/dist/blast/blast.js.map +1 -0
- package/dist/blast/diff.d.ts +53 -0
- package/dist/blast/diff.d.ts.map +1 -0
- package/dist/blast/diff.js +193 -0
- package/dist/blast/diff.js.map +1 -0
- package/dist/blast/evidence.d.ts +51 -0
- package/dist/blast/evidence.d.ts.map +1 -0
- package/dist/blast/evidence.js +162 -0
- package/dist/blast/evidence.js.map +1 -0
- package/dist/blast/modules.d.ts +33 -0
- package/dist/blast/modules.d.ts.map +1 -0
- package/dist/blast/modules.js +83 -0
- package/dist/blast/modules.js.map +1 -0
- package/dist/blast/name.d.ts +74 -0
- package/dist/blast/name.d.ts.map +1 -0
- package/dist/blast/name.js +269 -0
- package/dist/blast/name.js.map +1 -0
- package/dist/blast/owners.d.ts +85 -0
- package/dist/blast/owners.d.ts.map +1 -0
- package/dist/blast/owners.js +272 -0
- package/dist/blast/owners.js.map +1 -0
- package/dist/blast/render.d.ts +46 -0
- package/dist/blast/render.d.ts.map +1 -0
- package/dist/blast/render.js +422 -0
- package/dist/blast/render.js.map +1 -0
- package/dist/blast/viz.d.ts +37 -0
- package/dist/blast/viz.d.ts.map +1 -0
- package/dist/blast/viz.js +180 -0
- package/dist/blast/viz.js.map +1 -0
- package/dist/brand.d.ts +111 -0
- package/dist/brand.d.ts.map +1 -0
- package/dist/brand.js +282 -0
- package/dist/brand.js.map +1 -0
- package/dist/claude/build-progress.d.ts +30 -0
- package/dist/claude/build-progress.d.ts.map +1 -0
- package/dist/claude/build-progress.js +81 -0
- package/dist/claude/build-progress.js.map +1 -0
- package/dist/claude/hermes-skill-template.d.ts +16 -0
- package/dist/claude/hermes-skill-template.d.ts.map +1 -0
- package/dist/claude/hermes-skill-template.js +154 -0
- package/dist/claude/hermes-skill-template.js.map +1 -0
- package/dist/claude/init.d.ts +65 -0
- package/dist/claude/init.d.ts.map +1 -0
- package/dist/claude/init.js +258 -0
- package/dist/claude/init.js.map +1 -0
- package/dist/claude/paths.d.ts +9 -0
- package/dist/claude/paths.d.ts.map +1 -0
- package/dist/claude/paths.js +22 -0
- package/dist/claude/paths.js.map +1 -0
- package/dist/claude/session-metrics.d.ts +73 -0
- package/dist/claude/session-metrics.d.ts.map +1 -0
- package/dist/claude/session-metrics.js +209 -0
- package/dist/claude/session-metrics.js.map +1 -0
- package/dist/claude/settings-merge.d.ts +76 -0
- package/dist/claude/settings-merge.d.ts.map +1 -0
- package/dist/claude/settings-merge.js +283 -0
- package/dist/claude/settings-merge.js.map +1 -0
- package/dist/claude/skill-template.d.ts +13 -0
- package/dist/claude/skill-template.d.ts.map +1 -0
- package/dist/claude/skill-template.js +290 -0
- package/dist/claude/skill-template.js.map +1 -0
- package/dist/claude/state.d.ts +85 -0
- package/dist/claude/state.d.ts.map +1 -0
- package/dist/claude/state.js +88 -0
- package/dist/claude/state.js.map +1 -0
- package/dist/claude/stats.d.ts +5 -0
- package/dist/claude/stats.d.ts.map +1 -0
- package/dist/claude/stats.js +24 -0
- package/dist/claude/stats.js.map +1 -0
- package/dist/cli-epilogue.d.ts +12 -0
- package/dist/cli-epilogue.d.ts.map +1 -0
- package/dist/cli-epilogue.js +72 -0
- package/dist/cli-epilogue.js.map +1 -0
- package/dist/cli-meta.d.ts +82 -0
- package/dist/cli-meta.d.ts.map +1 -0
- package/dist/cli-meta.js +238 -0
- package/dist/cli-meta.js.map +1 -0
- package/dist/cli-picker.d.ts +139 -0
- package/dist/cli-picker.d.ts.map +1 -0
- package/dist/cli-picker.js +439 -0
- package/dist/cli-picker.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +1638 -0
- package/dist/cli.js.map +1 -0
- package/dist/context/batches.d.ts +29 -0
- package/dist/context/batches.d.ts.map +1 -0
- package/dist/context/batches.js +130 -0
- package/dist/context/batches.js.map +1 -0
- package/dist/context/build.d.ts +57 -0
- package/dist/context/build.d.ts.map +1 -0
- package/dist/context/build.js +396 -0
- package/dist/context/build.js.map +1 -0
- package/dist/context/check.d.ts +42 -0
- package/dist/context/check.d.ts.map +1 -0
- package/dist/context/check.js +162 -0
- package/dist/context/check.js.map +1 -0
- package/dist/context/map-dir.d.ts +13 -0
- package/dist/context/map-dir.d.ts.map +1 -0
- package/dist/context/map-dir.js +81 -0
- package/dist/context/map-dir.js.map +1 -0
- package/dist/context/node-file.d.ts +109 -0
- package/dist/context/node-file.d.ts.map +1 -0
- package/dist/context/node-file.js +390 -0
- package/dist/context/node-file.js.map +1 -0
- package/dist/context/price.d.ts +49 -0
- package/dist/context/price.d.ts.map +1 -0
- package/dist/context/price.js +83 -0
- package/dist/context/price.js.map +1 -0
- package/dist/context/savings.d.ts +67 -0
- package/dist/context/savings.d.ts.map +1 -0
- package/dist/context/savings.js +125 -0
- package/dist/context/savings.js.map +1 -0
- package/dist/engine.d.ts +85 -0
- package/dist/engine.d.ts.map +1 -0
- package/dist/engine.js +122 -0
- package/dist/engine.js.map +1 -0
- package/dist/graph/bindings.d.ts +64 -0
- package/dist/graph/bindings.d.ts.map +1 -0
- package/dist/graph/bindings.js +713 -0
- package/dist/graph/bindings.js.map +1 -0
- package/dist/graph/build-run.d.ts +25 -0
- package/dist/graph/build-run.d.ts.map +1 -0
- package/dist/graph/build-run.js +121 -0
- package/dist/graph/build-run.js.map +1 -0
- package/dist/graph/build.d.ts +88 -0
- package/dist/graph/build.d.ts.map +1 -0
- package/dist/graph/build.js +386 -0
- package/dist/graph/build.js.map +1 -0
- package/dist/graph/cards.d.ts +46 -0
- package/dist/graph/cards.d.ts.map +1 -0
- package/dist/graph/cards.js +280 -0
- package/dist/graph/cards.js.map +1 -0
- package/dist/graph/check.d.ts +25 -0
- package/dist/graph/check.d.ts.map +1 -0
- package/dist/graph/check.js +192 -0
- package/dist/graph/check.js.map +1 -0
- package/dist/graph/container.d.ts +63 -0
- package/dist/graph/container.d.ts.map +1 -0
- package/dist/graph/container.js +191 -0
- package/dist/graph/container.js.map +1 -0
- package/dist/graph/depth-parser.d.ts +61 -0
- package/dist/graph/depth-parser.d.ts.map +1 -0
- package/dist/graph/depth-parser.js +153 -0
- package/dist/graph/depth-parser.js.map +1 -0
- package/dist/graph/enrich.d.ts +62 -0
- package/dist/graph/enrich.d.ts.map +1 -0
- package/dist/graph/enrich.js +258 -0
- package/dist/graph/enrich.js.map +1 -0
- package/dist/graph/extract-cache.d.ts +101 -0
- package/dist/graph/extract-cache.d.ts.map +1 -0
- package/dist/graph/extract-cache.js +199 -0
- package/dist/graph/extract-cache.js.map +1 -0
- package/dist/graph/extract.d.ts +85 -0
- package/dist/graph/extract.d.ts.map +1 -0
- package/dist/graph/extract.js +2377 -0
- package/dist/graph/extract.js.map +1 -0
- package/dist/graph/fingerprint.d.ts +76 -0
- package/dist/graph/fingerprint.d.ts.map +1 -0
- package/dist/graph/fingerprint.js +160 -0
- package/dist/graph/fingerprint.js.map +1 -0
- package/dist/graph/generic.d.ts +74 -0
- package/dist/graph/generic.d.ts.map +1 -0
- package/dist/graph/generic.js +773 -0
- package/dist/graph/generic.js.map +1 -0
- package/dist/graph/invariants.d.ts +33 -0
- package/dist/graph/invariants.d.ts.map +1 -0
- package/dist/graph/invariants.js +52 -0
- package/dist/graph/invariants.js.map +1 -0
- package/dist/graph/load.d.ts +29 -0
- package/dist/graph/load.d.ts.map +1 -0
- package/dist/graph/load.js +97 -0
- package/dist/graph/load.js.map +1 -0
- package/dist/graph/lsp/client.d.ts +61 -0
- package/dist/graph/lsp/client.d.ts.map +1 -0
- package/dist/graph/lsp/client.js +217 -0
- package/dist/graph/lsp/client.js.map +1 -0
- package/dist/graph/lsp/enrich.d.ts +11 -0
- package/dist/graph/lsp/enrich.d.ts.map +1 -0
- package/dist/graph/lsp/enrich.js +163 -0
- package/dist/graph/lsp/enrich.js.map +1 -0
- package/dist/graph/lsp/registry.d.ts +22 -0
- package/dist/graph/lsp/registry.d.ts.map +1 -0
- package/dist/graph/lsp/registry.js +71 -0
- package/dist/graph/lsp/registry.js.map +1 -0
- package/dist/graph/map.d.ts +107 -0
- package/dist/graph/map.d.ts.map +1 -0
- package/dist/graph/map.js +239 -0
- package/dist/graph/map.js.map +1 -0
- package/dist/graph/markdown.d.ts +22 -0
- package/dist/graph/markdown.d.ts.map +1 -0
- package/dist/graph/markdown.js +143 -0
- package/dist/graph/markdown.js.map +1 -0
- package/dist/graph/native.d.ts +46 -0
- package/dist/graph/native.d.ts.map +1 -0
- package/dist/graph/native.js +169 -0
- package/dist/graph/native.js.map +1 -0
- package/dist/graph/queries/c.scm +13 -0
- package/dist/graph/queries/c_sharp.scm +19 -0
- package/dist/graph/queries/clojure.scm +58 -0
- package/dist/graph/queries/cpp.scm +23 -0
- package/dist/graph/queries/dart.scm +42 -0
- package/dist/graph/queries/elixir.scm +54 -0
- package/dist/graph/queries/gleam.scm +51 -0
- package/dist/graph/queries/java.scm +20 -0
- package/dist/graph/queries/kotlin.scm +43 -0
- package/dist/graph/queries/lua.scm +36 -0
- package/dist/graph/queries/nix.scm +32 -0
- package/dist/graph/queries/php.scm +40 -0
- package/dist/graph/queries/ruby.scm +65 -0
- package/dist/graph/queries/rust.scm +41 -0
- package/dist/graph/queries/scala.scm +66 -0
- package/dist/graph/queries/solidity.scm +43 -0
- package/dist/graph/queries/swift.scm +51 -0
- package/dist/graph/refresh.d.ts +106 -0
- package/dist/graph/refresh.d.ts.map +1 -0
- package/dist/graph/refresh.js +430 -0
- package/dist/graph/refresh.js.map +1 -0
- package/dist/graph/relations.d.ts +14 -0
- package/dist/graph/relations.d.ts.map +1 -0
- package/dist/graph/relations.js +8 -0
- package/dist/graph/relations.js.map +1 -0
- package/dist/graph/resolve.d.ts +17 -0
- package/dist/graph/resolve.d.ts.map +1 -0
- package/dist/graph/resolve.js +716 -0
- package/dist/graph/resolve.js.map +1 -0
- package/dist/graph/root.d.ts +11 -0
- package/dist/graph/root.d.ts.map +1 -0
- package/dist/graph/root.js +40 -0
- package/dist/graph/root.js.map +1 -0
- package/dist/graph/scopes.d.ts +40 -0
- package/dist/graph/scopes.d.ts.map +1 -0
- package/dist/graph/scopes.js +383 -0
- package/dist/graph/scopes.js.map +1 -0
- package/dist/graph/seed.d.ts +38 -0
- package/dist/graph/seed.d.ts.map +1 -0
- package/dist/graph/seed.js +229 -0
- package/dist/graph/seed.js.map +1 -0
- package/dist/graph/source-files.d.ts +46 -0
- package/dist/graph/source-files.d.ts.map +1 -0
- package/dist/graph/source-files.js +118 -0
- package/dist/graph/source-files.js.map +1 -0
- package/dist/graph/traverse-cli.d.ts +55 -0
- package/dist/graph/traverse-cli.d.ts.map +1 -0
- package/dist/graph/traverse-cli.js +189 -0
- package/dist/graph/traverse-cli.js.map +1 -0
- package/dist/graph/traverse.d.ts +112 -0
- package/dist/graph/traverse.d.ts.map +1 -0
- package/dist/graph/traverse.js +192 -0
- package/dist/graph/traverse.js.map +1 -0
- package/dist/graph/types.d.ts +78 -0
- package/dist/graph/types.d.ts.map +1 -0
- package/dist/graph/types.js +14 -0
- package/dist/graph/types.js.map +1 -0
- package/dist/graph/wasm-runtime.d.ts +19 -0
- package/dist/graph/wasm-runtime.d.ts.map +1 -0
- package/dist/graph/wasm-runtime.js +38 -0
- package/dist/graph/wasm-runtime.js.map +1 -0
- package/dist/graph/workspace-cli.d.ts +56 -0
- package/dist/graph/workspace-cli.d.ts.map +1 -0
- package/dist/graph/workspace-cli.js +111 -0
- package/dist/graph/workspace-cli.js.map +1 -0
- package/dist/graph/workspace.d.ts +172 -0
- package/dist/graph/workspace.d.ts.map +1 -0
- package/dist/graph/workspace.js +714 -0
- package/dist/graph/workspace.js.map +1 -0
- package/dist/graph/write.d.ts +13 -0
- package/dist/graph/write.d.ts.map +1 -0
- package/dist/graph/write.js +86 -0
- package/dist/graph/write.js.map +1 -0
- package/dist/hosts/antigravity.d.ts +14 -0
- package/dist/hosts/antigravity.d.ts.map +1 -0
- package/dist/hosts/antigravity.js +59 -0
- package/dist/hosts/antigravity.js.map +1 -0
- package/dist/hosts/auto.d.ts +37 -0
- package/dist/hosts/auto.d.ts.map +1 -0
- package/dist/hosts/auto.js +141 -0
- package/dist/hosts/auto.js.map +1 -0
- package/dist/hosts/claude-global.d.ts +72 -0
- package/dist/hosts/claude-global.d.ts.map +1 -0
- package/dist/hosts/claude-global.js +230 -0
- package/dist/hosts/claude-global.js.map +1 -0
- package/dist/hosts/config-write.d.ts +36 -0
- package/dist/hosts/config-write.d.ts.map +1 -0
- package/dist/hosts/config-write.js +64 -0
- package/dist/hosts/config-write.js.map +1 -0
- package/dist/hosts/init.d.ts +28 -0
- package/dist/hosts/init.d.ts.map +1 -0
- package/dist/hosts/init.js +89 -0
- package/dist/hosts/init.js.map +1 -0
- package/dist/hosts/instructions.d.ts +14 -0
- package/dist/hosts/instructions.d.ts.map +1 -0
- package/dist/hosts/instructions.js +95 -0
- package/dist/hosts/instructions.js.map +1 -0
- package/dist/hosts/mcp-config.d.ts +78 -0
- package/dist/hosts/mcp-config.d.ts.map +1 -0
- package/dist/hosts/mcp-config.js +251 -0
- package/dist/hosts/mcp-config.js.map +1 -0
- package/dist/hosts/plan.d.ts +32 -0
- package/dist/hosts/plan.d.ts.map +1 -0
- package/dist/hosts/plan.js +73 -0
- package/dist/hosts/plan.js.map +1 -0
- package/dist/hosts/registry.d.ts +41 -0
- package/dist/hosts/registry.d.ts.map +1 -0
- package/dist/hosts/registry.js +164 -0
- package/dist/hosts/registry.js.map +1 -0
- package/dist/hosts/retract.d.ts +47 -0
- package/dist/hosts/retract.d.ts.map +1 -0
- package/dist/hosts/retract.js +520 -0
- package/dist/hosts/retract.js.map +1 -0
- package/dist/hosts/sections.d.ts +47 -0
- package/dist/hosts/sections.d.ts.map +1 -0
- package/dist/hosts/sections.js +127 -0
- package/dist/hosts/sections.js.map +1 -0
- package/dist/index.d.ts +41 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +32 -0
- package/dist/index.js.map +1 -0
- package/dist/ingest/fs.d.ts +79 -0
- package/dist/ingest/fs.d.ts.map +1 -0
- package/dist/ingest/fs.js +306 -0
- package/dist/ingest/fs.js.map +1 -0
- package/dist/init-guard.d.ts +16 -0
- package/dist/init-guard.d.ts.map +1 -0
- package/dist/init-guard.js +27 -0
- package/dist/init-guard.js.map +1 -0
- package/dist/mcp/instructions.d.ts +5 -0
- package/dist/mcp/instructions.d.ts.map +1 -0
- package/dist/mcp/instructions.js +64 -0
- package/dist/mcp/instructions.js.map +1 -0
- package/dist/mcp/kept-listing.d.ts +27 -0
- package/dist/mcp/kept-listing.d.ts.map +1 -0
- package/dist/mcp/kept-listing.js +63 -0
- package/dist/mcp/kept-listing.js.map +1 -0
- package/dist/mcp/server.d.ts +4 -0
- package/dist/mcp/server.d.ts.map +1 -0
- package/dist/mcp/server.js +147 -0
- package/dist/mcp/server.js.map +1 -0
- package/dist/mcp/tool-names.d.ts +27 -0
- package/dist/mcp/tool-names.d.ts.map +1 -0
- package/dist/mcp/tool-names.js +47 -0
- package/dist/mcp/tool-names.js.map +1 -0
- package/dist/mcp/tools.d.ts +22 -0
- package/dist/mcp/tools.d.ts.map +1 -0
- package/dist/mcp/tools.js +440 -0
- package/dist/mcp/tools.js.map +1 -0
- package/dist/node-version.d.ts +15 -0
- package/dist/node-version.d.ts.map +1 -0
- package/dist/node-version.js +23 -0
- package/dist/node-version.js.map +1 -0
- package/dist/search/grep-cli.d.ts +35 -0
- package/dist/search/grep-cli.d.ts.map +1 -0
- package/dist/search/grep-cli.js +115 -0
- package/dist/search/grep-cli.js.map +1 -0
- package/dist/search/grep.d.ts +60 -0
- package/dist/search/grep.d.ts.map +1 -0
- package/dist/search/grep.js +143 -0
- package/dist/search/grep.js.map +1 -0
- package/dist/search/ignored-code.d.ts +9 -0
- package/dist/search/ignored-code.d.ts.map +1 -0
- package/dist/search/ignored-code.js +73 -0
- package/dist/search/ignored-code.js.map +1 -0
- package/dist/search/user-regexp.d.ts +26 -0
- package/dist/search/user-regexp.d.ts.map +1 -0
- package/dist/search/user-regexp.js +150 -0
- package/dist/search/user-regexp.js.map +1 -0
- package/dist/telemetry/contract.d.ts +117 -0
- package/dist/telemetry/contract.d.ts.map +1 -0
- package/dist/telemetry/contract.js +341 -0
- package/dist/telemetry/contract.js.map +1 -0
- package/dist/telemetry/flush.d.ts +21 -0
- package/dist/telemetry/flush.d.ts.map +1 -0
- package/dist/telemetry/flush.js +85 -0
- package/dist/telemetry/flush.js.map +1 -0
- package/dist/telemetry/gate.d.ts +30 -0
- package/dist/telemetry/gate.d.ts.map +1 -0
- package/dist/telemetry/gate.js +81 -0
- package/dist/telemetry/gate.js.map +1 -0
- package/dist/telemetry/identity.d.ts +40 -0
- package/dist/telemetry/identity.d.ts.map +1 -0
- package/dist/telemetry/identity.js +80 -0
- package/dist/telemetry/identity.js.map +1 -0
- package/dist/telemetry/index.d.ts +18 -0
- package/dist/telemetry/index.d.ts.map +1 -0
- package/dist/telemetry/index.js +16 -0
- package/dist/telemetry/index.js.map +1 -0
- package/dist/telemetry/key.d.ts +21 -0
- package/dist/telemetry/key.d.ts.map +1 -0
- package/dist/telemetry/key.js +49 -0
- package/dist/telemetry/key.js.map +1 -0
- package/dist/telemetry/notice.d.ts +19 -0
- package/dist/telemetry/notice.d.ts.map +1 -0
- package/dist/telemetry/notice.js +93 -0
- package/dist/telemetry/notice.js.map +1 -0
- package/dist/telemetry/queue.d.ts +35 -0
- package/dist/telemetry/queue.d.ts.map +1 -0
- package/dist/telemetry/queue.js +162 -0
- package/dist/telemetry/queue.js.map +1 -0
- package/dist/telemetry/send.d.ts +19 -0
- package/dist/telemetry/send.d.ts.map +1 -0
- package/dist/telemetry/send.js +84 -0
- package/dist/telemetry/send.js.map +1 -0
- package/dist/telemetry/sessions.d.ts +25 -0
- package/dist/telemetry/sessions.d.ts.map +1 -0
- package/dist/telemetry/sessions.js +104 -0
- package/dist/telemetry/sessions.js.map +1 -0
- package/dist/telemetry/track.d.ts +62 -0
- package/dist/telemetry/track.d.ts.map +1 -0
- package/dist/telemetry/track.js +143 -0
- package/dist/telemetry/track.js.map +1 -0
- package/dist/upkeep-run.d.ts +22 -0
- package/dist/upkeep-run.d.ts.map +1 -0
- package/dist/upkeep-run.js +85 -0
- package/dist/upkeep-run.js.map +1 -0
- package/dist/upkeep.d.ts +127 -0
- package/dist/upkeep.d.ts.map +1 -0
- package/dist/upkeep.js +252 -0
- package/dist/upkeep.js.map +1 -0
- package/dist/util/actions-folder.d.ts +2 -0
- package/dist/util/actions-folder.d.ts.map +1 -0
- package/dist/util/actions-folder.js +9 -0
- package/dist/util/actions-folder.js.map +1 -0
- package/dist/util/browser.d.ts +3 -0
- package/dist/util/browser.d.ts.map +1 -0
- package/dist/util/browser.js +14 -0
- package/dist/util/browser.js.map +1 -0
- package/dist/util/child-process.d.ts +15 -0
- package/dist/util/child-process.d.ts.map +1 -0
- package/dist/util/child-process.js +15 -0
- package/dist/util/child-process.js.map +1 -0
- package/dist/util/front-matter.d.ts +46 -0
- package/dist/util/front-matter.d.ts.map +1 -0
- package/dist/util/front-matter.js +113 -0
- package/dist/util/front-matter.js.map +1 -0
- package/dist/util/id.d.ts +7 -0
- package/dist/util/id.d.ts.map +1 -0
- package/dist/util/id.js +14 -0
- package/dist/util/id.js.map +1 -0
- package/dist/util/paths.d.ts +29 -0
- package/dist/util/paths.d.ts.map +1 -0
- package/dist/util/paths.js +71 -0
- package/dist/util/paths.js.map +1 -0
- package/dist/util/private-file.d.ts +14 -0
- package/dist/util/private-file.d.ts.map +1 -0
- package/dist/util/private-file.js +82 -0
- package/dist/util/private-file.js.map +1 -0
- package/dist/util/source.d.ts +4 -0
- package/dist/util/source.d.ts.map +1 -0
- package/dist/util/source.js +12 -0
- package/dist/util/source.js.map +1 -0
- package/dist/util/spinner.d.ts +15 -0
- package/dist/util/spinner.d.ts.map +1 -0
- package/dist/util/spinner.js +52 -0
- package/dist/util/spinner.js.map +1 -0
- package/dist/util/state.d.ts +120 -0
- package/dist/util/state.d.ts.map +1 -0
- package/dist/util/state.js +264 -0
- package/dist/util/state.js.map +1 -0
- package/dist/vendor/grammars/tree-sitter-go.LICENSE +21 -0
- package/dist/vendor/grammars/tree-sitter-go.wasm +0 -0
- package/dist/vendor/grammars/tree-sitter-java.LICENSE +21 -0
- package/dist/vendor/grammars/tree-sitter-java.wasm +0 -0
- package/dist/vendor/grammars/tree-sitter-kotlin.LICENSE +9 -0
- package/dist/vendor/grammars/tree-sitter-kotlin.wasm +0 -0
- package/dist/vendor/grammars/tree-sitter-php.LICENSE +22 -0
- package/dist/vendor/grammars/tree-sitter-php.wasm +0 -0
- package/dist/vendor/grammars/tree-sitter-python.LICENSE +21 -0
- package/dist/vendor/grammars/tree-sitter-python.wasm +0 -0
- package/dist/vendor/grammars/tree-sitter-r.LICENSE +9 -0
- package/dist/vendor/grammars/tree-sitter-r.wasm +0 -0
- package/dist/vendor/grammars/tree-sitter-swift.LICENSE +21 -0
- package/dist/vendor/grammars/tree-sitter-swift.wasm +0 -0
- package/dist/vendor/grammars/tree-sitter-tsx.wasm +0 -0
- package/dist/vendor/grammars/tree-sitter-typescript.LICENSE +21 -0
- package/dist/vendor/grammars/tree-sitter-typescript.wasm +0 -0
- package/dist/viewer/app.js +2 -0
- package/dist/viewer/index.html +49 -0
- package/dist/viewer/style.css +154 -0
- package/dist/viz/assemble.d.ts +83 -0
- package/dist/viz/assemble.d.ts.map +1 -0
- package/dist/viz/assemble.js +101 -0
- package/dist/viz/assemble.js.map +1 -0
- package/dist/viz/export.d.ts +39 -0
- package/dist/viz/export.d.ts.map +1 -0
- package/dist/viz/export.js +98 -0
- package/dist/viz/export.js.map +1 -0
- package/dist/viz/serve.d.ts +13 -0
- package/dist/viz/serve.d.ts.map +1 -0
- package/dist/viz/serve.js +130 -0
- package/dist/viz/serve.js.map +1 -0
- package/package.json +115 -4
- package/scripts/build-grammar-wasm.mjs +112 -0
- package/scripts/build-viewer.mjs +44 -0
- package/scripts/graph-quality.mjs +117 -0
- package/scripts/pack-trail.mjs +53 -0
- package/scripts/postinstall.mjs +65 -0
- package/scripts/run-tests.mjs +72 -0
- package/scripts/stamp-telemetry-key.mjs +56 -0
- package/scripts/tally-audit.mjs +140 -0
- package/scripts/vendor-grammars.mjs +53 -0
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { NodeV1 } from "./types.js";
|
|
2
|
+
export declare const MD_EXT = ".md";
|
|
3
|
+
/** Whether this file path is a markdown file. */
|
|
4
|
+
export declare function isMdFile(path: string): boolean;
|
|
5
|
+
export interface MdSection {
|
|
6
|
+
/** Heading text, e.g. "Reglas de negocio". */
|
|
7
|
+
name: string;
|
|
8
|
+
/** Heading level 1-6. */
|
|
9
|
+
level: number;
|
|
10
|
+
/** 1-based line number of the heading. */
|
|
11
|
+
line: number;
|
|
12
|
+
/** Text content of this section (not including the heading line). */
|
|
13
|
+
body: string;
|
|
14
|
+
}
|
|
15
|
+
/** Parse a markdown file into a list of sections (one per heading). */
|
|
16
|
+
export declare function parseMdSections(content: string): MdSection[];
|
|
17
|
+
/**
|
|
18
|
+
* Extract nodes from a markdown file. Returns one FileNode + one node per heading.
|
|
19
|
+
* Nodes have kind "section" and carry the section body as summary/body_text.
|
|
20
|
+
*/
|
|
21
|
+
export declare function extractMd(absPath: string, relPath: string): NodeV1[];
|
|
22
|
+
//# sourceMappingURL=markdown.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"markdown.d.ts","sourceRoot":"","sources":["../../src/graph/markdown.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAEzC,eAAO,MAAM,MAAM,QAAQ,CAAC;AAE5B,iDAAiD;AACjD,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAE9C;AAuBD,MAAM,WAAW,SAAS;IACxB,8CAA8C;IAC9C,IAAI,EAAE,MAAM,CAAC;IACb,yBAAyB;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,0CAA0C;IAC1C,IAAI,EAAE,MAAM,CAAC;IACb,qEAAqE;IACrE,IAAI,EAAE,MAAM,CAAC;CACd;AAED,uEAAuE;AACvE,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,EAAE,CAsC5D;AAED;;;GAGG;AACH,wBAAgB,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,CAkEpE"}
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Markdown extraction tier — headings as symbols, sections as nodes.
|
|
3
|
+
*
|
|
4
|
+
* Opt-in via `trail build --include-md` (persisted in `.graft/config.json`).
|
|
5
|
+
* Produces one FileNode + one SectionNode per heading, so `trail ask` and
|
|
6
|
+
* `trail_search_semantic` can find content in `.md` files.
|
|
7
|
+
*
|
|
8
|
+
* No tree-sitter grammar needed: heading structure is simple enough for regex.
|
|
9
|
+
* Each heading becomes a node; its body is the text until the next same-or-higher
|
|
10
|
+
* heading. The file node's body is the preamble (text before the first heading).
|
|
11
|
+
*/
|
|
12
|
+
import { readFileSync } from "node:fs";
|
|
13
|
+
import { contentHash } from "../util/id.js";
|
|
14
|
+
export const MD_EXT = ".md";
|
|
15
|
+
/** Whether this file path is a markdown file. */
|
|
16
|
+
export function isMdFile(path) {
|
|
17
|
+
return path.toLowerCase().endsWith(MD_EXT);
|
|
18
|
+
}
|
|
19
|
+
/** Heading level of a markdown line, or 0 if not a heading. */
|
|
20
|
+
function headingLevel(line) {
|
|
21
|
+
const m = /^(#{1,6})\s/.exec(line);
|
|
22
|
+
return m ? m[1].length : 0;
|
|
23
|
+
}
|
|
24
|
+
/** Strip markdown heading prefix and trim. */
|
|
25
|
+
function headingText(line) {
|
|
26
|
+
return line.replace(/^#{1,6}\s+/, "").trim();
|
|
27
|
+
}
|
|
28
|
+
/** Slugify a heading for use as a symbol name (lowercase, hyphens). */
|
|
29
|
+
function slugify(text) {
|
|
30
|
+
return text
|
|
31
|
+
.toLowerCase()
|
|
32
|
+
.replace(/[^a-z0-9\s-]/g, "")
|
|
33
|
+
.trim()
|
|
34
|
+
.replace(/\s+/g, "-")
|
|
35
|
+
.slice(0, 80);
|
|
36
|
+
}
|
|
37
|
+
/** Parse a markdown file into a list of sections (one per heading). */
|
|
38
|
+
export function parseMdSections(content) {
|
|
39
|
+
const lines = content.split("\n");
|
|
40
|
+
const sections = [];
|
|
41
|
+
let current = null;
|
|
42
|
+
let bodyLines = [];
|
|
43
|
+
let inFence = false;
|
|
44
|
+
for (let i = 0; i < lines.length; i++) {
|
|
45
|
+
const line = lines[i];
|
|
46
|
+
// Skip fenced code blocks — headings inside them are not real.
|
|
47
|
+
if (/^```/.test(line)) {
|
|
48
|
+
inFence = !inFence;
|
|
49
|
+
}
|
|
50
|
+
if (inFence) {
|
|
51
|
+
if (current)
|
|
52
|
+
bodyLines.push(line);
|
|
53
|
+
continue;
|
|
54
|
+
}
|
|
55
|
+
const level = headingLevel(line);
|
|
56
|
+
if (level > 0) {
|
|
57
|
+
// Close the previous section.
|
|
58
|
+
if (current) {
|
|
59
|
+
current.body = bodyLines.join("\n").trim();
|
|
60
|
+
sections.push(current);
|
|
61
|
+
}
|
|
62
|
+
current = { name: headingText(line), level, line: i + 1, body: "" };
|
|
63
|
+
bodyLines = [];
|
|
64
|
+
}
|
|
65
|
+
else {
|
|
66
|
+
if (current)
|
|
67
|
+
bodyLines.push(line);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
// Close last section.
|
|
71
|
+
if (current) {
|
|
72
|
+
current.body = bodyLines.join("\n").trim();
|
|
73
|
+
sections.push(current);
|
|
74
|
+
}
|
|
75
|
+
return sections;
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Extract nodes from a markdown file. Returns one FileNode + one node per heading.
|
|
79
|
+
* Nodes have kind "section" and carry the section body as summary/body_text.
|
|
80
|
+
*/
|
|
81
|
+
export function extractMd(absPath, relPath) {
|
|
82
|
+
let content;
|
|
83
|
+
try {
|
|
84
|
+
content = readFileSync(absPath, "utf8");
|
|
85
|
+
}
|
|
86
|
+
catch {
|
|
87
|
+
return [];
|
|
88
|
+
}
|
|
89
|
+
const lines = content.split("\n");
|
|
90
|
+
const totalLines = lines.length;
|
|
91
|
+
const fileHash = contentHash(content);
|
|
92
|
+
const fileId = relPath;
|
|
93
|
+
const nodes = [];
|
|
94
|
+
const sections = parseMdSections(content);
|
|
95
|
+
// Preamble: text before the first heading.
|
|
96
|
+
const firstHeadingLine = sections[0]?.line ?? Infinity;
|
|
97
|
+
const preamble = content
|
|
98
|
+
.split("\n")
|
|
99
|
+
.slice(0, firstHeadingLine - 1)
|
|
100
|
+
.join("\n")
|
|
101
|
+
.trim();
|
|
102
|
+
// File node.
|
|
103
|
+
nodes.push({
|
|
104
|
+
id: fileId,
|
|
105
|
+
kind: "file",
|
|
106
|
+
name: relPath.split("/").pop() ?? relPath,
|
|
107
|
+
path: relPath,
|
|
108
|
+
span: `L1-L${totalLines}`,
|
|
109
|
+
signature: null,
|
|
110
|
+
exported: false,
|
|
111
|
+
origin: "generic",
|
|
112
|
+
body_hash: fileHash,
|
|
113
|
+
summary_state: "none",
|
|
114
|
+
summary: preamble.slice(0, 200) || undefined,
|
|
115
|
+
body_text: preamble || undefined,
|
|
116
|
+
children: [],
|
|
117
|
+
edges: [],
|
|
118
|
+
});
|
|
119
|
+
// One node per heading.
|
|
120
|
+
for (let i = 0; i < sections.length; i++) {
|
|
121
|
+
const section = sections[i];
|
|
122
|
+
const nextLine = sections[i + 1]?.line ?? totalLines + 1;
|
|
123
|
+
const symbolId = `${relPath}#${slugify(section.name)}`;
|
|
124
|
+
nodes.push({
|
|
125
|
+
id: symbolId,
|
|
126
|
+
kind: "section",
|
|
127
|
+
name: section.name,
|
|
128
|
+
path: relPath,
|
|
129
|
+
span: `L${section.line}-L${nextLine - 1}`,
|
|
130
|
+
signature: `${"#".repeat(section.level)} ${section.name}`,
|
|
131
|
+
exported: false,
|
|
132
|
+
origin: "generic",
|
|
133
|
+
body_hash: contentHash(section.body),
|
|
134
|
+
summary_state: "none",
|
|
135
|
+
summary: section.body.slice(0, 300) || undefined,
|
|
136
|
+
body_text: section.body || undefined,
|
|
137
|
+
children: [],
|
|
138
|
+
edges: [],
|
|
139
|
+
});
|
|
140
|
+
}
|
|
141
|
+
return nodes;
|
|
142
|
+
}
|
|
143
|
+
//# sourceMappingURL=markdown.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"markdown.js","sourceRoot":"","sources":["../../src/graph/markdown.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import type { Language } from "./extract.js";
|
|
2
|
+
/**
|
|
3
|
+
* True when `lang`'s native grammar loads and the parser accepts it. The first call
|
|
4
|
+
* per language does the loading; the answer is cached for the life of the process.
|
|
5
|
+
* Never throws.
|
|
6
|
+
*/
|
|
7
|
+
export declare function nativeReady(lang: Language): boolean;
|
|
8
|
+
/** What depth-parser.ts uses of a native parser. */
|
|
9
|
+
export interface NativeParser {
|
|
10
|
+
parse(input: (index: number) => string): {
|
|
11
|
+
rootNode: unknown;
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
/** The shared native parser, set to `lang`. Throws when that grammar is not
|
|
15
|
+
* available; callers ask {@link nativeReady} first and send the file elsewhere. */
|
|
16
|
+
export declare function nativeParser(lang: Language): NativeParser;
|
|
17
|
+
/**
|
|
18
|
+
* The npm packages whose missing binary keeps these languages off the native
|
|
19
|
+
* parser: what `npm install --allow-scripts=…` has to name. Empty when every one
|
|
20
|
+
* loaded, or when the ones that failed did load and were rejected by the parser
|
|
21
|
+
* (an ABI mismatch, which no install flag fixes).
|
|
22
|
+
*/
|
|
23
|
+
export declare function missingNativePackages(langs: Iterable<Language>): string[];
|
|
24
|
+
/** The languages a build parsed with a breadth-tier stand-in because their own
|
|
25
|
+
* grammar didn't load, and the packages to allow so the next install builds them. */
|
|
26
|
+
export interface NativeFallback {
|
|
27
|
+
/** Display labels (`javascript`, not the `typescript` grammar that parses it). */
|
|
28
|
+
languages: string[];
|
|
29
|
+
packages: string[];
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* The one line a build prints when some languages fell back, or null when none did.
|
|
33
|
+
* One line on purpose: `graft init` passes on only the `⚠`/`✗` lines of the build
|
|
34
|
+
* it runs, so a second line holding the fix would be dropped there.
|
|
35
|
+
*
|
|
36
|
+
* With no packages to allow, the grammar that didn't load is one of the package's
|
|
37
|
+
* own WASM files, so reinstalling it is the fix.
|
|
38
|
+
*/
|
|
39
|
+
export declare function nativeFallbackNotice(fallback: NativeFallback | undefined, packageName: string): string | null;
|
|
40
|
+
/** Test seam: replace how native modules are required (null restores the real
|
|
41
|
+
* `require`), and forget everything loaded so far. A missing binary is simulated by
|
|
42
|
+
* a function that throws for that module id, the way node-gyp-build does. */
|
|
43
|
+
export declare function setNativeRequireForTest(fn: ((id: string) => unknown) | null): void;
|
|
44
|
+
/** The real `require` the seam above wraps, for a test's pass-through. */
|
|
45
|
+
export declare function realNativeRequire(id: string): unknown;
|
|
46
|
+
//# sourceMappingURL=native.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"native.d.ts","sourceRoot":"","sources":["../../src/graph/native.ts"],"names":[],"mappings":"AAmBA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AA0E7C;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,CAmBnD;AAED,oDAAoD;AACpD,MAAM,WAAW,YAAY;IAC3B,KAAK,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,GAAG;QAAE,QAAQ,EAAE,OAAO,CAAA;KAAE,CAAC;CAChE;AAED;mFACmF;AACnF,wBAAgB,YAAY,CAAC,IAAI,EAAE,QAAQ,GAAG,YAAY,CASzD;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,QAAQ,CAAC,QAAQ,CAAC,GAAG,MAAM,EAAE,CAUzE;AAED;qFACqF;AACrF,MAAM,WAAW,cAAc;IAC7B,kFAAkF;IAClF,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,cAAc,GAAG,SAAS,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAM7G;AAED;;6EAE6E;AAC7E,wBAAgB,uBAAuB,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,GAAG,IAAI,GAAG,IAAI,CAKlF;AAED,0EAA0E;AAC1E,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAErD"}
|
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The depth tier's native grammars: node tree-sitter and the grammar addons,
|
|
3
|
+
* loaded on first use and never fatally.
|
|
4
|
+
*
|
|
5
|
+
* The depth tier parses on WASM now (depth-parser.ts), and these packages are dev
|
|
6
|
+
* dependencies only. As dependencies they made installing the package compile C:
|
|
7
|
+
* `tree-sitter-kotlin` ships no prebuilt binary at all, and `tree-sitter` and
|
|
8
|
+
* `tree-sitter-python` have none for linux-arm64. They stay for two uses, both
|
|
9
|
+
* behind depth-parser.ts: test/depth-parity.ts builds real repos on them and on
|
|
10
|
+
* WASM and diffs the graphs, and a language listed in `NATIVE_ONLY` there parses
|
|
11
|
+
* on its addon (none is).
|
|
12
|
+
*
|
|
13
|
+
* Each module is required the first time it is asked for, and a failure is
|
|
14
|
+
* remembered: that language's files go to its WASM stand-in in the breadth tier
|
|
15
|
+
* (`fallbackLangOf` in generic.ts), and the build says which languages fell back
|
|
16
|
+
* and how to fix it ({@link nativeFallbackNotice}).
|
|
17
|
+
*/
|
|
18
|
+
import { createRequire } from "node:module";
|
|
19
|
+
const nodeRequire = createRequire(import.meta.url);
|
|
20
|
+
const CORE = "tree-sitter";
|
|
21
|
+
/** The module each depth-tier grammar comes from, and the export that is the
|
|
22
|
+
* grammar when the module ships more than one (typescript+tsx, php+php_only). */
|
|
23
|
+
const GRAMMAR_MODULES = {
|
|
24
|
+
typescript: { module: "tree-sitter-typescript", pick: "typescript" },
|
|
25
|
+
tsx: { module: "tree-sitter-typescript", pick: "tsx" },
|
|
26
|
+
python: { module: "tree-sitter-python" },
|
|
27
|
+
go: { module: "tree-sitter-go" },
|
|
28
|
+
r: { module: "tree-sitter-r" },
|
|
29
|
+
java: { module: "tree-sitter-java" },
|
|
30
|
+
kotlin: { module: "tree-sitter-kotlin" },
|
|
31
|
+
swift: { module: "tree-sitter-swift" },
|
|
32
|
+
php: { module: "tree-sitter-php", pick: "php" },
|
|
33
|
+
};
|
|
34
|
+
/** The name `npm --allow-scripts` needs, where it differs from the module name.
|
|
35
|
+
* `tree-sitter-r` is an npm alias, and npm matches an allow entry against the real
|
|
36
|
+
* package only: an alias as the key matches nothing. */
|
|
37
|
+
const NPM_NAME = {
|
|
38
|
+
"tree-sitter-r": "@davisvaughan/tree-sitter-r",
|
|
39
|
+
};
|
|
40
|
+
let requireModule = (id) => nodeRequire(id);
|
|
41
|
+
const modules = new Map();
|
|
42
|
+
const ready = new Map();
|
|
43
|
+
/** undefined: not tried yet. null: tried, and the core binding is unusable. */
|
|
44
|
+
let parser;
|
|
45
|
+
function message(err) {
|
|
46
|
+
return err instanceof Error ? err.message : String(err);
|
|
47
|
+
}
|
|
48
|
+
function load(id) {
|
|
49
|
+
let hit = modules.get(id);
|
|
50
|
+
if (!hit) {
|
|
51
|
+
try {
|
|
52
|
+
hit = { ok: true, value: requireModule(id) };
|
|
53
|
+
}
|
|
54
|
+
catch (err) {
|
|
55
|
+
hit = { ok: false, error: message(err) };
|
|
56
|
+
}
|
|
57
|
+
modules.set(id, hit);
|
|
58
|
+
}
|
|
59
|
+
return hit;
|
|
60
|
+
}
|
|
61
|
+
function coreParser() {
|
|
62
|
+
if (parser === undefined) {
|
|
63
|
+
const core = load(CORE);
|
|
64
|
+
parser = null;
|
|
65
|
+
if (core.ok) {
|
|
66
|
+
try {
|
|
67
|
+
parser = new core.value();
|
|
68
|
+
}
|
|
69
|
+
catch (err) {
|
|
70
|
+
modules.set(CORE, { ok: false, error: message(err) });
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
return parser;
|
|
75
|
+
}
|
|
76
|
+
function grammarOf(lang) {
|
|
77
|
+
const { module, pick } = GRAMMAR_MODULES[lang];
|
|
78
|
+
const m = load(module);
|
|
79
|
+
if (!m.ok)
|
|
80
|
+
return null;
|
|
81
|
+
return pick ? (m.value[pick] ?? null) : m.value;
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* True when `lang`'s native grammar loads and the parser accepts it. The first call
|
|
85
|
+
* per language does the loading; the answer is cached for the life of the process.
|
|
86
|
+
* Never throws.
|
|
87
|
+
*/
|
|
88
|
+
export function nativeReady(lang) {
|
|
89
|
+
let ok = ready.get(lang);
|
|
90
|
+
if (ok === undefined) {
|
|
91
|
+
ok = false;
|
|
92
|
+
// Load the grammar even when the core binding failed, so the notice can name
|
|
93
|
+
// every package that is missing its binary, not only the first.
|
|
94
|
+
const grammar = grammarOf(lang);
|
|
95
|
+
const p = coreParser();
|
|
96
|
+
if (p && grammar) {
|
|
97
|
+
try {
|
|
98
|
+
p.setLanguage(grammar);
|
|
99
|
+
ok = true;
|
|
100
|
+
}
|
|
101
|
+
catch {
|
|
102
|
+
/* an addon built for another tree-sitter ABI: unusable, though it loaded */
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
ready.set(lang, ok);
|
|
106
|
+
}
|
|
107
|
+
return ok;
|
|
108
|
+
}
|
|
109
|
+
/** The shared native parser, set to `lang`. Throws when that grammar is not
|
|
110
|
+
* available; callers ask {@link nativeReady} first and send the file elsewhere. */
|
|
111
|
+
export function nativeParser(lang) {
|
|
112
|
+
if (!nativeReady(lang)) {
|
|
113
|
+
const { module } = GRAMMAR_MODULES[lang];
|
|
114
|
+
const why = [CORE, module].map((id) => modules.get(id)).find((m) => m && !m.ok);
|
|
115
|
+
throw new Error(`the native ${lang} parser is not available${why && !why.ok ? `: ${why.error}` : ""}`);
|
|
116
|
+
}
|
|
117
|
+
const p = parser;
|
|
118
|
+
p.setLanguage(grammarOf(lang));
|
|
119
|
+
return p;
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* The npm packages whose missing binary keeps these languages off the native
|
|
123
|
+
* parser: what `npm install --allow-scripts=…` has to name. Empty when every one
|
|
124
|
+
* loaded, or when the ones that failed did load and were rejected by the parser
|
|
125
|
+
* (an ABI mismatch, which no install flag fixes).
|
|
126
|
+
*/
|
|
127
|
+
export function missingNativePackages(langs) {
|
|
128
|
+
const out = new Set();
|
|
129
|
+
for (const lang of langs) {
|
|
130
|
+
if (nativeReady(lang))
|
|
131
|
+
continue;
|
|
132
|
+
for (const id of [CORE, GRAMMAR_MODULES[lang].module]) {
|
|
133
|
+
const m = modules.get(id);
|
|
134
|
+
if (m && !m.ok)
|
|
135
|
+
out.add(NPM_NAME[id] ?? id);
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
return [...out].sort();
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* The one line a build prints when some languages fell back, or null when none did.
|
|
142
|
+
* One line on purpose: `graft init` passes on only the `⚠`/`✗` lines of the build
|
|
143
|
+
* it runs, so a second line holding the fix would be dropped there.
|
|
144
|
+
*
|
|
145
|
+
* With no packages to allow, the grammar that didn't load is one of the package's
|
|
146
|
+
* own WASM files, so reinstalling it is the fix.
|
|
147
|
+
*/
|
|
148
|
+
export function nativeFallbackNotice(fallback, packageName) {
|
|
149
|
+
if (!fallback || fallback.languages.length === 0)
|
|
150
|
+
return null;
|
|
151
|
+
const langs = fallback.languages.join(", ");
|
|
152
|
+
const what = fallback.languages.length === 1 ? "its parser didn't load" : "their parsers didn't load";
|
|
153
|
+
const allow = fallback.packages.length > 0 ? `--allow-scripts=${fallback.packages.join(",")} ` : "";
|
|
154
|
+
return `⚠ ${langs}: basic parsing only, ${what}. To fix: npm install -g ${allow}${packageName}`;
|
|
155
|
+
}
|
|
156
|
+
/** Test seam: replace how native modules are required (null restores the real
|
|
157
|
+
* `require`), and forget everything loaded so far. A missing binary is simulated by
|
|
158
|
+
* a function that throws for that module id, the way node-gyp-build does. */
|
|
159
|
+
export function setNativeRequireForTest(fn) {
|
|
160
|
+
requireModule = fn ?? ((id) => nodeRequire(id));
|
|
161
|
+
modules.clear();
|
|
162
|
+
ready.clear();
|
|
163
|
+
parser = undefined;
|
|
164
|
+
}
|
|
165
|
+
/** The real `require` the seam above wraps, for a test's pass-through. */
|
|
166
|
+
export function realNativeRequire(id) {
|
|
167
|
+
return nodeRequire(id);
|
|
168
|
+
}
|
|
169
|
+
//# sourceMappingURL=native.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"native.js","sourceRoot":"","sources":["../../src/graph/native.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AACH,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAI5C,MAAM,WAAW,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAEnD,MAAM,IAAI,GAAG,aAAa,CAAC;AAE3B;iFACiF;AACjF,MAAM,eAAe,GAAwD;IAC3E,UAAU,EAAE,EAAE,MAAM,EAAE,wBAAwB,EAAE,IAAI,EAAE,YAAY,EAAE;IACpE,GAAG,EAAE,EAAE,MAAM,EAAE,wBAAwB,EAAE,IAAI,EAAE,KAAK,EAAE;IACtD,MAAM,EAAE,EAAE,MAAM,EAAE,oBAAoB,EAAE;IACxC,EAAE,EAAE,EAAE,MAAM,EAAE,gBAAgB,EAAE;IAChC,CAAC,EAAE,EAAE,MAAM,EAAE,eAAe,EAAE;IAC9B,IAAI,EAAE,EAAE,MAAM,EAAE,kBAAkB,EAAE;IACpC,MAAM,EAAE,EAAE,MAAM,EAAE,oBAAoB,EAAE;IACxC,KAAK,EAAE,EAAE,MAAM,EAAE,mBAAmB,EAAE;IACtC,GAAG,EAAE,EAAE,MAAM,EAAE,iBAAiB,EAAE,IAAI,EAAE,KAAK,EAAE;CAChD,CAAC;AAEF;;wDAEwD;AACxD,MAAM,QAAQ,GAA2B;IACvC,eAAe,EAAE,6BAA6B;CAC/C,CAAC;AAIF,IAAI,aAAa,GAA4B,CAAC,EAAE,EAAE,EAAE,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;AACrE,MAAM,OAAO,GAAG,IAAI,GAAG,EAAkB,CAAC;AAC1C,MAAM,KAAK,GAAG,IAAI,GAAG,EAAqB,CAAC;AAC3C,+EAA+E;AAC/E,IAAI,MAAiC,CAAC;AAEtC,SAAS,OAAO,CAAC,GAAY;IAC3B,OAAO,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;AAC1D,CAAC;AAED,SAAS,IAAI,CAAC,EAAU;IACtB,IAAI,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAC1B,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,IAAI,CAAC;YACH,GAAG,GAAG,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,aAAa,CAAC,EAAE,CAAC,EAAE,CAAC;QAC/C,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,GAAG,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QAC3C,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;IACvB,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,UAAU;IACjB,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QACzB,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC;QACxB,MAAM,GAAG,IAAI,CAAC;QACd,IAAI,IAAI,CAAC,EAAE,EAAE,CAAC;YACZ,IAAI,CAAC;gBACH,MAAM,GAAG,IAAK,IAAI,CAAC,KAAuB,EAAE,CAAC;YAC/C,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YACxD,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,SAAS,CAAC,IAAc;IAC/B,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC;IAC/C,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;IACvB,IAAI,CAAC,CAAC,CAAC,EAAE;QAAE,OAAO,IAAI,CAAC;IACvB,OAAO,IAAI,CAAC,CAAC,CAAC,CAAE,CAAC,CAAC,KAAiC,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;AAC/E,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,WAAW,CAAC,IAAc;IACxC,IAAI,EAAE,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACzB,IAAI,EAAE,KAAK,SAAS,EAAE,CAAC;QACrB,EAAE,GAAG,KAAK,CAAC;QACX,6EAA6E;QAC7E,gEAAgE;QAChE,MAAM,OAAO,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;QAChC,MAAM,CAAC,GAAG,UAAU,EAAE,CAAC;QACvB,IAAI,CAAC,IAAI,OAAO,EAAE,CAAC;YACjB,IAAI,CAAC;gBACH,CAAC,CAAC,WAAW,CAAC,OAAgB,CAAC,CAAC;gBAChC,EAAE,GAAG,IAAI,CAAC;YACZ,CAAC;YAAC,MAAM,CAAC;gBACP,4EAA4E;YAC9E,CAAC;QACH,CAAC;QACD,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IACtB,CAAC;IACD,OAAO,EAAE,CAAC;AACZ,CAAC;AAOD;mFACmF;AACnF,MAAM,UAAU,YAAY,CAAC,IAAc;IACzC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC;QACvB,MAAM,EAAE,MAAM,EAAE,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC;QACzC,MAAM,GAAG,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAChF,MAAM,IAAI,KAAK,CAAC,cAAc,IAAI,2BAA2B,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACzG,CAAC;IACD,MAAM,CAAC,GAAG,MAAgB,CAAC;IAC3B,CAAC,CAAC,WAAW,CAAC,SAAS,CAAC,IAAI,CAAU,CAAC,CAAC;IACxC,OAAO,CAAC,CAAC;AACX,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,qBAAqB,CAAC,KAAyB;IAC7D,MAAM,GAAG,GAAG,IAAI,GAAG,EAAU,CAAC;IAC9B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,WAAW,CAAC,IAAI,CAAC;YAAE,SAAS;QAChC,KAAK,MAAM,EAAE,IAAI,CAAC,IAAI,EAAE,eAAe,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC;YACtD,MAAM,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAC1B,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE;gBAAE,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC;QAC9C,CAAC;IACH,CAAC;IACD,OAAO,CAAC,GAAG,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;AACzB,CAAC;AAUD;;;;;;;GAOG;AACH,MAAM,UAAU,oBAAoB,CAAC,QAAoC,EAAE,WAAmB;IAC5F,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAC9D,MAAM,KAAK,GAAG,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC5C,MAAM,IAAI,GAAG,QAAQ,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,wBAAwB,CAAC,CAAC,CAAC,2BAA2B,CAAC;IACtG,MAAM,KAAK,GAAG,QAAQ,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,mBAAmB,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;IACpG,OAAO,KAAK,KAAK,yBAAyB,IAAI,4BAA4B,KAAK,GAAG,WAAW,EAAE,CAAC;AAClG,CAAC;AAED;;6EAE6E;AAC7E,MAAM,UAAU,uBAAuB,CAAC,EAAoC;IAC1E,aAAa,GAAG,EAAE,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,CAAC;IAChD,OAAO,CAAC,KAAK,EAAE,CAAC;IAChB,KAAK,CAAC,KAAK,EAAE,CAAC;IACd,MAAM,GAAG,SAAS,CAAC;AACrB,CAAC;AAED,0EAA0E;AAC1E,MAAM,UAAU,iBAAiB,CAAC,EAAU;IAC1C,OAAO,WAAW,CAAC,EAAE,CAAC,CAAC;AACzB,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
(struct_specifier name: (type_identifier) @name body:(_)) @definition.class
|
|
2
|
+
|
|
3
|
+
(declaration type: (union_specifier name: (type_identifier) @name)) @definition.class
|
|
4
|
+
|
|
5
|
+
(function_declarator declarator: (identifier) @name) @definition.function
|
|
6
|
+
|
|
7
|
+
(type_definition declarator: (type_identifier) @name) @definition.type
|
|
8
|
+
|
|
9
|
+
(enum_specifier name: (type_identifier) @name) @definition.type
|
|
10
|
+
|
|
11
|
+
; graft: call sites (upstream c tags.scm is definition-only)
|
|
12
|
+
(call_expression
|
|
13
|
+
function: (identifier) @name) @reference.call
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
; C# tags — minimal, matched to the tree-sitter-wasms c_sharp grammar node types.
|
|
2
|
+
; (Upstream tree-sitter-c-sharp tags.scm references node types the bundled wasm
|
|
3
|
+
; grammar version lacks — "Bad node name 'type'" — so graft ships this instead.)
|
|
4
|
+
|
|
5
|
+
(class_declaration name: (identifier) @name) @definition.class
|
|
6
|
+
(interface_declaration name: (identifier) @name) @definition.interface
|
|
7
|
+
(struct_declaration (identifier) @name) @definition.struct
|
|
8
|
+
(enum_declaration name: (identifier) @name) @definition.enum
|
|
9
|
+
(record_declaration (identifier) @name) @definition.class
|
|
10
|
+
(method_declaration name: (identifier) @name) @definition.method
|
|
11
|
+
(constructor_declaration (identifier) @name) @definition.method
|
|
12
|
+
(property_declaration name: (identifier) @name) @definition.variable
|
|
13
|
+
(namespace_declaration name: (identifier) @name) @definition.module
|
|
14
|
+
|
|
15
|
+
(invocation_expression
|
|
16
|
+
function: [
|
|
17
|
+
(identifier) @name
|
|
18
|
+
(member_access_expression name: (identifier) @name)
|
|
19
|
+
]) @reference.call
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
; Clojure's tree-sitter grammar has no dedicated node types for `defn`/`def`/etc
|
|
2
|
+
; — every form, definition or call alike, is just a `list_lit` whose `value`
|
|
3
|
+
; field lists its children positionally. So a "definition" here is a list whose
|
|
4
|
+
; first symbol is a known defining macro, matched by name via `#any-of?`/`#eq?`,
|
|
5
|
+
; with the second symbol captured as the defined name.
|
|
6
|
+
|
|
7
|
+
; Definitions
|
|
8
|
+
|
|
9
|
+
; * namespace
|
|
10
|
+
(list_lit
|
|
11
|
+
.
|
|
12
|
+
value: (sym_lit name: (sym_name) @ignore)
|
|
13
|
+
.
|
|
14
|
+
value: (sym_lit name: (sym_name) @name)
|
|
15
|
+
(#eq? @ignore "ns")) @definition.module
|
|
16
|
+
|
|
17
|
+
; * functions/macros/multimethods
|
|
18
|
+
(list_lit
|
|
19
|
+
.
|
|
20
|
+
value: (sym_lit name: (sym_name) @ignore)
|
|
21
|
+
.
|
|
22
|
+
value: (sym_lit name: (sym_name) @name)
|
|
23
|
+
(#any-of? @ignore "defn" "defn-" "defmacro" "defmulti" "defmethod" "definline" "deftest")) @definition.function
|
|
24
|
+
|
|
25
|
+
; * def / defonce — a Var binding, not necessarily a function
|
|
26
|
+
(list_lit
|
|
27
|
+
.
|
|
28
|
+
value: (sym_lit name: (sym_name) @ignore)
|
|
29
|
+
.
|
|
30
|
+
value: (sym_lit name: (sym_name) @name)
|
|
31
|
+
(#any-of? @ignore "def" "defonce")) @definition.variable
|
|
32
|
+
|
|
33
|
+
; * defprotocol / definterface
|
|
34
|
+
(list_lit
|
|
35
|
+
.
|
|
36
|
+
value: (sym_lit name: (sym_name) @ignore)
|
|
37
|
+
.
|
|
38
|
+
value: (sym_lit name: (sym_name) @name)
|
|
39
|
+
(#any-of? @ignore "defprotocol" "definterface")) @definition.interface
|
|
40
|
+
|
|
41
|
+
; * defrecord / deftype / defstruct — each mints a JVM class
|
|
42
|
+
(list_lit
|
|
43
|
+
.
|
|
44
|
+
value: (sym_lit name: (sym_name) @ignore)
|
|
45
|
+
.
|
|
46
|
+
value: (sym_lit name: (sym_name) @name)
|
|
47
|
+
(#any-of? @ignore "defrecord" "deftype" "defstruct")) @definition.class
|
|
48
|
+
|
|
49
|
+
; References
|
|
50
|
+
|
|
51
|
+
; * function/macro call — any parenthesized list headed by a symbol. This also
|
|
52
|
+
; matches the def-forms above on their own keyword (e.g. `(defn foo …)` reads
|
|
53
|
+
; as a "call" to `defn`) and special forms (`let`, `if`, `fn`, …); those never
|
|
54
|
+
; resolve to an in-repo definition, so the existing resolver drops them rather
|
|
55
|
+
; than guessing — same trade-off the elixir/ruby queries make.
|
|
56
|
+
(list_lit
|
|
57
|
+
.
|
|
58
|
+
value: (sym_lit name: (sym_name) @name)) @reference.call
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
(struct_specifier name: (type_identifier) @name body:(_)) @definition.class
|
|
2
|
+
|
|
3
|
+
(declaration type: (union_specifier name: (type_identifier) @name)) @definition.class
|
|
4
|
+
|
|
5
|
+
(function_declarator declarator: (identifier) @name) @definition.function
|
|
6
|
+
|
|
7
|
+
(function_declarator declarator: (field_identifier) @name) @definition.function
|
|
8
|
+
|
|
9
|
+
(function_declarator declarator: (qualified_identifier scope: (namespace_identifier) @local.scope name: (identifier) @name)) @definition.method
|
|
10
|
+
|
|
11
|
+
(type_definition declarator: (type_identifier) @name) @definition.type
|
|
12
|
+
|
|
13
|
+
(enum_specifier name: (type_identifier) @name) @definition.type
|
|
14
|
+
|
|
15
|
+
(class_specifier name: (type_identifier) @name) @definition.class
|
|
16
|
+
|
|
17
|
+
; graft: call sites (upstream cpp tags.scm is definition-only)
|
|
18
|
+
(call_expression
|
|
19
|
+
function: [
|
|
20
|
+
(identifier) @name
|
|
21
|
+
(field_expression field: (field_identifier) @name)
|
|
22
|
+
(qualified_identifier name: (identifier) @name)
|
|
23
|
+
]) @reference.call
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
; Dart — breadth-tier tags.scm
|
|
2
|
+
;
|
|
3
|
+
; The Dart grammar does not wrap a function's signature and body in one
|
|
4
|
+
; definition node: `function_signature` / `method_signature` sit as siblings
|
|
5
|
+
; of `function_body` under `program` / `class_body`. Graft's generic extractor
|
|
6
|
+
; expands a captured signature to include a following `function_body` sibling
|
|
7
|
+
; so calls inside the body are attributed to the function (see defScope).
|
|
8
|
+
;
|
|
9
|
+
; Without this query the node-kind walker fallback runs, which:
|
|
10
|
+
; - skips `function_signature` (type does not match the walker suffixes)
|
|
11
|
+
; - mints `class_body` as a class (type starts with "class") named after the
|
|
12
|
+
; first identifier in the body (`int`, `bool`, …)
|
|
13
|
+
; - mints function-body locals (`initialized_variable_definition`) as symbols
|
|
14
|
+
;
|
|
15
|
+
; Call sites are `identifier` + adjacent `selector`/`argument_part`, not a
|
|
16
|
+
; `call_expression` node. Only that shape is tagged — assignment selectors and
|
|
17
|
+
; bare identifier reads are left alone.
|
|
18
|
+
|
|
19
|
+
; Top-level functions (direct children of program, not methods)
|
|
20
|
+
(program
|
|
21
|
+
(function_signature
|
|
22
|
+
name: (identifier) @name) @definition.function)
|
|
23
|
+
|
|
24
|
+
; Methods
|
|
25
|
+
(method_signature
|
|
26
|
+
(function_signature
|
|
27
|
+
name: (identifier) @name)) @definition.method
|
|
28
|
+
|
|
29
|
+
(class_definition
|
|
30
|
+
name: (identifier) @name) @definition.class
|
|
31
|
+
|
|
32
|
+
; Top-level / static `const`/`final` (`const int kThreshold = 3`)
|
|
33
|
+
(static_final_declaration
|
|
34
|
+
.
|
|
35
|
+
(identifier) @name) @definition.constant
|
|
36
|
+
|
|
37
|
+
; identifier(args) — `isReady(count)`, `Counter.ready → isReady(value)`
|
|
38
|
+
(
|
|
39
|
+
(identifier) @name
|
|
40
|
+
.
|
|
41
|
+
(selector
|
|
42
|
+
(argument_part))) @reference.call
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
; Definitions
|
|
2
|
+
|
|
3
|
+
; * modules and protocols
|
|
4
|
+
(call
|
|
5
|
+
target: (identifier) @ignore
|
|
6
|
+
(arguments (alias) @name)
|
|
7
|
+
(#any-of? @ignore "defmodule" "defprotocol")) @definition.module
|
|
8
|
+
|
|
9
|
+
; * functions/macros
|
|
10
|
+
(call
|
|
11
|
+
target: (identifier) @ignore
|
|
12
|
+
(arguments
|
|
13
|
+
[
|
|
14
|
+
; zero-arity functions with no parentheses
|
|
15
|
+
(identifier) @name
|
|
16
|
+
; regular function clause
|
|
17
|
+
(call target: (identifier) @name)
|
|
18
|
+
; function clause with a guard clause
|
|
19
|
+
(binary_operator
|
|
20
|
+
left: (call target: (identifier) @name)
|
|
21
|
+
operator: "when")
|
|
22
|
+
])
|
|
23
|
+
(#any-of? @ignore "def" "defp" "defdelegate" "defguard" "defguardp" "defmacro" "defmacrop" "defn" "defnp")) @definition.function
|
|
24
|
+
|
|
25
|
+
; References
|
|
26
|
+
|
|
27
|
+
; ignore calls to kernel/special-forms keywords
|
|
28
|
+
(call
|
|
29
|
+
target: (identifier) @ignore
|
|
30
|
+
(#any-of? @ignore "def" "defp" "defdelegate" "defguard" "defguardp" "defmacro" "defmacrop" "defn" "defnp" "defmodule" "defprotocol" "defimpl" "defstruct" "defexception" "defoverridable" "alias" "case" "cond" "else" "for" "if" "import" "quote" "raise" "receive" "require" "reraise" "super" "throw" "try" "unless" "unquote" "unquote_splicing" "use" "with"))
|
|
31
|
+
|
|
32
|
+
; ignore module attributes
|
|
33
|
+
(unary_operator
|
|
34
|
+
operator: "@"
|
|
35
|
+
operand: (call
|
|
36
|
+
target: (identifier) @ignore))
|
|
37
|
+
|
|
38
|
+
; * function call
|
|
39
|
+
(call
|
|
40
|
+
target: [
|
|
41
|
+
; local
|
|
42
|
+
(identifier) @name
|
|
43
|
+
; remote
|
|
44
|
+
(dot
|
|
45
|
+
right: (identifier) @name)
|
|
46
|
+
]) @reference.call
|
|
47
|
+
|
|
48
|
+
; * pipe into function call
|
|
49
|
+
(binary_operator
|
|
50
|
+
operator: "|>"
|
|
51
|
+
right: (identifier) @name) @reference.call
|
|
52
|
+
|
|
53
|
+
; * modules
|
|
54
|
+
(alias) @name @reference.module
|