diff --git a/README.md b/README.md index 7fa2ed0..bc25a38 100644 --- a/README.md +++ b/README.md @@ -45,7 +45,8 @@ A comprehensive Neovim/LazyVim plugin providing **Language Server Protocol (LSP) | **Auto-Prefix** | Automatically adds `#` prefix to local variables (like TIA Portal) | | **Multiline Parameters** | Fill FB/Function call parameters across multiple lines with `mp` or `:SCLMultilineParams` | | **Tab Navigation** | Jump between parameters with `` in insert mode | -| **Workspace UDT Scanner** | Scans project for user-defined types | +| **Workspace UDT Scanner** | Scans project for user-defined types (.udt files) | +| **Workspace Global DB Scanner** | Scans project for global data blocks (.db files) | | **blink.cmp Integration** | Smart completion source for blink.cmp | ## Installation @@ -109,8 +110,8 @@ require("scl_lsp").setup({ | Command | Description | |---------|-------------| | `:SCLShowVariables` | Show local variables in current file | -| `:SCLShowWorkspaceTypes` | Show workspace UDTs and FB count | -| `:SCLRescanWorkspaceTypes` | Rescan workspace for types | +| `:SCLShowWorkspaceTypes` | Show workspace UDTs, FBs, and Global DBs count | +| `:SCLRescanWorkspaceTypes` | Rescan workspace for types and DBs | | `:SCLPrefixWord` | Manually prefix current word with `#` | | `:SCLMultilineParams` | Fill multiline parameters for FB/Function call | | `:LspSCLFormat` | Format current SCL file | @@ -155,7 +156,34 @@ The LSP automatically scans for SCL files in `data_types/` folder and extracts T lua /home/lazar/dev/scl_lsp/src/plc_json.lua --generate ``` -## Project Structure +## Global Data Block Support + +The plugin automatically scans for `.db` files in the workspace and provides auto-completion for global data blocks and their members. + +### How it works + +1. **Workspace Scanning**: When opening a `.scl` file, the plugin scans the project for `.db` files +2. **DB Parsing**: Parses `DATA_BLOCK` definitions and extracts members from `VAR` sections +3. **Auto-completion**: Provides smart completion for DB names and members + +### Usage + +- Type a space or `#` to trigger completion - global DB names appear alongside local variables +- Type `"` followed by a DB name to get member completions +- Access nested members: `"MyDB".member.submember` + +### Example + +```scl +// Access global DB members +"HmiData".units +"Parameter".machine.unit100.paramTimeStampApplied + +// Inside FB call parameter +#instParameterManager(hmiInterface:="HmiData".units, ...) +``` + +### Project Structure ``` scl_lsp/ @@ -187,6 +215,7 @@ scl_lsp/ ├── init.lua ├── auto_prefix.lua ├── blink_cmp_source.lua + ├── db_parser.lua ├── fb_parser.lua ├── udt_parser.lua ├── variables.lua