tree-sitter-analyzer 0.6.1__tar.gz → 0.6.2__tar.gz

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 (99) hide show
  1. {tree_sitter_analyzer-0.6.1 → tree_sitter_analyzer-0.6.2}/CHANGELOG.md +29 -0
  2. {tree_sitter_analyzer-0.6.1 → tree_sitter_analyzer-0.6.2}/PKG-INFO +1 -1
  3. {tree_sitter_analyzer-0.6.1 → tree_sitter_analyzer-0.6.2}/pyproject.toml +1 -1
  4. {tree_sitter_analyzer-0.6.1 → tree_sitter_analyzer-0.6.2}/tree_sitter_analyzer/core/engine.py +7 -0
  5. {tree_sitter_analyzer-0.6.1 → tree_sitter_analyzer-0.6.2}/tree_sitter_analyzer/languages/java_plugin.py +28 -0
  6. {tree_sitter_analyzer-0.6.1 → tree_sitter_analyzer-0.6.2}/uv.lock +1 -1
  7. tree_sitter_analyzer-0.6.1/verify_release.py +0 -178
  8. {tree_sitter_analyzer-0.6.1 → tree_sitter_analyzer-0.6.2}/.gitignore +0 -0
  9. {tree_sitter_analyzer-0.6.1 → tree_sitter_analyzer-0.6.2}/.pre-commit-config.yaml +0 -0
  10. {tree_sitter_analyzer-0.6.1 → tree_sitter_analyzer-0.6.2}/AI_COLLABORATION_GUIDE.md +0 -0
  11. {tree_sitter_analyzer-0.6.1 → tree_sitter_analyzer-0.6.2}/CODE_STYLE_GUIDE.md +0 -0
  12. {tree_sitter_analyzer-0.6.1 → tree_sitter_analyzer-0.6.2}/CONTRIBUTING.md +0 -0
  13. {tree_sitter_analyzer-0.6.1 → tree_sitter_analyzer-0.6.2}/DEPLOYMENT_GUIDE.md +0 -0
  14. {tree_sitter_analyzer-0.6.1 → tree_sitter_analyzer-0.6.2}/LLM_CODING_GUIDELINES.md +0 -0
  15. {tree_sitter_analyzer-0.6.1 → tree_sitter_analyzer-0.6.2}/MCP_SETUP_DEVELOPERS.md +0 -0
  16. {tree_sitter_analyzer-0.6.1 → tree_sitter_analyzer-0.6.2}/MCP_SETUP_USERS.md +0 -0
  17. {tree_sitter_analyzer-0.6.1 → tree_sitter_analyzer-0.6.2}/README.md +0 -0
  18. {tree_sitter_analyzer-0.6.1 → tree_sitter_analyzer-0.6.2}/README_ja.md +0 -0
  19. {tree_sitter_analyzer-0.6.1 → tree_sitter_analyzer-0.6.2}/README_zh.md +0 -0
  20. {tree_sitter_analyzer-0.6.1 → tree_sitter_analyzer-0.6.2}/build_standalone.py +0 -0
  21. {tree_sitter_analyzer-0.6.1 → tree_sitter_analyzer-0.6.2}/check_quality.py +0 -0
  22. {tree_sitter_analyzer-0.6.1 → tree_sitter_analyzer-0.6.2}/docs/api.md +0 -0
  23. {tree_sitter_analyzer-0.6.1 → tree_sitter_analyzer-0.6.2}/examples/BigService.java +0 -0
  24. {tree_sitter_analyzer-0.6.1 → tree_sitter_analyzer-0.6.2}/examples/BigService.json +0 -0
  25. {tree_sitter_analyzer-0.6.1 → tree_sitter_analyzer-0.6.2}/examples/BigService.summary.json +0 -0
  26. {tree_sitter_analyzer-0.6.1 → tree_sitter_analyzer-0.6.2}/examples/JavaDocTest.java +0 -0
  27. {tree_sitter_analyzer-0.6.1 → tree_sitter_analyzer-0.6.2}/examples/MultiClass.java +0 -0
  28. {tree_sitter_analyzer-0.6.1 → tree_sitter_analyzer-0.6.2}/examples/Sample.java +0 -0
  29. {tree_sitter_analyzer-0.6.1 → tree_sitter_analyzer-0.6.2}/examples/calculate_token_comparison.py +0 -0
  30. {tree_sitter_analyzer-0.6.1 → tree_sitter_analyzer-0.6.2}/examples/sample.py +0 -0
  31. {tree_sitter_analyzer-0.6.1 → tree_sitter_analyzer-0.6.2}/llm_code_checker.py +0 -0
  32. {tree_sitter_analyzer-0.6.1 → tree_sitter_analyzer-0.6.2}/pytest.ini +0 -0
  33. {tree_sitter_analyzer-0.6.1 → tree_sitter_analyzer-0.6.2}/tree_sitter_analyzer/__init__.py +0 -0
  34. {tree_sitter_analyzer-0.6.1 → tree_sitter_analyzer-0.6.2}/tree_sitter_analyzer/__main__.py +0 -0
  35. {tree_sitter_analyzer-0.6.1 → tree_sitter_analyzer-0.6.2}/tree_sitter_analyzer/api.py +0 -0
  36. {tree_sitter_analyzer-0.6.1 → tree_sitter_analyzer-0.6.2}/tree_sitter_analyzer/cli/__init__.py +0 -0
  37. {tree_sitter_analyzer-0.6.1 → tree_sitter_analyzer-0.6.2}/tree_sitter_analyzer/cli/__main__.py +0 -0
  38. {tree_sitter_analyzer-0.6.1 → tree_sitter_analyzer-0.6.2}/tree_sitter_analyzer/cli/commands/__init__.py +0 -0
  39. {tree_sitter_analyzer-0.6.1 → tree_sitter_analyzer-0.6.2}/tree_sitter_analyzer/cli/commands/advanced_command.py +0 -0
  40. {tree_sitter_analyzer-0.6.1 → tree_sitter_analyzer-0.6.2}/tree_sitter_analyzer/cli/commands/base_command.py +0 -0
  41. {tree_sitter_analyzer-0.6.1 → tree_sitter_analyzer-0.6.2}/tree_sitter_analyzer/cli/commands/default_command.py +0 -0
  42. {tree_sitter_analyzer-0.6.1 → tree_sitter_analyzer-0.6.2}/tree_sitter_analyzer/cli/commands/partial_read_command.py +0 -0
  43. {tree_sitter_analyzer-0.6.1 → tree_sitter_analyzer-0.6.2}/tree_sitter_analyzer/cli/commands/query_command.py +0 -0
  44. {tree_sitter_analyzer-0.6.1 → tree_sitter_analyzer-0.6.2}/tree_sitter_analyzer/cli/commands/structure_command.py +0 -0
  45. {tree_sitter_analyzer-0.6.1 → tree_sitter_analyzer-0.6.2}/tree_sitter_analyzer/cli/commands/summary_command.py +0 -0
  46. {tree_sitter_analyzer-0.6.1 → tree_sitter_analyzer-0.6.2}/tree_sitter_analyzer/cli/commands/table_command.py +0 -0
  47. {tree_sitter_analyzer-0.6.1 → tree_sitter_analyzer-0.6.2}/tree_sitter_analyzer/cli/info_commands.py +0 -0
  48. {tree_sitter_analyzer-0.6.1 → tree_sitter_analyzer-0.6.2}/tree_sitter_analyzer/cli_main.py +0 -0
  49. {tree_sitter_analyzer-0.6.1 → tree_sitter_analyzer-0.6.2}/tree_sitter_analyzer/core/__init__.py +0 -0
  50. {tree_sitter_analyzer-0.6.1 → tree_sitter_analyzer-0.6.2}/tree_sitter_analyzer/core/analysis_engine.py +0 -0
  51. {tree_sitter_analyzer-0.6.1 → tree_sitter_analyzer-0.6.2}/tree_sitter_analyzer/core/cache_service.py +0 -0
  52. {tree_sitter_analyzer-0.6.1 → tree_sitter_analyzer-0.6.2}/tree_sitter_analyzer/core/parser.py +0 -0
  53. {tree_sitter_analyzer-0.6.1 → tree_sitter_analyzer-0.6.2}/tree_sitter_analyzer/core/query.py +0 -0
  54. {tree_sitter_analyzer-0.6.1 → tree_sitter_analyzer-0.6.2}/tree_sitter_analyzer/encoding_utils.py +0 -0
  55. {tree_sitter_analyzer-0.6.1 → tree_sitter_analyzer-0.6.2}/tree_sitter_analyzer/exceptions.py +0 -0
  56. {tree_sitter_analyzer-0.6.1 → tree_sitter_analyzer-0.6.2}/tree_sitter_analyzer/file_handler.py +0 -0
  57. {tree_sitter_analyzer-0.6.1 → tree_sitter_analyzer-0.6.2}/tree_sitter_analyzer/formatters/__init__.py +0 -0
  58. {tree_sitter_analyzer-0.6.1 → tree_sitter_analyzer-0.6.2}/tree_sitter_analyzer/formatters/base_formatter.py +0 -0
  59. {tree_sitter_analyzer-0.6.1 → tree_sitter_analyzer-0.6.2}/tree_sitter_analyzer/formatters/formatter_factory.py +0 -0
  60. {tree_sitter_analyzer-0.6.1 → tree_sitter_analyzer-0.6.2}/tree_sitter_analyzer/formatters/java_formatter.py +0 -0
  61. {tree_sitter_analyzer-0.6.1 → tree_sitter_analyzer-0.6.2}/tree_sitter_analyzer/formatters/python_formatter.py +0 -0
  62. {tree_sitter_analyzer-0.6.1 → tree_sitter_analyzer-0.6.2}/tree_sitter_analyzer/interfaces/__init__.py +0 -0
  63. {tree_sitter_analyzer-0.6.1 → tree_sitter_analyzer-0.6.2}/tree_sitter_analyzer/interfaces/cli.py +0 -0
  64. {tree_sitter_analyzer-0.6.1 → tree_sitter_analyzer-0.6.2}/tree_sitter_analyzer/interfaces/cli_adapter.py +0 -0
  65. {tree_sitter_analyzer-0.6.1 → tree_sitter_analyzer-0.6.2}/tree_sitter_analyzer/interfaces/mcp_adapter.py +0 -0
  66. {tree_sitter_analyzer-0.6.1 → tree_sitter_analyzer-0.6.2}/tree_sitter_analyzer/interfaces/mcp_server.py +0 -0
  67. {tree_sitter_analyzer-0.6.1 → tree_sitter_analyzer-0.6.2}/tree_sitter_analyzer/language_detector.py +0 -0
  68. {tree_sitter_analyzer-0.6.1 → tree_sitter_analyzer-0.6.2}/tree_sitter_analyzer/language_loader.py +0 -0
  69. {tree_sitter_analyzer-0.6.1 → tree_sitter_analyzer-0.6.2}/tree_sitter_analyzer/languages/__init__.py +0 -0
  70. {tree_sitter_analyzer-0.6.1 → tree_sitter_analyzer-0.6.2}/tree_sitter_analyzer/languages/javascript_plugin.py +0 -0
  71. {tree_sitter_analyzer-0.6.1 → tree_sitter_analyzer-0.6.2}/tree_sitter_analyzer/languages/python_plugin.py +0 -0
  72. {tree_sitter_analyzer-0.6.1 → tree_sitter_analyzer-0.6.2}/tree_sitter_analyzer/mcp/__init__.py +0 -0
  73. {tree_sitter_analyzer-0.6.1 → tree_sitter_analyzer-0.6.2}/tree_sitter_analyzer/mcp/resources/__init__.py +0 -0
  74. {tree_sitter_analyzer-0.6.1 → tree_sitter_analyzer-0.6.2}/tree_sitter_analyzer/mcp/resources/code_file_resource.py +0 -0
  75. {tree_sitter_analyzer-0.6.1 → tree_sitter_analyzer-0.6.2}/tree_sitter_analyzer/mcp/resources/project_stats_resource.py +0 -0
  76. {tree_sitter_analyzer-0.6.1 → tree_sitter_analyzer-0.6.2}/tree_sitter_analyzer/mcp/server.py +0 -0
  77. {tree_sitter_analyzer-0.6.1 → tree_sitter_analyzer-0.6.2}/tree_sitter_analyzer/mcp/tools/__init__.py +0 -0
  78. {tree_sitter_analyzer-0.6.1 → tree_sitter_analyzer-0.6.2}/tree_sitter_analyzer/mcp/tools/analyze_scale_tool.py +0 -0
  79. {tree_sitter_analyzer-0.6.1 → tree_sitter_analyzer-0.6.2}/tree_sitter_analyzer/mcp/tools/analyze_scale_tool_cli_compatible.py +0 -0
  80. {tree_sitter_analyzer-0.6.1 → tree_sitter_analyzer-0.6.2}/tree_sitter_analyzer/mcp/tools/base_tool.py +0 -0
  81. {tree_sitter_analyzer-0.6.1 → tree_sitter_analyzer-0.6.2}/tree_sitter_analyzer/mcp/tools/read_partial_tool.py +0 -0
  82. {tree_sitter_analyzer-0.6.1 → tree_sitter_analyzer-0.6.2}/tree_sitter_analyzer/mcp/tools/table_format_tool.py +0 -0
  83. {tree_sitter_analyzer-0.6.1 → tree_sitter_analyzer-0.6.2}/tree_sitter_analyzer/mcp/tools/universal_analyze_tool.py +0 -0
  84. {tree_sitter_analyzer-0.6.1 → tree_sitter_analyzer-0.6.2}/tree_sitter_analyzer/mcp/utils/__init__.py +0 -0
  85. {tree_sitter_analyzer-0.6.1 → tree_sitter_analyzer-0.6.2}/tree_sitter_analyzer/mcp/utils/error_handler.py +0 -0
  86. {tree_sitter_analyzer-0.6.1 → tree_sitter_analyzer-0.6.2}/tree_sitter_analyzer/models.py +0 -0
  87. {tree_sitter_analyzer-0.6.1 → tree_sitter_analyzer-0.6.2}/tree_sitter_analyzer/output_manager.py +0 -0
  88. {tree_sitter_analyzer-0.6.1 → tree_sitter_analyzer-0.6.2}/tree_sitter_analyzer/plugins/__init__.py +0 -0
  89. {tree_sitter_analyzer-0.6.1 → tree_sitter_analyzer-0.6.2}/tree_sitter_analyzer/plugins/base.py +0 -0
  90. {tree_sitter_analyzer-0.6.1 → tree_sitter_analyzer-0.6.2}/tree_sitter_analyzer/plugins/manager.py +0 -0
  91. {tree_sitter_analyzer-0.6.1 → tree_sitter_analyzer-0.6.2}/tree_sitter_analyzer/queries/__init__.py +0 -0
  92. {tree_sitter_analyzer-0.6.1 → tree_sitter_analyzer-0.6.2}/tree_sitter_analyzer/queries/java.py +0 -0
  93. {tree_sitter_analyzer-0.6.1 → tree_sitter_analyzer-0.6.2}/tree_sitter_analyzer/queries/javascript.py +0 -0
  94. {tree_sitter_analyzer-0.6.1 → tree_sitter_analyzer-0.6.2}/tree_sitter_analyzer/queries/python.py +0 -0
  95. {tree_sitter_analyzer-0.6.1 → tree_sitter_analyzer-0.6.2}/tree_sitter_analyzer/queries/typescript.py +0 -0
  96. {tree_sitter_analyzer-0.6.1 → tree_sitter_analyzer-0.6.2}/tree_sitter_analyzer/query_loader.py +0 -0
  97. {tree_sitter_analyzer-0.6.1 → tree_sitter_analyzer-0.6.2}/tree_sitter_analyzer/table_formatter.py +0 -0
  98. {tree_sitter_analyzer-0.6.1 → tree_sitter_analyzer-0.6.2}/tree_sitter_analyzer/utils.py +0 -0
  99. {tree_sitter_analyzer-0.6.1 → tree_sitter_analyzer-0.6.2}/upload_to_pypi.py +0 -0
