Files
intellij-slint/CLAUDE.md

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. Implements LspServerSupportProvider to start the Slint LSP server when .slint files 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 SlintLspServerSupportProvider as 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

  1. Build and run in sandbox:

    ./gradlew runIde
    
  2. Test with sample file:

    • Open test-files/hello.slint
    • Verify file icon, syntax highlighting, and LSP features
  3. 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 runIde which launches a sandbox IDE with the plugin installed.

  • To update the Slint LSP version, change slintVersion in gradle.properties and rebuild. The build will download new binaries automatically.