tree-sitter-analyzer 0.9.1__py3-none-any.whl → 0.9.2__py3-none-any.whl
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/__init__.py +132 -132
- tree_sitter_analyzer/__main__.py +11 -11
- tree_sitter_analyzer/api.py +533 -533
- tree_sitter_analyzer/cli/__init__.py +39 -39
- tree_sitter_analyzer/cli/__main__.py +12 -12
- tree_sitter_analyzer/cli/commands/__init__.py +26 -26
- tree_sitter_analyzer/cli/commands/advanced_command.py +88 -88
- tree_sitter_analyzer/cli/commands/base_command.py +182 -178
- tree_sitter_analyzer/cli/commands/structure_command.py +138 -138
- tree_sitter_analyzer/cli/commands/summary_command.py +101 -101
- tree_sitter_analyzer/core/__init__.py +15 -15
- tree_sitter_analyzer/core/analysis_engine.py +74 -78
- tree_sitter_analyzer/core/cache_service.py +320 -320
- tree_sitter_analyzer/core/engine.py +566 -566
- tree_sitter_analyzer/core/parser.py +293 -293
- tree_sitter_analyzer/encoding_utils.py +459 -459
- tree_sitter_analyzer/file_handler.py +210 -210
- tree_sitter_analyzer/formatters/__init__.py +1 -1
- tree_sitter_analyzer/formatters/base_formatter.py +167 -167
- tree_sitter_analyzer/formatters/formatter_factory.py +78 -78
- tree_sitter_analyzer/formatters/java_formatter.py +18 -18
- tree_sitter_analyzer/formatters/python_formatter.py +19 -19
- tree_sitter_analyzer/interfaces/__init__.py +9 -9
- tree_sitter_analyzer/interfaces/cli.py +528 -528
- tree_sitter_analyzer/interfaces/cli_adapter.py +344 -343
- tree_sitter_analyzer/interfaces/mcp_adapter.py +206 -206
- tree_sitter_analyzer/language_detector.py +53 -53
- tree_sitter_analyzer/languages/__init__.py +10 -10
- tree_sitter_analyzer/languages/java_plugin.py +1 -1
- tree_sitter_analyzer/languages/javascript_plugin.py +446 -446
- tree_sitter_analyzer/languages/python_plugin.py +755 -755
- tree_sitter_analyzer/mcp/__init__.py +34 -45
- tree_sitter_analyzer/mcp/resources/__init__.py +44 -44
- tree_sitter_analyzer/mcp/resources/code_file_resource.py +209 -209
- tree_sitter_analyzer/mcp/server.py +623 -568
- tree_sitter_analyzer/mcp/tools/__init__.py +30 -30
- tree_sitter_analyzer/mcp/tools/analyze_scale_tool.py +681 -673
- tree_sitter_analyzer/mcp/tools/analyze_scale_tool_cli_compatible.py +247 -247
- tree_sitter_analyzer/mcp/tools/base_tool.py +54 -54
- tree_sitter_analyzer/mcp/tools/read_partial_tool.py +310 -308
- tree_sitter_analyzer/mcp/tools/table_format_tool.py +386 -379
- tree_sitter_analyzer/mcp/tools/universal_analyze_tool.py +563 -559
- tree_sitter_analyzer/mcp/utils/__init__.py +107 -107
- tree_sitter_analyzer/models.py +10 -10
- tree_sitter_analyzer/output_manager.py +253 -253
- tree_sitter_analyzer/plugins/__init__.py +280 -280
- tree_sitter_analyzer/plugins/base.py +529 -529
- tree_sitter_analyzer/plugins/manager.py +379 -379
- tree_sitter_analyzer/queries/__init__.py +26 -26
- tree_sitter_analyzer/queries/java.py +391 -391
- tree_sitter_analyzer/queries/javascript.py +148 -148
- tree_sitter_analyzer/queries/python.py +285 -285
- tree_sitter_analyzer/queries/typescript.py +229 -229
- tree_sitter_analyzer/query_loader.py +257 -257
- tree_sitter_analyzer/security/validator.py +246 -241
- tree_sitter_analyzer/utils.py +294 -277
- {tree_sitter_analyzer-0.9.1.dist-info → tree_sitter_analyzer-0.9.2.dist-info}/METADATA +1 -1
- tree_sitter_analyzer-0.9.2.dist-info/RECORD +77 -0
- {tree_sitter_analyzer-0.9.1.dist-info → tree_sitter_analyzer-0.9.2.dist-info}/entry_points.txt +1 -0
- tree_sitter_analyzer-0.9.1.dist-info/RECORD +0 -77
- {tree_sitter_analyzer-0.9.1.dist-info → tree_sitter_analyzer-0.9.2.dist-info}/WHEEL +0 -0
|
@@ -1,39 +1,39 @@
|
|
|
1
|
-
#!/usr/bin/env python3
|
|
2
|
-
"""
|
|
3
|
-
CLI Package
|
|
4
|
-
|
|
5
|
-
Command-line interface components using the Command Pattern.
|
|
6
|
-
"""
|
|
7
|
-
|
|
8
|
-
from .info_commands import (
|
|
9
|
-
DescribeQueryCommand,
|
|
10
|
-
InfoCommand,
|
|
11
|
-
ListQueriesCommand,
|
|
12
|
-
ShowExtensionsCommand,
|
|
13
|
-
ShowLanguagesCommand,
|
|
14
|
-
)
|
|
15
|
-
|
|
16
|
-
# Modern framework imports
|
|
17
|
-
try:
|
|
18
|
-
from ..cli_main import main
|
|
19
|
-
from ..core.analysis_engine import get_analysis_engine
|
|
20
|
-
from ..query_loader import QueryLoader
|
|
21
|
-
|
|
22
|
-
query_loader = QueryLoader()
|
|
23
|
-
except ImportError:
|
|
24
|
-
# Minimal fallback for import safety
|
|
25
|
-
get_analysis_engine = None # type: ignore
|
|
26
|
-
main = None # type: ignore
|
|
27
|
-
query_loader = None # type: ignore
|
|
28
|
-
|
|
29
|
-
__all__ = [
|
|
30
|
-
"InfoCommand",
|
|
31
|
-
"ListQueriesCommand",
|
|
32
|
-
"DescribeQueryCommand",
|
|
33
|
-
"ShowLanguagesCommand",
|
|
34
|
-
"ShowExtensionsCommand",
|
|
35
|
-
# Core framework exports
|
|
36
|
-
"query_loader",
|
|
37
|
-
"get_analysis_engine",
|
|
38
|
-
"main",
|
|
39
|
-
]
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
"""
|
|
3
|
+
CLI Package
|
|
4
|
+
|
|
5
|
+
Command-line interface components using the Command Pattern.
|
|
6
|
+
"""
|
|
7
|
+
|
|
8
|
+
from .info_commands import (
|
|
9
|
+
DescribeQueryCommand,
|
|
10
|
+
InfoCommand,
|
|
11
|
+
ListQueriesCommand,
|
|
12
|
+
ShowExtensionsCommand,
|
|
13
|
+
ShowLanguagesCommand,
|
|
14
|
+
)
|
|
15
|
+
|
|
16
|
+
# Modern framework imports
|
|
17
|
+
try:
|
|
18
|
+
from ..cli_main import main
|
|
19
|
+
from ..core.analysis_engine import get_analysis_engine
|
|
20
|
+
from ..query_loader import QueryLoader
|
|
21
|
+
|
|
22
|
+
query_loader = QueryLoader()
|
|
23
|
+
except ImportError:
|
|
24
|
+
# Minimal fallback for import safety
|
|
25
|
+
get_analysis_engine = None # type: ignore
|
|
26
|
+
main = None # type: ignore
|
|
27
|
+
query_loader = None # type: ignore
|
|
28
|
+
|
|
29
|
+
__all__ = [
|
|
30
|
+
"InfoCommand",
|
|
31
|
+
"ListQueriesCommand",
|
|
32
|
+
"DescribeQueryCommand",
|
|
33
|
+
"ShowLanguagesCommand",
|
|
34
|
+
"ShowExtensionsCommand",
|
|
35
|
+
# Core framework exports
|
|
36
|
+
"query_loader",
|
|
37
|
+
"get_analysis_engine",
|
|
38
|
+
"main",
|
|
39
|
+
]
|
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
#!/usr/bin/env python3
|
|
2
|
-
"""
|
|
3
|
-
CLI Module Entry Point
|
|
4
|
-
|
|
5
|
-
This module allows the CLI to be executed as a module with:
|
|
6
|
-
python -m tree_sitter_analyzer.cli
|
|
7
|
-
"""
|
|
8
|
-
|
|
9
|
-
from ..cli_main import main
|
|
10
|
-
|
|
11
|
-
if __name__ == "__main__":
|
|
12
|
-
main()
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
"""
|
|
3
|
+
CLI Module Entry Point
|
|
4
|
+
|
|
5
|
+
This module allows the CLI to be executed as a module with:
|
|
6
|
+
python -m tree_sitter_analyzer.cli
|
|
7
|
+
"""
|
|
8
|
+
|
|
9
|
+
from ..cli_main import main
|
|
10
|
+
|
|
11
|
+
if __name__ == "__main__":
|
|
12
|
+
main()
|
|
@@ -1,26 +1,26 @@
|
|
|
1
|
-
#!/usr/bin/env python3
|
|
2
|
-
"""
|
|
3
|
-
CLI Commands Package
|
|
4
|
-
|
|
5
|
-
This package contains all command implementations for the CLI interface.
|
|
6
|
-
"""
|
|
7
|
-
|
|
8
|
-
from .advanced_command import AdvancedCommand
|
|
9
|
-
from .base_command import BaseCommand
|
|
10
|
-
from .default_command import DefaultCommand
|
|
11
|
-
from .partial_read_command import PartialReadCommand
|
|
12
|
-
from .query_command import QueryCommand
|
|
13
|
-
from .structure_command import StructureCommand
|
|
14
|
-
from .summary_command import SummaryCommand
|
|
15
|
-
from .table_command import TableCommand
|
|
16
|
-
|
|
17
|
-
__all__ = [
|
|
18
|
-
"BaseCommand",
|
|
19
|
-
"AdvancedCommand",
|
|
20
|
-
"DefaultCommand",
|
|
21
|
-
"PartialReadCommand",
|
|
22
|
-
"QueryCommand",
|
|
23
|
-
"StructureCommand",
|
|
24
|
-
"SummaryCommand",
|
|
25
|
-
"TableCommand",
|
|
26
|
-
]
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
"""
|
|
3
|
+
CLI Commands Package
|
|
4
|
+
|
|
5
|
+
This package contains all command implementations for the CLI interface.
|
|
6
|
+
"""
|
|
7
|
+
|
|
8
|
+
from .advanced_command import AdvancedCommand
|
|
9
|
+
from .base_command import BaseCommand
|
|
10
|
+
from .default_command import DefaultCommand
|
|
11
|
+
from .partial_read_command import PartialReadCommand
|
|
12
|
+
from .query_command import QueryCommand
|
|
13
|
+
from .structure_command import StructureCommand
|
|
14
|
+
from .summary_command import SummaryCommand
|
|
15
|
+
from .table_command import TableCommand
|
|
16
|
+
|
|
17
|
+
__all__ = [
|
|
18
|
+
"BaseCommand",
|
|
19
|
+
"AdvancedCommand",
|
|
20
|
+
"DefaultCommand",
|
|
21
|
+
"PartialReadCommand",
|
|
22
|
+
"QueryCommand",
|
|
23
|
+
"StructureCommand",
|
|
24
|
+
"SummaryCommand",
|
|
25
|
+
"TableCommand",
|
|
26
|
+
]
|
|
@@ -1,88 +1,88 @@
|
|
|
1
|
-
#!/usr/bin/env python3
|
|
2
|
-
"""
|
|
3
|
-
Advanced Command
|
|
4
|
-
|
|
5
|
-
Handles advanced analysis functionality.
|
|
6
|
-
"""
|
|
7
|
-
|
|
8
|
-
from typing import TYPE_CHECKING
|
|
9
|
-
|
|
10
|
-
from ...output_manager import output_data, output_json, output_section
|
|
11
|
-
from .base_command import BaseCommand
|
|
12
|
-
|
|
13
|
-
if TYPE_CHECKING:
|
|
14
|
-
from ...models import AnalysisResult
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
class AdvancedCommand(BaseCommand):
|
|
18
|
-
"""Command for advanced analysis."""
|
|
19
|
-
|
|
20
|
-
async def execute_async(self, language: str) -> int:
|
|
21
|
-
analysis_result = await self.analyze_file(language)
|
|
22
|
-
if not analysis_result:
|
|
23
|
-
return 1
|
|
24
|
-
|
|
25
|
-
if hasattr(self.args, "statistics") and self.args.statistics:
|
|
26
|
-
self._output_statistics(analysis_result)
|
|
27
|
-
else:
|
|
28
|
-
self._output_full_analysis(analysis_result)
|
|
29
|
-
|
|
30
|
-
return 0
|
|
31
|
-
|
|
32
|
-
def _output_statistics(self, analysis_result: "AnalysisResult") -> None:
|
|
33
|
-
"""Output statistics only."""
|
|
34
|
-
stats = {
|
|
35
|
-
"line_count": analysis_result.line_count,
|
|
36
|
-
"element_count": len(analysis_result.elements),
|
|
37
|
-
"node_count": analysis_result.node_count,
|
|
38
|
-
"language": analysis_result.language,
|
|
39
|
-
}
|
|
40
|
-
output_section("Statistics")
|
|
41
|
-
if self.args.output_format == "json":
|
|
42
|
-
output_json(stats)
|
|
43
|
-
else:
|
|
44
|
-
for key, value in stats.items():
|
|
45
|
-
output_data(f"{key}: {value}")
|
|
46
|
-
|
|
47
|
-
def _output_full_analysis(self, analysis_result: "AnalysisResult") -> None:
|
|
48
|
-
"""Output full analysis results."""
|
|
49
|
-
output_section("Advanced Analysis Results")
|
|
50
|
-
if self.args.output_format == "json":
|
|
51
|
-
result_dict = {
|
|
52
|
-
"file_path": analysis_result.file_path,
|
|
53
|
-
"language": analysis_result.language,
|
|
54
|
-
"line_count": analysis_result.line_count,
|
|
55
|
-
"element_count": len(analysis_result.elements),
|
|
56
|
-
"node_count": analysis_result.node_count,
|
|
57
|
-
"elements": [
|
|
58
|
-
{
|
|
59
|
-
"name": getattr(element, "name", str(element)),
|
|
60
|
-
"type": getattr(element, "__class__", type(element)).__name__,
|
|
61
|
-
"start_line": getattr(element, "start_line", 0),
|
|
62
|
-
"end_line": getattr(element, "end_line", 0),
|
|
63
|
-
}
|
|
64
|
-
for element in analysis_result.elements
|
|
65
|
-
],
|
|
66
|
-
"success": analysis_result.success,
|
|
67
|
-
"analysis_time": analysis_result.analysis_time,
|
|
68
|
-
}
|
|
69
|
-
output_json(result_dict)
|
|
70
|
-
else:
|
|
71
|
-
self._output_text_analysis(analysis_result)
|
|
72
|
-
|
|
73
|
-
def _output_text_analysis(self, analysis_result: "AnalysisResult") -> None:
|
|
74
|
-
"""Output analysis in text format."""
|
|
75
|
-
output_data(f"File: {analysis_result.file_path}")
|
|
76
|
-
output_data("Package: (default)")
|
|
77
|
-
output_data(f"Lines: {analysis_result.line_count}")
|
|
78
|
-
|
|
79
|
-
element_counts: dict[str, int] = {}
|
|
80
|
-
for element in analysis_result.elements:
|
|
81
|
-
element_type = getattr(element, "__class__", type(element)).__name__
|
|
82
|
-
element_counts[element_type] = element_counts.get(element_type, 0) + 1
|
|
83
|
-
|
|
84
|
-
output_data(f"Classes: {element_counts.get('Class', 0)}")
|
|
85
|
-
output_data(f"Methods: {element_counts.get('Function', 0)}")
|
|
86
|
-
output_data(f"Fields: {element_counts.get('Variable', 0)}")
|
|
87
|
-
output_data(f"Imports: {element_counts.get('Import', 0)}")
|
|
88
|
-
output_data("Annotations: 0")
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
"""
|
|
3
|
+
Advanced Command
|
|
4
|
+
|
|
5
|
+
Handles advanced analysis functionality.
|
|
6
|
+
"""
|
|
7
|
+
|
|
8
|
+
from typing import TYPE_CHECKING
|
|
9
|
+
|
|
10
|
+
from ...output_manager import output_data, output_json, output_section
|
|
11
|
+
from .base_command import BaseCommand
|
|
12
|
+
|
|
13
|
+
if TYPE_CHECKING:
|
|
14
|
+
from ...models import AnalysisResult
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
class AdvancedCommand(BaseCommand):
|
|
18
|
+
"""Command for advanced analysis."""
|
|
19
|
+
|
|
20
|
+
async def execute_async(self, language: str) -> int:
|
|
21
|
+
analysis_result = await self.analyze_file(language)
|
|
22
|
+
if not analysis_result:
|
|
23
|
+
return 1
|
|
24
|
+
|
|
25
|
+
if hasattr(self.args, "statistics") and self.args.statistics:
|
|
26
|
+
self._output_statistics(analysis_result)
|
|
27
|
+
else:
|
|
28
|
+
self._output_full_analysis(analysis_result)
|
|
29
|
+
|
|
30
|
+
return 0
|
|
31
|
+
|
|
32
|
+
def _output_statistics(self, analysis_result: "AnalysisResult") -> None:
|
|
33
|
+
"""Output statistics only."""
|
|
34
|
+
stats = {
|
|
35
|
+
"line_count": analysis_result.line_count,
|
|
36
|
+
"element_count": len(analysis_result.elements),
|
|
37
|
+
"node_count": analysis_result.node_count,
|
|
38
|
+
"language": analysis_result.language,
|
|
39
|
+
}
|
|
40
|
+
output_section("Statistics")
|
|
41
|
+
if self.args.output_format == "json":
|
|
42
|
+
output_json(stats)
|
|
43
|
+
else:
|
|
44
|
+
for key, value in stats.items():
|
|
45
|
+
output_data(f"{key}: {value}")
|
|
46
|
+
|
|
47
|
+
def _output_full_analysis(self, analysis_result: "AnalysisResult") -> None:
|
|
48
|
+
"""Output full analysis results."""
|
|
49
|
+
output_section("Advanced Analysis Results")
|
|
50
|
+
if self.args.output_format == "json":
|
|
51
|
+
result_dict = {
|
|
52
|
+
"file_path": analysis_result.file_path,
|
|
53
|
+
"language": analysis_result.language,
|
|
54
|
+
"line_count": analysis_result.line_count,
|
|
55
|
+
"element_count": len(analysis_result.elements),
|
|
56
|
+
"node_count": analysis_result.node_count,
|
|
57
|
+
"elements": [
|
|
58
|
+
{
|
|
59
|
+
"name": getattr(element, "name", str(element)),
|
|
60
|
+
"type": getattr(element, "__class__", type(element)).__name__,
|
|
61
|
+
"start_line": getattr(element, "start_line", 0),
|
|
62
|
+
"end_line": getattr(element, "end_line", 0),
|
|
63
|
+
}
|
|
64
|
+
for element in analysis_result.elements
|
|
65
|
+
],
|
|
66
|
+
"success": analysis_result.success,
|
|
67
|
+
"analysis_time": analysis_result.analysis_time,
|
|
68
|
+
}
|
|
69
|
+
output_json(result_dict)
|
|
70
|
+
else:
|
|
71
|
+
self._output_text_analysis(analysis_result)
|
|
72
|
+
|
|
73
|
+
def _output_text_analysis(self, analysis_result: "AnalysisResult") -> None:
|
|
74
|
+
"""Output analysis in text format."""
|
|
75
|
+
output_data(f"File: {analysis_result.file_path}")
|
|
76
|
+
output_data("Package: (default)")
|
|
77
|
+
output_data(f"Lines: {analysis_result.line_count}")
|
|
78
|
+
|
|
79
|
+
element_counts: dict[str, int] = {}
|
|
80
|
+
for element in analysis_result.elements:
|
|
81
|
+
element_type = getattr(element, "__class__", type(element)).__name__
|
|
82
|
+
element_counts[element_type] = element_counts.get(element_type, 0) + 1
|
|
83
|
+
|
|
84
|
+
output_data(f"Classes: {element_counts.get('Class', 0)}")
|
|
85
|
+
output_data(f"Methods: {element_counts.get('Function', 0)}")
|
|
86
|
+
output_data(f"Fields: {element_counts.get('Variable', 0)}")
|
|
87
|
+
output_data(f"Imports: {element_counts.get('Import', 0)}")
|
|
88
|
+
output_data("Annotations: 0")
|