@@ -5,6 +5,35 @@ All notable changes to this project will be documented in this file.
5
5
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
6
6
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
7
 
8
+ ## [0.6.2] - 2025-08-04
9
+
10
+ ### 🔧 Fixed
11
+
12
+ #### Java Package Name Parsing
13
+ - **Fixed**: Java package names now display correctly instead of "unknown"
14
+ - **Fixed**: Package name extraction works regardless of method call order
15
+ - **Fixed**: CLI commands now show correct package names (e.g., `# com.example.service.BigService`)
16
+ - **Fixed**: MCP tools now display proper package information
17
+ - **Fixed**: Table formatter shows accurate package data (`| Package | com.example.service |`)
18
+
19
+ #### Core Improvements
20
+ - **Enhanced**: JavaElementExtractor now ensures package info is available before class extraction
21
+ - **Enhanced**: JavaPlugin.analyze_file includes package elements in analysis results
22
+ - **Enhanced**: Added robust package extraction fallback mechanism
23
+
24
+ #### Testing
25
+ - **Added**: Comprehensive regression test suite for package name parsing
26
+ - **Added**: Verification script to prevent future package name issues
27
+ - **Added**: Edge case testing for various package declaration patterns
28
+
29
+ ### 📦 Package Updates
30
+
31
+ - **Updated**: Java analysis now includes Package elements in results
32
+ - **Updated**: MCP tools provide complete package information
33
+ - **Updated**: CLI output format consistency improved
34
+
35
+ ---
36
+
8
37
  ## [0.6.1] - 2025-08-04
