4.4 KiB
CLAUDE.md
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
Project Overview
This is an IntelliJ IDEA plugin that provides Slint language support through LSP (Language Server Protocol) integration. The plugin downloads platform-specific Slint LSP binaries from GitHub releases and integrates them with IntelliJ's LSP infrastructure.
Build System
This project uses Gradle with the Kotlin DSL and the IntelliJ Platform Gradle Plugin.
Common Commands
Build the plugin:
./gradlew build
Run the plugin in a sandbox IDE:
./gradlew runIde
Run tests:
./gradlew test
Verify plugin compatibility:
./gradlew verifyPlugin
Build plugin distribution ZIP:
./gradlew buildPlugin
Clean build artifacts:
./gradlew clean
Architecture
LSP Integration
The plugin uses IntelliJ's LSP support (com.intellij.modules.lsp) to provide language features for .slint files.
Key components:
-
SlintLspServerSupportProvider(src/main/kotlin/me/zhouxi/slint/lsp/SlintLspServerSupportProvider.kt:13): Main LSP integration point. ImplementsLspServerSupportProviderto start the Slint LSP server when.slintfiles are opened. -
SlintRuntime(src/main/kotlin/me/zhouxi/slint/SlintRuntime.kt:8): Manages plugin paths and locates the platform-specific LSP binary. Detects OS (Windows/Linux/macOS) and resolves the correct executable path. -
FooLspServerDescriptor(src/main/kotlin/me/zhouxi/slint/lsp/SlintLspServerSupportProvider.kt:34): Internal descriptor that creates the command line for launching the LSP server.
Binary Distribution
The build process downloads platform-specific Slint LSP binaries from GitHub releases:
-
Download task (build.gradle.kts:72-79): Downloads LSP binaries for Linux, macOS, and Windows from
https://github.com/slint-ui/slint/releases/download/v{version}/ -
Extract task (build.gradle.kts:80-104): Extracts and renames binaries to standardized names (
slint-lsp-linux,slint-lsp-macos,slint-lsp-windows.exe) -
Sandbox preparation (build.gradle.kts:105-111): Copies extracted binaries to
slint/lsp/directory in the plugin sandbox
The Slint version is configured in gradle.properties via the slintVersion property.
Plugin Configuration
-
plugin.xml (src/main/resources/META-INF/plugin.xml): Declares the plugin metadata, dependencies, and extension points. Registers
SlintLspServerSupportProvideras the LSP server support provider. -
Target IDE version: IntelliJ IDEA 2025.2.4 with minimum build 252.25557 (configured in build.gradle.kts:43,56)
-
Java/Kotlin version: JVM 21 (build.gradle.kts:68-70,114-118)
Project Structure
src/main/kotlin/me/zhouxi/slint/
├── SlintRuntime.kt # Plugin runtime and binary path resolution
├── icons/SlintIcons.kt # Icon resources for UI
└── lsp/
└── SlintLspServerSupportProvider.kt # LSP integration
Testing the Plugin
Manual Testing
-
Build and run in sandbox:
./gradlew runIde -
Test with sample file:
- Open
test-files/hello.slint - Verify file icon, syntax highlighting, and LSP features
- Open
-
Test LSP features:
- Code completion: Type and press Ctrl+Space
- Goto definition: Ctrl+Click on symbols
- Hover: Mouse over symbols
- Diagnostics: Introduce syntax errors
- Formatting: Ctrl+Alt+L
Verify LSP Server
Check LSP server status in the status bar (bottom right). Should show "Slint" when a .slint file is open.
Common Issues
- LSP server not starting: Check that LSP binary exists in sandbox at
sandbox/plugins/slint/lsp/slint-lsp-{platform} - No syntax highlighting: Verify TextMate grammar file is in resources
- No completion: Check LSP server logs in
idea.log
Development Notes
-
The plugin uses IntelliJ's built-in LSP client infrastructure, so language features (completion, diagnostics, etc.) are provided by the Slint LSP server itself.
-
The sandbox directory is configured to
sandbox/in the project root (build.gradle.kts:53). -
When modifying LSP integration, test by running
./gradlew runIdewhich launches a sandbox IDE with the plugin installed. -
To update the Slint LSP version, change
slintVersioningradle.propertiesand rebuild. The build will download new binaries automatically.