# Slint LSP Integration Design **Date:** 2026-01-29 **Status:** Approved **Phase:** Phase 1 - Core LSP Features ## Overview Implement complete Slint LSP integration into IntelliJ IDEA, enabling standard LSP features (diagnostics, completion, goto definition, hover, formatting, etc.) through IntelliJ's built-in LSP framework. ## Architecture ### Component Structure ``` IntelliJ IDEA (LSP Client) ↓ SlintLspServerSupportProvider (Entry point) ↓ SlintLspServerDescriptor (Server configuration) ↓ Slint LSP Server (External process) ``` ### Core Components 1. **File Type System** - `SlintLanguage`: Language definition - `SlintFileType`: File type definition with .slint extension - File icon and description 2. **LSP Server Integration** - `SlintLspServerSupportProvider`: LSP entry point (exists, needs refinement) - `SlintLspServerDescriptor`: Server configuration (rename from FooLspServerDescriptor) - Automatic capability negotiation via LSP initialize handshake 3. **Syntax Highlighting** - Use TextMate grammar from official Slint VSCode extension - `SlintTextMateProvider`: TextMate bundle provider 4. **LSP Feature Mapping** (automatic via IntelliJ) - Diagnostics → Error/warning annotations - Completion → Code completion UI - Goto Definition → Ctrl+Click navigation - Hover → Quick documentation - Formatting → Code formatting actions - References → Find usages - Rename → Refactor rename ## Implementation Plan ### 1. File Type System **Files to create:** - `src/main/kotlin/me/zhouxi/slint/lang/SlintLanguage.kt` - `src/main/kotlin/me/zhouxi/slint/lang/SlintFileType.kt` **Changes to plugin.xml:** - Register `` extension ### 2. LSP Server Configuration **Files to modify:** - `src/main/kotlin/me/zhouxi/slint/lsp/SlintLspServerSupportProvider.kt` - Rename `FooLspServerDescriptor` → `SlintLspServerDescriptor` - Use `file.fileType == SlintFileType` instead of string comparison ### 3. Syntax Highlighting **Resources to add:** - Download `slint.tmLanguage.json` from Slint GitHub - Place in `src/main/resources/textmate/` **Files to create:** - `src/main/kotlin/me/zhouxi/slint/lang/syntax/SlintTextMateProvider.kt` **Changes to plugin.xml:** - Register `` extension ### 4. Testing **Test files to create:** - Sample .slint files for manual testing - Verify: diagnostics, completion, goto definition, hover, formatting ## Design Decisions - **Use IntelliJ LSP Framework**: Leverage built-in LSP client, no manual protocol implementation - **TextMate for Syntax**: Use official grammar, zero maintenance - **Minimal Custom Code**: Only implement required extension points - **Type-Safe File Detection**: Use FileType comparison instead of string extension checks ## Out of Scope (Phase 2) - Live Preview integration (Slint-specific feature) - Custom UI components - Advanced project configuration ## Success Criteria - .slint files recognized by IntelliJ - LSP server starts automatically when .slint file opened - Syntax highlighting works - Code completion provides suggestions - Diagnostics show errors/warnings - Goto definition navigates correctly - Hover shows documentation - Code formatting works