tree-sitter-analyzer 0.3.0__py3-none-any.whl → 0.4.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 (51) hide show
  1. tree_sitter_analyzer/__init__.py +4 -3
  2. tree_sitter_analyzer/api.py +4 -2
  3. tree_sitter_analyzer/cli/__init__.py +3 -3
  4. tree_sitter_analyzer/cli/commands/advanced_command.py +1 -1
  5. tree_sitter_analyzer/cli/commands/base_command.py +1 -1
  6. tree_sitter_analyzer/cli/commands/partial_read_command.py +2 -2
  7. tree_sitter_analyzer/cli/commands/summary_command.py +2 -2
  8. tree_sitter_analyzer/cli/commands/table_command.py +11 -8
  9. tree_sitter_analyzer/cli_main.py +2 -1
  10. tree_sitter_analyzer/core/analysis_engine.py +33 -69
  11. tree_sitter_analyzer/core/engine.py +6 -4
  12. tree_sitter_analyzer/core/parser.py +1 -1
  13. tree_sitter_analyzer/core/query.py +16 -8
  14. tree_sitter_analyzer/encoding_utils.py +0 -2
  15. tree_sitter_analyzer/exceptions.py +23 -23
  16. tree_sitter_analyzer/file_handler.py +4 -11
  17. tree_sitter_analyzer/formatters/java_formatter.py +8 -4
  18. tree_sitter_analyzer/formatters/python_formatter.py +8 -4
  19. tree_sitter_analyzer/interfaces/cli.py +1 -1
  20. tree_sitter_analyzer/interfaces/cli_adapter.py +30 -9
  21. tree_sitter_analyzer/interfaces/mcp_adapter.py +43 -17
  22. tree_sitter_analyzer/interfaces/mcp_server.py +9 -9
  23. tree_sitter_analyzer/java_analyzer.py +20 -51
  24. tree_sitter_analyzer/language_loader.py +2 -2
  25. tree_sitter_analyzer/languages/java_plugin.py +86 -41
  26. tree_sitter_analyzer/{plugins → languages}/javascript_plugin.py +3 -3
  27. tree_sitter_analyzer/languages/python_plugin.py +16 -6
  28. tree_sitter_analyzer/mcp/resources/code_file_resource.py +0 -3
  29. tree_sitter_analyzer/mcp/resources/project_stats_resource.py +0 -5
  30. tree_sitter_analyzer/mcp/server.py +4 -4
  31. tree_sitter_analyzer/mcp/tools/analyze_scale_tool.py +63 -30
  32. tree_sitter_analyzer/mcp/tools/analyze_scale_tool_cli_compatible.py +9 -4
  33. tree_sitter_analyzer/mcp/tools/table_format_tool.py +2 -2
  34. tree_sitter_analyzer/mcp/utils/__init__.py +10 -8
  35. tree_sitter_analyzer/models.py +1 -1
  36. tree_sitter_analyzer/output_manager.py +4 -10
  37. tree_sitter_analyzer/plugins/__init__.py +9 -62
  38. tree_sitter_analyzer/plugins/base.py +20 -1
  39. tree_sitter_analyzer/plugins/manager.py +29 -12
  40. tree_sitter_analyzer/query_loader.py +4 -1
  41. tree_sitter_analyzer/table_formatter.py +4 -1
  42. tree_sitter_analyzer/utils.py +6 -6
  43. {tree_sitter_analyzer-0.3.0.dist-info → tree_sitter_analyzer-0.4.0.dist-info}/METADATA +3 -3
  44. tree_sitter_analyzer-0.4.0.dist-info/RECORD +73 -0
  45. {tree_sitter_analyzer-0.3.0.dist-info → tree_sitter_analyzer-0.4.0.dist-info}/entry_points.txt +2 -1
  46. tree_sitter_analyzer/plugins/java_plugin.py +0 -608
  47. tree_sitter_analyzer/plugins/plugin_loader.py +0 -85
  48. tree_sitter_analyzer/plugins/python_plugin.py +0 -606
  49. tree_sitter_analyzer/plugins/registry.py +0 -374
  50. tree_sitter_analyzer-0.3.0.dist-info/RECORD +0 -77
  51. {tree_sitter_analyzer-0.3.0.dist-info → tree_sitter_analyzer-0.4.0.dist-info}/WHEEL +0 -0
