Skip to main content
Glama

mcp-server-tree-sitter

by wrale
MIT License
175
  • Apple
  • Linux
diagnostics.md7.2 kB
# MCP Tree-sitter Server Diagnostics This document describes the diagnostic testing approach for the MCP Tree-sitter Server project. ## Overview The diagnostics suite consists of targeted pytest tests that isolate and document specific issues in the codebase. These tests are designed to: 1. Document current behavior with proper pass/fail results 2. Isolate failure points to specific functions or modules 3. Provide detailed error information and stack traces 4. Create a foundation for developing targeted fixes The diagnostic framework combines standard pytest behavior with enhanced diagnostic capabilities: - Tests properly pass or fail based on assertions - Comprehensive diagnostic data is captured for debugging - Diagnostic information is saved to JSON for further analysis ## Running Diagnostics The Makefile includes several targets for running diagnostics: ```bash # Run all diagnostic tests make test-diagnostics # CI-friendly version (won't fail the build on diagnostic issues) make test-diagnostics-ci ``` For running diagnostics alongside regular tests: ```bash # Run both regular tests and diagnostics make test-all ``` ## Using the Diagnostic Framework ### Basic Test Structure ```python import pytest from mcp_server_tree_sitter.testing import diagnostic @pytest.mark.diagnostic # Mark the test as producing diagnostic data def test_some_feature(diagnostic): # Use the diagnostic fixture # Add details to diagnostic data diagnostic.add_detail("key", "value") try: # Test your functionality result = some_functionality() # Use standard assertions - the test will fail if they don't pass assert result is not None, "Result should not be None" except Exception as e: # Record the error in diagnostic data diagnostic.add_error("ErrorType", str(e)) # Add any artifacts you want to save diagnostic.add_artifact("error_artifact", {"error": str(e)}) # Re-raise to fail the test raise ``` ### Diagnostic Operations The `diagnostic` fixture provides several methods: - `add_detail(key, value)`: Add a key-value pair to diagnostic details - `add_error(error_type, message, traceback=None)`: Add an error - `add_artifact(name, content)`: Add an artifact (e.g., JSON data) - `finalize(status="completed")`: Mark the diagnostic as complete ## Key Issues Identified and Fixed The following issues were identified during the diagnostic process and have since been fixed in the current implementation: ### 1. Language Registry Issues (FIXED) - `list_languages()` previously returned empty lists despite languages being available - Language detection through `install_language()` worked, but languages didn't appear in available lists ### 2. AST Parsing Failures (FIXED) - `get_ast()` previously failed with errors when attempting to build the tree - Core AST parsing functionality is now operational with efficient cursor-based traversal ### 3. "Too Many Values to Unpack" Errors (FIXED) - Several analysis functions failed with "too many values to unpack (expected 2)" - Affected `get_symbols()`, `get_dependencies()`, and `analyze_complexity()` - These issues were resolved by fixing query captures handling ### 4. Tree-sitter Language Pack Integration (FIXED) - Integration with tree-sitter-language-pack is now complete and stable - All supported languages are correctly recognized and available for analysis ## Diagnostic Results The diagnostic tests generate detailed JSON result files in the `diagnostic_results` directory with timestamps. These files contain valuable information for debugging: - Error messages and stack traces - Current behavior documentation - Environment and configuration details - Detailed information about tree-sitter integration In addition, the test output includes a diagnostic summary: ``` ============================== Diagnostic Summary ============================== Collected 4 diagnostics, 2 with errors -------------------------------- Error Details --------------------------------- - /path/to/test.py::test_function Error 1: ErrorType: Error message ``` ## Recommended Debugging Approach 1. Run the diagnostic tests to verify current issues ``` make test-diagnostics ``` 2. Examine the diagnostic results in the terminal output and the `diagnostic_results` directory 3. Review specific error patterns to identify the root cause: - For unpacking errors, check the query capture processing code - For AST parsing, examine the tree-sitter integration layer - For language registry issues, check the initialization sequence 4. Make targeted fixes to address specific issues, using the diagnostic tests to verify repairs 5. After fixes, run both diagnostics and regular tests to ensure no regressions ``` make test-all ``` ## Previous Issue Priority (Now Resolved) The following priority was used to address the previously identified issues, which have all been resolved: 1. ✅ **Language Registry Issues** - Fixed language listing to enable proper language detection 2. ✅ **AST Parsing** - Fixed core parsing functionality with efficient cursor-based traversal 3. ✅ **Query Handling** - Resolved unpacking errors in query captures to enable analysis tools 4. ✅ **Incremental Improvements** - Core functionality is working correctly and ready for further refinement All 90 tests are now passing, including the diagnostic tests. ## Integrating with Development Workflow Diagnostics should be run: - After any significant changes to core tree-sitter integration code - Before submitting pull requests that touch language or AST handling - When investigating specific failures in higher-level functionality - As part of debugging for issues reported by users ## Continuous Integration For CI environments, the diagnostic tests have special considerations: ### CI-Friendly Targets The Makefile includes CI-friendly targets that won't fail the build due to known issues: - `make test-diagnostics-ci`: Runs diagnostics but always returns success ### CI Setup Recommendations 1. **Primary CI Pipeline**: Use `make test` for regression testing of working functionality ```yaml test: script: - make test ``` 2. **Diagnostic Job**: Add a separate, optional job for diagnostics ```yaml diagnostics: script: - make test-diagnostics-ci artifacts: paths: - diagnostic_results/ allow_failure: true ``` ## Benefits of the Pytest-based Approach The pytest-based diagnostic framework offers significant advantages: 1. **Unified framework**: All tests use pytest with consistent behavior 2. **Clear pass/fail**: Tests fail when they should, making issues obvious 3. **Rich diagnostics**: Detailed diagnostic information is still collected 4. **Standard integration**: Works with pytest's fixtures, plugins, and reporting ## Future Improvements In the future, we plan to: 1. Enhance the diagnostic plugin with more features 2. Integrate with CI/CD pipelines for better reporting 3. Add automatic visualization of diagnostic data 4. Improve the organization of diagnostic tests

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/wrale/mcp-server-tree-sitter'

If you have feedback or need assistance with the MCP directory API, please join our Discord server