Files
intellij-slint/docs/plans/2026-01-29-slint-lsp-integration-design.md
2026-01-29 20:32:59 +08:00

109 lines
3.2 KiB
Markdown

# 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 `<fileType>` 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 `<textMate.bundleProvider>` 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