# EFTL Language Extension for VS Code Syntax highlighting and language support for **EFTL (ElixForms Template Language)**. ## Features - **Syntax Highlighting** for all EFTL constructs - **Code Snippets** for common patterns - **Bracket Matching** for EFTL blocks - **Code Folding** for block structures ## Supported Syntax ### Block Delimiters - `[EFTL]...[/EFTL]` - Main EFTL block - `[VAR name="..." type="..."]...[/VAR]` - Variable declarations - `[IF]...[/IF]` - Conditionals - `[WHILE]...[/WHILE]` - Loops ### Expressions - `[% expression %]` - Execute expression - `[%= expression %]` - Output expression value ### Data Tags - `[TAG]GETVALUEBYTAG,TAG_NAME,REQUEST,IUQOID[/TAG]` - `[TAG]SCHEMAID,schemaId,COL0001,IUQOID, , [/TAG]` ### Functions - `[SPLIT regex="..."]...[/SPLIT]` - Split string - `[TRIM]...[/TRIM]` - Trim whitespace - `[VALUE_OF varname="..." index="..." /]` - Get array element - `[SIZE_OF varname="..." /]` - Get array size - `[CONTAINS varname="..."]...[/CONTAINS]` - Check containment - `[FORMAT type="..." pattern="..."]...[/FORMAT]` - Format values ### Control Structures - `[IF]`, `[CONDITION]`, `[THEN]`, `[ELSE]`, `[ELSE IF]` - `[WHILE]`, `[DO]` ### Comments - `[!-- comment --]` ## Building and Installation ### 1. Build from Source To compile the extension, you need [Node.js](https://nodejs.org/) installed. 1. Open a terminal in the project root. 2. Install dependencies: ```bash npm install ``` 3. Compile the TypeScript code: ```bash npm run compile ``` *Alternatively, use `npm run watch` to automatically recompile on changes.* ### 2. Manual Installation (for testing) To make the extension available in your VS Code without packaging it as a VSIX: #### Windows 1. Open a command prompt (as Administrator for symlinks) or PowerShell. 2. Create a link to this folder in your VS Code extensions directory: ```powershell # PowerShell New-Item -ItemType Junction -Path "$env:USERPROFILE\.vscode\extensions\eftl-language" -Value "D:\__Git\vscode-eftl-language" ``` *Note: Replace the value path with the actual absolute path to your project folder if it differs.* #### Linux / macOS 1. Create a symbolic link: ```bash ln -s "$(pwd)" ~/.vscode/extensions/eftl-language ``` 2. **Restart VS Code**. The extension will now be loaded. ### 3. Development Mode (Debugging) If you want to debug the extension or the language server: 1. Open the project folder in VS Code. 2. Ensure you have run `npm install` and `npm run compile`. 3. Press `F5` (or go to the **Run and Debug** view and click **Launch Extension**). 4. A new **Extension Development Host** window will open. 5. In that window, open any `.eftl` file to test syntax highlighting and the language server. ## Snippets | Prefix | Description | | ----------- | ---------------------- | | `eftl` | EFTL block with header | | `var` | Variable declaration | | `vartag` | Variable from TAG | | `varschema` | Variable from SCHEMAID | | `if` | IF statement | | `ifelse` | IF-ELSE statement | | `while` | WHILE loop | | `split` | Split function | | `trim` | Trim function | | `valueof` | VALUE_OF function | | `sizeof` | SIZE_OF function | | `contains` | CONTAINS function | | `formatnum` | Format number | | `tag` | GETVALUEBYTAG tag | | `schema` | SCHEMAID tag | | `out` | Output expression | | `comment` | Comment block | ## Example ```eftl [EFTL][HEADER name="trimDocument" value="true" type="boolean" /] [VAR name="total" type="number"][% total = 0; %][/VAR] [VAR name="items" type="iterable"][SPLIT regex=";"][TAG]GETVALUEBYTAG,ITEMS,REQUEST,IUQOID[/TAG][/SPLIT][/VAR] [!-- Calculate total --] [VAR name="count" type="number"][SIZE_OF varname="items" /][/VAR] [IF] [CONDITION][% count > 0 %][/CONDITION] [THEN][%= count %] items found[/THEN] [ELSE]No items[/ELSE] [/IF] [/EFTL] ``` ## License MIT