tree-sitter-analyzer 0.8.2__tar.gz → 0.8.3__tar.gz
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.
Potentially problematic release.
This version of tree-sitter-analyzer might be problematic. Click here for more details.
- {tree_sitter_analyzer-0.8.2 → tree_sitter_analyzer-0.8.3}/CHANGELOG.md +14 -0
- {tree_sitter_analyzer-0.8.2 → tree_sitter_analyzer-0.8.3}/PKG-INFO +7 -6
- {tree_sitter_analyzer-0.8.2 → tree_sitter_analyzer-0.8.3}/PROJECT_ROOT_CONFIG.md +203 -203
- {tree_sitter_analyzer-0.8.2 → tree_sitter_analyzer-0.8.3}/README.md +6 -5
- {tree_sitter_analyzer-0.8.2 → tree_sitter_analyzer-0.8.3}/RELEASE_CHECKLIST_v0.8.2.md +182 -182
- {tree_sitter_analyzer-0.8.2 → tree_sitter_analyzer-0.8.3}/RELEASE_NOTES_v0.8.2.md +181 -181
- {tree_sitter_analyzer-0.8.2 → tree_sitter_analyzer-0.8.3}/examples/project_root_demo.py +247 -247
- {tree_sitter_analyzer-0.8.2 → tree_sitter_analyzer-0.8.3}/examples/security_demo.py +282 -282
- {tree_sitter_analyzer-0.8.2 → tree_sitter_analyzer-0.8.3}/examples/security_integration_demo.py +216 -216
- {tree_sitter_analyzer-0.8.2 → tree_sitter_analyzer-0.8.3}/pyproject.toml +360 -360
- {tree_sitter_analyzer-0.8.2 → tree_sitter_analyzer-0.8.3}/start_mcp_server.py +116 -116
- {tree_sitter_analyzer-0.8.2 → tree_sitter_analyzer-0.8.3}/tree_sitter_analyzer/__init__.py +1 -1
- {tree_sitter_analyzer-0.8.2 → tree_sitter_analyzer-0.8.3}/tree_sitter_analyzer/cli/commands/base_command.py +3 -1
- {tree_sitter_analyzer-0.8.2 → tree_sitter_analyzer-0.8.3}/tree_sitter_analyzer/mcp/server.py +10 -0
- {tree_sitter_analyzer-0.8.2 → tree_sitter_analyzer-0.8.3}/tree_sitter_analyzer/mcp/tools/analyze_scale_tool.py +677 -673
- {tree_sitter_analyzer-0.8.2 → tree_sitter_analyzer-0.8.3}/tree_sitter_analyzer/mcp/tools/analyze_scale_tool_cli_compatible.py +4 -9
- {tree_sitter_analyzer-0.8.2 → tree_sitter_analyzer-0.8.3}/tree_sitter_analyzer/project_detector.py +317 -317
- {tree_sitter_analyzer-0.8.2 → tree_sitter_analyzer-0.8.3}/tree_sitter_analyzer/security/__init__.py +22 -22
- {tree_sitter_analyzer-0.8.2 → tree_sitter_analyzer-0.8.3}/tree_sitter_analyzer/security/boundary_manager.py +44 -2
- {tree_sitter_analyzer-0.8.2 → tree_sitter_analyzer-0.8.3}/tree_sitter_analyzer/security/regex_checker.py +292 -292
- {tree_sitter_analyzer-0.8.2 → tree_sitter_analyzer-0.8.3}/tree_sitter_analyzer/security/validator.py +5 -2
- {tree_sitter_analyzer-0.8.2 → tree_sitter_analyzer-0.8.3}/uv.lock +830 -830
- {tree_sitter_analyzer-0.8.2 → tree_sitter_analyzer-0.8.3}/.gitignore +0 -0
- {tree_sitter_analyzer-0.8.2 → tree_sitter_analyzer-0.8.3}/.pre-commit-config.yaml +0 -0
- {tree_sitter_analyzer-0.8.2 → tree_sitter_analyzer-0.8.3}/AI_COLLABORATION_GUIDE.md +0 -0
- {tree_sitter_analyzer-0.8.2 → tree_sitter_analyzer-0.8.3}/CODE_STYLE_GUIDE.md +0 -0
- {tree_sitter_analyzer-0.8.2 → tree_sitter_analyzer-0.8.3}/CONTRIBUTING.md +0 -0
- {tree_sitter_analyzer-0.8.2 → tree_sitter_analyzer-0.8.3}/DEPLOYMENT_GUIDE.md +0 -0
- {tree_sitter_analyzer-0.8.2 → tree_sitter_analyzer-0.8.3}/LLM_CODING_GUIDELINES.md +0 -0
- {tree_sitter_analyzer-0.8.2 → tree_sitter_analyzer-0.8.3}/MCP_SETUP_DEVELOPERS.md +0 -0
- {tree_sitter_analyzer-0.8.2 → tree_sitter_analyzer-0.8.3}/MCP_SETUP_USERS.md +0 -0
- {tree_sitter_analyzer-0.8.2 → tree_sitter_analyzer-0.8.3}/README_ja.md +0 -0
- {tree_sitter_analyzer-0.8.2 → tree_sitter_analyzer-0.8.3}/README_zh.md +0 -0
- {tree_sitter_analyzer-0.8.2 → tree_sitter_analyzer-0.8.3}/build_standalone.py +0 -0
- {tree_sitter_analyzer-0.8.2 → tree_sitter_analyzer-0.8.3}/check_quality.py +0 -0
- {tree_sitter_analyzer-0.8.2 → tree_sitter_analyzer-0.8.3}/docs/api.md +0 -0
- {tree_sitter_analyzer-0.8.2 → tree_sitter_analyzer-0.8.3}/examples/BigService.java +0 -0
- {tree_sitter_analyzer-0.8.2 → tree_sitter_analyzer-0.8.3}/examples/BigService.json +0 -0
- {tree_sitter_analyzer-0.8.2 → tree_sitter_analyzer-0.8.3}/examples/BigService.summary.json +0 -0
- {tree_sitter_analyzer-0.8.2 → tree_sitter_analyzer-0.8.3}/examples/JavaDocTest.java +0 -0
- {tree_sitter_analyzer-0.8.2 → tree_sitter_analyzer-0.8.3}/examples/MultiClass.java +0 -0
- {tree_sitter_analyzer-0.8.2 → tree_sitter_analyzer-0.8.3}/examples/Sample.java +0 -0
- {tree_sitter_analyzer-0.8.2 → tree_sitter_analyzer-0.8.3}/examples/calculate_token_comparison.py +0 -0
- {tree_sitter_analyzer-0.8.2 → tree_sitter_analyzer-0.8.3}/examples/sample.py +0 -0
- {tree_sitter_analyzer-0.8.2 → tree_sitter_analyzer-0.8.3}/llm_code_checker.py +0 -0
- {tree_sitter_analyzer-0.8.2 → tree_sitter_analyzer-0.8.3}/pytest.ini +0 -0
- {tree_sitter_analyzer-0.8.2 → tree_sitter_analyzer-0.8.3}/tree_sitter_analyzer/__main__.py +0 -0
- {tree_sitter_analyzer-0.8.2 → tree_sitter_analyzer-0.8.3}/tree_sitter_analyzer/api.py +0 -0
- {tree_sitter_analyzer-0.8.2 → tree_sitter_analyzer-0.8.3}/tree_sitter_analyzer/cli/__init__.py +0 -0
- {tree_sitter_analyzer-0.8.2 → tree_sitter_analyzer-0.8.3}/tree_sitter_analyzer/cli/__main__.py +0 -0
- {tree_sitter_analyzer-0.8.2 → tree_sitter_analyzer-0.8.3}/tree_sitter_analyzer/cli/commands/__init__.py +0 -0
- {tree_sitter_analyzer-0.8.2 → tree_sitter_analyzer-0.8.3}/tree_sitter_analyzer/cli/commands/advanced_command.py +0 -0
- {tree_sitter_analyzer-0.8.2 → tree_sitter_analyzer-0.8.3}/tree_sitter_analyzer/cli/commands/default_command.py +0 -0
- {tree_sitter_analyzer-0.8.2 → tree_sitter_analyzer-0.8.3}/tree_sitter_analyzer/cli/commands/partial_read_command.py +0 -0
- {tree_sitter_analyzer-0.8.2 → tree_sitter_analyzer-0.8.3}/tree_sitter_analyzer/cli/commands/query_command.py +0 -0
- {tree_sitter_analyzer-0.8.2 → tree_sitter_analyzer-0.8.3}/tree_sitter_analyzer/cli/commands/structure_command.py +0 -0
- {tree_sitter_analyzer-0.8.2 → tree_sitter_analyzer-0.8.3}/tree_sitter_analyzer/cli/commands/summary_command.py +0 -0
- {tree_sitter_analyzer-0.8.2 → tree_sitter_analyzer-0.8.3}/tree_sitter_analyzer/cli/commands/table_command.py +0 -0
- {tree_sitter_analyzer-0.8.2 → tree_sitter_analyzer-0.8.3}/tree_sitter_analyzer/cli/info_commands.py +0 -0
- {tree_sitter_analyzer-0.8.2 → tree_sitter_analyzer-0.8.3}/tree_sitter_analyzer/cli_main.py +0 -0
- {tree_sitter_analyzer-0.8.2 → tree_sitter_analyzer-0.8.3}/tree_sitter_analyzer/core/__init__.py +0 -0
- {tree_sitter_analyzer-0.8.2 → tree_sitter_analyzer-0.8.3}/tree_sitter_analyzer/core/analysis_engine.py +0 -0
- {tree_sitter_analyzer-0.8.2 → tree_sitter_analyzer-0.8.3}/tree_sitter_analyzer/core/cache_service.py +0 -0
- {tree_sitter_analyzer-0.8.2 → tree_sitter_analyzer-0.8.3}/tree_sitter_analyzer/core/engine.py +0 -0
- {tree_sitter_analyzer-0.8.2 → tree_sitter_analyzer-0.8.3}/tree_sitter_analyzer/core/parser.py +0 -0
- {tree_sitter_analyzer-0.8.2 → tree_sitter_analyzer-0.8.3}/tree_sitter_analyzer/core/query.py +0 -0
- {tree_sitter_analyzer-0.8.2 → tree_sitter_analyzer-0.8.3}/tree_sitter_analyzer/encoding_utils.py +0 -0
- {tree_sitter_analyzer-0.8.2 → tree_sitter_analyzer-0.8.3}/tree_sitter_analyzer/exceptions.py +0 -0
- {tree_sitter_analyzer-0.8.2 → tree_sitter_analyzer-0.8.3}/tree_sitter_analyzer/file_handler.py +0 -0
- {tree_sitter_analyzer-0.8.2 → tree_sitter_analyzer-0.8.3}/tree_sitter_analyzer/formatters/__init__.py +0 -0
- {tree_sitter_analyzer-0.8.2 → tree_sitter_analyzer-0.8.3}/tree_sitter_analyzer/formatters/base_formatter.py +0 -0
- {tree_sitter_analyzer-0.8.2 → tree_sitter_analyzer-0.8.3}/tree_sitter_analyzer/formatters/formatter_factory.py +0 -0
- {tree_sitter_analyzer-0.8.2 → tree_sitter_analyzer-0.8.3}/tree_sitter_analyzer/formatters/java_formatter.py +0 -0
- {tree_sitter_analyzer-0.8.2 → tree_sitter_analyzer-0.8.3}/tree_sitter_analyzer/formatters/python_formatter.py +0 -0
- {tree_sitter_analyzer-0.8.2 → tree_sitter_analyzer-0.8.3}/tree_sitter_analyzer/interfaces/__init__.py +0 -0
- {tree_sitter_analyzer-0.8.2 → tree_sitter_analyzer-0.8.3}/tree_sitter_analyzer/interfaces/cli.py +0 -0
- {tree_sitter_analyzer-0.8.2 → tree_sitter_analyzer-0.8.3}/tree_sitter_analyzer/interfaces/cli_adapter.py +0 -0
- {tree_sitter_analyzer-0.8.2 → tree_sitter_analyzer-0.8.3}/tree_sitter_analyzer/interfaces/mcp_adapter.py +0 -0
- {tree_sitter_analyzer-0.8.2 → tree_sitter_analyzer-0.8.3}/tree_sitter_analyzer/interfaces/mcp_server.py +0 -0
- {tree_sitter_analyzer-0.8.2 → tree_sitter_analyzer-0.8.3}/tree_sitter_analyzer/language_detector.py +0 -0
- {tree_sitter_analyzer-0.8.2 → tree_sitter_analyzer-0.8.3}/tree_sitter_analyzer/language_loader.py +0 -0
- {tree_sitter_analyzer-0.8.2 → tree_sitter_analyzer-0.8.3}/tree_sitter_analyzer/languages/__init__.py +0 -0
- {tree_sitter_analyzer-0.8.2 → tree_sitter_analyzer-0.8.3}/tree_sitter_analyzer/languages/java_plugin.py +0 -0
- {tree_sitter_analyzer-0.8.2 → tree_sitter_analyzer-0.8.3}/tree_sitter_analyzer/languages/javascript_plugin.py +0 -0
- {tree_sitter_analyzer-0.8.2 → tree_sitter_analyzer-0.8.3}/tree_sitter_analyzer/languages/python_plugin.py +0 -0
- {tree_sitter_analyzer-0.8.2 → tree_sitter_analyzer-0.8.3}/tree_sitter_analyzer/mcp/__init__.py +0 -0
- {tree_sitter_analyzer-0.8.2 → tree_sitter_analyzer-0.8.3}/tree_sitter_analyzer/mcp/resources/__init__.py +0 -0
- {tree_sitter_analyzer-0.8.2 → tree_sitter_analyzer-0.8.3}/tree_sitter_analyzer/mcp/resources/code_file_resource.py +0 -0
- {tree_sitter_analyzer-0.8.2 → tree_sitter_analyzer-0.8.3}/tree_sitter_analyzer/mcp/resources/project_stats_resource.py +0 -0
- {tree_sitter_analyzer-0.8.2 → tree_sitter_analyzer-0.8.3}/tree_sitter_analyzer/mcp/tools/__init__.py +0 -0
- {tree_sitter_analyzer-0.8.2 → tree_sitter_analyzer-0.8.3}/tree_sitter_analyzer/mcp/tools/base_tool.py +0 -0
- {tree_sitter_analyzer-0.8.2 → tree_sitter_analyzer-0.8.3}/tree_sitter_analyzer/mcp/tools/read_partial_tool.py +0 -0
- {tree_sitter_analyzer-0.8.2 → tree_sitter_analyzer-0.8.3}/tree_sitter_analyzer/mcp/tools/table_format_tool.py +0 -0
- {tree_sitter_analyzer-0.8.2 → tree_sitter_analyzer-0.8.3}/tree_sitter_analyzer/mcp/tools/universal_analyze_tool.py +0 -0
- {tree_sitter_analyzer-0.8.2 → tree_sitter_analyzer-0.8.3}/tree_sitter_analyzer/mcp/utils/__init__.py +0 -0
- {tree_sitter_analyzer-0.8.2 → tree_sitter_analyzer-0.8.3}/tree_sitter_analyzer/mcp/utils/error_handler.py +0 -0
- {tree_sitter_analyzer-0.8.2 → tree_sitter_analyzer-0.8.3}/tree_sitter_analyzer/models.py +0 -0
- {tree_sitter_analyzer-0.8.2 → tree_sitter_analyzer-0.8.3}/tree_sitter_analyzer/output_manager.py +0 -0
- {tree_sitter_analyzer-0.8.2 → tree_sitter_analyzer-0.8.3}/tree_sitter_analyzer/plugins/__init__.py +0 -0
- {tree_sitter_analyzer-0.8.2 → tree_sitter_analyzer-0.8.3}/tree_sitter_analyzer/plugins/base.py +0 -0
- {tree_sitter_analyzer-0.8.2 → tree_sitter_analyzer-0.8.3}/tree_sitter_analyzer/plugins/manager.py +0 -0
- {tree_sitter_analyzer-0.8.2 → tree_sitter_analyzer-0.8.3}/tree_sitter_analyzer/queries/__init__.py +0 -0
- {tree_sitter_analyzer-0.8.2 → tree_sitter_analyzer-0.8.3}/tree_sitter_analyzer/queries/java.py +0 -0
- {tree_sitter_analyzer-0.8.2 → tree_sitter_analyzer-0.8.3}/tree_sitter_analyzer/queries/javascript.py +0 -0
- {tree_sitter_analyzer-0.8.2 → tree_sitter_analyzer-0.8.3}/tree_sitter_analyzer/queries/python.py +0 -0
- {tree_sitter_analyzer-0.8.2 → tree_sitter_analyzer-0.8.3}/tree_sitter_analyzer/queries/typescript.py +0 -0
- {tree_sitter_analyzer-0.8.2 → tree_sitter_analyzer-0.8.3}/tree_sitter_analyzer/query_loader.py +0 -0
- {tree_sitter_analyzer-0.8.2 → tree_sitter_analyzer-0.8.3}/tree_sitter_analyzer/table_formatter.py +0 -0
- {tree_sitter_analyzer-0.8.2 → tree_sitter_analyzer-0.8.3}/tree_sitter_analyzer/utils.py +0 -0
- {tree_sitter_analyzer-0.8.2 → tree_sitter_analyzer-0.8.3}/upload_to_pypi.py +0 -0
|
@@ -1,5 +1,19 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [Unreleased]
|
|
4
|
+
|
|
5
|
+
## [0.8.3] - 2025-08-11
|
|
6
|
+
|
|
7
|
+
### Fixed
|
|
8
|
+
- CLI: Ensure security validation error messaging uses "Invalid file path" when path fails project boundary checks.
|
|
9
|
+
- Windows: Normalize project root handling to avoid 8.3 short/long path mismatches in MCP server and security boundary checks.
|
|
10
|
+
- Security: Improve absolute-path validation on Windows to also treat leading `/` or `\\` as absolute and gate by project root.
|
|
11
|
+
- MCP AnalyzeScaleTool: Return `ValueError("Invalid file path ...")` for invalid input paths (previously `FileNotFoundError`).
|
|
12
|
+
- Boundary Manager: Use `os.path.realpath` for `project_root` to align with expectations in tests and relative-path calculations.
|
|
13
|
+
|
|
14
|
+
### Performance
|
|
15
|
+
- AnalyzeScaleToolCLICompatible: Use `time.perf_counter()` and measure only the engine call to improve timing accuracy and reduce measured latency.
|
|
16
|
+
|
|
3
17
|
All notable changes to this project will be documented in this file.
|
|
4
18
|
|
|
5
19
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: tree-sitter-analyzer
|
|
3
|
-
Version: 0.8.
|
|
3
|
+
Version: 0.8.3
|
|
4
4
|
Summary: Extensible multi-language code analyzer framework using Tree-sitter with dynamic plugin architecture
|
|
5
5
|
Project-URL: Homepage, https://github.com/aimasteracc/tree-sitter-analyzer
|
|
6
6
|
Project-URL: Documentation, https://github.com/aimasteracc/tree-sitter-analyzer#readme
|
|
@@ -344,11 +344,12 @@ This project maintains **enterprise-grade quality** with comprehensive testing:
|
|
|
344
344
|
- **Zero test failures** - Complete CI/CD readiness
|
|
345
345
|
- **Cross-platform compatibility** - Windows, macOS, Linux
|
|
346
346
|
|
|
347
|
-
### 🏆 Recent Quality Achievements (v0.8.2)
|
|
348
|
-
- ✅ **Complete test suite stabilization** -
|
|
349
|
-
- ✅ **
|
|
350
|
-
- ✅ **
|
|
351
|
-
- ✅ **
|
|
347
|
+
### 🏆 Recent Quality Achievements (v0.8.2+)
|
|
348
|
+
- ✅ **Complete test suite stabilization** - All 1358 tests passing
|
|
349
|
+
- ✅ **Windows compatibility improvements** - Fixed path handling and security validation
|
|
350
|
+
- ✅ **Enhanced error messaging** - Consistent CLI and MCP error reporting
|
|
351
|
+
- ✅ **Performance optimizations** - Improved timing accuracy in analysis tools
|
|
352
|
+
- ✅ **Security framework enhancements** - Better project boundary management
|
|
352
353
|
|
|
353
354
|
### 🔧 Running Tests
|
|
354
355
|
```bash
|
|
@@ -1,203 +1,203 @@
|
|
|
1
|
-
# Project Root Configuration Guide
|
|
2
|
-
|
|
3
|
-
**Quick reference for configuring project root in tree-sitter-analyzer**
|
|
4
|
-
|
|
5
|
-
## 🎯 Recommended Configuration (Most Users)
|
|
6
|
-
|
|
7
|
-
### MCP Server (Claude Desktop)
|
|
8
|
-
|
|
9
|
-
```json
|
|
10
|
-
{
|
|
11
|
-
"mcpServers": {
|
|
12
|
-
"tree-sitter-analyzer": {
|
|
13
|
-
"command": "uv",
|
|
14
|
-
"args": [
|
|
15
|
-
"run", "--with", "tree-sitter-analyzer[mcp]",
|
|
16
|
-
"python", "-m", "tree_sitter_analyzer.mcp.server"
|
|
17
|
-
],
|
|
18
|
-
"env": {
|
|
19
|
-
"TREE_SITTER_PROJECT_ROOT": "${workspaceFolder}"
|
|
20
|
-
}
|
|
21
|
-
}
|
|
22
|
-
}
|
|
23
|
-
}
|
|
24
|
-
```
|
|
25
|
-
|
|
26
|
-
### CLI Usage
|
|
27
|
-
|
|
28
|
-
```bash
|
|
29
|
-
# Auto-detect project root (recommended)
|
|
30
|
-
tree-sitter-analyzer src/main.py --table=full
|
|
31
|
-
|
|
32
|
-
# Explicit project root (when needed)
|
|
33
|
-
tree-sitter-analyzer src/main.py --project-root /path/to/project --table=full
|
|
34
|
-
```
|
|
35
|
-
|
|
36
|
-
## 🔧 How It Works
|
|
37
|
-
|
|
38
|
-
### Auto-Detection Process
|
|
39
|
-
|
|
40
|
-
1. **Searches for project markers** (in priority order):
|
|
41
|
-
- Version control: `.git`, `.hg`, `.svn`
|
|
42
|
-
- Python: `pyproject.toml`, `setup.py`, `requirements.txt`
|
|
43
|
-
- JavaScript: `package.json`, `yarn.lock`, `node_modules`
|
|
44
|
-
- Java: `pom.xml`, `build.gradle`, `gradlew`
|
|
45
|
-
- And 20+ more project types
|
|
46
|
-
|
|
47
|
-
2. **Traverses upward** from file location
|
|
48
|
-
3. **Selects best match** based on marker priority and count
|
|
49
|
-
4. **Falls back** to file directory if no markers found
|
|
50
|
-
|
|
51
|
-
### Security Benefits
|
|
52
|
-
|
|
53
|
-
- ✅ **File access control**: Only files within project boundaries
|
|
54
|
-
- ✅ **Path traversal protection**: Blocks `../../../etc/passwd` attacks
|
|
55
|
-
- ✅ **Symlink safety**: Prevents symlink-based boundary bypass
|
|
56
|
-
- ✅ **Audit logging**: Records all security events
|
|
57
|
-
|
|
58
|
-
## 📋 Configuration Options
|
|
59
|
-
|
|
60
|
-
### Priority Order (Highest to Lowest)
|
|
61
|
-
|
|
62
|
-
| Priority | Method | CLI | MCP | Use Case |
|
|
63
|
-
|----------|--------|-----|-----|----------|
|
|
64
|
-
| 🥇 **1st** | Command line argument | `--project-root /path` | `"args": [..., "--project-root", "/path"]` | Fixed paths, overrides |
|
|
65
|
-
| 🥈 **2nd** | Environment variable | `TREE_SITTER_PROJECT_ROOT=/path` | `"env": {"TREE_SITTER_PROJECT_ROOT": "/path"}` | Dynamic, workspace integration |
|
|
66
|
-
| 🥉 **3rd** | Auto-detection | *(default)* | *(default)* | Zero configuration |
|
|
67
|
-
|
|
68
|
-
### When to Use Each Method
|
|
69
|
-
|
|
70
|
-
#### Environment Variable (Recommended)
|
|
71
|
-
```json
|
|
72
|
-
"env": {"TREE_SITTER_PROJECT_ROOT": "${workspaceFolder}"}
|
|
73
|
-
```
|
|
74
|
-
- ✅ **Best for**: Most users, IDE integration
|
|
75
|
-
- ✅ **Benefits**: Automatic workspace adaptation, flexible
|
|
76
|
-
- ✅ **Works with**: VS Code, most IDEs
|
|
77
|
-
|
|
78
|
-
#### Command Line Argument
|
|
79
|
-
```bash
|
|
80
|
-
--project-root /specific/path
|
|
81
|
-
```
|
|
82
|
-
- ✅ **Best for**: Fixed paths, CI/CD, overrides
|
|
83
|
-
- ✅ **Benefits**: Explicit control, highest priority
|
|
84
|
-
- ✅ **Works with**: Scripts, automation
|
|
85
|
-
|
|
86
|
-
#### Auto-Detection
|
|
87
|
-
```bash
|
|
88
|
-
# No configuration needed
|
|
89
|
-
```
|
|
90
|
-
- ✅ **Best for**: Development, quick testing
|
|
91
|
-
- ✅ **Benefits**: Zero configuration, intelligent
|
|
92
|
-
- ✅ **Works with**: Standard project structures
|
|
93
|
-
|
|
94
|
-
## 🚨 Common Issues & Solutions
|
|
95
|
-
|
|
96
|
-
### Issue: "Absolute path must be within project directory"
|
|
97
|
-
|
|
98
|
-
**Cause**: File is outside detected project boundary
|
|
99
|
-
|
|
100
|
-
**Solutions:**
|
|
101
|
-
1. Use explicit project root: `--project-root /correct/path`
|
|
102
|
-
2. Check project markers exist in expected location
|
|
103
|
-
3. Verify file is actually within intended project
|
|
104
|
-
|
|
105
|
-
### Issue: "No project root detected"
|
|
106
|
-
|
|
107
|
-
**Cause**: No project markers found
|
|
108
|
-
|
|
109
|
-
**Solutions:**
|
|
110
|
-
1. Add a project marker file (`.git`, `pyproject.toml`, etc.)
|
|
111
|
-
2. Use explicit project root: `--project-root .`
|
|
112
|
-
3. Check current working directory
|
|
113
|
-
|
|
114
|
-
### Issue: Wrong project root detected
|
|
115
|
-
|
|
116
|
-
**Cause**: Multiple nested projects or unexpected markers
|
|
117
|
-
|
|
118
|
-
**Solutions:**
|
|
119
|
-
1. Use explicit project root to override
|
|
120
|
-
2. Remove unwanted project markers
|
|
121
|
-
3. Check marker priority (`.git` > `pyproject.toml` > `README.md`)
|
|
122
|
-
|
|
123
|
-
## 🧪 Testing Your Configuration
|
|
124
|
-
|
|
125
|
-
### Test Auto-Detection
|
|
126
|
-
```bash
|
|
127
|
-
cd /your/project
|
|
128
|
-
python -c "
|
|
129
|
-
from tree_sitter_analyzer.project_detector import detect_project_root
|
|
130
|
-
print('Detected:', detect_project_root())
|
|
131
|
-
"
|
|
132
|
-
```
|
|
133
|
-
|
|
134
|
-
### Test MCP Server
|
|
135
|
-
```bash
|
|
136
|
-
# Test with your configuration
|
|
137
|
-
python -m tree_sitter_analyzer.mcp.server --help
|
|
138
|
-
# Check logs for "MCP server starting with project root: ..."
|
|
139
|
-
```
|
|
140
|
-
|
|
141
|
-
### Test Security Boundaries
|
|
142
|
-
```bash
|
|
143
|
-
# Should work (file within project)
|
|
144
|
-
tree-sitter-analyzer src/main.py --table=compact
|
|
145
|
-
|
|
146
|
-
# Should fail (file outside project)
|
|
147
|
-
tree-sitter-analyzer ../outside.py --table=compact
|
|
148
|
-
```
|
|
149
|
-
|
|
150
|
-
## 📖 Examples by Project Type
|
|
151
|
-
|
|
152
|
-
### Python Project
|
|
153
|
-
```
|
|
154
|
-
my-python-project/
|
|
155
|
-
├── pyproject.toml # ← Detected as project root
|
|
156
|
-
├── src/
|
|
157
|
-
│ └── mypackage/
|
|
158
|
-
│ └── main.py # ← Analyze this file
|
|
159
|
-
└── tests/
|
|
160
|
-
```
|
|
161
|
-
|
|
162
|
-
### JavaScript Project
|
|
163
|
-
```
|
|
164
|
-
my-js-project/
|
|
165
|
-
├── package.json # ← Detected as project root
|
|
166
|
-
├── src/
|
|
167
|
-
│ └── index.js # ← Analyze this file
|
|
168
|
-
└── node_modules/
|
|
169
|
-
```
|
|
170
|
-
|
|
171
|
-
### Java Project
|
|
172
|
-
```
|
|
173
|
-
my-java-project/
|
|
174
|
-
├── pom.xml # ← Detected as project root
|
|
175
|
-
├── src/
|
|
176
|
-
│ └── main/
|
|
177
|
-
│ └── java/
|
|
178
|
-
│ └── Main.java # ← Analyze this file
|
|
179
|
-
└── target/
|
|
180
|
-
```
|
|
181
|
-
|
|
182
|
-
### Git Repository
|
|
183
|
-
```
|
|
184
|
-
any-project/
|
|
185
|
-
├── .git/ # ← Detected as project root (highest priority)
|
|
186
|
-
├── src/
|
|
187
|
-
│ └── code.ext # ← Analyze this file
|
|
188
|
-
└── docs/
|
|
189
|
-
```
|
|
190
|
-
|
|
191
|
-
## 🎯 Best Practices
|
|
192
|
-
|
|
193
|
-
1. **Use environment variable for MCP**: `${workspaceFolder}` adapts automatically
|
|
194
|
-
2. **Let auto-detection work**: Most projects have standard markers
|
|
195
|
-
3. **Override when needed**: Use command line for special cases
|
|
196
|
-
4. **Test your setup**: Verify project root detection works as expected
|
|
197
|
-
5. **Keep it simple**: Start with recommended configuration, customize only if needed
|
|
198
|
-
|
|
199
|
-
---
|
|
200
|
-
|
|
201
|
-
**Need help?** Check the full setup guides:
|
|
202
|
-
- [MCP Setup for Users](MCP_SETUP_USERS.md)
|
|
203
|
-
- [MCP Setup for Developers](MCP_SETUP_DEVELOPERS.md)
|
|
1
|
+
# Project Root Configuration Guide
|
|
2
|
+
|
|
3
|
+
**Quick reference for configuring project root in tree-sitter-analyzer**
|
|
4
|
+
|
|
5
|
+
## 🎯 Recommended Configuration (Most Users)
|
|
6
|
+
|
|
7
|
+
### MCP Server (Claude Desktop)
|
|
8
|
+
|
|
9
|
+
```json
|
|
10
|
+
{
|
|
11
|
+
"mcpServers": {
|
|
12
|
+
"tree-sitter-analyzer": {
|
|
13
|
+
"command": "uv",
|
|
14
|
+
"args": [
|
|
15
|
+
"run", "--with", "tree-sitter-analyzer[mcp]",
|
|
16
|
+
"python", "-m", "tree_sitter_analyzer.mcp.server"
|
|
17
|
+
],
|
|
18
|
+
"env": {
|
|
19
|
+
"TREE_SITTER_PROJECT_ROOT": "${workspaceFolder}"
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
### CLI Usage
|
|
27
|
+
|
|
28
|
+
```bash
|
|
29
|
+
# Auto-detect project root (recommended)
|
|
30
|
+
tree-sitter-analyzer src/main.py --table=full
|
|
31
|
+
|
|
32
|
+
# Explicit project root (when needed)
|
|
33
|
+
tree-sitter-analyzer src/main.py --project-root /path/to/project --table=full
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
## 🔧 How It Works
|
|
37
|
+
|
|
38
|
+
### Auto-Detection Process
|
|
39
|
+
|
|
40
|
+
1. **Searches for project markers** (in priority order):
|
|
41
|
+
- Version control: `.git`, `.hg`, `.svn`
|
|
42
|
+
- Python: `pyproject.toml`, `setup.py`, `requirements.txt`
|
|
43
|
+
- JavaScript: `package.json`, `yarn.lock`, `node_modules`
|
|
44
|
+
- Java: `pom.xml`, `build.gradle`, `gradlew`
|
|
45
|
+
- And 20+ more project types
|
|
46
|
+
|
|
47
|
+
2. **Traverses upward** from file location
|
|
48
|
+
3. **Selects best match** based on marker priority and count
|
|
49
|
+
4. **Falls back** to file directory if no markers found
|
|
50
|
+
|
|
51
|
+
### Security Benefits
|
|
52
|
+
|
|
53
|
+
- ✅ **File access control**: Only files within project boundaries
|
|
54
|
+
- ✅ **Path traversal protection**: Blocks `../../../etc/passwd` attacks
|
|
55
|
+
- ✅ **Symlink safety**: Prevents symlink-based boundary bypass
|
|
56
|
+
- ✅ **Audit logging**: Records all security events
|
|
57
|
+
|
|
58
|
+
## 📋 Configuration Options
|
|
59
|
+
|
|
60
|
+
### Priority Order (Highest to Lowest)
|
|
61
|
+
|
|
62
|
+
| Priority | Method | CLI | MCP | Use Case |
|
|
63
|
+
|----------|--------|-----|-----|----------|
|
|
64
|
+
| 🥇 **1st** | Command line argument | `--project-root /path` | `"args": [..., "--project-root", "/path"]` | Fixed paths, overrides |
|
|
65
|
+
| 🥈 **2nd** | Environment variable | `TREE_SITTER_PROJECT_ROOT=/path` | `"env": {"TREE_SITTER_PROJECT_ROOT": "/path"}` | Dynamic, workspace integration |
|
|
66
|
+
| 🥉 **3rd** | Auto-detection | *(default)* | *(default)* | Zero configuration |
|
|
67
|
+
|
|
68
|
+
### When to Use Each Method
|
|
69
|
+
|
|
70
|
+
#### Environment Variable (Recommended)
|
|
71
|
+
```json
|
|
72
|
+
"env": {"TREE_SITTER_PROJECT_ROOT": "${workspaceFolder}"}
|
|
73
|
+
```
|
|
74
|
+
- ✅ **Best for**: Most users, IDE integration
|
|
75
|
+
- ✅ **Benefits**: Automatic workspace adaptation, flexible
|
|
76
|
+
- ✅ **Works with**: VS Code, most IDEs
|
|
77
|
+
|
|
78
|
+
#### Command Line Argument
|
|
79
|
+
```bash
|
|
80
|
+
--project-root /specific/path
|
|
81
|
+
```
|
|
82
|
+
- ✅ **Best for**: Fixed paths, CI/CD, overrides
|
|
83
|
+
- ✅ **Benefits**: Explicit control, highest priority
|
|
84
|
+
- ✅ **Works with**: Scripts, automation
|
|
85
|
+
|
|
86
|
+
#### Auto-Detection
|
|
87
|
+
```bash
|
|
88
|
+
# No configuration needed
|
|
89
|
+
```
|
|
90
|
+
- ✅ **Best for**: Development, quick testing
|
|
91
|
+
- ✅ **Benefits**: Zero configuration, intelligent
|
|
92
|
+
- ✅ **Works with**: Standard project structures
|
|
93
|
+
|
|
94
|
+
## 🚨 Common Issues & Solutions
|
|
95
|
+
|
|
96
|
+
### Issue: "Absolute path must be within project directory"
|
|
97
|
+
|
|
98
|
+
**Cause**: File is outside detected project boundary
|
|
99
|
+
|
|
100
|
+
**Solutions:**
|
|
101
|
+
1. Use explicit project root: `--project-root /correct/path`
|
|
102
|
+
2. Check project markers exist in expected location
|
|
103
|
+
3. Verify file is actually within intended project
|
|
104
|
+
|
|
105
|
+
### Issue: "No project root detected"
|
|
106
|
+
|
|
107
|
+
**Cause**: No project markers found
|
|
108
|
+
|
|
109
|
+
**Solutions:**
|
|
110
|
+
1. Add a project marker file (`.git`, `pyproject.toml`, etc.)
|
|
111
|
+
2. Use explicit project root: `--project-root .`
|
|
112
|
+
3. Check current working directory
|
|
113
|
+
|
|
114
|
+
### Issue: Wrong project root detected
|
|
115
|
+
|
|
116
|
+
**Cause**: Multiple nested projects or unexpected markers
|
|
117
|
+
|
|
118
|
+
**Solutions:**
|
|
119
|
+
1. Use explicit project root to override
|
|
120
|
+
2. Remove unwanted project markers
|
|
121
|
+
3. Check marker priority (`.git` > `pyproject.toml` > `README.md`)
|
|
122
|
+
|
|
123
|
+
## 🧪 Testing Your Configuration
|
|
124
|
+
|
|
125
|
+
### Test Auto-Detection
|
|
126
|
+
```bash
|
|
127
|
+
cd /your/project
|
|
128
|
+
python -c "
|
|
129
|
+
from tree_sitter_analyzer.project_detector import detect_project_root
|
|
130
|
+
print('Detected:', detect_project_root())
|
|
131
|
+
"
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
### Test MCP Server
|
|
135
|
+
```bash
|
|
136
|
+
# Test with your configuration
|
|
137
|
+
python -m tree_sitter_analyzer.mcp.server --help
|
|
138
|
+
# Check logs for "MCP server starting with project root: ..."
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
### Test Security Boundaries
|
|
142
|
+
```bash
|
|
143
|
+
# Should work (file within project)
|
|
144
|
+
tree-sitter-analyzer src/main.py --table=compact
|
|
145
|
+
|
|
146
|
+
# Should fail (file outside project)
|
|
147
|
+
tree-sitter-analyzer ../outside.py --table=compact
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
## 📖 Examples by Project Type
|
|
151
|
+
|
|
152
|
+
### Python Project
|
|
153
|
+
```
|
|
154
|
+
my-python-project/
|
|
155
|
+
├── pyproject.toml # ← Detected as project root
|
|
156
|
+
├── src/
|
|
157
|
+
│ └── mypackage/
|
|
158
|
+
│ └── main.py # ← Analyze this file
|
|
159
|
+
└── tests/
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
### JavaScript Project
|
|
163
|
+
```
|
|
164
|
+
my-js-project/
|
|
165
|
+
├── package.json # ← Detected as project root
|
|
166
|
+
├── src/
|
|
167
|
+
│ └── index.js # ← Analyze this file
|
|
168
|
+
└── node_modules/
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
### Java Project
|
|
172
|
+
```
|
|
173
|
+
my-java-project/
|
|
174
|
+
├── pom.xml # ← Detected as project root
|
|
175
|
+
├── src/
|
|
176
|
+
│ └── main/
|
|
177
|
+
│ └── java/
|
|
178
|
+
│ └── Main.java # ← Analyze this file
|
|
179
|
+
└── target/
|
|
180
|
+
```
|
|
181
|
+
|
|
182
|
+
### Git Repository
|
|
183
|
+
```
|
|
184
|
+
any-project/
|
|
185
|
+
├── .git/ # ← Detected as project root (highest priority)
|
|
186
|
+
├── src/
|
|
187
|
+
│ └── code.ext # ← Analyze this file
|
|
188
|
+
└── docs/
|
|
189
|
+
```
|
|
190
|
+
|
|
191
|
+
## 🎯 Best Practices
|
|
192
|
+
|
|
193
|
+
1. **Use environment variable for MCP**: `${workspaceFolder}` adapts automatically
|
|
194
|
+
2. **Let auto-detection work**: Most projects have standard markers
|
|
195
|
+
3. **Override when needed**: Use command line for special cases
|
|
196
|
+
4. **Test your setup**: Verify project root detection works as expected
|
|
197
|
+
5. **Keep it simple**: Start with recommended configuration, customize only if needed
|
|
198
|
+
|
|
199
|
+
---
|
|
200
|
+
|
|
201
|
+
**Need help?** Check the full setup guides:
|
|
202
|
+
- [MCP Setup for Users](MCP_SETUP_USERS.md)
|
|
203
|
+
- [MCP Setup for Developers](MCP_SETUP_DEVELOPERS.md)
|
|
@@ -209,11 +209,12 @@ This project maintains **enterprise-grade quality** with comprehensive testing:
|
|
|
209
209
|
- **Zero test failures** - Complete CI/CD readiness
|
|
210
210
|
- **Cross-platform compatibility** - Windows, macOS, Linux
|
|
211
211
|
|
|
212
|
-
### 🏆 Recent Quality Achievements (v0.8.2)
|
|
213
|
-
- ✅ **Complete test suite stabilization** -
|
|
214
|
-
- ✅ **
|
|
215
|
-
- ✅ **
|
|
216
|
-
- ✅ **
|
|
212
|
+
### 🏆 Recent Quality Achievements (v0.8.2+)
|
|
213
|
+
- ✅ **Complete test suite stabilization** - All 1358 tests passing
|
|
214
|
+
- ✅ **Windows compatibility improvements** - Fixed path handling and security validation
|
|
215
|
+
- ✅ **Enhanced error messaging** - Consistent CLI and MCP error reporting
|
|
216
|
+
- ✅ **Performance optimizations** - Improved timing accuracy in analysis tools
|
|
217
|
+
- ✅ **Security framework enhancements** - Better project boundary management
|
|
217
218
|
|
|
218
219
|
### 🔧 Running Tests
|
|
219
220
|
```bash
|