@@ -1,374 +0,0 @@
1
- #!/usr/bin/env python3
2
- """
3
- Language Registry
4
-
5
- Manages mapping between languages, file extensions, and plugins.
6
- Provides language detection and plugin resolution services.
7
- """
8
-
9
- import logging
10
- from pathlib import Path
11
-
12
- from ..utils import log_debug, log_error, log_warning
13
- from .base import LanguagePlugin
14
-
15
- logger = logging.getLogger(__name__)
16
-
17
-
18
- class LanguageRegistry:
19
- """
20
- Registry for managing language-to-plugin mappings.
21
-
22
- This class handles:
23
- - Mapping languages to plugins
24
- - Mapping file extensions to languages
25
- - Language detection from file paths
26
- - Plugin resolution for languages
27
- """
28
-
29
- def __init__(self):
30
- """Initialize the language registry."""
31
- self._plugins: dict[str, LanguagePlugin] = {}
32
- self._extension_map: dict[str, str] = {} # extension -> language
33
- self._language_aliases: dict[str, str] = {} # alias -> canonical_language
34
-
35
- # Initialize common language aliases
36
- self._init_language_aliases()
37
-
38
- def _init_language_aliases(self):
39
- """Initialize common language aliases."""
40
- self._language_aliases.update(
41
- {
42
- "js": "javascript",
43
- "ts": "typescript",
44
- "py": "python",
45
- "rb": "ruby",
46
- "cpp": "c++",
47
- "cxx": "c++",
48
- "cc": "c++",
49
- "c++": "cpp", # Normalize c++ to cpp
50
- }
51
- )
52
-
53
- def register_plugin(self, plugin: LanguagePlugin) -> bool:
54
- """
55
- Register a language plugin.
56
-
57
- Args:
58
- plugin: Plugin instance to register
59
-
60
- Returns:
61
- True if registration was successful
62
- """
63
- try:
64
- language = plugin.get_language_name().lower()
65
- extensions = plugin.get_file_extensions()
66
-
67
- # Check for conflicts
68
- if language in self._plugins:
69
- existing_plugin = self._plugins[language]
70
- log_warning(
71
- f"Language '{language}' already registered by {existing_plugin.__class__.__name__}, "
72
- f"replacing with {plugin.__class__.__name__}"
73
- )
74
-
75
- # Register the plugin
76
- self._plugins[language] = plugin
77
-
78
- # Register file extensions
79
- for ext in extensions:
80
- ext = ext.lower()
81
- if not ext.startswith("."):
82
- ext = "." + ext
83
-
84
- if ext in self._extension_map:
85
- existing_lang = self._extension_map[ext]
86
- log_debug(
87
- f"Extension '{ext}' already mapped to '{existing_lang}', overriding with '{language}'"
88
- )
89
-
90
- self._extension_map[ext] = language
91
-
92
- log_debug(
93
- f"Registered plugin for language '{language}' with extensions: {extensions}"
94
- )
95
- return True
96
-
97
- except Exception as e:
98
- log_error(f"Failed to register plugin: {e}")
99
- return False
100
-
101
- def get_plugin(self, language: str) -> LanguagePlugin | None:
102
- """
103
- Get plugin for a specific language.
104
-
105
- Args:
106
- language: Programming language name
107
-
108
- Returns:
109
- Plugin instance or None if not found
110
- """
111
- # Normalize language name
112
- language = self._normalize_language(language)
113
- return self._plugins.get(language)
114
-
115
- def detect_language_from_file(self, file_path: Path) -> str | None:
116
- """
117
- Detect programming language from file path.
118
-
119
- Args:
120
- file_path: Path to the file
121
-
122
- Returns:
123
- Detected language name or None
124
- """
125
- if file_path is None:
126
- return None
127
-
128
- if isinstance(file_path, str):
129
- file_path = Path(file_path)
130
-
131
- # Get file extension
132
- extension = file_path.suffix.lower()
133
-
134
- # Look up in extension map
135
- language = self._extension_map.get(extension)
136
- if language:
137
- return language
138
-
139
- # Try compound extensions (e.g., .test.js, .spec.ts)
140
- if len(file_path.suffixes) > 1:
141
- # Try the last extension
142
- last_ext = file_path.suffixes[-1].lower()
143
- language = self._extension_map.get(last_ext)
144
- if language:
145
- return language
146
-
147
- # Special cases based on filename patterns
148
- filename = file_path.name.lower()
149
-
150
- # Common configuration files
151
- config_patterns = {
152
- "makefile": "make",
153
- "dockerfile": "dockerfile",
154
- "vagrantfile": "ruby",
155
- "rakefile": "ruby",
156
- "gemfile": "ruby",
157
- "podfile": "ruby",
158
- }
159
-
160
- for pattern, lang in config_patterns.items():
161
- if filename == pattern or filename.startswith(pattern):
162
- if lang in self._plugins:
163
- return lang
164
-
165
- log_debug(f"Could not detect language for file: {file_path}")
166
- return None
167
-
168
- def get_supported_languages(self) -> list[str]:
169
- """
170
- Get list of all supported languages.
171
-
172
- Returns:
173
- List of supported language names
174
- """
175
- return list(self._plugins.keys())
176
-
177
- def get_supported_extensions(self) -> list[str]:
178
- """
179
- Get list of all supported file extensions.
180
-
181
- Returns:
182
- List of supported file extensions
183
- """
184
- return list(self._extension_map.keys())
185
-
186
- def get_extensions_for_language(self, language: str) -> list[str]:
187
- """
188
- Get file extensions for a specific language.
189
-
190
- Args:
191
- language: Programming language name
192
-
193
- Returns:
194
- List of file extensions for the language
195
- """
196
- language = self._normalize_language(language)
197
- plugin = self._plugins.get(language)
198
-
199
- if plugin:
200
- return plugin.get_file_extensions()
201
-
202
- return []
203
-
204
- def get_language_for_extension(self, extension: str) -> str | None:
205
- """
206
- Get language for a specific file extension.
207
-
208
- Args:
209
- extension: File extension (with or without leading dot)
210
-
211
- Returns:
212
- Language name or None if not found
213
- """
214
- if not extension.startswith("."):
215
- extension = "." + extension
216
-
217
- return self._extension_map.get(extension.lower())
218
-
219
- def is_language_supported(self, language: str) -> bool:
220
- """
221
- Check if a language is supported.
222
-
223
- Args:
224
- language: Programming language name
225
-
226
- Returns:
227
- True if the language is supported
228
- """
229
- language = self._normalize_language(language)
230
- return language in self._plugins
231
-
232
- def is_extension_supported(self, extension: str) -> bool:
233
- """
234
- Check if a file extension is supported.
235
-
236
- Args:
237
- extension: File extension (with or without leading dot)
238
-
239
- Returns:
240
- True if the extension is supported
241
- """
242
- if not extension.startswith("."):
243
- extension = "." + extension
244
-
245
- return extension.lower() in self._extension_map
246
-
247
- def _normalize_language(self, language: str) -> str:
248
- """
249
- Normalize language name using aliases.
250
-
251
- Args:
252
- language: Language name to normalize
253
-
254
- Returns:
255
- Normalized language name
256
- """
257
- if language is None:
258
- return ""
259
- language = language.lower().strip()
260
- return self._language_aliases.get(language, language)
261
-
262
- def add_language_alias(self, alias: str, canonical_language: str) -> bool:
263
- """
264
- Add a language alias.
265
-
266
- Args:
267
- alias: Alias name
268
- canonical_language: Canonical language name
269
-
270
- Returns:
271
- True if alias was added successfully
272
- """
273
- try:
274
- alias = alias.lower().strip()
275
- canonical_language = canonical_language.lower().strip()
276
-
277
- if canonical_language not in self._plugins:
278
- log_warning(
279
- f"Cannot add alias '{alias}' for unsupported language '{canonical_language}'"
280
- )
281
- return False
282
-
283
- self._language_aliases[alias] = canonical_language
284
- log_debug(f"Added language alias: '{alias}' -> '{canonical_language}'")
285
- return True
286
-
287
- except Exception as e:
288
- log_error(f"Failed to add language alias: {e}")
289
- return False
290
-
291
- def get_registry_info(self) -> dict[str, any]:
292
- """
293
- Get comprehensive information about the registry.
294
-
295
- "plugin_count": len(self._plugins),
296
- Returns:
297
- Dictionary containing registry information
298
- """
299
- return {
300
- "plugin_count": len(self._plugins),
301
- "supported_languages": len(self._plugins),
302
- "supported_extensions": len(self._extension_map),
303
- "language_aliases": len(self._language_aliases),
304
- "languages": list(self._plugins.keys()),
305
- "extensions": list(self._extension_map.keys()),
306
- "aliases": dict(self._language_aliases),
307
- "extension_mapping": dict(self._extension_map),
308
- }
309
-
310
- def find_plugins_for_file(self, file_path: Path) -> list[LanguagePlugin]:
311
- """
312
- Find all possible plugins for a file (useful for ambiguous cases).
313
-
314
- Args:
315
- file_path: Path to the file
316
-
317
- Returns:
318
- List of possible plugins
319
- """
320
- plugins = []
321
-
322
- # Primary detection
323
- language = self.detect_language_from_file(file_path)
324
- if language:
325
- plugin = self.get_plugin(language)
326
- if plugin:
327
- plugins.append(plugin)
328
-
329
- # Check if any plugins explicitly support this file
330
- for plugin in self._plugins.values():
331
- if hasattr(plugin, "is_applicable") and plugin.is_applicable(
332
- str(file_path)
333
- ):
334
- if plugin not in plugins:
335
- plugins.append(plugin)
336
-
337
- return plugins
338
-
339
- def clear(self):
340
- """Clear all registered plugins and mappings."""
341
- self._plugins.clear()
342
- self._extension_map.clear()
343
- # Keep language aliases as they're static
344
- log_debug("Cleared language registry")
345
-
346
- def unregister_plugin(self, language: str) -> bool:
347
- """
348
- Unregister a plugin for a specific language.
349
-
350
- Args:
351
- language: Programming language name
352
-
353
- Returns:
354
- True if unregistration was successful
355
- """
356
- language = self._normalize_language(language)
357
-
358
- if language not in self._plugins:
359
- return False
360
-
361
- # Remove the plugin
362
- self._plugins.pop(language)
363
-
364
- # Remove associated extensions
365
- extensions_to_remove = []
366
- for ext, lang in self._extension_map.items():
367
- if lang == language:
368
- extensions_to_remove.append(ext)
369
-
370
- for ext in extensions_to_remove:
371
- del self._extension_map[ext]
372
-
373
- log_debug(f"Unregistered plugin for language '{language}'")
374
- return True
@@ -1,77 +0,0 @@
1
- tree_sitter_analyzer/__init__.py,sha256=f_9AqMgRs7bCqlbAr_qI5s2GBCxSUNOjJzTxaCKdz2o,3113
2
- tree_sitter_analyzer/__main__.py,sha256=zlzSTDNKSOs7koUVJc_yCNilrOpF80yS01Tvny6UBi8,281
3
- tree_sitter_analyzer/api.py,sha256=2YcvoCocKrhQJ5syqVUzy5lnDtVdx5UMzj0WN_9tRsA,16850
4
- tree_sitter_analyzer/cli_main.py,sha256=jXHJx7LnY7WfiAL_KBzIhrrREDtvDj5NvU3902JMQgg,9320
5
- tree_sitter_analyzer/encoding_utils.py,sha256=fly2xf0Aet9lRu83pvCWrA9cphLFABlVC_HgEUHUvQ0,14430
6
- tree_sitter_analyzer/exceptions.py,sha256=yAMNcwva4c_cwjH3IeRB67CMq8r9RPHYQawkl3SbykI,9568
7
- tree_sitter_analyzer/file_handler.py,sha256=ne4W0AfZVTB0EOp_cA9XBYuDH5dUyf1esYYr2U3KzPo,7184
8
- tree_sitter_analyzer/java_analyzer.py,sha256=jyyWyzPXVYoDHJ98Plgi826WqJUn_eGonS3Uu-Z3z98,8401
9
- tree_sitter_analyzer/language_detector.py,sha256=EOwuraMtv9hW8xUU2hoD2-zlyhOStAadAXJ4EStiH6I,12142
10
- tree_sitter_analyzer/language_loader.py,sha256=YQ_3AkWCPPEv8OBg0Bpyc0ABftqRBQfTbnCzcqhk-ZY,7902
11
- tree_sitter_analyzer/models.py,sha256=zyaSGD7s9O4gWjz49LjTBnqRjXEDSVc7bEql_7l-wxs,16070
12
- tree_sitter_analyzer/output_manager.py,sha256=29egMs1w0bejTm8M-YR0DZI4Kth0Pr0xrx63c5rkI-Q,8420
13
- tree_sitter_analyzer/query_loader.py,sha256=HZzTJ7HfuTsmOaPOcv8-opVjco2u4gqKez8o6fZEIGI,9707
14
- tree_sitter_analyzer/table_formatter.py,sha256=LS3b8XxSVqpsg8g9eyHvYn6kyyxaGf8Mc3MpZ6LvVeQ,17728
15
- tree_sitter_analyzer/utils.py,sha256=1oryYZxks6JYjVO3opdCf4mAxe6l1bDR2qvf1QH9GkI,7981
16
- tree_sitter_analyzer/cli/__init__.py,sha256=ChltfvS65GblR7k_mSgcPPnOdFsK-85-xr3Y1Hc1eko,823
17
- tree_sitter_analyzer/cli/__main__.py,sha256=Xq8o8-0dPnMDU9WZqmqhzr98rx8rvoffTUHAkAwl-L8,218
18
- tree_sitter_analyzer/cli/info_commands.py,sha256=fTW_rcEZuNB1iWSFPAp8CyhD_YUgvhAGtkvx64kYfvQ,4376
19
- tree_sitter_analyzer/cli/commands/__init__.py,sha256=jpcpM1ptLuxLMBDUv1y_a87k8RAw1otFzeYpWtXvz3Y,671
20
- tree_sitter_analyzer/cli/commands/advanced_command.py,sha256=MagDYt8c-clbpkBPRXUyxwOGdph5emAIJO6RUWPQsv8,3408
21
- tree_sitter_analyzer/cli/commands/base_command.py,sha256=lVQOUeF0_9JKdhS9O41RacsLn0eG_ZaCzu9JF1HYnk4,5753
22
- tree_sitter_analyzer/cli/commands/default_command.py,sha256=41zPRy2ClcJVFGATx2KCDiMSRKa7vQvJi6R6LccjRrc,558
23
- tree_sitter_analyzer/cli/commands/partial_read_command.py,sha256=r2Im3kw-D6ACTcXi2JTd1JOqsBopuViD6uqjcY-moNo,4666
24
- tree_sitter_analyzer/cli/commands/query_command.py,sha256=v-DCDF4lGPhQO4X4QplGXFZEjXP9wbytH4shM1mhMj8,3187
25
- tree_sitter_analyzer/cli/commands/structure_command.py,sha256=0iJwjOgtW838hXleXogWhbu6eQFfrLR1QgKe5PFBqvU,5220
26
- tree_sitter_analyzer/cli/commands/summary_command.py,sha256=h__km0dftQyn0Td6d2sdDuFCll5-eJ_A1NLZTfMXrqE,3581
27
- tree_sitter_analyzer/cli/commands/table_command.py,sha256=UBGU1zlolq9mRbKuAoIwOFlvGVP3mR2U4mzZSelCb9M,9347
28
- tree_sitter_analyzer/core/__init__.py,sha256=VlYOy1epW16vjaVd__knESewnU0sfXF9a4hjrFxiSEE,440
29
- tree_sitter_analyzer/core/analysis_engine.py,sha256=qzmVC4Z0Ez0ExLVXMSVZ0DPPg3we3UZJz2LJbCyCkZc,20119
30
- tree_sitter_analyzer/core/cache_service.py,sha256=WeNawH6JyJKKBA-0rlJIRPmdErxkLQTQsbghHVkqmPo,9924
31
- tree_sitter_analyzer/core/engine.py,sha256=uTTSNs1bZLqsQ5l5919WF_K4U3VsSWiY8gHBzgdWGkk,18244
32
- tree_sitter_analyzer/core/parser.py,sha256=zGA_SEZFZmT9XYZylWYRL6vsO5pk5pTNpTWi3B_wQb8,9264
33
- tree_sitter_analyzer/core/query.py,sha256=jwSNtvTk0HHYaG1r_4WQ-jGX6P_5cZOF6EGqCZsoG3M,16008
34
- tree_sitter_analyzer/formatters/__init__.py,sha256=yVb4HF_4EEPRwTf3y3-vM2NllrhykG3zlvQhN-6dB4c,31
35
- tree_sitter_analyzer/formatters/base_formatter.py,sha256=L5OD0KbK9udMJ03Iy1gUtbit0iUdL2zduf5-zVUaV4A,5930
36
- tree_sitter_analyzer/formatters/formatter_factory.py,sha256=riwl62urKwMka8CqPhkFy7CgZP2YM3lckLQ4-boSA6s,2319
37
- tree_sitter_analyzer/formatters/java_formatter.py,sha256=3gNcRpoXh2_qvtRt9Fodbct9azvyYXfjBs-aKWuHT34,11199
38
- tree_sitter_analyzer/formatters/python_formatter.py,sha256=RoUY3t0m6MIQ_hGupSaCPtStwrhm7wwon57yA5wVKwM,9888
39
- tree_sitter_analyzer/interfaces/__init__.py,sha256=OcT7eNIU0ZXvAeAXbhDqRG3puxn93HeSLqplwj6npTM,271
40
- tree_sitter_analyzer/interfaces/cli.py,sha256=F1J-KeHrZdRAjK2Ozztgu9MWk1WYjxd3kPp4RsQW2Yo,16824
41
- tree_sitter_analyzer/interfaces/cli_adapter.py,sha256=3Z02rXJIH6gtxIP-3ENps1FYkmZSTLS6okdTXhaie4Y,10757
42
- tree_sitter_analyzer/interfaces/mcp_adapter.py,sha256=FUUxkrOIkCwFZDvh9XBatkO08axs49RiUSsEfteW7fE,6229
43
- tree_sitter_analyzer/interfaces/mcp_server.py,sha256=FQ59ANBa-4Dpv9RO_u3GDCWvJcvksQcdL3UZGFBOIFs,16067
44
- tree_sitter_analyzer/languages/__init__.py,sha256=VTXxJgVjHJAciLhX0zzXOS4EygZMtebeYUbi_0z6fGw,340
45
- tree_sitter_analyzer/languages/java_plugin.py,sha256=5L7j9LCFYLWaD7HA6Y6JpDyeKXb9RkJoqe7LsmmlwLI,44659
46
- tree_sitter_analyzer/languages/python_plugin.py,sha256=aKEg93KeYE6-9J0tulCKCb04Y1zgluFjTCv7TBViFfI,28427
47
- tree_sitter_analyzer/mcp/__init__.py,sha256=76ZKgWbsXZWB8mNER2D0fNHdULPZhqqBJHi8R0uHDPE,721
48
- tree_sitter_analyzer/mcp/server.py,sha256=kC0eh3vLisdEPDea0ZluWUxgutBC6ZD9F0JbxMKDVoA,12362
49
- tree_sitter_analyzer/mcp/resources/__init__.py,sha256=SWnK8liTQkuQXlVgyRP9mf5HzpqmqohShrC98xlNnDc,1389
50
- tree_sitter_analyzer/mcp/resources/code_file_resource.py,sha256=cFzu-NpUrdXicFzlxoNC-dE9wn0zll3lRCHwTJlMVdc,6316
51
- tree_sitter_analyzer/mcp/resources/project_stats_resource.py,sha256=0NYEOK7Zxm3yanx0rS2F7luvIAJvR9fw3mtK0f4La2Q,19402
52
- tree_sitter_analyzer/mcp/tools/__init__.py,sha256=u7JrSLwE95y50mfjSus6HRdtdhkNbVrW8jP4AooawEU,762
53
- tree_sitter_analyzer/mcp/tools/analyze_scale_tool.py,sha256=ARxOvBUrTmYAfMEU7eGFZD2Mi9D3o-ED_A81G3KedKQ,24485
54
- tree_sitter_analyzer/mcp/tools/analyze_scale_tool_cli_compatible.py,sha256=AHjgWy5wCfCi2yF_Imlc3Mzjn8aj8WLhpW-XuB1oRJI,8683
55
- tree_sitter_analyzer/mcp/tools/base_tool.py,sha256=FVSMgKIliQ5EBVQEfjYwWeqzWt9OqOFDr3dyACIDxig,1210
56
- tree_sitter_analyzer/mcp/tools/read_partial_tool.py,sha256=0Rb-jI2CfzN1PVeJZnkERaowm9Y8iFSZl8W-VIQQ8cI,10735
57
- tree_sitter_analyzer/mcp/tools/table_format_tool.py,sha256=s7b-u4OYBCq_QxVG3LC7Td0YyxAIcy4CrOE0LFNYGKQ,14246
58
- tree_sitter_analyzer/mcp/tools/universal_analyze_tool.py,sha256=Wl4wZWHYbvcYKnFmdkEn7FTNSel_jlnpQCjfSuzYkEg,20785
59
- tree_sitter_analyzer/mcp/utils/__init__.py,sha256=DFahy90M5lpNSMmCgQJHCHl_0gX9sn6lhCRsxlyaLgo,2858
60
- tree_sitter_analyzer/mcp/utils/error_handler.py,sha256=QgKqjUhe0QTCRrtoiuTxDMUt-eDRNclf1ToJtaCNoq8,17423
61
- tree_sitter_analyzer/plugins/__init__.py,sha256=J-QzhobLv9pAoGSW5IUNjlWow4fsDxYKkVoEvxz6eqE,12362
62
- tree_sitter_analyzer/plugins/base.py,sha256=Nw8kIaUBJVdMXW2ITKyQZ32mASpCjmqzrVRm0MHsfks,15557
63
- tree_sitter_analyzer/plugins/java_plugin.py,sha256=6RQGlv6_-BF2iwHcoBFazr3MbAjhjhXM-Pmy-jlyUmI,23430
64
- tree_sitter_analyzer/plugins/javascript_plugin.py,sha256=rARje63z9vrn5EfOMHugrnQYKeHsv9KDWA-EGFDC1eE,15799
65
- tree_sitter_analyzer/plugins/manager.py,sha256=cMs2fVlGBjTeYAVhpMe-O6G5RkNxVOWtzMMuu2IbcL4,11593
66
- tree_sitter_analyzer/plugins/plugin_loader.py,sha256=ujWH1OORLp7xhrZsnTzIdS2qUepG1EbTp8HICc26dCU,2490
67
- tree_sitter_analyzer/plugins/python_plugin.py,sha256=FeRVSdLnOQvCjIqm7xZ9zmKNnLhhPgJVVVnDvqPfuLo,23759
68
- tree_sitter_analyzer/plugins/registry.py,sha256=WU2OcyX_iT837aLg0i_nX4jOOBk4Ufbh9FZTLt1j2p0,11174
69
- tree_sitter_analyzer/queries/__init__.py,sha256=dwDDc7PCw_UWruxSeJ8uEBjY0O5uLDBI5YqyvBhbnN0,696
70
- tree_sitter_analyzer/queries/java.py,sha256=eGbeu6UfTWsQ2oC5dvYMsQTH6GlT7mvhf9Mq2y52f2A,12536
71
- tree_sitter_analyzer/queries/javascript.py,sha256=MFZgGGUTcujsG4fIMjQjaZoKezmpHsDGHBG2ZLBH1nQ,4010
72
- tree_sitter_analyzer/queries/python.py,sha256=7-uOr8ZR7WC7iwbx8yeFfswYoNg6FwtdGXrnt6rGtm8,7708
73
- tree_sitter_analyzer/queries/typescript.py,sha256=LJCfyntKFz7fHx1YG21DtdMC1nqRrrj3LkjydD2yDnk,6884
74
- tree_sitter_analyzer-0.3.0.dist-info/METADATA,sha256=iwy2M2TTCACE8LcbTqvVJSK5zrNU0W-TTtlU5mov0PU,12976
75
- tree_sitter_analyzer-0.3.0.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
76
- tree_sitter_analyzer-0.3.0.dist-info/entry_points.txt,sha256=-XEh1racqnCT30mhKWMv5-bgX0iqd_J6b08lZS9J4eg,336
77
- tree_sitter_analyzer-0.3.0.dist-info/RECORD,,