tree-sitter-analyzer 0.2.0__py3-none-any.whl → 0.3.0__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 (78) hide show
  1. tree_sitter_analyzer/__init__.py +133 -121
  2. tree_sitter_analyzer/__main__.py +11 -12
  3. tree_sitter_analyzer/api.py +531 -539
  4. tree_sitter_analyzer/cli/__init__.py +39 -39
  5. tree_sitter_analyzer/cli/__main__.py +12 -13
  6. tree_sitter_analyzer/cli/commands/__init__.py +26 -27
  7. tree_sitter_analyzer/cli/commands/advanced_command.py +88 -88
  8. tree_sitter_analyzer/cli/commands/base_command.py +160 -155
  9. tree_sitter_analyzer/cli/commands/default_command.py +18 -19
  10. tree_sitter_analyzer/cli/commands/partial_read_command.py +141 -133
  11. tree_sitter_analyzer/cli/commands/query_command.py +81 -82
  12. tree_sitter_analyzer/cli/commands/structure_command.py +138 -121
  13. tree_sitter_analyzer/cli/commands/summary_command.py +101 -93
  14. tree_sitter_analyzer/cli/commands/table_command.py +232 -233
  15. tree_sitter_analyzer/cli/info_commands.py +120 -121
  16. tree_sitter_analyzer/cli_main.py +277 -276
  17. tree_sitter_analyzer/core/__init__.py +15 -20
  18. tree_sitter_analyzer/core/analysis_engine.py +591 -574
  19. tree_sitter_analyzer/core/cache_service.py +320 -330
  20. tree_sitter_analyzer/core/engine.py +557 -560
  21. tree_sitter_analyzer/core/parser.py +293 -288
  22. tree_sitter_analyzer/core/query.py +494 -502
  23. tree_sitter_analyzer/encoding_utils.py +458 -460
  24. tree_sitter_analyzer/exceptions.py +337 -340
  25. tree_sitter_analyzer/file_handler.py +217 -222
  26. tree_sitter_analyzer/formatters/__init__.py +1 -1
  27. tree_sitter_analyzer/formatters/base_formatter.py +167 -168
  28. tree_sitter_analyzer/formatters/formatter_factory.py +78 -74
  29. tree_sitter_analyzer/formatters/java_formatter.py +287 -270
  30. tree_sitter_analyzer/formatters/python_formatter.py +255 -235
  31. tree_sitter_analyzer/interfaces/__init__.py +9 -10
  32. tree_sitter_analyzer/interfaces/cli.py +528 -557
  33. tree_sitter_analyzer/interfaces/cli_adapter.py +322 -319
  34. tree_sitter_analyzer/interfaces/mcp_adapter.py +180 -170
  35. tree_sitter_analyzer/interfaces/mcp_server.py +405 -416
  36. tree_sitter_analyzer/java_analyzer.py +218 -219
  37. tree_sitter_analyzer/language_detector.py +398 -400
  38. tree_sitter_analyzer/language_loader.py +224 -228
  39. tree_sitter_analyzer/languages/__init__.py +10 -11
  40. tree_sitter_analyzer/languages/java_plugin.py +1129 -1113
  41. tree_sitter_analyzer/languages/python_plugin.py +737 -712
  42. tree_sitter_analyzer/mcp/__init__.py +31 -32
  43. tree_sitter_analyzer/mcp/resources/__init__.py +44 -47
  44. tree_sitter_analyzer/mcp/resources/code_file_resource.py +212 -213
  45. tree_sitter_analyzer/mcp/resources/project_stats_resource.py +560 -550
  46. tree_sitter_analyzer/mcp/server.py +333 -345
  47. tree_sitter_analyzer/mcp/tools/__init__.py +30 -31
  48. tree_sitter_analyzer/mcp/tools/analyze_scale_tool.py +621 -557
  49. tree_sitter_analyzer/mcp/tools/analyze_scale_tool_cli_compatible.py +242 -245
  50. tree_sitter_analyzer/mcp/tools/base_tool.py +54 -55
  51. tree_sitter_analyzer/mcp/tools/read_partial_tool.py +300 -302
  52. tree_sitter_analyzer/mcp/tools/table_format_tool.py +362 -359
  53. tree_sitter_analyzer/mcp/tools/universal_analyze_tool.py +543 -476
  54. tree_sitter_analyzer/mcp/utils/__init__.py +105 -106
  55. tree_sitter_analyzer/mcp/utils/error_handler.py +549 -549
  56. tree_sitter_analyzer/models.py +470 -481
  57. tree_sitter_analyzer/output_manager.py +261 -264
  58. tree_sitter_analyzer/plugins/__init__.py +333 -334
  59. tree_sitter_analyzer/plugins/base.py +477 -446
  60. tree_sitter_analyzer/plugins/java_plugin.py +608 -625
  61. tree_sitter_analyzer/plugins/javascript_plugin.py +446 -439
  62. tree_sitter_analyzer/plugins/manager.py +362 -355
  63. tree_sitter_analyzer/plugins/plugin_loader.py +85 -83
  64. tree_sitter_analyzer/plugins/python_plugin.py +606 -598
  65. tree_sitter_analyzer/plugins/registry.py +374 -366
  66. tree_sitter_analyzer/queries/__init__.py +26 -27
  67. tree_sitter_analyzer/queries/java.py +391 -394
  68. tree_sitter_analyzer/queries/javascript.py +148 -149
  69. tree_sitter_analyzer/queries/python.py +285 -286
  70. tree_sitter_analyzer/queries/typescript.py +229 -230
  71. tree_sitter_analyzer/query_loader.py +254 -260
  72. tree_sitter_analyzer/table_formatter.py +468 -448
  73. tree_sitter_analyzer/utils.py +277 -277
  74. {tree_sitter_analyzer-0.2.0.dist-info → tree_sitter_analyzer-0.3.0.dist-info}/METADATA +21 -6
  75. tree_sitter_analyzer-0.3.0.dist-info/RECORD +77 -0
  76. tree_sitter_analyzer-0.2.0.dist-info/RECORD +0 -77
  77. {tree_sitter_analyzer-0.2.0.dist-info → tree_sitter_analyzer-0.3.0.dist-info}/WHEEL +0 -0
  78. {tree_sitter_analyzer-0.2.0.dist-info → tree_sitter_analyzer-0.3.0.dist-info}/entry_points.txt +0 -0
