87 lines
2.5 KiB
Markdown
87 lines
2.5 KiB
Markdown
# AGENTS.md - SCL Language Server (Unified)
|
|
|
|
This is a unified Neovim/LazyVim plugin for Siemens SCL language support.
|
|
|
|
## Project Overview
|
|
|
|
The unified `scl_lsp` project provides:
|
|
- **LSP Server** - Language Server Protocol implementation
|
|
- **Linter** - Diagnostics and code validation
|
|
- **Formatter** - Document formatting
|
|
- **Syntax Highlighting** - Tree-sitter based
|
|
- **Auto-completion** - blink.cmp integration
|
|
- **Auto-prefix** - Automatic `#` prefixing for variables
|
|
|
|
## Project Structure
|
|
|
|
```
|
|
scl_lsp/
|
|
├── src/ # LSP server implementation
|
|
│ ├── main.lua # Entry point, protocol handling
|
|
│ ├── parser.lua # Regex-based SCL parser
|
|
│ ├── treesitter.lua # Tree-sitter integration
|
|
│ ├── diagnostics.lua # Linter diagnostics
|
|
│ ├── formatter.lua # Document formatter
|
|
│ ├── json.lua # JSON encoder/decoder
|
|
│ └── plc_json.lua # External UDT loading
|
|
├── lua/
|
|
│ ├── scl/ # Neovim plugin modules (from scl_syntax_nvim)
|
|
│ │ ├── init.lua
|
|
│ │ ├── auto_prefix.lua
|
|
│ │ ├── blink_cmp_source.lua
|
|
│ │ ├── fb_parser.lua
|
|
│ │ ├── udt_parser.lua
|
|
│ │ ├── variables.lua
|
|
│ │ └── workspace_types.lua
|
|
│ └── scl_lsp/
|
|
│ ├── init.lua # Unified plugin setup
|
|
│ └── plugins/
|
|
│ └── scl.lua # LazyVim plugin spec
|
|
├── queries/ # Tree-sitter queries
|
|
│ ├── highlights.scm
|
|
│ ├── indents.scm
|
|
│ ├── folds.scm
|
|
│ ├── locals.scm
|
|
│ └── tags.scm
|
|
├── grammar.js # Tree-sitter grammar
|
|
└── tree-sitter.json # Parser config
|
|
```
|
|
|
|
## Development
|
|
|
|
### Running the LSP Server
|
|
|
|
```bash
|
|
# Direct execution
|
|
lua src/main.lua
|
|
|
|
# Via shell script
|
|
./scl_lsp.sh
|
|
|
|
# With test mode
|
|
lua src/main.lua --test
|
|
```
|
|
|
|
### Testing
|
|
|
|
```bash
|
|
# Tree-sitter parser
|
|
npm test
|
|
tree-sitter generate
|
|
|
|
# Test file parsing
|
|
tree-sitter parse corpus/test/main_org_block.scl
|
|
```
|
|
|
|
### Key Patterns
|
|
|
|
- **LSP Protocol**: JSON-RPC over stdin/stdout in `src/main.lua`
|
|
- **Diagnostics**: `src/diagnostics.lua` - validates SCL code
|
|
- **Formatter**: `src/formatter.lua` - formats SCL documents
|
|
- **Syntax**: Tree-sitter queries in `queries/`
|
|
- **Plugin Setup**: `lua/scl_lsp/init.lua` - LazyVim integration
|
|
|
|
## Configuration
|
|
|
|
See `README.md` for configuration options and usage.
|