2.5 KiB
2.5 KiB
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
# Direct execution
lua src/main.lua
# Via shell script
./scl_lsp.sh
# With test mode
lua src/main.lua --test
Testing
# 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.