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,121 +1,120 @@
1
- #!/usr/bin/env python3
2
- # -*- coding: utf-8 -*-
3
- """
4
- Information Commands for CLI
5
-
6
- Commands that display information without requiring file analysis.
7
- """
8
-
9
- from abc import ABC, abstractmethod
10
- from argparse import Namespace
11
-
12
- from ..language_detector import detect_language_from_file, detector
13
- from ..output_manager import output_data, output_error, output_info, output_list
14
- from ..query_loader import query_loader
15
-
16
-
17
- class InfoCommand(ABC):
18
- """Base class for information commands that don't require file analysis."""
19
-
20
- def __init__(self, args: Namespace):
21
- self.args = args
22
-
23
- @abstractmethod
24
- def execute(self) -> int:
25
- """Execute the information command."""
26
- pass
27
-
28
-
29
- class ListQueriesCommand(InfoCommand):
30
- """Command to list available queries."""
31
-
32
- def execute(self) -> int:
33
- if self.args.language:
34
- language = self.args.language
35
- elif hasattr(self.args, "file_path") and self.args.file_path:
36
- language = detect_language_from_file(self.args.file_path)
37
- else:
38
- output_list("サポートされている言語:")
39
- for lang in query_loader.list_supported_languages():
40
- output_list(f" {lang}")
41
- queries = query_loader.list_queries_for_language(lang)
42
- for query_key in queries:
43
- description = (
44
- query_loader.get_query_description(lang, query_key)
45
- or "説明なし"
46
- )
47
- output_list(f" {query_key:<20} - {description}")
48
- return 0
49
-
50
- output_list(f"利用可能なクエリキー ({language}):")
51
- for query_key in query_loader.list_queries_for_language(language):
52
- description = (
53
- query_loader.get_query_description(language, query_key) or "説明なし"
54
- )
55
- output_list(f" {query_key:<20} - {description}")
56
- return 0
57
-
58
-
59
- class DescribeQueryCommand(InfoCommand):
60
- """Command to describe a specific query."""
61
-
62
- def execute(self) -> int:
63
- if self.args.language:
64
- language = self.args.language
65
- elif hasattr(self.args, "file_path") and self.args.file_path:
66
- language = detect_language_from_file(self.args.file_path)
67
- else:
68
- output_error(
69
- "ERROR: クエリ説明表示には--languageまたは対象ファイルの指定が必要です"
70
- )
71
- return 1
72
-
73
- try:
74
- query_description = query_loader.get_query_description(
75
- language, self.args.describe_query
76
- )
77
- query_content = query_loader.get_query(language, self.args.describe_query)
78
-
79
- if query_description is None or query_content is None:
80
- output_error(
81
- f"ERROR: クエリ '{self.args.describe_query}' が言語 '{language}' で見つかりません"
82
- )
83
- return 1
84
-
85
- output_info(
86
- f"クエリキー '{self.args.describe_query}' ({language}): {query_description}"
87
- )
88
- output_data(f"クエリ内容:\n{query_content}")
89
- except ValueError as e:
90
- output_error(f"ERROR: {e}")
91
- return 1
92
- return 0
93
-
94
-
95
- class ShowLanguagesCommand(InfoCommand):
96
- """Command to show supported languages."""
97
-
98
- def execute(self) -> int:
99
- output_list("サポートされている言語:")
100
- for language in detector.get_supported_languages():
101
- info = detector.get_language_info(language)
102
- extensions = ", ".join(info["extensions"][:5])
103
- if len(info["extensions"]) > 5:
104
- extensions += f", ... (他{len(info['extensions'])-5})"
105
- output_list(f" {language:<12} - 拡張子: {extensions}")
106
- return 0
107
-
108
-
109
- class ShowExtensionsCommand(InfoCommand):
110
- """Command to show supported extensions."""
111
-
112
- def execute(self) -> int:
113
- output_list("サポートされている拡張子:")
114
- supported_extensions = detector.get_supported_extensions()
115
- for i in range(0, len(supported_extensions), 8):
116
- line = " " + " ".join(
117
- f"{ext:<6}" for ext in supported_extensions[i : i + 8]
118
- )
119
- output_list(line)
120
- output_info(f"\n合計 {len(supported_extensions)} 個の拡張子をサポート")
121
- return 0
1
+ #!/usr/bin/env python3
2
+ """
3
+ Information Commands for CLI
4
+
5
+ Commands that display information without requiring file analysis.
6
+ """
7
+
8
+ from abc import ABC, abstractmethod
9
+ from argparse import Namespace
10
+
11
+ from ..language_detector import detect_language_from_file, detector
12
+ from ..output_manager import output_data, output_error, output_info, output_list
13
+ from ..query_loader import query_loader
14
+
15
+
16
+ class InfoCommand(ABC):
17
+ """Base class for information commands that don't require file analysis."""
18
+
19
+ def __init__(self, args: Namespace):
20
+ self.args = args
21
+
22
+ @abstractmethod
23
+ def execute(self) -> int:
24
+ """Execute the information command."""
25
+ pass
26
+
27
+
28
+ class ListQueriesCommand(InfoCommand):
29
+ """Command to list available queries."""
30
+
31
+ def execute(self) -> int:
32
+ if self.args.language:
33
+ language = self.args.language
34
+ elif hasattr(self.args, "file_path") and self.args.file_path:
35
+ language = detect_language_from_file(self.args.file_path)
36
+ else:
37
+ output_list("サポートされている言語:")
38
+ for lang in query_loader.list_supported_languages():
39
+ output_list(f" {lang}")
40
+ queries = query_loader.list_queries_for_language(lang)
41
+ for query_key in queries:
42
+ description = (
43
+ query_loader.get_query_description(lang, query_key)
44
+ or "説明なし"
45
+ )
46
+ output_list(f" {query_key:<20} - {description}")
47
+ return 0
48
+
49
+ output_list(f"利用可能なクエリキー ({language}):")
50
+ for query_key in query_loader.list_queries_for_language(language):
51
+ description = (
52
+ query_loader.get_query_description(language, query_key) or "説明なし"
53
+ )
54
+ output_list(f" {query_key:<20} - {description}")
55
+ return 0
56
+
57
+
58
+ class DescribeQueryCommand(InfoCommand):
59
+ """Command to describe a specific query."""
60
+
61
+ def execute(self) -> int:
62
+ if self.args.language:
63
+ language = self.args.language
64
+ elif hasattr(self.args, "file_path") and self.args.file_path:
65
+ language = detect_language_from_file(self.args.file_path)
66
+ else:
67
+ output_error(
68
+ "ERROR: クエリ説明表示には--languageまたは対象ファイルの指定が必要です"
69
+ )
70
+ return 1
71
+
72
+ try:
73
+ query_description = query_loader.get_query_description(
74
+ language, self.args.describe_query
75
+ )
76
+ query_content = query_loader.get_query(language, self.args.describe_query)
77
+
78
+ if query_description is None or query_content is None:
79
+ output_error(
80
+ f"ERROR: クエリ '{self.args.describe_query}' が言語 '{language}' で見つかりません"
81
+ )
82
+ return 1
83
+
84
+ output_info(
85
+ f"クエリキー '{self.args.describe_query}' ({language}): {query_description}"
86
+ )
87
+ output_data(f"クエリ内容:\n{query_content}")
88
+ except ValueError as e:
89
+ output_error(f"ERROR: {e}")
90
+ return 1
91
+ return 0
92
+
93
+
94
+ class ShowLanguagesCommand(InfoCommand):
95
+ """Command to show supported languages."""
96
+
97
+ def execute(self) -> int:
98
+ output_list("サポートされている言語:")
99
+ for language in detector.get_supported_languages():
100
+ info = detector.get_language_info(language)
101
+ extensions = ", ".join(info["extensions"][:5])
102
+ if len(info["extensions"]) > 5:
103
+ extensions += f", ... (他{len(info['extensions'])-5}個)"
104
+ output_list(f" {language:<12} - 拡張子: {extensions}")
105
+ return 0
106
+
107
+
108
+ class ShowExtensionsCommand(InfoCommand):
109
+ """Command to show supported extensions."""
110
+
111
+ def execute(self) -> int:
112
+ output_list("サポートされている拡張子:")
113
+ supported_extensions = detector.get_supported_extensions()
114
+ for i in range(0, len(supported_extensions), 8):
115
+ line = " " + " ".join(
116
+ f"{ext:<6}" for ext in supported_extensions[i : i + 8]
117
+ )
118
+ output_list(line)
119
+ output_info(f"\n合計 {len(supported_extensions)} 個の拡張子をサポート")
120
+ return 0