css-variable-lsp 0.2.1

A fast, Rust-based Language Server Protocol implementation for CSS Variables
Documentation
# CSS Variable LSP (Rust Implementation)

A Language Server Protocol implementation for CSS Variables, written in Rust.

## Status: Complete (v0.2.1)

This is a ground-up Rust rewrite of the TypeScript/Node-based `css-variable-lsp`, eliminating the Node/npm dependency for the Zed extension.

### Features

- CSS parsing for variable definitions and `var()` usage tracking
- HTML parsing for `<style>` blocks and inline styles (custom DOM scanner)
- Cascade sorting and specificity calculation
- LSP features: completion, hover, definition, references, rename, diagnostics, document/workspace symbols
- Workspace scanning and color provider (hex/rgb/hsl + named colors)
- Code actions (quick fixes for undefined variables)
- Opt-in logging via `CSS_LSP_LOG` environment variable
- Save hooks for automatic revalidation

## Autocomplete Contexts

TypeScript LSP (`css-variable-lsp`):
- Triggers on `-`, `(`, and `:`.
- Returns items only in CSS value contexts (after a `:` and before the next `;`).
- CSS-like files: inside rules/declarations (requires `{}` context).
- HTML-like files: inside `style="..."` attributes or `<style>...</style>` blocks.
- JS/TS/JSX/TSX: only inside string literals or template literal text (not inside `${...}`).
- Insert text: `--name` if already inside `var(`, otherwise `var(--name)`.

Rust LSP (this repo):
- Matches the TypeScript LSP behavior above.
- Document kind detection uses language ID when available, otherwise extensions derived from `lookupFiles`.

## Building

```bash
cargo build --release
```

## Release Assets (Local)

Build and package release assets into `dist/` (tar.gz on Unix, zip on Windows):

```bash
./scripts/build-release-assets.sh
```

To build a subset of targets:

```bash
./scripts/build-release-assets.sh x86_64-apple-darwin aarch64-apple-darwin
```

## Running

```bash
cargo run --release
```

The LSP server communicates via stdin/stdout using the Language Server Protocol.

## Architecture

- `main.rs` - Entry point, sets up async runtime and LSP server
- `lsp_server.rs` - LSP protocol handlers (implements `tower_lsp_server::LanguageServer`)
- `manager.rs` - CSS variable manager (stores definitions/usages, DOM trees)
- `types.rs` - Core data types (CssVariable, CssVariableUsage, Config, etc.)
- `parsers/` - CSS and HTML parsing (definitions + var() usages)
- `dom_tree.rs` - Lightweight HTML scanner for selector matching
- `specificity.rs` - Specificity calculation and cascade ordering
- `workspace.rs` - Workspace scanning and file discovery
- `runtime_config.rs` - CLI/env configuration parsing
- `path_display.rs` - Path formatting for hover/completion
- `color.rs` - Color parsing and color provider helpers

## Dependencies

- `tower-lsp-server` - LSP server framework
- `tokio` - Async runtime
- `globset` / `walkdir` - Workspace scanning
- `csscolorparser` - Color value parsing
- `regex` / `pathdiff` - Parsing helpers and path formatting

## License

GPL-3.0