ð³ Tree-sitter Analyzer
September 16, 2026 · View on GitHub
English | æ¥æ¬èª | ç®äœäžæ
AI ãšãŒãžã§ã³ããä¿¡é Œã§ããã³ãŒã ã€ã³ããªãžã§ã³ã¹ â 察å¿èšèªäžèŠ§å šäœã§æ£ç¢ºãªã¯ãã¹ã©ã³ã²ãŒãžæ§é è§£æããšãŒãžã§ã³ããã€ãã£ãèšèšïŒMCP + CLIïŒã
TSA 㯠tree-sitter ã§ã³ãŒãããŒã¹ãã€ã³ããã¯ã¹ããã³ãŒã« ã°ã©ãã»ã·ã³ãã«æ€çŽ¢ã»æ§é ã¯ãšãªã AI ã³ãŒãã£ã³ã° ãšãŒãžã§ã³ããžæäŸããŸã â 8 MCP ããŒã« + CLIãå®å šããŒã«ã«ããã¬ã¡ããªãªãã
ãªãéãã®ãïŒ
- ã¯ãã¹ã©ã³ã²ãŒãžæçžã¯èšèªãã¡ããªã§éæ§ãããŸãã ååã®äžèŽã ãã§ã¯ã¯ãã¹ã©ã³ã²ãŒãžã®èŸºã¯çãŸããŸãããããã匷å¶ããã²ãŒãã¯èŠçŽã§ã¯ãªãå®è¡ããããã¹ãã§ãã
- ãšãŒãžã§ã³ããã€ãã£ãã 8 MCP ããŒã«ãæ§é å JSON åºåãš verdict ãšã³ãããŒããæäŸããCLI ãšãã¥ã¬ãŒã·ã§ã³æžã¿ã¯ãŒã¯ãããŒãããå©çšã§ããŸãã
- åºããã€æ£ç¢ºã«åé¡ã 13 èšèªã¯
pipeline_registeredïŒãã€ãã©ã€ã³ç»é²æžã¿ãé E2EïŒã§ããããã¯ç»é²ã»é ç·ã®èšŒæ ã§ãããã¯ãã¹ãã¡ã€ã«åŒã³åºãè§£æ±ºã®æ€èšŒãæå³ããŸããã詳现ã¯çæãããå¯Ÿå¿æ·±åºŠã€ã³ãã³ããªãåç §ã
v1.x ããã®ç§»è¡ã¯ docs/MIGRATION.md ãåç §ã
ã¯ããã«
Python 3.10 以äžãå¿ èŠã§ãïŒç¢ºèª:
python3 --versionïŒãå¿ èŠã«å¿ã㊠python.org ããã€ã³ã¹ããŒã«ããŠãã ããã
èªåã€ã³ã¹ããŒã«ïŒæšå¥šïŒ
curl -fsSL https://raw.githubusercontent.com/aimasteracc/tree-sitter-analyzer/main/install.sh | bash
install.sh 㯠uv ã®æç¡ã確èªããŠæªã€ã³ã¹ããŒã«ãªãèªåå°å
¥ããClaude Desktop / Claude Code / Cursor / VS Code ã®èšå®ãã¡ã€ã«ãæ€åºã㊠MCP ãšã³ããªãèªåæžã蟌ã¿ããŸããã»ããã¢ããåŸã¯ tree-sitter-analyzer --doctor ã§èšå®ã確èªã§ããŸãã
ããŒãã¹ãã©ããã®ä¿¡é Œæ§ã«ã€ããŠ: å©äŸ¿æ§ã®ãããäžèšã³ãã³ãã¯
uvãæªã€ã³ã¹ããŒã«ãŸãã¯å€ãå Žåãå ¬åŒuvã€ã³ã¹ããŒã©ã TLS çµç±ã§ããŠã³ããŒãã»å®è¡ããŸãããã®ã€ã³ã¹ããŒã©ã¯å¯å€ã§ãã content-bound ã§ã¯ãããŸãããTSA ã¯ããŠã³ããŒãåã«èŠåã衚瀺ããã€ã³ã¹ããŒã«åŸã«å³å¯ãªããŒãžã§ã³ç¢ºèªãè¡ããŸãããã®æªæ€èšŒã®ããŒãã¹ãã©ãããé¿ãããå Žåã¯ãäºåã«uv >= 0.11.0ãæåã§ã€ã³ã¹ããŒã«ããããæ¬¡ã®ã»ãã¥ã¢ãªãªããã¢ãŠãã䜿çšããŠãã ããïŒããŒãã¹ãã©ãããå¿ èŠãªå Žåã¯æåã€ã³ã¹ããŒã«æé ã衚瀺ããŠçµäºããŸãïŒ:curl -fsSL https://raw.githubusercontent.com/aimasteracc/tree-sitter-analyzer/main/install.sh \ | TSA_DISABLE_UNVERIFIED_UV_BOOTSTRAP=1 bash
Claude Code ãžã¯ã³ã©ã€ããŒã§ã€ã³ã¹ããŒã«:
claude mcp add tree-sitter-analyzer \
--env TREE_SITTER_PROJECT_ROOT="$PWD" \
-- uvx --from "tree-sitter-analyzer[mcp]" tree-sitter-analyzer-mcp
ãšãŒãžã§ã³ããåèµ·åããããäŒãã: ãindex ããŒã«ã action=status ã§åŒãã§ãã ãããã
CLI ã§ã®åçæäœ (ãšãŒãžã§ã³ãäžèŠ): tree-sitter-analyzer --codegraph-status
PyPI / uvx ãŠãŒã¶ãŒãž â ã¹ãã«ã®ã€ã³ã¹ããŒã«:
tsa-*ã¹ãã«ã¯ãã€ãŒã«ã«å梱ãããŠããŸããäžåºŠã ãæ¬¡ã®ã³ãã³ãã§ã€ã³ã¹ããŒã«ããŠãã ãã:tree-sitter-analyzer --install-skills # ./.claude/skills/ ãž (ãã®ãããžã§ã¯ãã®ã¿) tree-sitter-analyzer --install-skills-global # ~/.claude/skills/ ãž (å šãããžã§ã¯ãå ±é)git clone ãŠãŒã¶ãŒã¯ãã§ã«
.claude/skills/ã«å«ãŸããŠãããããæäœäžèŠã§ãã
ãã®ä»ã®ãšãŒãžã§ã³ã (Cursor / Copilot / Cline / Continue / Claude Desktop / Roo Code) â
ã¯ã€ã㯠ã€ã³ã¹ããŒã«
1. äŸåé¢ä¿ãã€ã³ã¹ããŒã«
# uv (å¿
é )ããã®å
¬åŒç°¡æã€ã³ã¹ããŒã©ã¯å¯å€ã§ content-bound ã§ã¯ãããŸããã
# 代æ¿ã®æåã€ã³ã¹ããŒã«æ¹æ³ã¯ https://docs.astral.sh/uv/ ãåç
§ã
curl -LsSf https://astral.sh/uv/install.sh | sh # macOS / Linux
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex" # Windows
2. Tree-sitter Analyzer ãã€ã³ã¹ããŒã«
# ã¹ã¿ã³ãã¢ãã³ã€ã³ã¹ããŒã«(æ°žç¶ CLI ã³ãã³ã):
uv tool install "tree-sitter-analyzer[all,mcp]"
# â ã€ã³ã¹ããŒã«äžèŠã§ãå¯:äžã® MCP ãšã³ããªã¯ uvx ã§ãªã³ããã³ãå®è¡ãããŸãã
# uv 管çã® Python ãããžã§ã¯ãå
ã§ã¯: uv add "tree-sitter-analyzer[all,mcp]"
3. ãšãŒãžã§ã³ããžæ¥ç¶
察å¿ãšãŒãžã§ã³ããåç §ãå€ãã®ã¯ã©ã€ã¢ã³ãã§ä»¥äžã® MCP èšå®ã䜿çš:
{
"mcpServers": {
"tree-sitter-analyzer": {
"command": "uvx",
"args": ["--from", "tree-sitter-analyzer[mcp]", "tree-sitter-analyzer-mcp"],
"env": { "TREE_SITTER_PROJECT_ROOT": "/絶察ãã¹/ãããžã§ã¯ã" }
}
}
}
åèµ·ååŸ: ãindex ããŒã«ã action=status ã§åŒãã§ãã ãããã
CLI ã§ã®åçæäœ (ãšãŒãžã§ã³ãäžèŠ): tree-sitter-analyzer --codegraph-status
èªåã®ãªããžããªã§ãªãŸã«ãã®åäœã確èªïŒã€ã³ã¹ããŒã«äžèŠãæåã«åã€ã³ããã¯ã¹ããŸãïŒ:
uvx --from tree-sitter-analyzer miswire-audit .
ã¯ãã¹ã©ã³ã²ãŒãžã®ååè¡çªåè£ãå ±åããèªåã®ãªããžããªã§ãªãŸã«ãã®åäœã調æ»ã§ããŸããçµæã¯èšºææ å ±ã§ãããç«¶åãã³ãããŒã¯ã®äž»åŒµã§ã¯ãããŸããã
ãªã Tree-sitter Analyzer ã
- æ§é ååºåã MCP å¿çã¯æšæº JSON ãšã³ãããŒãã䜿çšããŸãããã€ããŒãã®æåã¯ã¬ã¹ãã³ã¹å¥çŽãã¹ãã§ä¿è·ãããŠããŸãã
- Verdict ãšã³ãããŒãã ãã¹ãŠã®å¿çã«
verdict: SAFE | CAUTION | UNSAFE | INFO | REVIEW | WARN | ERROR | NOT_FOUNDãä»ãããªãŒã±ã¹ãã¬ãŒã¿ãŒã¯çµæã«å¿ããŠåå²ã§ããŸãã - ãããžã§ã¯ãå¥å šæ§ A-F ã°ã¬ãŒãã£ã³ã°ã ãµã€ãºãè€é床ãã«ãã¬ããžãéè€ãäŸåãæ§é ãgit ãããã¹ããããçµã¿åãããŠè©äŸ¡ããŸãã
- ãã¥ã¬ãŒã·ã§ã³æžã¿ã¯ãŒã¯ãããŒïŒSkillsïŒã ãã·ã³ãã«æ€çŽ¢ããã³ãŒã« ãã§ãŒã³è¿œè·¡ããå¥å šæ§è©äŸ¡ãããªãã¡ã¯ã¿ãŒåã®å®å šãã§ãã¯ããPR ã¬ãã¥ãŒããªã©ã®ããŒã« ãµãã»ãããæäŸããŸãã
- å€å±€çãªå®å
šä¿è·ã
edit action=safe+edit action=guard+ å¶çŽ DSL +edit action=impact+ verdict ãšã³ãããŒãã§ãç·šéåã®ãªã¹ã¯å€æãæ¯æŽããŸãã - CLI/MCP ããªãã£ãšçµ±åã¯ãšãª DSLã åãè§£æããªããã£ãããšãŒãžã§ã³ããšã·ã§ã« ãŠãŒã¶ãŒãå©çšã§ããŸãã
äž»èŠæ©èœ
äºåã€ã³ããã¯ã¹ ã³ãŒã ã€ã³ããªãžã§ã³ã¹
ãšãŒãžã§ã³ãã®ã³ã¹ãã¯å¿çã®å€§ããã§ã¯ãªãã¿ãŒã³æ°ãæ¯é ããŸãã远å ã®ããŒã«åŒã³åºãã¯æ¯åãäŒè©±å šäœãåéããŸããTSA ã¯ãåãããããå°ããªããŠããããšå€æã§ããæ ¹æ ãå¿çã«èŒããŠè¿ãããã«äœãããŠããŸãã
| åã | TSA ããŒã« | å¿çã«èŒããã® |
|---|---|---|
| ãã®ã·ã³ãã«ã¯ã©ãã«ãããäœãåç §ããŠããã | nav action=navigate | å®çŸ©äœçœ®ãåç §ãã³ãŒã«éå±€ããŸãšã㊠|
| ãããå€ãããšäœãå£ããã | nav action=impact | æšç§»çäŸåå ãšãªã¹ã¯å€å® |
| 誰ããããåŒã³ãããã¯äœãåŒã¶ã | nav action=callers / action=callees | 解決æžã¿åŒã³åºãå°ç¹ãšã解決ã§ããªãã£ãå°ç¹ |
| ååã§ã·ã³ãã«ãæ¢ã | search action=symbol | é¢é£åºŠé ã®äžèŽ (FTS5 + BM25) |
| é¢é£ã·ã³ãã«ãé¢ä¿ãããä»ãã§ååŸ | structure action=explore | èŠæ±ããã·ã³ãã«ãšãã®ã€ãªãã |
| ã€ã³ããã¯ã¹ã¯ä»äœ¿ããã | index action=status | ã«ãã¬ããžã鮮床ããšããžæ° |
| ã³ãŒã« ã°ã©ããæ§ç¯ã»æŽæ° | index action=auto / action=full / action=sync | å®è¡åŸã®ã€ã³ããã¯ã¹ç¶æ |
| ãã®å€æŽãè§Šãããã¹ã | --affected FILE... (CLI) | æšç§»çã«åœ±é¿ãåãããã¹ã |
ã³ãŒã ããã²ãŒã·ã§ã³ä»¥å€ã®æ©èœ
| èœå | TSA ããŒã« | 説æ |
|---|---|---|
| BM25 ã©ã³ã¯ä»ãæ€çŽ¢ | å šæ€çŽ¢ããŒã« | å šçµæã« min-max æ£èŠåãã relevance_score; DSL ã§ sort(by='confidence') |
| ã»ãã³ãã£ãã¯æ€çŽ¢ (BM25 äºåãã£ã«ã¿) | search action=chain (semantic() DSL) | ã³ãµã€ã³åã©ã³ã¯åã«åå¥ãã£ã«ã¿ãªã³ã° |
| ãããžã§ã¯ã A-F å¥å šæ§ã°ã¬ãŒãã£ã³ã° | health action=project | ãµã€ãºãè€é床ãäŸåãã«ãã¬ããžãéè€ãæ§é ãgit ãããã¹ããããçµ±å |
| JSON åºå | å
šããŒã«ãããã©ã«ã output_format: "json" | æšæºã®æ§é åã¬ã¹ãã³ã¹ ãšã³ãããŒã |
| Verdict ãšã³ãããŒã | å šããŒã« | SAFE/CAUTION/UNSAFE/INFO/WARN/ERROR/NOT_FOUND |
| Safe-to-edit ã²ãŒã | edit action=safe / action=guard | é«ãªã¹ã¯ç·šéåã«æåŠ |
| ã¢ãŒããã¯ãã£å¶çŽ DSL | edit action=constraints | ãã¢ãžã¥ãŒã« A 㯠B ã«äŸåçŠæ¢ãâ åŒ·å¶ |
| ãã¡ã€ã« ã¬ãã«å¥å šæ§ | health action=file | ããã㯠/ é·ã¡ãœãã / ã³ãŒã ã¹ã¡ã«æ€åº |
| ã¯ã©ã¹éå±€ | structure action=class_tree | åç¶æ¿ããªãŒ |
| äŸåãããªã¯ã¹ | health action=matrix | ã¢ãžã¥ãŒã«çµåãããªã¯ã¹ |
| ããã ã³ãŒã | health action=dead | æšç§»çå°éäžèœè§£æ |
| è€é床ããŒã ããã | health action=heatmap | 颿°å¥åŸªç°çè€é床 + ãããžã§ã¯ã ãã¥ãŒ |
| AST æ§é çã¯ããŒã³æ€åº | viz action=similarity | ããã¹ãäžèŽã§ã¯ãªãæ§é çã¯ããŒã³ |
| Mermaid ã³ãŒã« ã°ã©ã ãšã¯ã¹ããŒã | viz action=graph | ããã¥ã¡ã³ããžçŽæ¥è²Œä» |
| UML Mermaid ãšã¯ã¹ããŒã | viz action=uml | class / package / component / sequence å³ |
| PR ã¬ãã¥ãŒ | edit action=pr | AST diff + ã»ãã³ãã£ãã¯åé¡ + blast radius |
| agent_summary | å šå¿ç | ãšã³ãããŒãã«æ¬¡ã¹ããã ãã³ããå èµ |
| Synapse ã¯ãã¹ãã¡ã€ã« ãªãŸã«ã | å éš | ãã¡ã€ã«ããŸãã import èæ ®ã®åå解決 |
| æéçã¢ã¯ãã£ããŒã·ã§ã³ | nav action=lineage | ã·ã³ãã«å¥ git ä¿®æ£é »åºŠ |
| ãã¡ã€ã«ææ¡ | project action=smart | å¥å šæ§ + ãšã¯ã¹ããŒã + äŸå + ç·šéãªã¹ã¯ããŸãšããå¿çã§è¿ã |
| ã¢ãŒããã¯ãã£æææ±ºå®ãžã£ãŒãã« | project action=journal | ã»ãã·ã§ã³éã§æšè«ãæ°žç¶å |
Skills
TSA 㯠.claude/skills/tsa-*/ äžã«ãã¥ã¬ãŒã·ã§ã³æžã¿ã¯ãŒã¯ãããŒãæäŸããŸã:
tsa-landingãtsa-findãtsa-graphãtsa-structureãtsa-depsãtsa-indexãtsa-health-watchãtsa-edit-safetyãtsa-edit-then-verifyãtsa-constraintsãtsa-pr-reviewãtsa-refactor-queueãtsa-temporalã
å skill 㯠allowed-tools ããŒã« ãµãã»ãã + æé ã¬ã·ã + 決å®é¢ã¹ããŒãã忢±ãããšãŒãžã§ã³ã㯠8 åã®ããŒã«ããæ¯åéžå¥ããå¿
èŠããããŸããã
354 ã® CLI ãã©ã°
äž»ãªãã®:
tree-sitter-analyzer --table full <file> # ã¡ãœãã/ã·ã°ããã£/è€é床ããŒãã«
tree-sitter-analyzer --partial-read --start-line N --end-line M <file>
tree-sitter-analyzer --project-health # ãããžã§ã¯ã A-F ã°ã¬ãŒãã£ã³ã°
# 泚æ: --callers / --callees ã¯ã³ãŒã«ã°ã©ãã€ã³ããã¯ã¹ãå¿
èŠ â å
ã« --full-index ãå®è¡
tree-sitter-analyzer --full-index # ã³ãŒã«ã°ã©ãã€ã³ããã¯ã¹ãæ§ç¯ïŒäžåºŠã ãïŒ
tree-sitter-analyzer --callers <symbol> # åŒã³åºãå
tree-sitter-analyzer --codegraph-impact <fn> # blast radius + ãªã¹ã¯
tree-sitter-analyzer --affected <file...> # 圱é¿ãåãããã¹ã
tree-sitter-analyzer --dead-code # æšç§»çå°éäžèœ
tree-sitter-analyzer --check-constraints # ã¢ãŒããã¯ãã£èŠå
tree-sitter-analyzer --safe-to-edit <file> # ãªã¹ã¯æã«æåŠ
tree-sitter-analyzer --uml class # Mermaid UML class å³
TSA ã¯ã€ã³ããã¯ã¹æ€çŽ¢ãšæçãªã©ã€ããœãŒã¹æ€èšŒãããã»ã¹å
ã§å®è¡ããŸããripgrep ã fd ã®ã€ã³ã¹ããŒã«ã¯äžèŠã§ããåé€ãããæ€çŽ¢ã©ãããŒããã®ç§»è¡ã¯ migration guide ãš CLI codemap ãåç
§ããŠãã ããã
å®éç䞻匵ã®ã¬ããã³ã¹
å
¬éãããã³ãããŒã¯ãæ§èœãç«¶åæ¯èŒã®æ°å€ã¯ãbenchmarks/codegraph_compare/claim_registry.json ã® provenance-bound registry ããã®ã¿çæããŸããE4 蚌æ ã¯ãããŒã«åãšããŒãžã§ã³ã枬å®å€ãã³ãŒãã¹ããã³ãããŒã¯æ¥ä»/ããŒãžã§ã³ãartifact digest ãå³å¯ã«çµã³ä»ããå¿
èŠããããŸããE4 æªæºã®èšŒæ ã¯å
éšæ
å ±ã«çãŸããå
¬éæèšãçæã§ããŸããããã³ãããŒã¯ runbook ãåç
§ããŠãã ããã
çæé ç®ããªãå Žåãå ¬éãæ¿èªãããå®éç䞻匵ã¯çŸåšãããŸãããäžèšã®å®æ§ç説æã¯å¢çãæç€ºãã補åèœåã§ãããæž¬å®æžã¿ã®åªäœæ§ã䞻匵ãããã®ã§ã¯ãããŸããã
ä»çµã¿
ãœãŒã¹ ã³ãŒã â tree-sitter è§£æ â SQLite + FTS5 ã€ã³ããã¯ã¹ (.ast-cache/index.db)
â
nav (navigate) / structure (explore) / nav (callers) / ...
â
JSON ã¬ã¹ãã³ã¹ ãšã³ãããŒã
(verdict + agent_summary + ããŒã¿)
â
MCP ã¯ã©ã€ã¢ã³ã / CLI æ¶è²»è
8 åã®ããŒã«ïŒMCPïŒãã€ã³ããã¯ã¹æžã¿ã¯ãšãªãšçŽæ¥çãªãœãŒã¹è§£æãæäŸããŸãã
çŽ¢åŒæžã¿ã®ã·ã³ãã«/ã³ã³ããã¹ãã¯ãšãªã®åã«ãtree-sitter-analyzer --ast-cache --ast-cache-mode index --format json ã§ AST ã€ã³ããã¯ã¹ãæç€ºçã«æ§ç¯ããŠãã ããããœãŒã¹å€æŽåŸã¯ index action=sync ã§ãªãã¬ãã·ã¥ããŸããçŽ¢åŒæžã¿ã¯ãšãªã¯ãã£ãã·ã¥ããã AST ããŒã¿ãåå©çšããŸããèªåãŠã©ãŒã ã¢ããã¯åã
ã®ããŒã«ã«åºæã§ãã
察å¿ãšãŒãžã§ã³ã
ð Claude Code (æšå¥š)
claude mcp add tree-sitter-analyzer \
--env TREE_SITTER_PROJECT_ROOT="$PWD" \
-- uvx --from "tree-sitter-analyzer[mcp]" tree-sitter-analyzer-mcp
æ€èšŒ: claude mcp listã忢±ã® tsa-* skills 㯠.claude/skills/ ããèªåæ€åºãããŸãã
PyPI / uvx ãŠãŒã¶ãŒ â 忢±ã¹ãã«ãäžåºŠã€ã³ã¹ããŒã«:
tree-sitter-analyzer --install-skills # ./.claude/skills/ ãž (ãã®ãããžã§ã¯ãã®ã¿)
tree-sitter-analyzer --install-skills-global # ~/.claude/skills/ ãž (å
šãããžã§ã¯ãå
±é)
git clone ãŠãŒã¶ãŒã¯ãã§ã«å«ãŸããŠããããäžèŠã§ãã
ð Claude Desktop
claude_desktop_config.json ãç·šé (macOS: ~/Library/Application Support/Claude/, Windows: %APPDATA%\Claude\, Linux: ~/.config/Claude/):
{
"mcpServers": {
"tree-sitter-analyzer": {
"command": "uvx",
"args": ["--from", "tree-sitter-analyzer[mcp]", "tree-sitter-analyzer-mcp"],
"env": { "TREE_SITTER_PROJECT_ROOT": "/絶察ãã¹/ãããžã§ã¯ã" }
}
}
}
ð GitHub Copilot (VS Code)
.vscode/mcp.json ãäœæ (泚: ããŒã¯ serversãmcpServers ã§ã¯ç¡ã):
{
"servers": {
"tree-sitter-analyzer": {
"type": "stdio",
"command": "uvx",
"args": ["--from", "tree-sitter-analyzer[mcp]", "tree-sitter-analyzer-mcp"],
"env": { "TREE_SITTER_PROJECT_ROOT": "${workspaceFolder}" }
}
}
}
ð± Cursor / Cline / Continue / Roo Code
ãã¹ãŠ Claude Desktop ãšåã mcpServers ã¹ããŒãã䜿çšãCursor: èšå® â MCPãCline: MCP ããã« â èšå®ç·šéãContinue: ~/.continue/config.json ã® experimental.modelContextProtocolServersãRoo Code: MCP ããã« â MCP èšå®ç·šéã
ð³ Docker (ããŒã«ã«ã« Python / uv ãç¡ãå Žå)
ãã®ãªããžããªã«ã¯ããœãŒã¹ãã MCP ãµãŒã㌠(stdio ãã©ã³ã¹ããŒã) ããã«ããã Dockerfile ã忢±ãããŠããŸãããã®ããã€ã¡ãŒãžã¯åžžã«ã³ãããæžã¿ã®ã³ãŒããšäžèŽããŸãã
# äžåºŠã ããã«ã
docker build -t tree-sitter-analyzer-mcp .
# çŸåšã®ãªããžããªã«å¯ŸããŠå®è¡ (ãµãŒããŒã¯ stdio ã§ MCP ã話ã; -i 㯠stdin ãéãããŸãŸã«ãã)
docker run --rm -i --user "$(id -u):$(id -g)" \
-v "$PWD:/work" -w /work tree-sitter-analyzer-mcp
--user "$(id -u):$(id -g)" ã¯ãã¹ãã® UID/GID ã§å®è¡ããããããã€ã³ã ããŠã³ãããããªããžããªäžã® .ast-cache/ãæææ±ºå®ãžã£ãŒãã«ãedit ã«ããæžã蟌ã¿ã¯ãã¹ãŠ root ã§ã¯ãªãããªãã®ææã«ãªããŸãã
MCP ã¯ã©ã€ã¢ã³ãèšå® (ã³ã³ããå
ã®ãããžã§ã¯ã ã«ãŒãã¯ããŠã³ã ãã€ã³ã /work):
{
"mcpServers": {
"tree-sitter-analyzer": {
"command": "docker",
"args": [
"run", "--rm", "-i",
"--user", "1000:1000",
"-v", "/絶察ãã¹/ãããžã§ã¯ã:/work",
"-w", "/work",
"-e", "TREE_SITTER_PROJECT_ROOT=/work",
"tree-sitter-analyzer-mcp"
]
}
}
}
â ïž
TREE_SITTER_PROJECT_ROOT㯠絶察ãã¹ ãå¿ é ããµãŒããŒã¯SecurityValidatorã§ãšã¹ã±ãŒããé²ãã»ãã¥ãªãã£å¢çã匷å¶ããã
ãµããŒãèšèª
ã©ã³ã¿ã€ã ã¬ãžã¹ããªããçæã22 èšèªãã©ã°ã€ã³; 13 㯠pipeline_registeredïŒé E2EïŒã3 㯠index_admittedã0 㯠call_dispatch_onlyã5 å㯠data/markupã1 åã¯ã¹ãã£ãã©ãŒã«ããç»é²ã¯æ£ã®ã¯ãã¹ãã¡ã€ã«æçžãä¿èšŒããªãã
| ãã£ã¢ | èšèª |
|---|---|
pipeline_registeredïŒãã€ãã©ã€ã³ç»é²æžã¿ãé E2EïŒ | C · C++ · C# · Go · Java · JavaScript · Kotlin · PHP · Python · Ruby · Rust · Swift · TypeScript |
index_admittedïŒã€ã³ããã¯ã¹åãå
¥ãæžã¿ïŒ | Bash · Lua · Scala |
call_dispatch_onlyïŒcall dispatch ã®ã¿ïŒ | |
| åäžãã¡ã€ã«è§£æ (CLI) | CSS · HTML · Markdown · SQL · YAML |
| ã¹ãã£ãã©ãŒã«ã (ãã©ã°ã€ã³æ / ã€ã³ãã¯ãµãŒçµç·åŸ ã¡) | JSON |
Lua ã¯ã€ã³ããã¯ã¹åãå ¥ãæžã¿ã§ call dispatch ãš resolver slot ãæã€ããimport dispatch ãšã¯ãã¹ãã¡ã€ã« E2E 蚌æ ã¯æªç¢ºèªã
èšå®
åºæ¬çã«èšå®äžèŠãããã©ã«ãã§ãšãŒãžã§ã³ãã«æ¥ç¶ããŠå¿ããŠæ§ããªã:
- åºå圢åŒ: JSONãæç€ºçã«
output_format: "json"ãæå®ã§ããŸãã - ãããžã§ã¯ã ã«ãŒã:
TREE_SITTER_PROJECT_ROOT(env, MCP) ãŸãã¯--project-root(CLI)ã - ãã£ãã·ã¥å Žæ:
<project>/.ast-cache/ãå®å šã«åé€å¯ â èªååæ§ç¯ãããã - ä»»æ:
TREE_SITTER_OUTPUT_PATH倧åºåã®æžã蟌ã¿å ã
å質ãšãã¹ã
uv run pytest -q # å¢çä»ãã®ããŒã«ã«é«éã²ãŒã
uv run pytest tests/ -q --timeout=120 -m "not e2e and not network and not benchmark" # å
æ¬çãªããŒã«ã« ã¹ã€ãŒã
PYTEST_XDIST_AUTO_NUM_WORKERS=1 uv run pytest -q --maxfail=1 # é«éã²ãŒããã¯ãŒã«ãŒ1 (CPUè² è·ãæãã)
PYTEST_XDIST_AUTO_NUM_WORKERS=2 uv run pytest -q --maxfail=1 # é«éã²ãŒããã¯ãŒã«ãŒ2 (ãã©ã³ã¹å)
uv run pytest --lf --maxfail=1 # åå倱æãããã¹ãã ãåå®è¡
uv run python check_quality.py --new-code-only # å質ã²ãŒã
ãã©ãã«ã·ã¥ãŒãã£ã³ã°
| çç¶ | ä¿®æ£ |
|---|---|
.swift / .kt / .rb / .php / .cs ã§ unsupported language | çŸè¡ã®ãµããŒã察象ãªãªãŒã¹ãžæŽæ°ããŠãã ãã â ãã®èšèªæ¬ èœã¯ commit 50e99a8f ã§ä¿®æ£æžã¿ã§ããextras åºåã®ææ³ã¢ãžã¥ãŒã«ã¯ããŒã¹ã€ã³ã¹ããŒã«ã«å梱ãããŸãããpip install "tree-sitter-analyzer[swift]"(ãŸã㯠kotlinãrubyãphpãcsharp)ã§è¿œå ããŠãã ããã |
| MCP ãµãŒããŒãã¯ã©ã€ã¢ã³ãã«è¡šç€ºãããªã | TREE_SITTER_PROJECT_ROOT ã¯çµ¶å¯Ÿãã¹ã§ããå¿
èŠããããŸãïŒäŸ: $(pwd) ã /home/user/projectïŒãçžå¯Ÿãã¹ã ãšãµãŒããŒã誀ã£ããã£ã¬ã¯ããªã«å¯ŸããŠè§£æ±ºããŠããŸããŸããèšå®ç·šéåŸã¯ã¯ã©ã€ã¢ã³ããåèµ·åããŠãã ãããtree-sitter-analyzer --doctor ã§ç¢ºèªã§ããŸãã |
database is locked | .ast-cache/index.db ãä¿æããä»ããã»ã¹ã忢ããŠãã ãããç¶ç¶ããå Žå㯠rm -rf .ast-cache && tree-sitter-analyzer --full-index ãå®è¡ããŠãã ããã |
| åååŒã³åºããé ãã»ã€ã³ããã¯ã¹ããªã | äžéšã®ããŒã«ã¯èªåã§ã€ã³ããã¯ã¹ããŠã©ãŒã ã¢ããããŸããçŽ¢åŒæžã¿ã¯ãšãªã®åã« --full-index ãäºåã«å®è¡ããŠãã ããã |
| ãšãŒãžã§ã³ãã誀ã£ãããŒã«ãéžã¶ | tsa-* skill (/tsa-graphã/tsa-find ç) ã䜿çšããŠãã ãã â å skill ã¯å¯èŠããŒã«ãå°çšã¯ãŒã¯ãããŒã«å¶éããŸãã |
éçº
git clone https://github.com/aimasteracc/tree-sitter-analyzer.git
cd tree-sitter-analyzer
uv sync --extra all --extra mcp
uv run pytest -q
éçºã¬ã€ã㯠docs/CONTRIBUTING.md ãåç
§ã
å¢çãšæ¢ç¥ã®å¶é
ããã«éããã®ã¯ããã®ãŸãŸèªããšå®£äŒæå¥ã«èŠããŠããŸãç¯å²ã®èšè¿°ã§ããã€ã³ã¹ããŒã«æé ãäžæããªãããããã®äœçœ®ã«ãŸãšããŠããŸãã
å¿çãµã€ãºãšãã©ã¡ãŒã¿å
nav action=navigate ã¯äžèŽãããã¹ãŠã®å®çŸ©ã®æ¬äœãå±éããåãè©°ããå ±åããŸãããè€æ°ã®ãã¡ã€ã«ã®ã¯ã©ã¹ãå
±æããã·ã³ãã«åã§ã¯ãåç
§éåã®å
šäœãåãå¿çã§è¿ããŸãããŸã search action=symbol ã§çµã蟌ãããlimit ãå°éã㊠truncated ãèšå®ãã nav action=callers / action=callees ã䜿ã£ãŠãã ããã
symbol ãš function_name 㯠callersãcalleesãimpact ã®ãããã§ãåãä»ããããŸããnavigate ãš lineage 㯠symbol ãèŠæ±ããfunction_name ãæž¡ããš verdict ãšã³ãããŒãã§ã¯ãªãäŸå€ã«ãªããŸãã
ã¹ãããã·ã§ãã蚌æ ã®ãã©ãããã©ãŒã ç¯å²
éåžžã®ãã¡ã€ã«è§£æãã€ã³ããã¯ã¹ã®äœæ/æŽæ°ãã¬ã¬ã·ãŒ ã€ã³ããã¯ã¹çµç±ã®ã¯ãšãªã¯ã èªèšŒæžã¿ã¹ãããã·ã§ãã ã¢ã¯ã»ã¹ãšã¯å¥ç©ã§ããæ¢åã® Windows äžã®æäœãã¹ã¯ã æ°ãããã©ã€ããŒã WAL ã¹ãããã·ã§ãã ã«ãŒãã«ãå¿ èŠãšããŸããããããã®æäœã¯ ãã£ãã·ã¥ãäœæã»æŽæ°ã§ããŸãããèªèšŒæžã¿ã®èªã¿åãå°çšã¢ã¯ã»ã¹ã¯å¥ã®å¥çŽã«åŸããŸãã
ãã®ã¹ãããã·ã§ããå®è£
ã远å ããã®ã¯ POSIX å°çšã®ãã©ã€ããŒã ããŒã¿ããŒã¹/WAL 蚌æ ãã£ããã£ã§ããã
èšè¿°åçžå¯ŸæäœãO_NOFOLLOWãå®å
šãªå€éšäžæãã£ã¬ã¯ããªãsource/manifest/projection
ãã§ãã¯ã®æåãèŠæ±ããŸãããã㯠Windows ã®èªã¿åãå°çšã¹ãããã·ã§ãã ããªãã£ãæäŸãã
ãã®ã§ããæç€ºç㪠access_mode="read_existing" æ¶è²»è
åãã®æ¢åã®è³æ Œã²ãŒããæ¡åŒµãããã®
ã§ããããŸããã
Windows ã®ã¹ãããã·ã§ããèªèšŒã¯ develop ããŒã¹ã©ã€ã³ã®æç¹ã§ãã§ã«å©çšäžå¯ã§ãã
ïŒSECURE_FD_SNAPSHOT_UNSUPPORTEDïŒããã®å®è£
ã§ãåŒãç¶ãå©çšã§ããŸãã
ïŒWAL_PRIVATE_SNAPSHOT_UNSUPPORTEDãcompleteness="unknown"ãã¹ãããã·ã§ãã ããŒã¯ã³ãªãïŒã
ããã¯ç©çã€ã³ããã¯ã¹ã空ã§ããããšããéåžžã®ã¯ãšãªãç¡å¹åãããŠããããšãæå³ãããã®ã§ã¯
ãããŸãããæ°ãããã£ãã㣠ãã¹ã«å¯Ÿãããã€ãã£ã Windows è³æ Œæ€èšŒã¯å®æœãããŠãããã
ããŒã«ã«ã®èœåãã¹ãã¯ãã®ä»£æ¿ã«ã¯ãªããŸããã
ãã¡ã€ã«åäœã® certified_at ç¶æ
ã¯ãå®å
šãªã¹ãããã·ã§ããæš©éã®ä»£æ¿ã«ã¯ãªããŸããã
partial_at ã®æ°žç¶å±¥æŽã¯ æ¬ PR ã§ã¯æªå®è£
ã§ãããå«ãŸããŠããŸããã
äžå®å
šãŸãã¯æ€èšŒäžèœãª projection ã¯ãèªèšŒæžã¿æ¶è²»è
ãèš±å¯ã§ããŸããã
Pulse / TQL / ã»ãã³ãã£ã㯠ã¯ãšãª
ããã㯠nav ã®ã¢ã¯ã·ã§ã³ãšå
éš API ãæ¯ãããµãã·ã¹ãã ã§ããããšãŒãžã§ã³ããèšå®ããããŒã«é¢ã®äžéšã§ã¯ãããŸãããå¶éã¯æšæž¬ã«å§ãããæç€ºããŸãã
TQL ã®æéã»ã¬ã¯ã¿ã¯å€æŽã¿ã€ã ã¹ã¿ã³ããæ¯èŒãããã®ã§ããã倿Žåæ°ãæ¯èŒãããã®ã§ã¯ãããŸããã
tql_schema ã¢ã¯ã·ã§ã³ã¯ãçŽ ã® :hot ãš :recently_modified ãå
±æãããŠã£ã³ããŠãšããã©ã«ãå€ãææžåããŸããæ·±åºŠã¯ãšãªã¯æ£ç¢ºãªå®çŸ©åäžæ§ãä¿æãããã©ããŒãµã«äžéãè¶
ããå Žåã¯æç€ºçã«å€±æããŸãã
Pulse ã®ãªã¯ãšã¹ãã¯ã¹ãããã·ã§ããå¢çã®ã³ã³ããã¹ããè¿ããŸããè奿 å ±ã»é¢ä¿æ§ã»é import ã³ã³ããã¹ãã»ä»»æã®ãã£ãã·ã¥æžã¿ LSP ãšã³ãªããã¡ã³ãã®ããã® SQL èªã¿åãã¯ãåŒã³åºãå ãä¿æãããã©ã³ã¶ã¯ã·ã§ã³ãçµäºãããããšãªã savepoint ãå ±æããŸãããã㯠SQL ã©ãŠã³ãããªãããã¬ã€ãã³ã·ã®ä¿èšŒãæå³ãããã®ã§ã¯ãããŸããã
Pulse ã® Python é import ã³ã³ããã¹ãã¯æ¢åã®ã¢ãžã¥ãŒã« ãªãŸã«ãã䜿çšããŸããããã¯ã¯ãã¹ã©ã³ã²ãŒãžã®ã¢ãžã¥ãŒã«è§£æ±ºãå®å
šã§ãããšãã䞻匵ã§ã¯ãããŸãããã³ã¡ã³ã ã³ã³ããã¹ãã«ã¯ã³ã¡ã³ãæœåºèŸŒã¿ã§åæ§ç¯ãããã€ã³ããã¯ã¹ãå¿
èŠã§ããå€ãã€ã³ããã¯ã¹ãã³ã¡ã³ãæœåºã«å¯Ÿå¿ããŠããªãèšèªã§ã¯ãç©ºã®æåå¿çã§ã¯ãªã COMMENTS_NOT_INDEXED ãè¿ããŸããäžèŠãªå Žåã¯ãææžåããã max_comments èšå®ã§ã³ã¡ã³ã ã³ã³ããã¹ããæç€ºçã«çç¥ããŠãã ãããæ¬ èœããŠããã¬ã¬ã·ãŒ ã³ããã ã¡ãã»ãŒãžæåœ±ã¯é
å»¶ãªãã¬ãã·ã¥ã®ãã pending ã«ãªããŸããdisabled ã®æå¹åç¶æ
ã¯ä¿æãããŸããã¬ã¬ã·ãŒã® NULL æå¹åç¶æ
ããå€ãã¡ãã»ãŒãžãã«ãŠã³ããã¯ãªã¢ããããšãªã pending ã«ãªããŸããæå¹åããããã£ãã·ã¥æžã¿ã€ã³ããã¯ã¹äœæãµã€ã¯ã«ã¯ãå¢çä»ãã®æå¹åãªãã¬ãã·ã¥ãç¶ç¶ããŸããPulse ã¯å©çšäžèœãªæå¹åç¶æ
ã null ãšããŠå
¬éããæéçã¯ãšãªã¯äžå®å
šãªæå¹å蚌æ ãæåŠããŸãããªãã¬ãã·ã¥ã¯å¢çä»ãããããéããŠå®éã® Git å±¥æŽãèªã¿åããŸããã¡ãã»ãŒãžèªã¿åãã«å€±æããå Žåã¯ãå®äºãããšäž»åŒµããä¿çäžã®äœæ¥ãšããŠä¿æããŸãã
ã»ãã³ãã£ã㯠ã¯ãšãªã«ã¯æ¢ç¥ã®ä¿åæžã¿åã蟌ã¿ã¢ãã«ãšäžè²«ããæ¬¡å æ°ãå¿ èŠã§ããæ··åšãŸãã¯æªç¥ã®ã¢ãã«ã¯ãšã©ãŒãšãªãããããã€ãã®ãã©ãŒã«ããã¯ã¯ãããŸããããªãã©ã€ã³ ãã¹ãã§ã¯ã¢ãã« ããã«ã䜿çšããŸããããã¯å®éçšãããã€ãã®å質ãä¿èšŒãããã®ã§ã¯ãããŸããã
Pulse ã®ãããåŠçã¯æåãããšã³ããªãä¿æããŸããã察象ã®ããããã倱æãããšå€±æãå ±åããŸããTQL ã¯æ¬ èœãŸãã¯èªã¿åãäžèœãªã€ã³ããã¯ã¹ããšã©ãŒãšããŠæ±ããããã¯ãããããªãã®æºåæžã¿ã€ã³ããã¯ã¹ããšã¯åºå¥ãããŸããå ¬éãªã¯ãšã¹ãã®æ€èšŒã¯ãã€ã³ããã¯ã¹ãéãããåã蟌ã¿ãããã€ããåŒã³åºãããããåã«ãç¡å¹ãªåãäžéå€ãæåŠããŸãã
è²¢ç®ãšã©ã€ã»ã³ã¹
- â GitHub star ã¯ä»ã® AI ãšãŒãžã§ã³ã ãŠãŒã¶ãŒã«æ¬ããŒã«ãå±ããå©ãã«ã
- ð ã¹ãã³ãµãŒ â ç¶ç¶ç㪠MCP / Skills éçºãæ¯æŽã
- ãªãŒã ã¹ãã³ãµãŒ: @o93ã
- MIT ã©ã€ã»ã³ã¹ â LICENSE ãåç §ã
- ãªãªãŒã¹å±¥æŽ: CHANGELOG.mdã