IDE support for SNOMED CT Expression Constraint Language (ECL) 2.2 — parsing, validation, completion, formatting, refactoring, and terminology integration across 7 editors, the browser, and Slack.
| Syntax Highlighting | Error Diagnostics |
|---|---|
![]() |
![]() |
| Autocompletion | Hover Information |
|---|---|
![]() |
![]() |
| Dark Theme |
|---|
![]() |
Expression Constraint Language (ECL) is the standard query language for SNOMED CT, the world's most comprehensive clinical terminology. ECL expressions define sets of clinical concepts — for use in value sets, clinical decision support, analytics, and data validation. See the ECL Specification.
| Package | Description | Install |
|---|---|---|
| @aehrc/ecl-core | Zero-dependency core library (parser, formatter, validation, completion, refactoring, terminology, knowledge) | npm install @aehrc/ecl-core |
| @aehrc/ecl-lsp-server | LSP server for IDE integration | npm install -g @aehrc/ecl-lsp-server |
| @aehrc/ecl-editor-core | Headless Monaco Editor integration | npm install @aehrc/ecl-editor-core |
| @aehrc/ecl-editor-react | React component | npm install @aehrc/ecl-editor-react |
| @aehrc/ecl-editor | Web Component (<ecl-editor>) |
npm install @aehrc/ecl-editor |
| @aehrc/ecl-slack-bot | Slack bot for validating, formatting, and evaluating ECL expressions | Docker |
| Editor | Type | Link |
|---|---|---|
| VSCode | Extension (VSIX) | clients/vscode |
| IntelliJ IDEA | Plugin (Kotlin/Gradle) | clients/intellij |
| Eclipse | Plugin (LSP4E/TM4E) | clients/eclipse |
| Neovim | LSP config | clients/neovim |
| Sublime Text | LSP config | clients/sublime |
| Emacs | eglot/lsp-mode config | clients/emacs |
| Claude Code | Plugin | clients/claude-code |
| Feature | Description |
|---|---|
| Diagnostics | Syntax errors, inactive/unknown concept warnings, semantic validation |
| Completion | Context-aware operators, keywords, filter values, SNOMED CT concept search, 18 snippets |
| Hover | Operator documentation, concept information (FSN, PT, active status) |
| Formatting | Document and range formatting with 9 configurable options |
| Code Actions | 8 refactoring actions (strip/add display terms, simplify, parentheses, history supplement, description filter) |
| Code Lens | "Evaluate" lens with inline concept count |
| Semantic Tokens | Token-level highlighting |
| SNOMED CT Edition | Status bar selector for edition/version switching |
| FHIR Integration | Concept lookup, ECL evaluation, concept search via FHIR terminology server |
Full ECL 2.2 coverage: constraint operators, logical operators, refinements, dotted expressions, member of, concrete values, filters, history supplements, nested expressions, and comments.
git clone https://github.com/aehrc/ecl-lsp.git && cd ecl-lsp
npm install # Installs all workspace dependencies
npm run compile # Compiles all packages
npm test # Runs 1653+ testsThen open the project in VSCode and press F5 to launch with the ECL extension, or install @aehrc/ecl-lsp-server globally and configure your preferred editor (see IDE Clients).
ecl-lsp/
├── grammar/ ANTLR4 ECL grammar (official IHTSDO)
├── shared/syntaxes/ TextMate grammar (shared across clients)
├── packages/
│ ├── ecl-core/ Core library (parser, formatter, completion, refactoring, semantic, terminology, knowledge)
│ ├── ecl-lsp-server/ LSP server
│ ├── ecl-editor-core/ Monaco Editor integration
│ ├── ecl-editor-react/ React component
│ ├── ecl-editor/ Web Component
│ └── ecl-slack-bot/ Slack bot
├── clients/
│ ├── vscode/ VSCode extension
│ ├── intellij/ IntelliJ IDEA plugin
│ ├── eclipse/ Eclipse IDE plugin
│ ├── claude-code/ Claude Code plugin
│ ├── neovim/ Neovim config guide
│ ├── sublime/ Sublime Text config guide
│ └── emacs/ Emacs config guide
└── examples/ Example ECL files
All LSP settings are under the ecl.* namespace. See the @aehrc/ecl-lsp-server README for the full configuration reference.
See CONTRIBUTING.md for setup, testing, and development workflow.
See SECURITY.md for reporting vulnerabilities.
Copyright 2026 Commonwealth Scientific and Industrial Research Organisation (CSIRO) ABN 41 687 119 230
Licensed under the Apache License, Version 2.0 — see LICENSE.




