tree-sitter-analyzer 1.9.17.1__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.
- tree_sitter_analyzer/__init__.py +132 -0
- tree_sitter_analyzer/__main__.py +11 -0
- tree_sitter_analyzer/api.py +853 -0
- tree_sitter_analyzer/cli/__init__.py +39 -0
- tree_sitter_analyzer/cli/__main__.py +12 -0
- tree_sitter_analyzer/cli/argument_validator.py +89 -0
- tree_sitter_analyzer/cli/commands/__init__.py +26 -0
- tree_sitter_analyzer/cli/commands/advanced_command.py +226 -0
- tree_sitter_analyzer/cli/commands/base_command.py +181 -0
- tree_sitter_analyzer/cli/commands/default_command.py +18 -0
- tree_sitter_analyzer/cli/commands/find_and_grep_cli.py +188 -0
- tree_sitter_analyzer/cli/commands/list_files_cli.py +133 -0
- tree_sitter_analyzer/cli/commands/partial_read_command.py +139 -0
- tree_sitter_analyzer/cli/commands/query_command.py +109 -0
- tree_sitter_analyzer/cli/commands/search_content_cli.py +161 -0
- tree_sitter_analyzer/cli/commands/structure_command.py +156 -0
- tree_sitter_analyzer/cli/commands/summary_command.py +116 -0
- tree_sitter_analyzer/cli/commands/table_command.py +414 -0
- tree_sitter_analyzer/cli/info_commands.py +124 -0
- tree_sitter_analyzer/cli_main.py +472 -0
- tree_sitter_analyzer/constants.py +85 -0
- tree_sitter_analyzer/core/__init__.py +15 -0
- tree_sitter_analyzer/core/analysis_engine.py +580 -0
- tree_sitter_analyzer/core/cache_service.py +333 -0
- tree_sitter_analyzer/core/engine.py +585 -0
- tree_sitter_analyzer/core/parser.py +293 -0
- tree_sitter_analyzer/core/query.py +605 -0
- tree_sitter_analyzer/core/query_filter.py +200 -0
- tree_sitter_analyzer/core/query_service.py +340 -0
- tree_sitter_analyzer/encoding_utils.py +530 -0
- tree_sitter_analyzer/exceptions.py +747 -0
- tree_sitter_analyzer/file_handler.py +246 -0
- tree_sitter_analyzer/formatters/__init__.py +1 -0
- tree_sitter_analyzer/formatters/base_formatter.py +201 -0
- tree_sitter_analyzer/formatters/csharp_formatter.py +367 -0
- tree_sitter_analyzer/formatters/formatter_config.py +197 -0
- tree_sitter_analyzer/formatters/formatter_factory.py +84 -0
- tree_sitter_analyzer/formatters/formatter_registry.py +377 -0
- tree_sitter_analyzer/formatters/formatter_selector.py +96 -0
- tree_sitter_analyzer/formatters/go_formatter.py +368 -0
- tree_sitter_analyzer/formatters/html_formatter.py +498 -0
- tree_sitter_analyzer/formatters/java_formatter.py +423 -0
- tree_sitter_analyzer/formatters/javascript_formatter.py +611 -0
- tree_sitter_analyzer/formatters/kotlin_formatter.py +268 -0
- tree_sitter_analyzer/formatters/language_formatter_factory.py +123 -0
- tree_sitter_analyzer/formatters/legacy_formatter_adapters.py +228 -0
- tree_sitter_analyzer/formatters/markdown_formatter.py +725 -0
- tree_sitter_analyzer/formatters/php_formatter.py +301 -0
- tree_sitter_analyzer/formatters/python_formatter.py +830 -0
- tree_sitter_analyzer/formatters/ruby_formatter.py +278 -0
- tree_sitter_analyzer/formatters/rust_formatter.py +233 -0
- tree_sitter_analyzer/formatters/sql_formatter_wrapper.py +689 -0
- tree_sitter_analyzer/formatters/sql_formatters.py +536 -0
- tree_sitter_analyzer/formatters/typescript_formatter.py +543 -0
- tree_sitter_analyzer/formatters/yaml_formatter.py +462 -0
- tree_sitter_analyzer/interfaces/__init__.py +9 -0
- tree_sitter_analyzer/interfaces/cli.py +535 -0
- tree_sitter_analyzer/interfaces/cli_adapter.py +359 -0
- tree_sitter_analyzer/interfaces/mcp_adapter.py +224 -0
- tree_sitter_analyzer/interfaces/mcp_server.py +428 -0
- tree_sitter_analyzer/language_detector.py +553 -0
- tree_sitter_analyzer/language_loader.py +271 -0
- tree_sitter_analyzer/languages/__init__.py +10 -0
- tree_sitter_analyzer/languages/csharp_plugin.py +1076 -0
- tree_sitter_analyzer/languages/css_plugin.py +449 -0
- tree_sitter_analyzer/languages/go_plugin.py +836 -0
- tree_sitter_analyzer/languages/html_plugin.py +496 -0
- tree_sitter_analyzer/languages/java_plugin.py +1299 -0
- tree_sitter_analyzer/languages/javascript_plugin.py +1622 -0
- tree_sitter_analyzer/languages/kotlin_plugin.py +656 -0
- tree_sitter_analyzer/languages/markdown_plugin.py +1928 -0
- tree_sitter_analyzer/languages/php_plugin.py +862 -0
- tree_sitter_analyzer/languages/python_plugin.py +1636 -0
- tree_sitter_analyzer/languages/ruby_plugin.py +757 -0
- tree_sitter_analyzer/languages/rust_plugin.py +673 -0
- tree_sitter_analyzer/languages/sql_plugin.py +2444 -0
- tree_sitter_analyzer/languages/typescript_plugin.py +1892 -0
- tree_sitter_analyzer/languages/yaml_plugin.py +695 -0
- tree_sitter_analyzer/legacy_table_formatter.py +860 -0
- tree_sitter_analyzer/mcp/__init__.py +34 -0
- tree_sitter_analyzer/mcp/resources/__init__.py +43 -0
- tree_sitter_analyzer/mcp/resources/code_file_resource.py +208 -0
- tree_sitter_analyzer/mcp/resources/project_stats_resource.py +586 -0
- tree_sitter_analyzer/mcp/server.py +869 -0
- tree_sitter_analyzer/mcp/tools/__init__.py +28 -0
- tree_sitter_analyzer/mcp/tools/analyze_scale_tool.py +779 -0
- tree_sitter_analyzer/mcp/tools/analyze_scale_tool_cli_compatible.py +291 -0
- tree_sitter_analyzer/mcp/tools/base_tool.py +139 -0
- tree_sitter_analyzer/mcp/tools/fd_rg_utils.py +816 -0
- tree_sitter_analyzer/mcp/tools/find_and_grep_tool.py +686 -0
- tree_sitter_analyzer/mcp/tools/list_files_tool.py +413 -0
- tree_sitter_analyzer/mcp/tools/output_format_validator.py +148 -0
- tree_sitter_analyzer/mcp/tools/query_tool.py +443 -0
- tree_sitter_analyzer/mcp/tools/read_partial_tool.py +464 -0
- tree_sitter_analyzer/mcp/tools/search_content_tool.py +836 -0
- tree_sitter_analyzer/mcp/tools/table_format_tool.py +572 -0
- tree_sitter_analyzer/mcp/tools/universal_analyze_tool.py +653 -0
- tree_sitter_analyzer/mcp/utils/__init__.py +113 -0
- tree_sitter_analyzer/mcp/utils/error_handler.py +569 -0
- tree_sitter_analyzer/mcp/utils/file_output_factory.py +217 -0
- tree_sitter_analyzer/mcp/utils/file_output_manager.py +322 -0
- tree_sitter_analyzer/mcp/utils/gitignore_detector.py +358 -0
- tree_sitter_analyzer/mcp/utils/path_resolver.py +414 -0
- tree_sitter_analyzer/mcp/utils/search_cache.py +343 -0
- tree_sitter_analyzer/models.py +840 -0
- tree_sitter_analyzer/mypy_current_errors.txt +2 -0
- tree_sitter_analyzer/output_manager.py +255 -0
- tree_sitter_analyzer/platform_compat/__init__.py +3 -0
- tree_sitter_analyzer/platform_compat/adapter.py +324 -0
- tree_sitter_analyzer/platform_compat/compare.py +224 -0
- tree_sitter_analyzer/platform_compat/detector.py +67 -0
- tree_sitter_analyzer/platform_compat/fixtures.py +228 -0
- tree_sitter_analyzer/platform_compat/profiles.py +217 -0
- tree_sitter_analyzer/platform_compat/record.py +55 -0
- tree_sitter_analyzer/platform_compat/recorder.py +155 -0
- tree_sitter_analyzer/platform_compat/report.py +92 -0
- tree_sitter_analyzer/plugins/__init__.py +280 -0
- tree_sitter_analyzer/plugins/base.py +647 -0
- tree_sitter_analyzer/plugins/manager.py +384 -0
- tree_sitter_analyzer/project_detector.py +328 -0
- tree_sitter_analyzer/queries/__init__.py +27 -0
- tree_sitter_analyzer/queries/csharp.py +216 -0
- tree_sitter_analyzer/queries/css.py +615 -0
- tree_sitter_analyzer/queries/go.py +275 -0
- tree_sitter_analyzer/queries/html.py +543 -0
- tree_sitter_analyzer/queries/java.py +402 -0
- tree_sitter_analyzer/queries/javascript.py +724 -0
- tree_sitter_analyzer/queries/kotlin.py +192 -0
- tree_sitter_analyzer/queries/markdown.py +258 -0
- tree_sitter_analyzer/queries/php.py +95 -0
- tree_sitter_analyzer/queries/python.py +859 -0
- tree_sitter_analyzer/queries/ruby.py +92 -0
- tree_sitter_analyzer/queries/rust.py +223 -0
- tree_sitter_analyzer/queries/sql.py +555 -0
- tree_sitter_analyzer/queries/typescript.py +871 -0
- tree_sitter_analyzer/queries/yaml.py +236 -0
- tree_sitter_analyzer/query_loader.py +272 -0
- tree_sitter_analyzer/security/__init__.py +22 -0
- tree_sitter_analyzer/security/boundary_manager.py +277 -0
- tree_sitter_analyzer/security/regex_checker.py +297 -0
- tree_sitter_analyzer/security/validator.py +599 -0
- tree_sitter_analyzer/table_formatter.py +782 -0
- tree_sitter_analyzer/utils/__init__.py +53 -0
- tree_sitter_analyzer/utils/logging.py +433 -0
- tree_sitter_analyzer/utils/tree_sitter_compat.py +289 -0
- tree_sitter_analyzer-1.9.17.1.dist-info/METADATA +485 -0
- tree_sitter_analyzer-1.9.17.1.dist-info/RECORD +149 -0
- tree_sitter_analyzer-1.9.17.1.dist-info/WHEEL +4 -0
- tree_sitter_analyzer-1.9.17.1.dist-info/entry_points.txt +25 -0
|
@@ -0,0 +1,271 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
"""
|
|
3
|
+
Dynamic Language Loader
|
|
4
|
+
|
|
5
|
+
Handles loading of Tree-sitter language parsers with efficient caching
|
|
6
|
+
and lazy loading for optimal performance.
|
|
7
|
+
"""
|
|
8
|
+
|
|
9
|
+
import importlib
|
|
10
|
+
from typing import TYPE_CHECKING, Any, Optional
|
|
11
|
+
|
|
12
|
+
if TYPE_CHECKING:
|
|
13
|
+
from tree_sitter import Language, Parser
|
|
14
|
+
|
|
15
|
+
try:
|
|
16
|
+
import tree_sitter
|
|
17
|
+
|
|
18
|
+
TREE_SITTER_AVAILABLE = True
|
|
19
|
+
except ImportError:
|
|
20
|
+
TREE_SITTER_AVAILABLE = False
|
|
21
|
+
|
|
22
|
+
from .utils import log_warning
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
class LanguageLoader:
|
|
26
|
+
"""Optimized language loader with enhanced caching"""
|
|
27
|
+
|
|
28
|
+
# 対応言語とモジュールのマッピング(最適化:frozendict使用を検討)
|
|
29
|
+
LANGUAGE_MODULES = {
|
|
30
|
+
"java": "tree_sitter_java",
|
|
31
|
+
"javascript": "tree_sitter_javascript",
|
|
32
|
+
"typescript": "tree_sitter_typescript",
|
|
33
|
+
"tsx": "tree_sitter_typescript",
|
|
34
|
+
"python": "tree_sitter_python",
|
|
35
|
+
"c": "tree_sitter_c",
|
|
36
|
+
"cpp": "tree_sitter_cpp",
|
|
37
|
+
"rust": "tree_sitter_rust",
|
|
38
|
+
"go": "tree_sitter_go",
|
|
39
|
+
"markdown": "tree_sitter_markdown",
|
|
40
|
+
"sql": "tree_sitter_sql",
|
|
41
|
+
"csharp": "tree_sitter_c_sharp",
|
|
42
|
+
"cs": "tree_sitter_c_sharp", # C# alias
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
# TypeScript特別処理(TypeScriptとTSX)
|
|
46
|
+
TYPESCRIPT_DIALECTS = {"typescript": "typescript", "tsx": "tsx"}
|
|
47
|
+
|
|
48
|
+
@property
|
|
49
|
+
def SUPPORTED_LANGUAGES(self) -> list:
|
|
50
|
+
"""サポートされている言語のリストを取得するプロパティ"""
|
|
51
|
+
return list(self.LANGUAGE_MODULES.keys())
|
|
52
|
+
|
|
53
|
+
def __init__(self) -> None:
|
|
54
|
+
"""ローダーを初期化(最適化:事前キャッシュ容量指定)"""
|
|
55
|
+
self._loaded_languages: dict[str, Language] = {}
|
|
56
|
+
self._loaded_modules: dict[str, Any] = {}
|
|
57
|
+
self._availability_cache: dict[str, bool] = {}
|
|
58
|
+
self._parser_cache: dict[str, Parser] = {} # パーサーキャッシュ追加
|
|
59
|
+
self._unavailable_languages: set[str] = set() # 利用不可言語の記録
|
|
60
|
+
|
|
61
|
+
def is_language_available(self, language: str) -> bool:
|
|
62
|
+
"""
|
|
63
|
+
指定された言語のライブラリが利用可能かチェック
|
|
64
|
+
|
|
65
|
+
Args:
|
|
66
|
+
language: 言語名
|
|
67
|
+
|
|
68
|
+
Returns:
|
|
69
|
+
利用可能性
|
|
70
|
+
"""
|
|
71
|
+
# 事前に利用不可とわかっている言語は即座に返す
|
|
72
|
+
if language in self._unavailable_languages:
|
|
73
|
+
return False
|
|
74
|
+
|
|
75
|
+
if language in self._availability_cache:
|
|
76
|
+
return self._availability_cache[language]
|
|
77
|
+
|
|
78
|
+
if not TREE_SITTER_AVAILABLE:
|
|
79
|
+
self._availability_cache[language] = False
|
|
80
|
+
self._unavailable_languages.add(language)
|
|
81
|
+
return False
|
|
82
|
+
|
|
83
|
+
module_name = self.LANGUAGE_MODULES.get(language)
|
|
84
|
+
if not module_name:
|
|
85
|
+
self._availability_cache[language] = False
|
|
86
|
+
self._unavailable_languages.add(language)
|
|
87
|
+
return False
|
|
88
|
+
|
|
89
|
+
try:
|
|
90
|
+
importlib.import_module(module_name)
|
|
91
|
+
self._availability_cache[language] = True
|
|
92
|
+
return True
|
|
93
|
+
except ImportError:
|
|
94
|
+
self._availability_cache[language] = False
|
|
95
|
+
self._unavailable_languages.add(language)
|
|
96
|
+
return False
|
|
97
|
+
|
|
98
|
+
def load_language(self, language: str) -> Any | None:
|
|
99
|
+
"""Load and return a tree-sitter Language object for the specified language"""
|
|
100
|
+
if not TREE_SITTER_AVAILABLE:
|
|
101
|
+
log_warning("Tree-sitter is not available")
|
|
102
|
+
return None
|
|
103
|
+
|
|
104
|
+
# キャッシュから取得(最適化)
|
|
105
|
+
if language in self._loaded_languages:
|
|
106
|
+
return self._loaded_languages[language]
|
|
107
|
+
|
|
108
|
+
if not self.is_language_available(language):
|
|
109
|
+
return None
|
|
110
|
+
|
|
111
|
+
try:
|
|
112
|
+
module_name = self.LANGUAGE_MODULES[language]
|
|
113
|
+
|
|
114
|
+
# モジュールキャッシュから取得または新規読み込み
|
|
115
|
+
if module_name not in self._loaded_modules:
|
|
116
|
+
self._loaded_modules[module_name] = importlib.import_module(module_name)
|
|
117
|
+
|
|
118
|
+
module = self._loaded_modules[module_name]
|
|
119
|
+
|
|
120
|
+
# TypeScript特別処理
|
|
121
|
+
if language in self.TYPESCRIPT_DIALECTS:
|
|
122
|
+
dialect = self.TYPESCRIPT_DIALECTS[language]
|
|
123
|
+
if hasattr(module, "language_typescript") and dialect == "typescript":
|
|
124
|
+
language_func = module.language_typescript
|
|
125
|
+
elif hasattr(module, "language_tsx") and dialect == "tsx":
|
|
126
|
+
language_func = module.language_tsx
|
|
127
|
+
elif hasattr(module, "language"):
|
|
128
|
+
language_func = module.language
|
|
129
|
+
else:
|
|
130
|
+
return None
|
|
131
|
+
else:
|
|
132
|
+
if hasattr(module, "language"):
|
|
133
|
+
language_func = module.language
|
|
134
|
+
else:
|
|
135
|
+
return None
|
|
136
|
+
|
|
137
|
+
# Language オブジェクト作成(新しいAPI対応)
|
|
138
|
+
caps_or_lang = language_func()
|
|
139
|
+
|
|
140
|
+
# 新しいtree-sitter APIでは、language_func()が直接Languageオブジェクトを返す
|
|
141
|
+
# 古いAPIではPyCapsuleを返すため、適切に処理する
|
|
142
|
+
if hasattr(caps_or_lang, "__class__") and "Language" in str(
|
|
143
|
+
type(caps_or_lang)
|
|
144
|
+
):
|
|
145
|
+
# 既にLanguageオブジェクトの場合はそのまま使用
|
|
146
|
+
tree_sitter_language = caps_or_lang
|
|
147
|
+
else:
|
|
148
|
+
# PyCapsuleの場合は、Languageオブジェクトを作成
|
|
149
|
+
try:
|
|
150
|
+
# Use modern tree-sitter API - PyCapsule should be passed to Language constructor
|
|
151
|
+
tree_sitter_language = tree_sitter.Language(caps_or_lang)
|
|
152
|
+
except Exception as e:
|
|
153
|
+
log_warning(f"Failed to create Language object for {language}: {e}")
|
|
154
|
+
return None
|
|
155
|
+
|
|
156
|
+
self._loaded_languages[language] = tree_sitter_language
|
|
157
|
+
return tree_sitter_language
|
|
158
|
+
|
|
159
|
+
except (ImportError, AttributeError, Exception) as e:
|
|
160
|
+
log_warning(f"Failed to load language '{language}': {e}")
|
|
161
|
+
self._unavailable_languages.add(language)
|
|
162
|
+
return None
|
|
163
|
+
|
|
164
|
+
def create_parser_safely(self, language: str) -> Optional["Parser"]:
|
|
165
|
+
"""Create a parser for the specified language with error handling"""
|
|
166
|
+
if not TREE_SITTER_AVAILABLE:
|
|
167
|
+
log_warning("Tree-sitter is not available")
|
|
168
|
+
return None
|
|
169
|
+
|
|
170
|
+
# パーサーキャッシュから取得
|
|
171
|
+
if language in self._parser_cache:
|
|
172
|
+
return self._parser_cache[language]
|
|
173
|
+
|
|
174
|
+
tree_sitter_language = self.load_language(language)
|
|
175
|
+
if tree_sitter_language is None:
|
|
176
|
+
return None
|
|
177
|
+
|
|
178
|
+
try:
|
|
179
|
+
# Create parser and set language properly
|
|
180
|
+
parser = tree_sitter.Parser()
|
|
181
|
+
|
|
182
|
+
# Ensure we have a proper Language object
|
|
183
|
+
if not hasattr(tree_sitter_language, "__class__") or "Language" not in str(
|
|
184
|
+
type(tree_sitter_language)
|
|
185
|
+
):
|
|
186
|
+
log_warning(
|
|
187
|
+
f"Invalid language object for {language}: {type(tree_sitter_language)}"
|
|
188
|
+
)
|
|
189
|
+
return None
|
|
190
|
+
|
|
191
|
+
# Set language using the preferred method
|
|
192
|
+
if hasattr(parser, "set_language"):
|
|
193
|
+
parser.set_language(tree_sitter_language)
|
|
194
|
+
elif hasattr(parser, "language"):
|
|
195
|
+
parser.language = tree_sitter_language
|
|
196
|
+
else:
|
|
197
|
+
# Try constructor approach as last resort
|
|
198
|
+
try:
|
|
199
|
+
parser = tree_sitter.Parser(tree_sitter_language)
|
|
200
|
+
except Exception as e:
|
|
201
|
+
log_warning(
|
|
202
|
+
f"Failed to create parser with language constructor for {language}: {e}"
|
|
203
|
+
)
|
|
204
|
+
return None
|
|
205
|
+
|
|
206
|
+
# Cache and return
|
|
207
|
+
self._parser_cache[language] = parser
|
|
208
|
+
return parser
|
|
209
|
+
except Exception as e:
|
|
210
|
+
log_warning(f"Failed to create parser for '{language}': {e}")
|
|
211
|
+
return None
|
|
212
|
+
|
|
213
|
+
def create_parser(self, language: str) -> Optional["Parser"]:
|
|
214
|
+
"""Create a parser for the specified language (alias for create_parser_safely)"""
|
|
215
|
+
return self.create_parser_safely(language)
|
|
216
|
+
|
|
217
|
+
def get_supported_languages(self) -> list:
|
|
218
|
+
"""
|
|
219
|
+
サポートされている言語のリストを取得(最適化:結果キャッシュ)
|
|
220
|
+
|
|
221
|
+
Returns:
|
|
222
|
+
サポート言語のリスト
|
|
223
|
+
"""
|
|
224
|
+
# 利用可能な言語のみを返す(効率化)
|
|
225
|
+
return [
|
|
226
|
+
lang
|
|
227
|
+
for lang in self.LANGUAGE_MODULES.keys()
|
|
228
|
+
if lang not in self._unavailable_languages
|
|
229
|
+
and self.is_language_available(lang)
|
|
230
|
+
]
|
|
231
|
+
|
|
232
|
+
def clear_cache(self) -> None:
|
|
233
|
+
"""キャッシュをクリア(メモリ管理用)"""
|
|
234
|
+
self._loaded_languages.clear()
|
|
235
|
+
self._loaded_modules.clear()
|
|
236
|
+
self._availability_cache.clear()
|
|
237
|
+
self._parser_cache.clear()
|
|
238
|
+
self._unavailable_languages.clear()
|
|
239
|
+
# 可用性キャッシュもクリア
|
|
240
|
+
self._availability_cache.clear()
|
|
241
|
+
|
|
242
|
+
|
|
243
|
+
# グローバルインスタンス(最適化:シングルトンパターン)
|
|
244
|
+
_loader_instance = None
|
|
245
|
+
|
|
246
|
+
|
|
247
|
+
def get_loader() -> "LanguageLoader":
|
|
248
|
+
"""Get singleton loader instance"""
|
|
249
|
+
global _loader_instance
|
|
250
|
+
if _loader_instance is None:
|
|
251
|
+
_loader_instance = LanguageLoader()
|
|
252
|
+
return _loader_instance
|
|
253
|
+
|
|
254
|
+
|
|
255
|
+
# 後方互換性のため
|
|
256
|
+
loader = get_loader()
|
|
257
|
+
|
|
258
|
+
|
|
259
|
+
def check_language_availability(language: str) -> bool:
|
|
260
|
+
"""言語の利用可能性をチェック"""
|
|
261
|
+
return get_loader().is_language_available(language)
|
|
262
|
+
|
|
263
|
+
|
|
264
|
+
def create_parser_safely(language: str) -> Optional["Parser"]:
|
|
265
|
+
"""安全にパーサーを作成"""
|
|
266
|
+
return get_loader().create_parser_safely(language)
|
|
267
|
+
|
|
268
|
+
|
|
269
|
+
def load_language(language: str) -> Optional["Language"]:
|
|
270
|
+
"""言語をロード"""
|
|
271
|
+
return get_loader().load_language(language)
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
"""
|
|
3
|
+
Language Plugins
|
|
4
|
+
|
|
5
|
+
This package contains the core language plugins for the tree-sitter analyzer.
|
|
6
|
+
Each plugin provides language-specific parsing and element extraction capabilities.
|
|
7
|
+
"""
|
|
8
|
+
|
|
9
|
+
# This file makes the languages directory a Python package
|
|
10
|
+
# Language plugins are automatically discovered by the PluginManager
|