Language Server Protocol para Synesis v1.1
Project description
Synesis LSP
Real-time validation and language features for Synesis v1.1 files.
A Language Server Protocol (LSP) implementation that provides diagnostics and editor features for Synesis projects in VSCode and other compatible editors.
Overview
Synesis LSP is a protocol adapter: it does not re-implement parsing or semantics. All validation is delegated to the Synesis compiler, and the server focuses on translating compiler output into LSP diagnostics and features.
Features
- Real-time syntax and semantic validation (template rules, REQUIRED/OPTIONAL, BUNDLE, ARITY)
- Pedagogical diagnostics with clear explanations
- Automatic discovery of templates and bibliography
- Fuzzy matching for missing bibrefs
- Full support for
.syn,.synp,.synt,.syno - Semantic tokens for syntax highlighting
- Document symbols (SOURCE/ITEM/ONTOLOGY)
- Hover, completion, and inlay hints
- Go-to-definition and rename (bibrefs and codes)
- Relation graph generation (Mermaid)
Requirements
- Python 3.10+
- Synesis compiler installed
Installation
From PyPI
pip install synesis
pip install synesis-lsp
From Source
git clone https://github.com/synesis-lang/synesis.git
git clone https://github.com/synesis-lang/synesis-lsp.git
pip install -e synesis
pip install -e synesis-lsp
Usage
Standalone Server
python -m synesis_lsp
The server communicates via STDIO.
VSCode
The Synesis Explorer extension manages the LSP server automatically.
Synesis Workspace Requirements
For full semantic validation, the workspace should contain:
- A project file
*.synp(required) - A template
*.syntreferenced by the.synp - Bibliography
*.bib, annotations*.syn, and ontologies*.synoas needed
Notes:
- Multiple
.syntfiles may exist, but the only valid one is the template referenced by.synp. - Without a
.synp, the LSP provides only syntax validation and grammar keywords.
Project Structure
synesis-lsp/
├── synesis_lsp/ # Python package (server)
│ ├── __init__.py
│ ├── __main__.py # Entry point (python -m synesis_lsp)
│ ├── server.py # LSP server (pygls)
│ ├── converters.py # ValidationError → LSP Diagnostic
│ ├── cache.py # Workspace cache
│ ├── semantic_tokens.py # Semantic tokens
│ ├── symbols.py # Document symbols
│ ├── hover.py # Hover provider
│ ├── definition.py # Go-to-definition
│ ├── completion.py # Autocomplete
│ ├── inlay_hints.py # Inlay hints
│ ├── explorer_requests.py # Custom explorer requests
│ ├── graph.py # Relation graph (Mermaid)
│ ├── signature_help.py # Signature help
│ └── rename.py # Rename provider
├── tests/ # Test suite
├── pyproject.toml # Package configuration
├── INTERFACES.md # Compiler ↔ LSP contracts
├── CHANGELOG.md # Release history
├── LICENSE # MIT License
└── README.md # This file
Tests
pip install -e ".[dev]"
pytest tests/
pytest --cov=synesis_lsp tests/
Development Notes
- This LSP is a protocol adapter; do not implement parsing/semantics here.
- All validation must use
synesis.lsp_adapter.validate_single_file. - Always convert
SourceLocation(1-based) to LSPRange(0-based). - If you change error/result contracts, update
INTERFACES.mdandconverters.py. - Keep the server resilient: exceptions must become diagnostics, never crashes.
Architecture
┌─────────────┐
│ VSCode │ (Editor)
└──────┬──────┘
│ LSP Protocol (JSON-RPC via STDIO)
▼
┌─────────────────────────────────┐
│ synesis_lsp.server.py │ (Python Server)
├─────────────────────────────────┤
│ • Handlers: did_open, did_change│
│ • Converters: Error → Diagnostic│
│ • Providers: tokens, symbols, │
│ hover, completion, definition,│
│ inlay, signature, rename │
│ • Commands: loadProject, stats, │
│ explorer, relation graph │
└──────┬──────────────────────────┘
│ imports
▼
┌─────────────────────────────────┐
│ synesis.lsp_adapter │ (Compiler Adapter)
├─────────────────────────────────┤
│ • validate_single_file() │
│ • Context discovery │
└──────┬──────────────────────────┘
│ uses
▼
┌─────────────────────────────────┐
│ synesis.compiler │ (Compiler)
├─────────────────────────────────┤
│ • Lark Parser (LALR) │
│ • SemanticValidator │
│ • ValidationResult │
└─────────────────────────────────┘
Advanced Features
- Custom commands:
synesis/loadProject,synesis/getProjectStats,synesis/getReferences,synesis/getCodes,synesis/getRelations,synesis/getRelationGraph - Cross-file features (hover, definition, completion, rename, graph) depend
on the workspace cache loaded via
synesis/loadProject
Troubleshooting
Error: "Package 'synesis' not found"
pip install synesis
LSP does not validate after editing
- Check logs: Output → Synesis LSP in VSCode
- Reload window:
Ctrl+Shift+P→ "Reload Window" - Ensure the
.synpreferences the correct template and bibliography - Look for log messages like:
Projeto Synesis carregado,Template carregado,Bibliografia carregada
Incorrect diagnostics
The LSP uses the compiler output. If a diagnostic is wrong:
- Test with CLI:
synesis check arquivo.syn - If CLI also reports it, the bug is in the compiler
- Report in the compiler issue tracker
License
MIT License - Synesis Project
Contributing
Contributions are welcome. Please follow the code conventions and add tests for new features.
References
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file synesis_lsp-0.15.3.tar.gz.
File metadata
- Download URL: synesis_lsp-0.15.3.tar.gz
- Upload date:
- Size: 90.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7baddfcc3ceb5703cc1257bd6adbb5a975e6b0239a0e068e35c0f7a749803451
|
|
| MD5 |
230468fc1d201b2675a4ef74c9d09959
|
|
| BLAKE2b-256 |
25bb70b764f3d975afa9f922e9f5be2285c4c96178e51385ef5e5e57bf7c9d23
|
File details
Details for the file synesis_lsp-0.15.3-py3-none-any.whl.
File metadata
- Download URL: synesis_lsp-0.15.3-py3-none-any.whl
- Upload date:
- Size: 80.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7e7b6c36fbfa96648891aebfe0efa6c282682ff5a5f242c21cecfcefe4ed2ea5
|
|
| MD5 |
5a37c403fb1e659754a4accab200cd23
|
|
| BLAKE2b-256 |
ff2d867bc28ddb609ed2929d851a3201253245ffc6d181ef8c7edad228ab8443
|