@@ -1,39 +1,39 @@
1
- #!/usr/bin/env python3
2
- # -*- coding: utf-8 -*-
3
- """
4
- CLI Package
5
-
6
- Command-line interface components using the Command Pattern.
7
- """
8
-
9
- from .info_commands import (
10
- DescribeQueryCommand,
11
- InfoCommand,
12
- ListQueriesCommand,
13
- ShowExtensionsCommand,
14
- ShowLanguagesCommand,
15
- )
16
-
17
- # Modern framework imports
18
- try:
19
- from ..core.analysis_engine import get_analysis_engine
20
- from ..query_loader import QueryLoader
21
- from ..cli_main import main
22
- query_loader = QueryLoader()
23
- except ImportError:
24
- # Minimal fallback for import safety
25
- get_analysis_engine = None
26
- main = None
27
- query_loader = None
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
26
+ main = None
27
+ query_loader = None
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,13 +1,12 @@
1
- #!/usr/bin/env python3
2
- # -*- coding: utf-8 -*-
3
- """
4
- CLI Module Entry Point
5
-
6
- This module allows the CLI to be executed as a module with:
7
- python -m tree_sitter_analyzer.cli
8
- """
9
-
10
- from ..cli_main import main
11
-
12
- if __name__ == "__main__":
13
- 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,27 +1,26 @@
1
- #!/usr/bin/env python3
2
- # -*- coding: utf-8 -*-
3
- """
4
- CLI Commands Package
5
-
6
- This package contains all command implementations for the CLI interface.
7
- """
8
-
9
- from .advanced_command import AdvancedCommand
10
- from .base_command import BaseCommand
11
- from .default_command import DefaultCommand
12
- from .partial_read_command import PartialReadCommand
13
- from .query_command import QueryCommand
14
- from .structure_command import StructureCommand
15
- from .summary_command import SummaryCommand
16
- from .table_command import TableCommand
17
-
18
- __all__ = [
19
- "BaseCommand",
20
- "AdvancedCommand",
21
- "DefaultCommand",
22
- "PartialReadCommand",
23
- "QueryCommand",
24
- "StructureCommand",
25
- "SummaryCommand",
26
- "TableCommand",
27
- ]
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
- # -*- coding: utf-8 -*-
3
- """
4
- Advanced Command
5
-
6
- Handles advanced analysis functionality.
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(f"Package: (default)")
77
- output_data(f"Lines: {analysis_result.line_count}")
78
-
79
- element_counts = {}
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(f"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 = {}
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")