9
38
 
10
39
  ### 🔧 Fixed
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: tree-sitter-analyzer
3
- Version: 0.6.1
3
+ Version: 0.6.2
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
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "tree-sitter-analyzer"
7
- version = "0.6.1"
7
+ version = "0.6.2"
8
8
  description = "Extensible multi-language code analyzer framework using Tree-sitter with dynamic plugin architecture"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.10"
@@ -301,6 +301,13 @@ class AnalysisEngine:
301
301
  # Extract different types of elements
302
302
  elements = []
303
303
 
304
+ # Extract packages first (needed for proper class package resolution)
305
+ if hasattr(extractor, "extract_packages"):
306
+ packages = extractor.extract_packages(
307
+ parse_result.tree, parse_result.source_code
308
+ )
309
+ elements.extend(packages)
310
+
304
311
  # Extract functions/methods
305
312
  if hasattr(extractor, "extract_functions"):
306
313
  functions = extractor.extract_functions(
@@ -100,6 +100,12 @@ class JavaElementExtractor(ElementExtractor):
100
100
  self.content_lines = source_code.split("\n")
101
101
  self._reset_caches()
102
102
 
103
+ # Ensure package information is extracted before processing classes
104
+ # This fixes the issue where current_package is empty when extract_classes
105
+ # is called independently or before extract_imports
106
+ if not self.current_package:
107
+ self._extract_package_from_tree(tree)
108
+
103
109
  classes: list[Class] = []
104
110
 
105
111
  # Use AdvancedAnalyzer's optimized traversal
@@ -754,6 +760,22 @@ class JavaElementExtractor(ElementExtractor):
754
760
  log_error(f"Unexpected error in package element extraction: {e}")
755
761
  return None
756
762
 
763
+ def _extract_package_from_tree(self, tree: "tree_sitter.Tree") -> None:
764
+ """
765
+ Extract package information from the tree and set current_package.
766
+
767
+ This method ensures that package information is available for class extraction
768
+ regardless of the order in which extraction methods are called.
769
+ """
770
+ try:
771
+ # Look for package declaration in the root node's children
772
+ for child in tree.root_node.children:
773
+ if child.type == "package_declaration":
774
+ self._extract_package_info(child)
775
+ break # Only one package declaration per file
776
+ except Exception as e:
777
+ log_debug(f"Failed to extract package from tree: {e}")
778
+
757
779
  def _determine_visibility(self, modifiers: list[str]) -> str:
758
780
  """Determine visibility from modifiers"""
759
781
  if "public" in modifiers:
@@ -1113,6 +1135,10 @@ class JavaPlugin(LanguagePlugin):
1113
1135
  extractor = self.create_extractor()
1114
1136
 
1115
1137
  if parse_result.tree:
1138
+ log_debug("Java Plugin: Extracting packages...")
1139
+ packages = extractor.extract_packages(parse_result.tree, source_code)
1140
+ log_debug(f"Java Plugin: Found {len(packages)} packages")
1141
+
1116
1142
  log_debug("Java Plugin: Extracting functions...")
1117
1143
  functions = extractor.extract_functions(parse_result.tree, source_code)
1118
1144
  log_debug(f"Java Plugin: Found {len(functions)} functions")
@@ -1129,6 +1155,7 @@ class JavaPlugin(LanguagePlugin):
1129
1155
  imports = extractor.extract_imports(parse_result.tree, source_code)
1130
1156
  log_debug(f"Java Plugin: Found {len(imports)} imports")
1131
1157
  else:
1158
+ packages = []
1132
1159
  functions = []
1133
1160
  classes = []
1134
1161
  variables = []
@@ -1136,6 +1163,7 @@ class JavaPlugin(LanguagePlugin):
1136
1163
 
1137
1164
  # Combine all elements
1138
1165
  all_elements: list[CodeElement] = []
1166
+ all_elements.extend(packages)
1139
1167
  all_elements.extend(functions)
1140
1168
  all_elements.extend(classes)
1141
1169
  all_elements.extend(variables)
@@ -1496,7 +1496,7 @@ wheels = [
1496
1496
 
1497
1497
  [[package]]
1498
1498
  name = "tree-sitter-analyzer"
1499
- version = "0.6.1"
1499
+ version = "0.6.2"
1500
1500
  source = { editable = "." }
1501
1501
  dependencies = [
1502
1502
  { name = "cachetools" },
@@ -1,178 +0,0 @@
1
- #!/usr/bin/env python3
2
- """
3
- Release Verification Script
4
- Verifies that the v0.6.0 release is working correctly
5
- """
6
-
7
- import subprocess
8
- import sys
9
- import tempfile
10
- from pathlib import Path
11
-
12
-
13
- def run_command(cmd, description):
14
- """Run a command and return success status"""
15
- print(f"\n🔍 {description}")
16
- print(f"Command: {' '.join(cmd)}")
17
-
18
- try:
19
- result = subprocess.run(
20
- cmd,
21
- capture_output=True,
22
- text=True,
23
- check=True
24
- )
25
- print(f"✅ Success: {description}")
26
- if result.stdout.strip():
27
- print(f"Output: {result.stdout.strip()[:200]}...")
28
- return True
29
- except subprocess.CalledProcessError as e:
30
- print(f"❌ Failed: {description}")
31
- print(f"Error: {e.stderr.strip()}")
32
- return False
33
-
34
-
35
- def test_local_installation():
36
- """Test installation from local wheel file"""
37
- print("\n" + "="*60)
38
- print("🧪 TESTING LOCAL INSTALLATION")
39
- print("="*60)
40
-
41
- wheel_file = Path("dist/tree_sitter_analyzer-0.6.0-py3-none-any.whl")
42
- if not wheel_file.exists():
43
- print(f"❌ Wheel file not found: {wheel_file}")
44
- return False
45
-
46
- # Test installation in isolated environment
47
- success = run_command([
48
- "uv", "run", "--isolated",
49
- "--with", str(wheel_file),
50
- "--with", "tree-sitter-java",
51
- "python", "-c",
52
- """
53
- import tree_sitter_analyzer
54
- print(f'Package version: {tree_sitter_analyzer.__version__ if hasattr(tree_sitter_analyzer, "__version__") else "unknown"}')
55
-
56
- # Test that CodeAnalyzer is NOT available (breaking change)
57
- try:
58
- from tree_sitter_analyzer import CodeAnalyzer
59
- print('❌ ERROR: CodeAnalyzer should not be available!')
60
- exit(1)
61
- except ImportError:
62
- print('✅ CodeAnalyzer correctly removed')
63
-
64
- # Test new API
65
- from tree_sitter_analyzer.core.analysis_engine import get_analysis_engine
66
- engine = get_analysis_engine()
67
- print('✅ New analysis engine works')
68
- """
69
- ], "Test local wheel installation and API changes")
70
-
71
- return success
72
-
73
-
74
- def test_cli_functionality():
75
- """Test CLI functionality"""
76
- print("\n" + "="*60)
77
- print("🧪 TESTING CLI FUNCTIONALITY")
78
- print("="*60)
79
-
80
- # Create a test Java file
81
- test_content = '''
82
- public class TestClass {
83
- private String name;
84
-
85
- public TestClass(String name) {
86
- this.name = name;
87
- }
88
-
89
- public String getName() {
90
- return name;
91
- }
92
- }
93
- '''
94
-
95
- with tempfile.NamedTemporaryFile(mode='w', suffix='.java', delete=False) as f:
96
- f.write(test_content)
97
- test_file = f.name
98
-
99
- try:
100
- # Test CLI with local wheel
101
- success = run_command([
102
- "uv", "run", "--isolated",
103
- "--with", "dist/tree_sitter_analyzer-0.6.0-py3-none-any.whl",
104
- "--with", "tree-sitter-java",
105
- "tree-sitter-analyzer", test_file, "--advanced"
106
- ], "Test CLI functionality with local wheel")
107
-
108
- return success
109
- finally:
110
- Path(test_file).unlink(missing_ok=True)
111
-
112
-
113
- def test_pypi_installation():
114
- """Test installation from PyPI (if available)"""
115
- print("\n" + "="*60)
116
- print("🧪 TESTING PYPI INSTALLATION")
117
- print("="*60)
118
-
119
- # Test if package is available on PyPI
120
- success = run_command([
121
- "uv", "run", "--isolated",
122
- "--with", "tree-sitter-analyzer==0.6.0",
123
- "python", "-c",
124
- """
125
- import tree_sitter_analyzer
126
- print('✅ Successfully installed from PyPI')
127
-
128
- # Test that CodeAnalyzer is NOT available
129
- try:
130
- from tree_sitter_analyzer import CodeAnalyzer
131
- print('❌ ERROR: CodeAnalyzer should not be available!')
132
- exit(1)
133
- except ImportError:
134
- print('✅ CodeAnalyzer correctly removed from PyPI package')
135
- """
136
- ], "Test PyPI installation")
137
-
138
- return success
139
-
140
-
141
- def main():
142
- """Main verification function"""
143
- print("🚀 Tree-sitter Analyzer v0.6.0 Release Verification")
144
- print("="*60)
145
-
146
- results = []
147
-
148
- # Test local installation
149
- results.append(("Local Installation", test_local_installation()))
150
-
151
- # Test CLI functionality
152
- results.append(("CLI Functionality", test_cli_functionality()))
153
-
154
- # Test PyPI installation (may fail if not yet published)
155
- results.append(("PyPI Installation", test_pypi_installation()))
156
-
157
- # Summary
158
- print("\n" + "="*60)
159
- print("📊 VERIFICATION SUMMARY")
160
- print("="*60)
161
-
162
- all_passed = True
163
- for test_name, passed in results:
164
- status = "✅ PASS" if passed else "❌ FAIL"
165
- print(f"{test_name:20} {status}")
166
- if not passed:
167
- all_passed = False
168
-
169
- print("\n" + "="*60)
170
- if all_passed:
171
- print("🎉 ALL TESTS PASSED! Release v0.6.0 is ready!")
172
- else:
173
- print("⚠️ Some tests failed. Please review the issues above.")
174
- sys.exit(1)
175
-
176
-
177
- if __name__ == "__main__":
178
- main()