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.
- tree_sitter_analyzer/__init__.py +4 -3
- tree_sitter_analyzer/api.py +4 -2
- tree_sitter_analyzer/cli/__init__.py +3 -3
- tree_sitter_analyzer/cli/commands/advanced_command.py +1 -1
- tree_sitter_analyzer/cli/commands/base_command.py +1 -1
- tree_sitter_analyzer/cli/commands/partial_read_command.py +2 -2
- tree_sitter_analyzer/cli/commands/summary_command.py +2 -2
- tree_sitter_analyzer/cli/commands/table_command.py +11 -8
- tree_sitter_analyzer/cli_main.py +2 -1
- tree_sitter_analyzer/core/analysis_engine.py +33 -69
- tree_sitter_analyzer/core/engine.py +6 -4
- tree_sitter_analyzer/core/parser.py +1 -1
- tree_sitter_analyzer/core/query.py +16 -8
- tree_sitter_analyzer/encoding_utils.py +0 -2
- tree_sitter_analyzer/exceptions.py +23 -23
- tree_sitter_analyzer/file_handler.py +4 -11
- tree_sitter_analyzer/formatters/java_formatter.py +8 -4
- tree_sitter_analyzer/formatters/python_formatter.py +8 -4
- tree_sitter_analyzer/interfaces/cli.py +1 -1
- tree_sitter_analyzer/interfaces/cli_adapter.py +30 -9
- tree_sitter_analyzer/interfaces/mcp_adapter.py +43 -17
- tree_sitter_analyzer/interfaces/mcp_server.py +9 -9
- tree_sitter_analyzer/java_analyzer.py +20 -51
- tree_sitter_analyzer/language_loader.py +2 -2
- tree_sitter_analyzer/languages/java_plugin.py +86 -41
- tree_sitter_analyzer/{plugins → languages}/javascript_plugin.py +3 -3
- tree_sitter_analyzer/languages/python_plugin.py +16 -6
- tree_sitter_analyzer/mcp/resources/code_file_resource.py +0 -3
- tree_sitter_analyzer/mcp/resources/project_stats_resource.py +0 -5
- tree_sitter_analyzer/mcp/server.py +4 -4
- tree_sitter_analyzer/mcp/tools/analyze_scale_tool.py +63 -30
- tree_sitter_analyzer/mcp/tools/analyze_scale_tool_cli_compatible.py +9 -4
- tree_sitter_analyzer/mcp/tools/table_format_tool.py +2 -2
- tree_sitter_analyzer/mcp/utils/__init__.py +10 -8
- tree_sitter_analyzer/models.py +1 -1
- tree_sitter_analyzer/output_manager.py +4 -10
- tree_sitter_analyzer/plugins/__init__.py +9 -62
- tree_sitter_analyzer/plugins/base.py +20 -1
- tree_sitter_analyzer/plugins/manager.py +29 -12
- tree_sitter_analyzer/query_loader.py +4 -1
- tree_sitter_analyzer/table_formatter.py +4 -1
- tree_sitter_analyzer/utils.py +6 -6
- {tree_sitter_analyzer-0.3.0.dist-info → tree_sitter_analyzer-0.4.0.dist-info}/METADATA +3 -3
- tree_sitter_analyzer-0.4.0.dist-info/RECORD +73 -0
- {tree_sitter_analyzer-0.3.0.dist-info → tree_sitter_analyzer-0.4.0.dist-info}/entry_points.txt +2 -1
- tree_sitter_analyzer/plugins/java_plugin.py +0 -608
- tree_sitter_analyzer/plugins/plugin_loader.py +0 -85
- tree_sitter_analyzer/plugins/python_plugin.py +0 -606
- tree_sitter_analyzer/plugins/registry.py +0 -374
- tree_sitter_analyzer-0.3.0.dist-info/RECORD +0 -77
- {tree_sitter_analyzer-0.3.0.dist-info → tree_sitter_analyzer-0.4.0.dist-info}/WHEEL +0 -0
|
@@ -21,7 +21,12 @@ from ..models import Import as ModelImport
|
|
|
21
21
|
from ..models import Variable as ModelVariable
|
|
22
22
|
from ..utils import log_debug, log_error, log_warning
|
|
23
23
|
|
|
24
|
-
__all__ = [
|
|
24
|
+
__all__ = [
|
|
25
|
+
"LanguagePlugin",
|
|
26
|
+
"ElementExtractor",
|
|
27
|
+
"DefaultExtractor",
|
|
28
|
+
"DefaultLanguagePlugin",
|
|
29
|
+
]
|
|
25
30
|
|
|
26
31
|
|
|
27
32
|
class ElementExtractor(ABC):
|
|
@@ -255,50 +260,7 @@ class DefaultExtractor(ElementExtractor):
|
|
|
255
260
|
return None
|
|
256
261
|
|
|
257
262
|
|
|
258
|
-
|
|
259
|
-
"""Registry for managing language plugins"""
|
|
260
|
-
|
|
261
|
-
def __init__(self) -> None:
|
|
262
|
-
self._plugins: dict[str, LanguagePlugin] = {}
|
|
263
|
-
self._extension_map: dict[str, LanguagePlugin] = {}
|
|
264
|
-
self._default_plugin = DefaultLanguagePlugin()
|
|
265
|
-
|
|
266
|
-
def register_plugin(self, plugin: LanguagePlugin) -> None:
|
|
267
|
-
"""Register a language plugin"""
|
|
268
|
-
try:
|
|
269
|
-
language = plugin.get_language_name()
|
|
270
|
-
self._plugins[language] = plugin
|
|
271
|
-
|
|
272
|
-
# Register file extensions
|
|
273
|
-
for ext in plugin.get_file_extensions():
|
|
274
|
-
self._extension_map[ext] = plugin
|
|
275
|
-
|
|
276
|
-
log_debug(f"Registered plugin for language: {language}")
|
|
277
|
-
except Exception as e:
|
|
278
|
-
log_error(f"Failed to register plugin: {e}")
|
|
279
|
-
|
|
280
|
-
def get_plugin(self, language: str) -> LanguagePlugin | None:
|
|
281
|
-
"""Get plugin for specified language"""
|
|
282
|
-
return self._plugins.get(language)
|
|
283
|
-
|
|
284
|
-
def get_plugin_by_extension(self, extension: str) -> LanguagePlugin | None:
|
|
285
|
-
"""Get plugin for specified file extension"""
|
|
286
|
-
return self._extension_map.get(extension)
|
|
287
|
-
|
|
288
|
-
def get_plugin_for_file(self, file_path: str) -> LanguagePlugin:
|
|
289
|
-
"""Get appropriate plugin for a file"""
|
|
290
|
-
for plugin in self._plugins.values():
|
|
291
|
-
if plugin.is_applicable(file_path):
|
|
292
|
-
return plugin
|
|
293
|
-
return self._default_plugin
|
|
294
|
-
|
|
295
|
-
def list_supported_languages(self) -> list[str]:
|
|
296
|
-
"""List all supported languages"""
|
|
297
|
-
return list(self._plugins.keys())
|
|
298
|
-
|
|
299
|
-
def list_supported_extensions(self) -> list[str]:
|
|
300
|
-
"""List all supported file extensions"""
|
|
301
|
-
return list(self._extension_map.keys())
|
|
263
|
+
# Legacy PluginRegistry removed - now using PluginManager from .manager
|
|
302
264
|
|
|
303
265
|
|
|
304
266
|
class DefaultLanguagePlugin(LanguagePlugin):
|
|
@@ -314,20 +276,5 @@ class DefaultLanguagePlugin(LanguagePlugin):
|
|
|
314
276
|
return DefaultExtractor()
|
|
315
277
|
|
|
316
278
|
|
|
317
|
-
#
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
# Auto-load all plugins when the package is imported
|
|
322
|
-
try:
|
|
323
|
-
# from .plugin_loader import (
|
|
324
|
-
# get_supported_extensions, # Not used currently
|
|
325
|
-
# get_supported_languages, # Not used currently
|
|
326
|
-
# load_all_plugins, # Not used currently
|
|
327
|
-
# )
|
|
328
|
-
pass
|
|
329
|
-
# Plugins are automatically loaded when plugin_loader is imported
|
|
330
|
-
except ImportError as e:
|
|
331
|
-
from ..utils import log_warning
|
|
332
|
-
|
|
333
|
-
log_warning(f"Could not load plugin loader: {e}")
|
|
279
|
+
# Legacy plugin registry removed - now using PluginManager
|
|
280
|
+
# from .manager import PluginManager
|
|
@@ -13,6 +13,9 @@ from typing import TYPE_CHECKING, Any
|
|
|
13
13
|
if TYPE_CHECKING:
|
|
14
14
|
import tree_sitter
|
|
15
15
|
|
|
16
|
+
from ..core.analysis_engine import AnalysisRequest
|
|
17
|
+
from ..models import AnalysisResult
|
|
18
|
+
|
|
16
19
|
from ..models import Class as ModelClass
|
|
17
20
|
from ..models import CodeElement
|
|
18
21
|
from ..models import Function as ModelFunction
|
|
@@ -108,7 +111,7 @@ class ElementExtractor(ABC):
|
|
|
108
111
|
Returns:
|
|
109
112
|
List of all extracted code elements
|
|
110
113
|
"""
|
|
111
|
-
elements = []
|
|
114
|
+
elements: list[CodeElement] = []
|
|
112
115
|
|
|
113
116
|
try:
|
|
114
117
|
elements.extend(self.extract_functions(tree, source_code))
|
|
@@ -159,6 +162,22 @@ class LanguagePlugin(ABC):
|
|
|
159
162
|
"""
|
|
160
163
|
pass
|
|
161
164
|
|
|
165
|
+
@abstractmethod
|
|
166
|
+
async def analyze_file(
|
|
167
|
+
self, file_path: str, request: "AnalysisRequest"
|
|
168
|
+
) -> "AnalysisResult":
|
|
169
|
+
"""
|
|
170
|
+
Analyze a file and return analysis results.
|
|
171
|
+
|
|
172
|
+
Args:
|
|
173
|
+
file_path: Path to the file to analyze
|
|
174
|
+
request: Analysis request with configuration
|
|
175
|
+
|
|
176
|
+
Returns:
|
|
177
|
+
AnalysisResult containing extracted information
|
|
178
|
+
"""
|
|
179
|
+
pass
|
|
180
|
+
|
|
162
181
|
def is_applicable(self, file_path: str) -> bool:
|
|
163
182
|
"""
|
|
164
183
|
Check if this plugin is applicable for the given file.
|
|
@@ -11,6 +11,7 @@ import importlib.metadata
|
|
|
11
11
|
import logging
|
|
12
12
|
import pkgutil
|
|
13
13
|
from pathlib import Path
|
|
14
|
+
from typing import Any
|
|
14
15
|
|
|
15
16
|
from ..utils import log_debug, log_error, log_info, log_warning
|
|
16
17
|
from .base import LanguagePlugin
|
|
@@ -29,7 +30,7 @@ class PluginManager:
|
|
|
29
30
|
- Error handling and fallback mechanisms
|
|
30
31
|
"""
|
|
31
32
|
|
|
32
|
-
def __init__(self):
|
|
33
|
+
def __init__(self) -> None:
|
|
33
34
|
"""Initialize the plugin manager."""
|
|
34
35
|
self._loaded_plugins: dict[str, LanguagePlugin] = {}
|
|
35
36
|
self._plugin_classes: dict[str, type[LanguagePlugin]] = {}
|
|
@@ -52,13 +53,19 @@ class PluginManager:
|
|
|
52
53
|
local_plugins = self._load_from_local_directory()
|
|
53
54
|
loaded_plugins.extend(local_plugins)
|
|
54
55
|
|
|
55
|
-
# Store loaded plugins
|
|
56
|
+
# Store loaded plugins and deduplicate by language
|
|
57
|
+
unique_plugins = {}
|
|
56
58
|
for plugin in loaded_plugins:
|
|
57
59
|
language = plugin.get_language_name()
|
|
58
|
-
|
|
60
|
+
if language not in unique_plugins:
|
|
61
|
+
unique_plugins[language] = plugin
|
|
62
|
+
self._loaded_plugins[language] = plugin
|
|
63
|
+
else:
|
|
64
|
+
log_debug(f"Skipping duplicate plugin for language: {language}")
|
|
59
65
|
|
|
60
|
-
|
|
61
|
-
|
|
66
|
+
final_plugins = list(unique_plugins.values())
|
|
67
|
+
log_info(f"Successfully loaded {len(final_plugins)} plugins")
|
|
68
|
+
return final_plugins
|
|
62
69
|
|
|
63
70
|
def _load_from_entry_points(self) -> list[LanguagePlugin]:
|
|
64
71
|
"""
|
|
@@ -74,12 +81,22 @@ class PluginManager:
|
|
|
74
81
|
entry_points = importlib.metadata.entry_points()
|
|
75
82
|
|
|
76
83
|
# Handle both old and new entry_points API
|
|
84
|
+
plugin_entries: Any = []
|
|
77
85
|
if hasattr(entry_points, "select"):
|
|
78
86
|
# New API (Python 3.10+)
|
|
79
87
|
plugin_entries = entry_points.select(group=self._entry_point_group)
|
|
80
88
|
else:
|
|
81
|
-
# Old API
|
|
82
|
-
|
|
89
|
+
# Old API - handle different return types
|
|
90
|
+
try:
|
|
91
|
+
# Try to get entry points, handling different API versions
|
|
92
|
+
if hasattr(entry_points, "get"):
|
|
93
|
+
result = entry_points.get(self._entry_point_group)
|
|
94
|
+
plugin_entries = list(result) if result else []
|
|
95
|
+
else:
|
|
96
|
+
plugin_entries = []
|
|
97
|
+
except (TypeError, AttributeError):
|
|
98
|
+
# Fallback for incompatible entry_points types
|
|
99
|
+
plugin_entries = []
|
|
83
100
|
|
|
84
101
|
for entry_point in plugin_entries:
|
|
85
102
|
try:
|
|
@@ -116,7 +133,7 @@ class PluginManager:
|
|
|
116
133
|
Returns:
|
|
117
134
|
List of plugin instances loaded from local directory
|
|
118
135
|
"""
|
|
119
|
-
plugins = []
|
|
136
|
+
plugins: list[LanguagePlugin] = []
|
|
120
137
|
|
|
121
138
|
try:
|
|
122
139
|
# Get the languages directory path
|
|
@@ -171,7 +188,7 @@ class PluginManager:
|
|
|
171
188
|
|
|
172
189
|
return plugins
|
|
173
190
|
|
|
174
|
-
def _find_plugin_classes(self, module) -> list[type[LanguagePlugin]]:
|
|
191
|
+
def _find_plugin_classes(self, module: Any) -> list[type[LanguagePlugin]]:
|
|
175
192
|
"""
|
|
176
193
|
Find LanguagePlugin classes in a module.
|
|
177
194
|
|
|
@@ -181,7 +198,7 @@ class PluginManager:
|
|
|
181
198
|
Returns:
|
|
182
199
|
List of LanguagePlugin classes found in the module
|
|
183
200
|
"""
|
|
184
|
-
plugin_classes = []
|
|
201
|
+
plugin_classes: list[type[LanguagePlugin]] = []
|
|
185
202
|
|
|
186
203
|
for attr_name in dir(module):
|
|
187
204
|
attr = getattr(module, attr_name)
|
|
@@ -285,7 +302,7 @@ class PluginManager:
|
|
|
285
302
|
|
|
286
303
|
return False
|
|
287
304
|
|
|
288
|
-
def get_plugin_info(self, language: str) -> dict[str,
|
|
305
|
+
def get_plugin_info(self, language: str) -> dict[str, Any] | None:
|
|
289
306
|
"""
|
|
290
307
|
Get information about a specific plugin.
|
|
291
308
|
|
|
@@ -347,7 +364,7 @@ class PluginManager:
|
|
|
347
364
|
|
|
348
365
|
extensions = plugin.get_file_extensions()
|
|
349
366
|
if not isinstance(extensions, list):
|
|
350
|
-
log_error("Plugin get_file_extensions() must return a list")
|
|
367
|
+
log_error("Plugin get_file_extensions() must return a list") # type: ignore[unreachable]
|
|
351
368
|
return False
|
|
352
369
|
|
|
353
370
|
extractor = plugin.create_extractor()
|
|
@@ -76,8 +76,11 @@ class QueryLoader:
|
|
|
76
76
|
for attr_name in dir(module):
|
|
77
77
|
if not attr_name.startswith("_"):
|
|
78
78
|
attr_value = getattr(module, attr_name)
|
|
79
|
-
if isinstance(attr_value, str
|
|
79
|
+
if isinstance(attr_value, str):
|
|
80
80
|
queries[attr_name] = attr_value
|
|
81
|
+
elif isinstance(attr_value, dict):
|
|
82
|
+
# Convert dict to string representation for queries
|
|
83
|
+
queries[attr_name] = str(attr_value)
|
|
81
84
|
|
|
82
85
|
self._loaded_queries[language] = queries
|
|
83
86
|
self._query_modules[language] = module
|
|
@@ -383,6 +383,9 @@ class TableFormatter:
|
|
|
383
383
|
if not isinstance(type_name, str):
|
|
384
384
|
type_name = str(type_name)
|
|
385
385
|
|
|
386
|
+
# At this point, type_name is guaranteed to be a string
|
|
387
|
+
assert isinstance(type_name, str)
|
|
388
|
+
|
|
386
389
|
type_mapping = {
|
|
387
390
|
"String": "S",
|
|
388
391
|
"int": "i",
|
|
@@ -462,7 +465,7 @@ class TableFormatter:
|
|
|
462
465
|
|
|
463
466
|
def create_table_formatter(
|
|
464
467
|
format_type: str, language: str = "java", include_javadoc: bool = False
|
|
465
|
-
):
|
|
468
|
+
) -> "TableFormatter":
|
|
466
469
|
"""Create table formatter (using new factory)"""
|
|
467
470
|
# Create TableFormatter directly (for JavaDoc support)
|
|
468
471
|
return TableFormatter(format_type, language, include_javadoc)
|
tree_sitter_analyzer/utils.py
CHANGED
|
@@ -50,7 +50,7 @@ class SafeStreamHandler(logging.StreamHandler):
|
|
|
50
50
|
A StreamHandler that safely handles closed streams
|
|
51
51
|
"""
|
|
52
52
|
|
|
53
|
-
def emit(self, record):
|
|
53
|
+
def emit(self, record: Any) -> None:
|
|
54
54
|
"""
|
|
55
55
|
Emit a record, safely handling closed streams
|
|
56
56
|
"""
|
|
@@ -72,12 +72,12 @@ class SafeStreamHandler(logging.StreamHandler):
|
|
|
72
72
|
self.handleError(record)
|
|
73
73
|
|
|
74
74
|
|
|
75
|
-
def setup_safe_logging_shutdown():
|
|
75
|
+
def setup_safe_logging_shutdown() -> None:
|
|
76
76
|
"""
|
|
77
77
|
Setup safe logging shutdown to prevent I/O errors
|
|
78
78
|
"""
|
|
79
79
|
|
|
80
|
-
def cleanup_logging():
|
|
80
|
+
def cleanup_logging() -> None:
|
|
81
81
|
"""Clean up logging handlers safely"""
|
|
82
82
|
try:
|
|
83
83
|
# Get all loggers
|
|
@@ -178,7 +178,7 @@ class QuietMode:
|
|
|
178
178
|
if self.enabled:
|
|
179
179
|
self.old_level = logger.level
|
|
180
180
|
logger.setLevel(logging.ERROR)
|
|
181
|
-
return self
|
|
181
|
+
return self
|
|
182
182
|
|
|
183
183
|
def __exit__(self, exc_type: Any, exc_val: Any, exc_tb: Any) -> None:
|
|
184
184
|
if self.enabled and self.old_level is not None:
|
|
@@ -222,7 +222,7 @@ perf_logger = create_performance_logger("tree_sitter_analyzer")
|
|
|
222
222
|
def log_performance(
|
|
223
223
|
operation: str,
|
|
224
224
|
execution_time: float | None = None,
|
|
225
|
-
details: dict | None = None,
|
|
225
|
+
details: dict[Any, Any] | str | None = None,
|
|
226
226
|
) -> None:
|
|
227
227
|
"""Log performance metrics"""
|
|
228
228
|
try:
|
|
@@ -270,7 +270,7 @@ class LoggingContext:
|
|
|
270
270
|
if self.enabled and self.level is not None:
|
|
271
271
|
self.old_level = self.target_logger.level
|
|
272
272
|
self.target_logger.setLevel(self.level)
|
|
273
|
-
return self
|
|
273
|
+
return self
|
|
274
274
|
|
|
275
275
|
def __exit__(self, exc_type: Any, exc_val: Any, exc_tb: Any) -> None:
|
|
276
276
|
if self.enabled and self.old_level is not None:
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: tree-sitter-analyzer
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.4.0
|
|
4
4
|
Summary: Extensible multi-language code analyzer framework using Tree-sitter with dynamic plugin architecture
|
|
5
5
|
Project-URL: Homepage, https://github.com/aimasteracc/tree-sitter-analyzer
|
|
6
6
|
Project-URL: Documentation, https://github.com/aimasteracc/tree-sitter-analyzer#readme
|
|
@@ -134,7 +134,7 @@ Description-Content-Type: text/markdown
|
|
|
134
134
|
|
|
135
135
|
[](https://python.org)
|
|
136
136
|
[](LICENSE)
|
|
137
|
-
[](#testing)
|
|
138
138
|
|
|
139
139
|
**Solve the LLM token limit problem for large code files.**
|
|
140
140
|
|
|
@@ -308,7 +308,7 @@ uv sync --extra all --extra mcp
|
|
|
308
308
|
|
|
309
309
|
## 🧪 Testing
|
|
310
310
|
|
|
311
|
-
This project maintains high code quality with **
|
|
311
|
+
This project maintains high code quality with **1216 passing tests**.
|
|
312
312
|
|
|
313
313
|
```bash
|
|
314
314
|
# Run tests
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
tree_sitter_analyzer/__init__.py,sha256=9B6-aaRuPkRNKZXWPtiAKsUvAMP85D4IIQTGKy5GWvQ,3137
|
|
2
|
+
tree_sitter_analyzer/__main__.py,sha256=zlzSTDNKSOs7koUVJc_yCNilrOpF80yS01Tvny6UBi8,281
|
|
3
|
+
tree_sitter_analyzer/api.py,sha256=naRtGuZ27AIVfn6Rid0zQcHDI71UpO9Nh4NQM9JyD3c,16954
|
|
4
|
+
tree_sitter_analyzer/cli_main.py,sha256=kSCGMJS6hYR5sPYZU1KVO-ZyLseKt_uY4PAuIpvLVVU,9350
|
|
5
|
+
tree_sitter_analyzer/encoding_utils.py,sha256=Mmjz-C7J0lQDQhosJd7YHIbu8VAcJ_NYGBxgmL7KN3Q,14382
|
|
6
|
+
tree_sitter_analyzer/exceptions.py,sha256=PxQzmkwbaK_8JneWNniKNgBIjOwrOW-yYbj5pmQgvRs,9772
|
|
7
|
+
tree_sitter_analyzer/file_handler.py,sha256=WJqLiH98yCnNJX1sDM1ckPSJ8JKDW-h0eH7M0Ysllzg,6870
|
|
8
|
+
tree_sitter_analyzer/java_analyzer.py,sha256=eqg0qgptiEEBNcPHCHfiU4PEtpG7Nm2By9EjEKJstHo,6731
|
|
9
|
+
tree_sitter_analyzer/language_detector.py,sha256=EOwuraMtv9hW8xUU2hoD2-zlyhOStAadAXJ4EStiH6I,12142
|
|
10
|
+
tree_sitter_analyzer/language_loader.py,sha256=P1vOa9NR_iVCpawpjziP1uQTX1uL6bgzTb6F9tw4pAc,7900
|
|
11
|
+
tree_sitter_analyzer/models.py,sha256=a0r3mqiTNm5yyZ_q81KRakr_cH7qQZ6e0neWjWPrW18,16094
|
|
12
|
+
tree_sitter_analyzer/output_manager.py,sha256=J1h2sFMEc6YMzmOdY48uZxQbVfAP97H3D9aiGy8BF_U,8210
|
|
13
|
+
tree_sitter_analyzer/query_loader.py,sha256=oIjsgVOxXEhgET7B-SnCbOIx1D0S1KWaCxCq5C9dyxc,9904
|
|
14
|
+
tree_sitter_analyzer/table_formatter.py,sha256=hqmeEY4tuF6DAWDmpyd-7v4Hy0g8N0_SJ8d0gBNuiQg,17855
|
|
15
|
+
tree_sitter_analyzer/utils.py,sha256=B75-lozMxALATmYZE1guJPKgS8k2KeRjhyfg1EqSbio,7994
|
|
16
|
+
tree_sitter_analyzer/cli/__init__.py,sha256=O_3URpbdu5Ilb2-r48LjbZuWtOWQu_BhL3pa6C0G3Bk,871
|
|
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=xDZI4zKTMHNdf7fc_QN0eAQ8a5MnRb5DJ29ERLBDUQs,3424
|
|
21
|
+
tree_sitter_analyzer/cli/commands/base_command.py,sha256=dNg1JkWSPLHsjIF8yTtVUNk_b7FqM-hGRiHl47ztkqw,5787
|
|
22
|
+
tree_sitter_analyzer/cli/commands/default_command.py,sha256=41zPRy2ClcJVFGATx2KCDiMSRKa7vQvJi6R6LccjRrc,558
|
|
23
|
+
tree_sitter_analyzer/cli/commands/partial_read_command.py,sha256=R-dfWvVKxGdZyeieNjJAZQvgM13O3JZa6Fkmjc3sDqk,4684
|
|
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=02WA3sOzfT83FVT6sW7nK04zVcZ9Qj_1S0WloqlTnFk,3602
|
|
27
|
+
tree_sitter_analyzer/cli/commands/table_command.py,sha256=eELDIGiEm_5FR2LarxNpjx5xKVTFXvwi-cBUZxx4R7w,9490
|
|
28
|
+
tree_sitter_analyzer/core/__init__.py,sha256=VlYOy1epW16vjaVd__knESewnU0sfXF9a4hjrFxiSEE,440
|
|
29
|
+
tree_sitter_analyzer/core/analysis_engine.py,sha256=QAVQJtTPNe8IoX33TtSGV5QapubyjB7H5Y7oWW_p2Sk,18740
|
|
30
|
+
tree_sitter_analyzer/core/cache_service.py,sha256=WeNawH6JyJKKBA-0rlJIRPmdErxkLQTQsbghHVkqmPo,9924
|
|
31
|
+
tree_sitter_analyzer/core/engine.py,sha256=6vdXcYfcHqv9tyJfT7iRPsdIIndf73wo71qT6Rt9Zow,18356
|
|
32
|
+
tree_sitter_analyzer/core/parser.py,sha256=qT3yIlTRdod4tf_2o1hU_B-GYGukyM2BtaFxzSoxois,9293
|
|
33
|
+
tree_sitter_analyzer/core/query.py,sha256=UhQxUmQitFobe2YM7Ifhi3X2WdHVb02KzeBunueYJ4I,16397
|
|
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=D2pKdtZTqBLiJQ8qI8g9jfMzVsId00PihEvdmz0qgwc,11331
|
|
38
|
+
tree_sitter_analyzer/formatters/python_formatter.py,sha256=JhrkAr73EVnY66dllYD93XERuilcfVSbGViAaUhlPaQ,10016
|
|
39
|
+
tree_sitter_analyzer/interfaces/__init__.py,sha256=OcT7eNIU0ZXvAeAXbhDqRG3puxn93HeSLqplwj6npTM,271
|
|
40
|
+
tree_sitter_analyzer/interfaces/cli.py,sha256=EsRcy0Wrt5BzR8RxBaXToH29XZoahR-fSLwGaMyf2LE,16840
|
|
41
|
+
tree_sitter_analyzer/interfaces/cli_adapter.py,sha256=u0geTSRo90sfU5EyrXAr7V-bPNPigCWtBEZk9j9qucQ,11405
|
|
42
|
+
tree_sitter_analyzer/interfaces/mcp_adapter.py,sha256=q4oPylICgCPXva-M0v4Geg0c4s4t_IPC7epH1yKGr_0,7145
|
|
43
|
+
tree_sitter_analyzer/interfaces/mcp_server.py,sha256=TvcmWWRxyWp5LrbDRGAeTZww_mmyarA8Mz9eL5xiQv0,16200
|
|
44
|
+
tree_sitter_analyzer/languages/__init__.py,sha256=VTXxJgVjHJAciLhX0zzXOS4EygZMtebeYUbi_0z6fGw,340
|
|
45
|
+
tree_sitter_analyzer/languages/java_plugin.py,sha256=6u50mYCtTUzwqvTEpTvahdscqsMo0nJOVxi5p4xRL3g,45902
|
|
46
|
+
tree_sitter_analyzer/languages/javascript_plugin.py,sha256=k14kHfi5II9MRTsVuy0NQq5l2KZYncCnM1Q6T1c5q_U,15844
|
|
47
|
+
tree_sitter_analyzer/languages/python_plugin.py,sha256=w-Tllw-5TuOgwLYymhVal8uO-A-hBwJsHv0LuDI9nEs,28776
|
|
48
|
+
tree_sitter_analyzer/mcp/__init__.py,sha256=76ZKgWbsXZWB8mNER2D0fNHdULPZhqqBJHi8R0uHDPE,721
|
|
49
|
+
tree_sitter_analyzer/mcp/server.py,sha256=chXNK7jA9SgEqZElKjej63pDvYJqN0cHBzZES0R818s,12426
|
|
50
|
+
tree_sitter_analyzer/mcp/resources/__init__.py,sha256=SWnK8liTQkuQXlVgyRP9mf5HzpqmqohShrC98xlNnDc,1389
|
|
51
|
+
tree_sitter_analyzer/mcp/resources/code_file_resource.py,sha256=POhQ1xPMiGBVVm6AfOQNKM29svDLvlGLA97ZPQgVoHw,6253
|
|
52
|
+
tree_sitter_analyzer/mcp/resources/project_stats_resource.py,sha256=uZrBI1oWZbPmNQP_cI4Q8hK4py6AqBztqKmv2B4UGOE,19203
|
|
53
|
+
tree_sitter_analyzer/mcp/tools/__init__.py,sha256=u7JrSLwE95y50mfjSus6HRdtdhkNbVrW8jP4AooawEU,762
|
|
54
|
+
tree_sitter_analyzer/mcp/tools/analyze_scale_tool.py,sha256=njQxFS5507RolQR_nEJEnZVQMfs2MBEenWEhDYJC1_o,26343
|
|
55
|
+
tree_sitter_analyzer/mcp/tools/analyze_scale_tool_cli_compatible.py,sha256=mssed7bEfGeGxW4mOf7dg8BDS1oqHLolIBNX9DaZ3DM,8997
|
|
56
|
+
tree_sitter_analyzer/mcp/tools/base_tool.py,sha256=FVSMgKIliQ5EBVQEfjYwWeqzWt9OqOFDr3dyACIDxig,1210
|
|
57
|
+
tree_sitter_analyzer/mcp/tools/read_partial_tool.py,sha256=0Rb-jI2CfzN1PVeJZnkERaowm9Y8iFSZl8W-VIQQ8cI,10735
|
|
58
|
+
tree_sitter_analyzer/mcp/tools/table_format_tool.py,sha256=mydPcWazEIaF1IYEgmWTu2HAOVXVVb6s1-Pmcnnh6HE,14261
|
|
59
|
+
tree_sitter_analyzer/mcp/tools/universal_analyze_tool.py,sha256=Wl4wZWHYbvcYKnFmdkEn7FTNSel_jlnpQCjfSuzYkEg,20785
|
|
60
|
+
tree_sitter_analyzer/mcp/utils/__init__.py,sha256=hibcoJc9PEetXqPIpvwHw1cpr1rabAm0QQaDZpxvA_g,2956
|
|
61
|
+
tree_sitter_analyzer/mcp/utils/error_handler.py,sha256=QgKqjUhe0QTCRrtoiuTxDMUt-eDRNclf1ToJtaCNoq8,17423
|
|
62
|
+
tree_sitter_analyzer/plugins/__init__.py,sha256=ITE9bTz7NO4axnn8g5Z-1_ydhSLT0RnY6Y1J9OhUP3E,10326
|
|
63
|
+
tree_sitter_analyzer/plugins/base.py,sha256=haHm66U9n0QDLjqP5PYd7sZWS30z4px0nInPF-bXHH8,16095
|
|
64
|
+
tree_sitter_analyzer/plugins/manager.py,sha256=PyEY3jeuCBpDVqguWhaAu7nzUZM17_pI6wml2e0Hamo,12535
|
|
65
|
+
tree_sitter_analyzer/queries/__init__.py,sha256=dwDDc7PCw_UWruxSeJ8uEBjY0O5uLDBI5YqyvBhbnN0,696
|
|
66
|
+
tree_sitter_analyzer/queries/java.py,sha256=eGbeu6UfTWsQ2oC5dvYMsQTH6GlT7mvhf9Mq2y52f2A,12536
|
|
67
|
+
tree_sitter_analyzer/queries/javascript.py,sha256=MFZgGGUTcujsG4fIMjQjaZoKezmpHsDGHBG2ZLBH1nQ,4010
|
|
68
|
+
tree_sitter_analyzer/queries/python.py,sha256=7-uOr8ZR7WC7iwbx8yeFfswYoNg6FwtdGXrnt6rGtm8,7708
|
|
69
|
+
tree_sitter_analyzer/queries/typescript.py,sha256=LJCfyntKFz7fHx1YG21DtdMC1nqRrrj3LkjydD2yDnk,6884
|
|
70
|
+
tree_sitter_analyzer-0.4.0.dist-info/METADATA,sha256=adZ8u-zh-coXjefPIKgDj0viEs4DAUxf3dugEh1hDuo,12976
|
|
71
|
+
tree_sitter_analyzer-0.4.0.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
|
72
|
+
tree_sitter_analyzer-0.4.0.dist-info/entry_points.txt,sha256=EA0Ow27x2SqNt2300sv70RTWxKRIxJzOhNPIVlez4NM,417
|
|
73
|
+
tree_sitter_analyzer-0.4.0.dist-info/RECORD,,
|
{tree_sitter_analyzer-0.3.0.dist-info → tree_sitter_analyzer-0.4.0.dist-info}/entry_points.txt
RENAMED
|
@@ -5,4 +5,5 @@ tree-sitter-analyzer = tree_sitter_analyzer.cli_main:main
|
|
|
5
5
|
|
|
6
6
|
[tree_sitter_analyzer.plugins]
|
|
7
7
|
java = tree_sitter_analyzer.languages.java_plugin:JavaPlugin
|
|
8
|
-
|
|
8
|
+
javascript = tree_sitter_analyzer.languages.javascript_plugin:JavaScriptPlugin
|
|
9
|
+
python = tree_sitter_analyzer.languages.python_plugin:PythonPlugin
|