tree-sitter-analyzer 0.9.1__py3-none-any.whl → 0.9.3__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.

Files changed (64) hide show
  1. tree_sitter_analyzer/__init__.py +132 -132
  2. tree_sitter_analyzer/__main__.py +11 -11
  3. tree_sitter_analyzer/api.py +533 -533
  4. tree_sitter_analyzer/cli/__init__.py +39 -39
  5. tree_sitter_analyzer/cli/__main__.py +12 -12
  6. tree_sitter_analyzer/cli/commands/__init__.py +26 -26
  7. tree_sitter_analyzer/cli/commands/advanced_command.py +88 -88
  8. tree_sitter_analyzer/cli/commands/base_command.py +181 -178
  9. tree_sitter_analyzer/cli/commands/structure_command.py +138 -138
  10. tree_sitter_analyzer/cli/commands/summary_command.py +101 -101
  11. tree_sitter_analyzer/cli_main.py +7 -3
  12. tree_sitter_analyzer/core/__init__.py +15 -15
  13. tree_sitter_analyzer/core/analysis_engine.py +91 -87
  14. tree_sitter_analyzer/core/cache_service.py +320 -320
  15. tree_sitter_analyzer/core/engine.py +566 -566
  16. tree_sitter_analyzer/core/parser.py +293 -293
  17. tree_sitter_analyzer/encoding_utils.py +459 -459
  18. tree_sitter_analyzer/file_handler.py +210 -210
  19. tree_sitter_analyzer/formatters/__init__.py +1 -1
  20. tree_sitter_analyzer/formatters/base_formatter.py +167 -167
  21. tree_sitter_analyzer/formatters/formatter_factory.py +78 -78
  22. tree_sitter_analyzer/formatters/java_formatter.py +18 -18
  23. tree_sitter_analyzer/formatters/python_formatter.py +19 -19
  24. tree_sitter_analyzer/interfaces/__init__.py +9 -9
  25. tree_sitter_analyzer/interfaces/cli.py +528 -528
  26. tree_sitter_analyzer/interfaces/cli_adapter.py +344 -343
  27. tree_sitter_analyzer/interfaces/mcp_adapter.py +206 -206
  28. tree_sitter_analyzer/language_detector.py +53 -53
  29. tree_sitter_analyzer/languages/__init__.py +10 -10
  30. tree_sitter_analyzer/languages/java_plugin.py +1 -1
  31. tree_sitter_analyzer/languages/javascript_plugin.py +446 -446
  32. tree_sitter_analyzer/languages/python_plugin.py +755 -755
  33. tree_sitter_analyzer/mcp/__init__.py +34 -45
  34. tree_sitter_analyzer/mcp/resources/__init__.py +44 -44
  35. tree_sitter_analyzer/mcp/resources/code_file_resource.py +209 -209
  36. tree_sitter_analyzer/mcp/server.py +623 -568
  37. tree_sitter_analyzer/mcp/tools/__init__.py +30 -30
  38. tree_sitter_analyzer/mcp/tools/analyze_scale_tool.py +681 -673
  39. tree_sitter_analyzer/mcp/tools/analyze_scale_tool_cli_compatible.py +247 -247
  40. tree_sitter_analyzer/mcp/tools/base_tool.py +54 -54
  41. tree_sitter_analyzer/mcp/tools/read_partial_tool.py +310 -308
  42. tree_sitter_analyzer/mcp/tools/table_format_tool.py +386 -379
  43. tree_sitter_analyzer/mcp/tools/universal_analyze_tool.py +563 -559
  44. tree_sitter_analyzer/mcp/utils/__init__.py +107 -107
  45. tree_sitter_analyzer/models.py +10 -10
  46. tree_sitter_analyzer/output_manager.py +253 -253
  47. tree_sitter_analyzer/plugins/__init__.py +280 -280
  48. tree_sitter_analyzer/plugins/base.py +529 -529
  49. tree_sitter_analyzer/plugins/manager.py +379 -379
  50. tree_sitter_analyzer/project_detector.py +330 -317
  51. tree_sitter_analyzer/queries/__init__.py +26 -26
  52. tree_sitter_analyzer/queries/java.py +391 -391
  53. tree_sitter_analyzer/queries/javascript.py +148 -148
  54. tree_sitter_analyzer/queries/python.py +285 -285
  55. tree_sitter_analyzer/queries/typescript.py +229 -229
  56. tree_sitter_analyzer/query_loader.py +257 -257
  57. tree_sitter_analyzer/security/boundary_manager.py +57 -51
  58. tree_sitter_analyzer/security/validator.py +246 -241
  59. tree_sitter_analyzer/utils.py +294 -277
  60. {tree_sitter_analyzer-0.9.1.dist-info → tree_sitter_analyzer-0.9.3.dist-info}/METADATA +13 -13
  61. tree_sitter_analyzer-0.9.3.dist-info/RECORD +77 -0
  62. {tree_sitter_analyzer-0.9.1.dist-info → tree_sitter_analyzer-0.9.3.dist-info}/entry_points.txt +1 -0
  63. tree_sitter_analyzer-0.9.1.dist-info/RECORD +0 -77
  64. {tree_sitter_analyzer-0.9.1.dist-info → tree_sitter_analyzer-0.9.3.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")