Back to home

Changelog

1.8.6 – 2026-04-29

Fixed

  • 8-digit hex colors with alpha (issue #22, reported by @LordMaddhi): a value like --accent: #7F80FF1A (modern CSS Color Level 4 #RRGGBBAA syntax) was rendered in the hover popup's Hex column as #80FF1A, looking like the first two characters had been silently dropped. Two compounding bugs were responsible and have both been corrected: ColorParser.parseHexColor treated the 8-digit form as Java's #AARRGGBB packed-int order (alpha first) instead of the CSS spec's #RRGGBBAA (alpha last), and colorToHex always emitted six digits, unconditionally dropping any alpha that had been parsed. Combined, this produced the visible #80FF1A truncation. The parser now reads alpha from the last byte, the formatter preserves alpha when present (#7F80FF1A round-trips identically), and 4-digit #RGBA shorthand is recognised.
  • Color swatch uses rgb()/rgba() instead of hex, so semi-transparent colors preview accurately. Locale is forced to Locale.ROOT so the alpha float always uses a "." decimal separator (CSS doesn't accept ","-separated numbers in non-US locales).

Notes

  • Fully-opaque colors still produce 6-digit hex (#1E90FF), so existing snapshots and the WebAIM contrast-checker URL are unaffected. The new ColorParser.colorToRgbHex(color) helper is available for callers that strictly need 6-digit RGB output.
  • Regression coverage in ColorParserTest: primary #7F80FF1A round-trip, 4-digit shorthand #RGBA and #RGBF, full-opacity collapse-to-6-digit, fully-transparent round-trip, explicit channel-position assertions, plus the pre-existing rgba tests updated to assert the new alpha-preserving contract (#FF008080 instead of #FF0080).
  • No index rebuild or settings change required — pure parser/rendering fix.

1.8.5 – 2026-04-28

Fixed

  • Calculated values with multi-valued nested vars (issue #21, reported by @kolkinn): A Radix Themes token like --space-2: calc(8px * var(--scaling)) was rendered in the hover popup as bare 0.9 (type: number) — the resolver was picking the first of five non-uniform --scaling definitions and dropping the surrounding calc(...) wrapper. Two intertwined bugs in resolveVarValue: (a) the recursive call passed only the inner value as the new raw, throwing away the calc context; (b) firstOrNull() blindly picked an arbitrary entry when no :root/default anchor existed and the candidates were non-uniform. The resolver now substitutes the matched var(--ref) token in place so calc(...) survives, and leaves the reference intact when the inner variable has multiple non-uniform values across selectors with no default to anchor to. Deterministic single-default lookups (e.g. var(--unit) with :root { --unit: 4px }) still substitute as before.

Notes

  • Regression coverage in DocHelpersResolveVarValueTest: ambiguous Radix-style scenario, all-entries-uniform shortcut, :root-anchored cascade, and the explicit "calc wrapper preserved" case.
  • No index rebuild or settings change required.
  • A copy-paste reproducer fixture lives at samples/issue-21/radix-scaling.css in the repo for side-loaded manual verification.

1.8.4 – 2026-04-22

Fixed

  • Exact-match ranking in the completion popup (issue #20, reported by @Blinks44): typing the complete variable name var(--sidebar-accent-foreground) left --sidebar selected at the top of the popup in 1.8.0-1.8.3, so pressing Enter/Tab overwrote the full name the user had already typed. Two independent paths in the ranking stack both compared each entry against its own truncated matched-prefix instead of the user's actual query; both now compare against the full query so the exact match wins.

Notes

  • Three layers of regression tests lock the fix in: matcher unit (matchingDegree score ordering), comparator unit (compareQuerySpecificity over a standalone Entry list), and full platform-fixture integration (completing var(--sidebar-accent-foreground) against a shadcn-style token file).
  • No index rebuild or settings change required.

1.8.3 – 2026-04-22

Added

  • Readable theme labels in the hover popup (new setting, default on): [data-theme="catppuccin"] now renders as "Catppuccin" in the Context column, [data-theme="high-contrast"] as "High contrast", .dark as "Dark", and so on. Any single attribute-equals or single-class selector is humanised — kebab-case and snake_case values get spaces and sentence-cased; user-authored uppercase (RTL, WCAG, acronyms) is preserved. Full raw selector lives on hover via a tooltip. Toggle under Settings → Tools → CSS Variables Assistant → Documentation Popup Columns → "Prettify theme selector labels" — turn off for paste-back-to-CSS fidelity.
  • Collapse rows with identical values (new setting, default on): when several themes resolve a token to the same value (e.g. catppuccin, sepia, and matcha all leaving --bg: white), they're merged into one row whose Context column lists every contributing theme ("Light mode, Catppuccin, Sepia"). Keeps the popup scannable in design systems with many theme variants. Turn off under Settings → Tools → CSS Variables Assistant → Documentation Popup Columns → "Collapse rows with identical values" to see one row per selector as in 1.8.2.

Notes

  • Compound selectors (.dark .nested, [a] .b), pseudo-classes (:hover, :not(.foo)) and IDs (#app) stay verbatim — prettifying them would misrepresent their CSS semantics.
  • No index rebuild required.

1.8.2 – 2026-04-22

Added

  • Compact Source column (on by default): the hover popup's Source cell now renders just :220; the full variables.css:220 appears on hover. Keeps the popup narrow enough to avoid wrapping at IntelliJ's max-width clamp. Toggle under Settings → Tools → CSS Variables Assistant → Documentation Popup Columns.
  • Wider popup by default: the value table now hints at ~700 px minimum width via a `min-width` wrapper + invisible spacer, so multi-column rows (Context, Value, Type, Source, Hex, WCAG) don't wrap in the common case. Platform still caps around 950 px; users can manually resize the popup and the IDE remembers.

Notes

  • No index rebuild required. Purely a rendering / UI polish release.

1.8.1 – 2026-04-22

Added

  • Theming selectors become their own rows in the hover popup (issue #19, reported by @LordMaddhi): Declarations inside [data-theme="dark"], .dark, .theme-high-contrast, :hover, [dir="rtl"] and other non-root selectors are now indexed as distinct contexts. Before 1.8.1 every non-:root/:host/html/body/* block collapsed into default and only the last declaration was visible, which hid dark-mode values from any theme system that didn't use @media (prefers-color-scheme: dark). Nested blocks combine labels, so @media (prefers-color-scheme: dark) { .hc { … } } renders as (prefers-color-scheme: dark) .hc.
  • Source file and line per declaration in the hover popup: the Source column now shows tokens.css:42 for every indexed row, so when the same variable is defined across multiple theme files (shadcn, Radix, Tailwind, Material) you can see which file and line each value lives on. Legacy index records fall back to the previous "first resolution step" label automatically.
  • Cascade-ambiguity disclaimer: a small note under multi-row value tables reminds that rows are shown in index order and the runtime-applied value still depends on stylesheet load order and specificity — the popup doesn't simulate the full CSS cascade engine.

Changed

  • INDEX_VERSION bumped to force a one-time re-index on first launch after upgrade. The packed record now carries a 4th field (1-based source line); legacy 3-part records decode safely with line = -1 so stale caches never crash the popup.
  • The documentation service uses FileBasedIndex.processValues instead of getValues so the (VirtualFile, packed) pair is available in one pass rather than an O(files × keys) re-query via getContainingFiles.

1.8.0 – 2026-04-22

Fixed

  • Completion popup no longer loses suggestions during progressive typing (issue #18 follow-up): Several regressions that only surfaced in real IDE sessions — hsl(var(--err)) showing every variable, a sticky popup that ignored subsequent keystrokes, --foreground / --error hidden behind their *-foreground siblings, and var(-<caret>) filtering out every variable without an internal dash. All fixed.
  • Value column no longer shows a comment (issue #18): When a CSS custom property has a JSDoc/block comment above it, the completion popup now always shows the resolved value — it no longer scrapes a --name: ...; sample out of an unrelated comment block. Both completion and hover documentation respect the real cascade winner.
  • Autocompletion no longer fires outside var() (issue #18): The gate now tracks parenthesis depth from each var( to the caret, so typing after a closed var(--x) on the same line stops surfacing every indexed variable. Identifiers ending in var (e.g. myvar() also no longer trigger completions.
  • Inline /* ... */ in values and declarations: The indexer now strips inline CSS comments from captured values and still indexes variables even when a leading /* comment */ and the declaration share one line.
  • Scope leaks node_modules fewer places: PROJECT_ONLY and PROJECT_WITH_IMPORTS scopes now consistently exclude node_modules at the CSS query layer, matching the settings panel's wording.
  • DESC completion sort no longer reverses the tier hierarchy: A latent bug had .reversed() flipping every step including PREFIX / TOKEN_PREFIX / SUBSTRING tier ordering. Only the value-level comparison reverses now; tier ordering is always PREFIX first.

Added

  • Three-option completion sort order: Completion sort order now offers By value ascending (default), By value descending, and Alphabetical by name. The preference applies consistently in both the blank-query autopopup path and fresh invocations, so --padding-sm / --padding-md / --padding-lg always appear in the chosen order regardless of how the popup was opened.
  • Completion description toggle + length: New settings under Display Options let you hide the description that appears next to each completion item, or clamp it to a custom length (0 = hide, up to 120 chars).
  • Optional feedback prompt: After ~14 days and 20 uses of CSS variable completion, a single non-intrusive balloon asks if you'd like to rate the plugin on Marketplace. "Remind me later" and "Don't show again" actions included. Prompt conditions are conservative — it will never re-appear once dismissed.
  • Pairs well with PxPeek: sibling plugin by the same author adding inline px-equivalents for rem / em / vh / % and all modern viewport units. Linked from the Marketplace description and the README.
  • Broader verifier coverage: Plugin verification now also runs against PyCharm Professional and RubyMine — both bundle the JavaScript and CSS plugins the plugin depends on.
  • Regression tests: New tests lock in each of the fixes above so the classes of bug in issue #18 don't come back.

Notes

  • The CSS variable index will rebuild once on first launch after upgrade because the parser now captures values differently.

1.7.2 – 2026-04-15

Fixed

  • Clean var(--name) insertion: Selecting a completion inside var(...) now always produces the correct var(--name) — the 1.7.1 release could insert var(----name), var(---name), or a trailing dash (var(--name-)) depending on when the popup opened.
  • Works inside any CSS function: Fix also covers var() nested inside other CSS functions, e.g. hsl(var(--bg)), rgba(var(--bg), 0.5), color-mix(in oklch, var(--bg) 50%, white), calc(var(--size) * 2), and linear-gradient(hsl(var(--a)), hsl(var(--b))). Only the var(...) containing the caret is rewritten.

Added

  • Insertion-based completion regression tests: New tests assert the actual document state after selecting a completion (not just which items are offered), covering bare var(...) and var() nested inside hsl / hsla / rgb / rgba / oklch / color-mix / calc / clamp / linear-gradient, plus multi-var() declarations and non-var() contexts.

1.7.1 – 2026-04-08

Added

  • Completion-scope regression coverage: Added tests that lock CSS variable completion to stylesheet files and valid var(...) value contexts.

Fixed

  • Stylesheet-only completion: CSS variable completions are no longer registered in JavaScript, TypeScript, JSX, or TSX files.
  • Value-context completion: CSS variable suggestions now require a real var(...) context and no longer interfere with CSS property-name completion such as background.

1.8.5 – 2026-04-28

Fixed

  • Calculated values with multi-valued nested vars (issue #21, reported by @kolkinn): A Radix Themes token like --space-2: calc(8px * var(--scaling)) was rendered in the hover popup as bare 0.9 (type: number) — the resolver was picking the first of five non-uniform --scaling definitions and dropping the surrounding calc(...) wrapper. Two intertwined bugs in resolveVarValue: (a) the recursive call passed only the inner value as the new raw, throwing away the calc context; (b) firstOrNull() blindly picked an arbitrary entry when no :root/default anchor existed and the candidates were non-uniform. The resolver now substitutes the matched var(--ref) token in place so calc(...) survives, and leaves the reference intact when the inner variable has multiple non-uniform values across selectors with no default to anchor to. Deterministic single-default lookups (e.g. var(--unit) with :root { --unit: 4px }) still substitute as before.

Notes

  • Regression coverage in DocHelpersResolveVarValueTest: ambiguous Radix-style scenario, all-entries-uniform shortcut, :root-anchored cascade, and the explicit "calc wrapper preserved" case.
  • No index rebuild or settings change required.
  • A copy-paste reproducer fixture lives at samples/issue-21/radix-scaling.css in the repo for side-loaded manual verification.

1.8.4 – 2026-04-22

Fixed

  • Exact-match ranking in the completion popup (issue #20, reported by @Blinks44): typing the complete variable name var(--sidebar-accent-foreground) left --sidebar selected at the top of the popup in 1.8.0-1.8.3, so pressing Enter/Tab overwrote the full name the user had already typed. Two independent paths in the ranking stack both compared each entry against its own truncated matched-prefix instead of the user's actual query; both now compare against the full query so the exact match wins.

Notes

  • Three layers of regression tests lock the fix in: matcher unit (matchingDegree score ordering), comparator unit (compareQuerySpecificity over a standalone Entry list), and full platform-fixture integration (completing var(--sidebar-accent-foreground) against a shadcn-style token file).
  • No index rebuild or settings change required.

1.8.3 – 2026-04-22

Added

  • Readable theme labels in the hover popup (new setting, default on): [data-theme="catppuccin"] now renders as "Catppuccin" in the Context column, [data-theme="high-contrast"] as "High contrast", .dark as "Dark", and so on. Any single attribute-equals or single-class selector is humanised — kebab-case and snake_case values get spaces and sentence-cased; user-authored uppercase (RTL, WCAG, acronyms) is preserved. Full raw selector lives on hover via a tooltip. Toggle under Settings → Tools → CSS Variables Assistant → Documentation Popup Columns → "Prettify theme selector labels" — turn off for paste-back-to-CSS fidelity.
  • Collapse rows with identical values (new setting, default on): when several themes resolve a token to the same value (e.g. catppuccin, sepia, and matcha all leaving --bg: white), they're merged into one row whose Context column lists every contributing theme ("Light mode, Catppuccin, Sepia"). Keeps the popup scannable in design systems with many theme variants. Turn off under Settings → Tools → CSS Variables Assistant → Documentation Popup Columns → "Collapse rows with identical values" to see one row per selector as in 1.8.2.

Notes

  • Compound selectors (.dark .nested, [a] .b), pseudo-classes (:hover, :not(.foo)) and IDs (#app) stay verbatim — prettifying them would misrepresent their CSS semantics.
  • No index rebuild required.

1.8.2 – 2026-04-22

Added

  • Compact Source column (on by default): the hover popup's Source cell now renders just :220; the full variables.css:220 appears on hover. Keeps the popup narrow enough to avoid wrapping at IntelliJ's max-width clamp. Toggle under Settings → Tools → CSS Variables Assistant → Documentation Popup Columns.
  • Wider popup by default: the value table now hints at ~700 px minimum width via a `min-width` wrapper + invisible spacer, so multi-column rows (Context, Value, Type, Source, Hex, WCAG) don't wrap in the common case. Platform still caps around 950 px; users can manually resize the popup and the IDE remembers.

Notes

  • No index rebuild required. Purely a rendering / UI polish release.

1.8.1 – 2026-04-22

Added

  • Theming selectors become their own rows in the hover popup (issue #19, reported by @LordMaddhi): Declarations inside [data-theme="dark"], .dark, .theme-high-contrast, :hover, [dir="rtl"] and other non-root selectors are now indexed as distinct contexts. Before 1.8.1 every non-:root/:host/html/body/* block collapsed into default and only the last declaration was visible, which hid dark-mode values from any theme system that didn't use @media (prefers-color-scheme: dark). Nested blocks combine labels, so @media (prefers-color-scheme: dark) { .hc { … } } renders as (prefers-color-scheme: dark) .hc.
  • Source file and line per declaration in the hover popup: the Source column now shows tokens.css:42 for every indexed row, so when the same variable is defined across multiple theme files (shadcn, Radix, Tailwind, Material) you can see which file and line each value lives on. Legacy index records fall back to the previous "first resolution step" label automatically.
  • Cascade-ambiguity disclaimer: a small note under multi-row value tables reminds that rows are shown in index order and the runtime-applied value still depends on stylesheet load order and specificity — the popup doesn't simulate the full CSS cascade engine.

Changed

  • INDEX_VERSION bumped to force a one-time re-index on first launch after upgrade. The packed record now carries a 4th field (1-based source line); legacy 3-part records decode safely with line = -1 so stale caches never crash the popup.
  • The documentation service uses FileBasedIndex.processValues instead of getValues so the (VirtualFile, packed) pair is available in one pass rather than an O(files × keys) re-query via getContainingFiles.

1.8.0 – 2026-04-22

Fixed

  • Completion popup no longer loses suggestions during progressive typing (issue #18 follow-up): Several regressions that only surfaced in real IDE sessions — hsl(var(--err)) showing every variable, a sticky popup that ignored subsequent keystrokes, --foreground / --error hidden behind their *-foreground siblings, and var(-<caret>) filtering out every variable without an internal dash. All fixed.
  • Value column no longer shows a comment (issue #18): When a CSS custom property has a JSDoc/block comment above it, the completion popup now always shows the resolved value — it no longer scrapes a --name: ...; sample out of an unrelated comment block. Both completion and hover documentation respect the real cascade winner.
  • Autocompletion no longer fires outside var() (issue #18): The gate now tracks parenthesis depth from each var( to the caret, so typing after a closed var(--x) on the same line stops surfacing every indexed variable. Identifiers ending in var (e.g. myvar() also no longer trigger completions.
  • Inline /* ... */ in values and declarations: The indexer now strips inline CSS comments from captured values and still indexes variables even when a leading /* comment */ and the declaration share one line.
  • Scope leaks node_modules fewer places: PROJECT_ONLY and PROJECT_WITH_IMPORTS scopes now consistently exclude node_modules at the CSS query layer, matching the settings panel's wording.
  • DESC completion sort no longer reverses the tier hierarchy: A latent bug had .reversed() flipping every step including PREFIX / TOKEN_PREFIX / SUBSTRING tier ordering. Only the value-level comparison reverses now; tier ordering is always PREFIX first.

Added

  • Three-option completion sort order: Completion sort order now offers By value ascending (default), By value descending, and Alphabetical by name. The preference applies consistently in both the blank-query autopopup path and fresh invocations, so --padding-sm / --padding-md / --padding-lg always appear in the chosen order regardless of how the popup was opened.
  • Completion description toggle + length: New settings under Display Options let you hide the description that appears next to each completion item, or clamp it to a custom length (0 = hide, up to 120 chars).
  • Optional feedback prompt: After ~14 days and 20 uses of CSS variable completion, a single non-intrusive balloon asks if you'd like to rate the plugin on Marketplace. "Remind me later" and "Don't show again" actions included. Prompt conditions are conservative — it will never re-appear once dismissed.
  • Pairs well with PxPeek: sibling plugin by the same author adding inline px-equivalents for rem / em / vh / % and all modern viewport units. Linked from the Marketplace description and the README.
  • Broader verifier coverage: Plugin verification now also runs against PyCharm Professional and RubyMine — both bundle the JavaScript and CSS plugins the plugin depends on.
  • Regression tests: New tests lock in each of the fixes above so the classes of bug in issue #18 don't come back.

Notes

  • The CSS variable index will rebuild once on first launch after upgrade because the parser now captures values differently.

1.7.2 – 2026-04-15

Fixed

  • Clean var(--name) insertion: Selecting a completion inside var(...) now always produces the correct var(--name) — the 1.7.1 release could insert var(----name), var(---name), or a trailing dash (var(--name-)) depending on when the popup opened.
  • Works inside any CSS function: Fix also covers var() nested inside other CSS functions, e.g. hsl(var(--bg)), rgba(var(--bg), 0.5), color-mix(in oklch, var(--bg) 50%, white), calc(var(--size) * 2), and linear-gradient(hsl(var(--a)), hsl(var(--b))). Only the var(...) containing the caret is rewritten.

Added

  • Insertion-based completion regression tests: New tests assert the actual document state after selecting a completion (not just which items are offered), covering bare var(...) and var() nested inside hsl / hsla / rgb / rgba / oklch / color-mix / calc / clamp / linear-gradient, plus multi-var() declarations and non-var() contexts.

1.7.1 – 2026-04-08

Added

  • Completion-scope regression coverage: Added tests that lock CSS variable completion to stylesheet files and valid var(...) value contexts.

Fixed

  • Stylesheet-only completion: CSS variable completions are no longer registered in JavaScript, TypeScript, JSX, or TSX files.
  • Value-context completion: CSS variable suggestions now require a real var(...) context and no longer interfere with CSS property-name completion such as background.

1.8.4 – 2026-04-22

Fixed

  • Exact-match ranking in the completion popup (issue #20, reported by @Blinks44): typing the complete variable name var(--sidebar-accent-foreground) left --sidebar selected at the top of the popup in 1.8.0-1.8.3, so pressing Enter/Tab overwrote the full name the user had already typed. Two independent paths in the ranking stack both compared each entry against its own truncated matched-prefix instead of the user's actual query; both now compare against the full query so the exact match wins.

Notes

  • Three layers of regression tests lock the fix in: matcher unit (matchingDegree score ordering), comparator unit (compareQuerySpecificity over a standalone Entry list), and full platform-fixture integration (completing var(--sidebar-accent-foreground) against a shadcn-style token file).
  • No index rebuild or settings change required.

1.8.3 – 2026-04-22

Added

  • Readable theme labels in the hover popup (new setting, default on): [data-theme="catppuccin"] now renders as "Catppuccin" in the Context column, [data-theme="high-contrast"] as "High contrast", .dark as "Dark", and so on. Any single attribute-equals or single-class selector is humanised — kebab-case and snake_case values get spaces and sentence-cased; user-authored uppercase (RTL, WCAG, acronyms) is preserved. Full raw selector lives on hover via a tooltip. Toggle under Settings → Tools → CSS Variables Assistant → Documentation Popup Columns → "Prettify theme selector labels" — turn off for paste-back-to-CSS fidelity.
  • Collapse rows with identical values (new setting, default on): when several themes resolve a token to the same value (e.g. catppuccin, sepia, and matcha all leaving --bg: white), they're merged into one row whose Context column lists every contributing theme ("Light mode, Catppuccin, Sepia"). Keeps the popup scannable in design systems with many theme variants. Turn off under Settings → Tools → CSS Variables Assistant → Documentation Popup Columns → "Collapse rows with identical values" to see one row per selector as in 1.8.2.

Notes

  • Compound selectors (.dark .nested, [a] .b), pseudo-classes (:hover, :not(.foo)) and IDs (#app) stay verbatim — prettifying them would misrepresent their CSS semantics.
  • No index rebuild required.

1.8.2 – 2026-04-22

Added

  • Compact Source column (on by default): the hover popup's Source cell now renders just :220; the full variables.css:220 appears on hover. Keeps the popup narrow enough to avoid wrapping at IntelliJ's max-width clamp. Toggle under Settings → Tools → CSS Variables Assistant → Documentation Popup Columns.
  • Wider popup by default: the value table now hints at ~700 px minimum width via a `min-width` wrapper + invisible spacer, so multi-column rows (Context, Value, Type, Source, Hex, WCAG) don't wrap in the common case. Platform still caps around 950 px; users can manually resize the popup and the IDE remembers.

Notes

  • No index rebuild required. Purely a rendering / UI polish release.

1.8.1 – 2026-04-22

Added

  • Theming selectors become their own rows in the hover popup (issue #19, reported by @LordMaddhi): Declarations inside [data-theme="dark"], .dark, .theme-high-contrast, :hover, [dir="rtl"] and other non-root selectors are now indexed as distinct contexts. Before 1.8.1 every non-:root/:host/html/body/* block collapsed into default and only the last declaration was visible, which hid dark-mode values from any theme system that didn't use @media (prefers-color-scheme: dark). Nested blocks combine labels, so @media (prefers-color-scheme: dark) { .hc { … } } renders as (prefers-color-scheme: dark) .hc.
  • Source file and line per declaration in the hover popup: the Source column now shows tokens.css:42 for every indexed row, so when the same variable is defined across multiple theme files (shadcn, Radix, Tailwind, Material) you can see which file and line each value lives on. Legacy index records fall back to the previous "first resolution step" label automatically.
  • Cascade-ambiguity disclaimer: a small note under multi-row value tables reminds that rows are shown in index order and the runtime-applied value still depends on stylesheet load order and specificity — the popup doesn't simulate the full CSS cascade engine.

Changed

  • INDEX_VERSION bumped to force a one-time re-index on first launch after upgrade. The packed record now carries a 4th field (1-based source line); legacy 3-part records decode safely with line = -1 so stale caches never crash the popup.
  • The documentation service uses FileBasedIndex.processValues instead of getValues so the (VirtualFile, packed) pair is available in one pass rather than an O(files × keys) re-query via getContainingFiles.

1.8.0 – 2026-04-22

Fixed

  • Completion popup no longer loses suggestions during progressive typing (issue #18 follow-up): Several regressions that only surfaced in real IDE sessions — hsl(var(--err)) showing every variable, a sticky popup that ignored subsequent keystrokes, --foreground / --error hidden behind their *-foreground siblings, and var(-<caret>) filtering out every variable without an internal dash. All fixed.
  • Value column no longer shows a comment (issue #18): When a CSS custom property has a JSDoc/block comment above it, the completion popup now always shows the resolved value — it no longer scrapes a --name: ...; sample out of an unrelated comment block. Both completion and hover documentation respect the real cascade winner.
  • Autocompletion no longer fires outside var() (issue #18): The gate now tracks parenthesis depth from each var( to the caret, so typing after a closed var(--x) on the same line stops surfacing every indexed variable. Identifiers ending in var (e.g. myvar() also no longer trigger completions.
  • Inline /* ... */ in values and declarations: The indexer now strips inline CSS comments from captured values and still indexes variables even when a leading /* comment */ and the declaration share one line.
  • Scope leaks node_modules fewer places: PROJECT_ONLY and PROJECT_WITH_IMPORTS scopes now consistently exclude node_modules at the CSS query layer, matching the settings panel's wording.
  • DESC completion sort no longer reverses the tier hierarchy: A latent bug had .reversed() flipping every step including PREFIX / TOKEN_PREFIX / SUBSTRING tier ordering. Only the value-level comparison reverses now; tier ordering is always PREFIX first.

Added

  • Three-option completion sort order: Completion sort order now offers By value ascending (default), By value descending, and Alphabetical by name. The preference applies consistently in both the blank-query autopopup path and fresh invocations, so --padding-sm / --padding-md / --padding-lg always appear in the chosen order regardless of how the popup was opened.
  • Completion description toggle + length: New settings under Display Options let you hide the description that appears next to each completion item, or clamp it to a custom length (0 = hide, up to 120 chars).
  • Optional feedback prompt: After ~14 days and 20 uses of CSS variable completion, a single non-intrusive balloon asks if you'd like to rate the plugin on Marketplace. "Remind me later" and "Don't show again" actions included. Prompt conditions are conservative — it will never re-appear once dismissed.
  • Pairs well with PxPeek: sibling plugin by the same author adding inline px-equivalents for rem / em / vh / % and all modern viewport units. Linked from the Marketplace description and the README.
  • Broader verifier coverage: Plugin verification now also runs against PyCharm Professional and RubyMine — both bundle the JavaScript and CSS plugins the plugin depends on.
  • Regression tests: New tests lock in each of the fixes above so the classes of bug in issue #18 don't come back.

Notes

  • The CSS variable index will rebuild once on first launch after upgrade because the parser now captures values differently.

1.7.2 – 2026-04-15

Fixed

  • Clean var(--name) insertion: Selecting a completion inside var(...) now always produces the correct var(--name) — the 1.7.1 release could insert var(----name), var(---name), or a trailing dash (var(--name-)) depending on when the popup opened.
  • Works inside any CSS function: Fix also covers var() nested inside other CSS functions, e.g. hsl(var(--bg)), rgba(var(--bg), 0.5), color-mix(in oklch, var(--bg) 50%, white), calc(var(--size) * 2), and linear-gradient(hsl(var(--a)), hsl(var(--b))). Only the var(...) containing the caret is rewritten.

Added

  • Insertion-based completion regression tests: New tests assert the actual document state after selecting a completion (not just which items are offered), covering bare var(...) and var() nested inside hsl / hsla / rgb / rgba / oklch / color-mix / calc / clamp / linear-gradient, plus multi-var() declarations and non-var() contexts.

1.7.1 – 2026-04-08

Added

  • Completion-scope regression coverage: Added tests that lock CSS variable completion to stylesheet files and valid var(...) value contexts.

Fixed

  • Stylesheet-only completion: CSS variable completions are no longer registered in JavaScript, TypeScript, JSX, or TSX files.
  • Value-context completion: CSS variable suggestions now require a real var(...) context and no longer interfere with CSS property-name completion such as background.

1.8.3 – 2026-04-22

Added

  • Readable theme labels in the hover popup (new setting, default on): [data-theme="catppuccin"] now renders as "Catppuccin" in the Context column, [data-theme="high-contrast"] as "High contrast", .dark as "Dark", and so on. Any single attribute-equals or single-class selector is humanised — kebab-case and snake_case values get spaces and sentence-cased; user-authored uppercase (RTL, WCAG, acronyms) is preserved. Full raw selector lives on hover via a tooltip. Toggle under Settings → Tools → CSS Variables Assistant → Documentation Popup Columns → "Prettify theme selector labels" — turn off for paste-back-to-CSS fidelity.
  • Collapse rows with identical values (new setting, default on): when several themes resolve a token to the same value (e.g. catppuccin, sepia, and matcha all leaving --bg: white), they're merged into one row whose Context column lists every contributing theme ("Light mode, Catppuccin, Sepia"). Keeps the popup scannable in design systems with many theme variants. Turn off under Settings → Tools → CSS Variables Assistant → Documentation Popup Columns → "Collapse rows with identical values" to see one row per selector as in 1.8.2.

Notes

  • Compound selectors (.dark .nested, [a] .b), pseudo-classes (:hover, :not(.foo)) and IDs (#app) stay verbatim — prettifying them would misrepresent their CSS semantics.
  • No index rebuild required.

1.8.2 – 2026-04-22

Added

  • Compact Source column (on by default): the hover popup's Source cell now renders just :220; the full variables.css:220 appears on hover. Keeps the popup narrow enough to avoid wrapping at IntelliJ's max-width clamp. Toggle under Settings → Tools → CSS Variables Assistant → Documentation Popup Columns.
  • Wider popup by default: the value table now hints at ~700 px minimum width via a `min-width` wrapper + invisible spacer, so multi-column rows (Context, Value, Type, Source, Hex, WCAG) don't wrap in the common case. Platform still caps around 950 px; users can manually resize the popup and the IDE remembers.

Notes

  • No index rebuild required. Purely a rendering / UI polish release.

1.8.1 – 2026-04-22

Added

  • Theming selectors become their own rows in the hover popup (issue #19, reported by @LordMaddhi): Declarations inside [data-theme="dark"], .dark, .theme-high-contrast, :hover, [dir="rtl"] and other non-root selectors are now indexed as distinct contexts. Before 1.8.1 every non-:root/:host/html/body/* block collapsed into default and only the last declaration was visible, which hid dark-mode values from any theme system that didn't use @media (prefers-color-scheme: dark). Nested blocks combine labels, so @media (prefers-color-scheme: dark) { .hc { … } } renders as (prefers-color-scheme: dark) .hc.
  • Source file and line per declaration in the hover popup: the Source column now shows tokens.css:42 for every indexed row, so when the same variable is defined across multiple theme files (shadcn, Radix, Tailwind, Material) you can see which file and line each value lives on. Legacy index records fall back to the previous "first resolution step" label automatically.
  • Cascade-ambiguity disclaimer: a small note under multi-row value tables reminds that rows are shown in index order and the runtime-applied value still depends on stylesheet load order and specificity — the popup doesn't simulate the full CSS cascade engine.

Changed

  • INDEX_VERSION bumped to force a one-time re-index on first launch after upgrade. The packed record now carries a 4th field (1-based source line); legacy 3-part records decode safely with line = -1 so stale caches never crash the popup.
  • The documentation service uses FileBasedIndex.processValues instead of getValues so the (VirtualFile, packed) pair is available in one pass rather than an O(files × keys) re-query via getContainingFiles.

1.8.0 – 2026-04-22

Fixed

  • Completion popup no longer loses suggestions during progressive typing (issue #18 follow-up): Several regressions that only surfaced in real IDE sessions — hsl(var(--err)) showing every variable, a sticky popup that ignored subsequent keystrokes, --foreground / --error hidden behind their *-foreground siblings, and var(-<caret>) filtering out every variable without an internal dash. All fixed.
  • Value column no longer shows a comment (issue #18): When a CSS custom property has a JSDoc/block comment above it, the completion popup now always shows the resolved value — it no longer scrapes a --name: ...; sample out of an unrelated comment block. Both completion and hover documentation respect the real cascade winner.
  • Autocompletion no longer fires outside var() (issue #18): The gate now tracks parenthesis depth from each var( to the caret, so typing after a closed var(--x) on the same line stops surfacing every indexed variable. Identifiers ending in var (e.g. myvar() also no longer trigger completions.
  • Inline /* ... */ in values and declarations: The indexer now strips inline CSS comments from captured values and still indexes variables even when a leading /* comment */ and the declaration share one line.
  • Scope leaks node_modules fewer places: PROJECT_ONLY and PROJECT_WITH_IMPORTS scopes now consistently exclude node_modules at the CSS query layer, matching the settings panel's wording.
  • DESC completion sort no longer reverses the tier hierarchy: A latent bug had .reversed() flipping every step including PREFIX / TOKEN_PREFIX / SUBSTRING tier ordering. Only the value-level comparison reverses now; tier ordering is always PREFIX first.

Added

  • Three-option completion sort order: Completion sort order now offers By value ascending (default), By value descending, and Alphabetical by name. The preference applies consistently in both the blank-query autopopup path and fresh invocations, so --padding-sm / --padding-md / --padding-lg always appear in the chosen order regardless of how the popup was opened.
  • Completion description toggle + length: New settings under Display Options let you hide the description that appears next to each completion item, or clamp it to a custom length (0 = hide, up to 120 chars).
  • Optional feedback prompt: After ~14 days and 20 uses of CSS variable completion, a single non-intrusive balloon asks if you'd like to rate the plugin on Marketplace. "Remind me later" and "Don't show again" actions included. Prompt conditions are conservative — it will never re-appear once dismissed.
  • Pairs well with PxPeek: sibling plugin by the same author adding inline px-equivalents for rem / em / vh / % and all modern viewport units. Linked from the Marketplace description and the README.
  • Broader verifier coverage: Plugin verification now also runs against PyCharm Professional and RubyMine — both bundle the JavaScript and CSS plugins the plugin depends on.
  • Regression tests: New tests lock in each of the fixes above so the classes of bug in issue #18 don't come back.

Notes

  • The CSS variable index will rebuild once on first launch after upgrade because the parser now captures values differently.

1.7.2 – 2026-04-15

Fixed

  • Clean var(--name) insertion: Selecting a completion inside var(...) now always produces the correct var(--name) — the 1.7.1 release could insert var(----name), var(---name), or a trailing dash (var(--name-)) depending on when the popup opened.
  • Works inside any CSS function: Fix also covers var() nested inside other CSS functions, e.g. hsl(var(--bg)), rgba(var(--bg), 0.5), color-mix(in oklch, var(--bg) 50%, white), calc(var(--size) * 2), and linear-gradient(hsl(var(--a)), hsl(var(--b))). Only the var(...) containing the caret is rewritten.

Added

  • Insertion-based completion regression tests: New tests assert the actual document state after selecting a completion (not just which items are offered), covering bare var(...) and var() nested inside hsl / hsla / rgb / rgba / oklch / color-mix / calc / clamp / linear-gradient, plus multi-var() declarations and non-var() contexts.

1.7.1 – 2026-04-08

Added

  • Completion-scope regression coverage: Added tests that lock CSS variable completion to stylesheet files and valid var(...) value contexts.

Fixed

  • Stylesheet-only completion: CSS variable completions are no longer registered in JavaScript, TypeScript, JSX, or TSX files.
  • Value-context completion: CSS variable suggestions now require a real var(...) context and no longer interfere with CSS property-name completion such as background.

1.8.2 – 2026-04-22

Added

  • Compact Source column (on by default): the hover popup's Source cell now renders just :220; the full variables.css:220 appears on hover. Keeps the popup narrow enough to avoid wrapping at IntelliJ's max-width clamp. Toggle under Settings → Tools → CSS Variables Assistant → Documentation Popup Columns.
  • Wider popup by default: the value table now hints at ~700 px minimum width via a `min-width` wrapper + invisible spacer, so multi-column rows (Context, Value, Type, Source, Hex, WCAG) don't wrap in the common case. Platform still caps around 950 px; users can manually resize the popup and the IDE remembers.

Notes

  • No index rebuild required. Purely a rendering / UI polish release.

1.8.1 – 2026-04-22

Added

  • Theming selectors become their own rows in the hover popup (issue #19, reported by @LordMaddhi): Declarations inside [data-theme="dark"], .dark, .theme-high-contrast, :hover, [dir="rtl"] and other non-root selectors are now indexed as distinct contexts. Before 1.8.1 every non-:root/:host/html/body/* block collapsed into default and only the last declaration was visible, which hid dark-mode values from any theme system that didn't use @media (prefers-color-scheme: dark). Nested blocks combine labels, so @media (prefers-color-scheme: dark) { .hc { … } } renders as (prefers-color-scheme: dark) .hc.
  • Source file and line per declaration in the hover popup: the Source column now shows tokens.css:42 for every indexed row, so when the same variable is defined across multiple theme files (shadcn, Radix, Tailwind, Material) you can see which file and line each value lives on. Legacy index records fall back to the previous "first resolution step" label automatically.
  • Cascade-ambiguity disclaimer: a small note under multi-row value tables reminds that rows are shown in index order and the runtime-applied value still depends on stylesheet load order and specificity — the popup doesn't simulate the full CSS cascade engine.

Changed

  • INDEX_VERSION bumped to force a one-time re-index on first launch after upgrade. The packed record now carries a 4th field (1-based source line); legacy 3-part records decode safely with line = -1 so stale caches never crash the popup.
  • The documentation service uses FileBasedIndex.processValues instead of getValues so the (VirtualFile, packed) pair is available in one pass rather than an O(files × keys) re-query via getContainingFiles.

1.8.0 – 2026-04-22

Fixed

  • Completion popup no longer loses suggestions during progressive typing (issue #18 follow-up): Several regressions that only surfaced in real IDE sessions — hsl(var(--err)) showing every variable, a sticky popup that ignored subsequent keystrokes, --foreground / --error hidden behind their *-foreground siblings, and var(-<caret>) filtering out every variable without an internal dash. All fixed.
  • Value column no longer shows a comment (issue #18): When a CSS custom property has a JSDoc/block comment above it, the completion popup now always shows the resolved value — it no longer scrapes a --name: ...; sample out of an unrelated comment block. Both completion and hover documentation respect the real cascade winner.
  • Autocompletion no longer fires outside var() (issue #18): The gate now tracks parenthesis depth from each var( to the caret, so typing after a closed var(--x) on the same line stops surfacing every indexed variable. Identifiers ending in var (e.g. myvar() also no longer trigger completions.
  • Inline /* ... */ in values and declarations: The indexer now strips inline CSS comments from captured values and still indexes variables even when a leading /* comment */ and the declaration share one line.
  • Scope leaks node_modules fewer places: PROJECT_ONLY and PROJECT_WITH_IMPORTS scopes now consistently exclude node_modules at the CSS query layer, matching the settings panel's wording.
  • DESC completion sort no longer reverses the tier hierarchy: A latent bug had .reversed() flipping every step including PREFIX / TOKEN_PREFIX / SUBSTRING tier ordering. Only the value-level comparison reverses now; tier ordering is always PREFIX first.

Added

  • Three-option completion sort order: Completion sort order now offers By value ascending (default), By value descending, and Alphabetical by name. The preference applies consistently in both the blank-query autopopup path and fresh invocations, so --padding-sm / --padding-md / --padding-lg always appear in the chosen order regardless of how the popup was opened.
  • Completion description toggle + length: New settings under Display Options let you hide the description that appears next to each completion item, or clamp it to a custom length (0 = hide, up to 120 chars).
  • Optional feedback prompt: After ~14 days and 20 uses of CSS variable completion, a single non-intrusive balloon asks if you'd like to rate the plugin on Marketplace. "Remind me later" and "Don't show again" actions included. Prompt conditions are conservative — it will never re-appear once dismissed.
  • Pairs well with PxPeek: sibling plugin by the same author adding inline px-equivalents for rem / em / vh / % and all modern viewport units. Linked from the Marketplace description and the README.
  • Broader verifier coverage: Plugin verification now also runs against PyCharm Professional and RubyMine — both bundle the JavaScript and CSS plugins the plugin depends on.
  • Regression tests: New tests lock in each of the fixes above so the classes of bug in issue #18 don't come back.

Notes

  • The CSS variable index will rebuild once on first launch after upgrade because the parser now captures values differently.

1.7.2 – 2026-04-15

Fixed

  • Clean var(--name) insertion: Selecting a completion inside var(...) now always produces the correct var(--name) — the 1.7.1 release could insert var(----name), var(---name), or a trailing dash (var(--name-)) depending on when the popup opened.
  • Works inside any CSS function: Fix also covers var() nested inside other CSS functions, e.g. hsl(var(--bg)), rgba(var(--bg), 0.5), color-mix(in oklch, var(--bg) 50%, white), calc(var(--size) * 2), and linear-gradient(hsl(var(--a)), hsl(var(--b))). Only the var(...) containing the caret is rewritten.

Added

  • Insertion-based completion regression tests: New tests assert the actual document state after selecting a completion (not just which items are offered), covering bare var(...) and var() nested inside hsl / hsla / rgb / rgba / oklch / color-mix / calc / clamp / linear-gradient, plus multi-var() declarations and non-var() contexts.

1.7.1 – 2026-04-08

Added

  • Completion-scope regression coverage: Added tests that lock CSS variable completion to stylesheet files and valid var(...) value contexts.

Fixed

  • Stylesheet-only completion: CSS variable completions are no longer registered in JavaScript, TypeScript, JSX, or TSX files.
  • Value-context completion: CSS variable suggestions now require a real var(...) context and no longer interfere with CSS property-name completion such as background.

1.8.1 – 2026-04-22

Added

  • Theming selectors become their own rows in the hover popup (issue #19, reported by @LordMaddhi): Declarations inside [data-theme="dark"], .dark, .theme-high-contrast, :hover, [dir="rtl"] and other non-root selectors are now indexed as distinct contexts. Before 1.8.1 every non-:root/:host/html/body/* block collapsed into default and only the last declaration was visible, which hid dark-mode values from any theme system that didn't use @media (prefers-color-scheme: dark). Nested blocks combine labels, so @media (prefers-color-scheme: dark) { .hc { … } } renders as (prefers-color-scheme: dark) .hc.
  • Source file and line per declaration in the hover popup: the Source column now shows tokens.css:42 for every indexed row, so when the same variable is defined across multiple theme files (shadcn, Radix, Tailwind, Material) you can see which file and line each value lives on. Legacy index records fall back to the previous "first resolution step" label automatically.
  • Cascade-ambiguity disclaimer: a small note under multi-row value tables reminds that rows are shown in index order and the runtime-applied value still depends on stylesheet load order and specificity — the popup doesn't simulate the full CSS cascade engine.

Changed

  • INDEX_VERSION bumped to force a one-time re-index on first launch after upgrade. The packed record now carries a 4th field (1-based source line); legacy 3-part records decode safely with line = -1 so stale caches never crash the popup.
  • The documentation service uses FileBasedIndex.processValues instead of getValues so the (VirtualFile, packed) pair is available in one pass rather than an O(files × keys) re-query via getContainingFiles.

1.8.0 – 2026-04-22

Fixed

  • Completion popup no longer loses suggestions during progressive typing (issue #18 follow-up): Several regressions that only surfaced in real IDE sessions — hsl(var(--err)) showing every variable, a sticky popup that ignored subsequent keystrokes, --foreground / --error hidden behind their *-foreground siblings, and var(-<caret>) filtering out every variable without an internal dash. All fixed.
  • Value column no longer shows a comment (issue #18): When a CSS custom property has a JSDoc/block comment above it, the completion popup now always shows the resolved value — it no longer scrapes a --name: ...; sample out of an unrelated comment block. Both completion and hover documentation respect the real cascade winner.
  • Autocompletion no longer fires outside var() (issue #18): The gate now tracks parenthesis depth from each var( to the caret, so typing after a closed var(--x) on the same line stops surfacing every indexed variable. Identifiers ending in var (e.g. myvar() also no longer trigger completions.
  • Inline /* ... */ in values and declarations: The indexer now strips inline CSS comments from captured values and still indexes variables even when a leading /* comment */ and the declaration share one line.
  • Scope leaks node_modules fewer places: PROJECT_ONLY and PROJECT_WITH_IMPORTS scopes now consistently exclude node_modules at the CSS query layer, matching the settings panel's wording.
  • DESC completion sort no longer reverses the tier hierarchy: A latent bug had .reversed() flipping every step including PREFIX / TOKEN_PREFIX / SUBSTRING tier ordering. Only the value-level comparison reverses now; tier ordering is always PREFIX first.

Added

  • Three-option completion sort order: Completion sort order now offers By value ascending (default), By value descending, and Alphabetical by name. The preference applies consistently in both the blank-query autopopup path and fresh invocations, so --padding-sm / --padding-md / --padding-lg always appear in the chosen order regardless of how the popup was opened.
  • Completion description toggle + length: New settings under Display Options let you hide the description that appears next to each completion item, or clamp it to a custom length (0 = hide, up to 120 chars).
  • Optional feedback prompt: After ~14 days and 20 uses of CSS variable completion, a single non-intrusive balloon asks if you'd like to rate the plugin on Marketplace. "Remind me later" and "Don't show again" actions included. Prompt conditions are conservative — it will never re-appear once dismissed.
  • Pairs well with PxPeek: sibling plugin by the same author adding inline px-equivalents for rem / em / vh / % and all modern viewport units. Linked from the Marketplace description and the README.
  • Broader verifier coverage: Plugin verification now also runs against PyCharm Professional and RubyMine — both bundle the JavaScript and CSS plugins the plugin depends on.
  • Regression tests: New tests lock in each of the fixes above so the classes of bug in issue #18 don't come back.

Notes

  • The CSS variable index will rebuild once on first launch after upgrade because the parser now captures values differently.

1.7.2 – 2026-04-15

Fixed

  • Clean var(--name) insertion: Selecting a completion inside var(...) now always produces the correct var(--name) — the 1.7.1 release could insert var(----name), var(---name), or a trailing dash (var(--name-)) depending on when the popup opened.
  • Works inside any CSS function: Fix also covers var() nested inside other CSS functions, e.g. hsl(var(--bg)), rgba(var(--bg), 0.5), color-mix(in oklch, var(--bg) 50%, white), calc(var(--size) * 2), and linear-gradient(hsl(var(--a)), hsl(var(--b))). Only the var(...) containing the caret is rewritten.

Added

  • Insertion-based completion regression tests: New tests assert the actual document state after selecting a completion (not just which items are offered), covering bare var(...) and var() nested inside hsl / hsla / rgb / rgba / oklch / color-mix / calc / clamp / linear-gradient, plus multi-var() declarations and non-var() contexts.

1.7.1 – 2026-04-08

Added

  • Completion-scope regression coverage: Added tests that lock CSS variable completion to stylesheet files and valid var(...) value contexts.

Fixed

  • Stylesheet-only completion: CSS variable completions are no longer registered in JavaScript, TypeScript, JSX, or TSX files.
  • Value-context completion: CSS variable suggestions now require a real var(...) context and no longer interfere with CSS property-name completion such as background.

1.8.0 – 2026-04-22

Fixed

  • Completion popup no longer loses suggestions during progressive typing (issue #18 follow-up): Several regressions that only surfaced in real IDE sessions — hsl(var(--err)) showing every variable, a sticky popup that ignored subsequent keystrokes, --foreground / --error hidden behind their *-foreground siblings, and var(-<caret>) filtering out every variable without an internal dash. All fixed.
  • Value column no longer shows a comment (issue #18): When a CSS custom property has a JSDoc/block comment above it, the completion popup now always shows the resolved value — it no longer scrapes a --name: ...; sample out of an unrelated comment block. Both completion and hover documentation respect the real cascade winner.
  • Autocompletion no longer fires outside var() (issue #18): The gate now tracks parenthesis depth from each var( to the caret, so typing after a closed var(--x) on the same line stops surfacing every indexed variable. Identifiers ending in var (e.g. myvar() also no longer trigger completions.
  • Inline /* ... */ in values and declarations: The indexer now strips inline CSS comments from captured values and still indexes variables even when a leading /* comment */ and the declaration share one line.
  • Scope leaks node_modules fewer places: PROJECT_ONLY and PROJECT_WITH_IMPORTS scopes now consistently exclude node_modules at the CSS query layer, matching the settings panel's wording.
  • DESC completion sort no longer reverses the tier hierarchy: A latent bug had .reversed() flipping every step including PREFIX / TOKEN_PREFIX / SUBSTRING tier ordering. Only the value-level comparison reverses now; tier ordering is always PREFIX first.

Added

  • Three-option completion sort order: Completion sort order now offers By value ascending (default), By value descending, and Alphabetical by name. The preference applies consistently in both the blank-query autopopup path and fresh invocations, so --padding-sm / --padding-md / --padding-lg always appear in the chosen order regardless of how the popup was opened.
  • Completion description toggle + length: New settings under Display Options let you hide the description that appears next to each completion item, or clamp it to a custom length (0 = hide, up to 120 chars).
  • Optional feedback prompt: After ~14 days and 20 uses of CSS variable completion, a single non-intrusive balloon asks if you'd like to rate the plugin on Marketplace. "Remind me later" and "Don't show again" actions included. Prompt conditions are conservative — it will never re-appear once dismissed.
  • Pairs well with PxPeek: sibling plugin by the same author adding inline px-equivalents for rem / em / vh / % and all modern viewport units. Linked from the Marketplace description and the README.
  • Broader verifier coverage: Plugin verification now also runs against PyCharm Professional and RubyMine — both bundle the JavaScript and CSS plugins the plugin depends on.
  • Regression tests: New tests lock in each of the fixes above so the classes of bug in issue #18 don't come back.

Notes

  • The CSS variable index will rebuild once on first launch after upgrade because the parser now captures values differently.

1.7.2 – 2026-04-15

Fixed

  • Clean var(--name) insertion: Selecting a completion inside var(...) now always produces the correct var(--name) — the 1.7.1 release could insert var(----name), var(---name), or a trailing dash (var(--name-)) depending on when the popup opened.
  • Works inside any CSS function: Fix also covers var() nested inside other CSS functions, e.g. hsl(var(--bg)), rgba(var(--bg), 0.5), color-mix(in oklch, var(--bg) 50%, white), calc(var(--size) * 2), and linear-gradient(hsl(var(--a)), hsl(var(--b))). Only the var(...) containing the caret is rewritten.

Added

  • Insertion-based completion regression tests: New tests assert the actual document state after selecting a completion (not just which items are offered), covering bare var(...) and var() nested inside hsl / hsla / rgb / rgba / oklch / color-mix / calc / clamp / linear-gradient, plus multi-var() declarations and non-var() contexts.

1.7.1 – 2026-04-08

Added

  • Completion-scope regression coverage: Added tests that lock CSS variable completion to stylesheet files and valid var(...) value contexts.

Fixed

  • Stylesheet-only completion: CSS variable completions are no longer registered in JavaScript, TypeScript, JSX, or TSX files.
  • Value-context completion: CSS variable suggestions now require a real var(...) context and no longer interfere with CSS property-name completion such as background.

1.7.2 – 2026-04-15

Fixed

  • Clean var(--name) insertion: Selecting a completion inside var(...) now always produces the correct var(--name) — the 1.7.1 release could insert var(----name), var(---name), or a trailing dash (var(--name-)) depending on when the popup opened.
  • Works inside any CSS function: Fix also covers var() nested inside other CSS functions, e.g. hsl(var(--bg)), rgba(var(--bg), 0.5), color-mix(in oklch, var(--bg) 50%, white), calc(var(--size) * 2), and linear-gradient(hsl(var(--a)), hsl(var(--b))). Only the var(...) containing the caret is rewritten.

Added

  • Insertion-based completion regression tests: New tests assert the actual document state after selecting a completion (not just which items are offered), covering bare var(...) and var() nested inside hsl / hsla / rgb / rgba / oklch / color-mix / calc / clamp / linear-gradient, plus multi-var() declarations and non-var() contexts.

1.7.1 – 2026-04-08

Added

  • Completion-scope regression coverage: Added tests that lock CSS variable completion to stylesheet files and valid var(...) value contexts.

Fixed

  • Stylesheet-only completion: CSS variable completions are no longer registered in JavaScript, TypeScript, JSX, or TSX files.
  • Value-context completion: CSS variable suggestions now require a real var(...) context and no longer interfere with CSS property-name completion such as background.

1.7.1 – 2026-04-08

Added

  • Completion-scope regression coverage: Added tests that lock CSS variable completion to stylesheet files and valid var(...) value contexts.

Fixed

  • Stylesheet-only completion: CSS variable completions are no longer registered in JavaScript, TypeScript, JSX, or TSX files.
  • Value-context completion: CSS variable suggestions now require a real var(...) context and no longer interfere with CSS property-name completion such as background.

1.7.0 – 2026-03-29

Added

  • Marketplace compatibility coverage: Added regression tests to lock the plugin manifest and build metadata required for broader JetBrains IDE support.

Changed

  • Broader IDE targeting: The plugin now declares JavaScript + CSS dependencies explicitly and is built from a broader IntelliJ IDEA Ultimate base instead of a WebStorm-only target.
  • Verification setup: Plugin verification is now configured for IntelliJ IDEA Ultimate, WebStorm, GoLand, and PhpStorm.

1.6.0 – 2025-06-20

Added

  • Customizable Documentation Columns: Users can now select which columns (e.g., Context, Value, Source, WCAG Contrast) are visible in the documentation popup via the settings panel.
  • Resolution Chain Tooltip: Hovering over a variable in the documentation now displays a detailed tooltip showing the full resolution chain, explaining how the final value was derived.

Changed

  • Performance and Memory Management: Caching mechanisms have been overhauled for better performance and reduced memory usage, especially in large projects.
  • Dynamic Documentation Table: The documentation popup now dynamically generates columns based on user settings and the variable's value type, improving clarity and relevance.
  • Settings UI: The settings panel has been updated to include controls for the new column visibility feature.

Fixed

  • Resolution Accuracy: Corrected a bug where the resolution chain was not always fully preserved in the cache, ensuring documentation is always accurate.
  • UI Styling: Fixed minor styling issues in the documentation table for better readability.

1.5.0 – 2025-06-15

Added

  • IntelliJ 2024.1+ documentation API support with rich popups and fallback for older builds.
  • Dynamic value-table columns – documentation now auto-adds px Eq., Hex and WCAG columns when relevant.
  • Recursively/derived variable completions are now marked with (↗).
  • Improved DebugImportResolution helper for tracing variable origins and import chains.
  • Legend for derived variables – documentation now includes an explanation of the ↗ symbol when variables are resolved through imports or references.

Changed

  • Completions and docs cascading logic – now use the last value per context (cascading logic).
  • Improved context labeling – media query parsing, color handling, and documentation rendering.
  • Centralized index versioning – improved caching, and greater maintainability.
  • Winner-first documentation – the actual winning value is now shown first in documentation tables for immediate clarity.

Fixed

  • CSS cascade compliance – local declarations now correctly override imported values, following proper CSS cascade rules.
  • Minor bugs in arithmetic resolution for preprocessors.
  • Improved context collapsing – color parsing, and documentation bugs.
  • Improved UX hierarchy – better visual distinction between winning values (bold) and overridden declarations.

1.4.2 – 2025-06-12

Added

  • Preprocessor variable index: LESS and SCSS variables are now indexed for instant look‑ups using a new PreprocessorVariableIndex.
  • Value-based completion sorting: Variable completions are sorted by their numeric value, with an option to choose ascending or descending order.
  • Pixel equivalent column: Variable documentation now shows the pixel equivalent for rem/em/%/vh/vw/pt values.
  • Settings UI for sorting: Added a configuration option to choose value-based variable sorting order (ascending or descending).
  • Comprehensive value-type utilities: Added ValueUtil for classifying, comparing, and converting variable values for size, color, and number types.
  • Smarter context ranking: Added RankUtil for logical sorting and ranking of context labels (e.g., default, min-width).
  • Extensive automated tests: Added ValueUtilTest and RankingTest for robust value handling and context ranking.

Changed

  • Improved performance and scope caching: Variable key cache and scope caching now use stable, scope-aware maps for reliable completion and documentation.
  • Smarter var() detection: Completion now works while typing incomplete var( and resolves aliases more quickly, even with missing parenthesis.
  • Documentation improvements: Documentation tables conditionally display pixel equivalents and improved context sorting, with more robust and readable HTML output.
  • Refactored preprocessor resolution: Preprocessor variable resolution is faster and now leverages the new index instead of scanning files directly.
  • Improved logging and error handling: More robust cancellation checks and error reporting in completion and documentation providers.
  • Code cleanup: Removed legacy and duplicated code, improved code comments, and enhanced maintainability.

Fixed

  • Scope caching race conditions: Caches for variable keys and preprocessor scopes are now properly invalidated and synchronized on changes, preventing duplicate completions and stale results.
  • Duplicate IDE completions: Improved completion logic eliminates repeated suggestions.
  • Robustness: Improved handling of edge cases in value parsing, prefix extraction, and context detection.
  • IDE startup and indexing: Now compatible with latest IntelliJ indexing and plugin APIs.

Removed

  • Legacy file scan-based preprocessor variable resolution logic (now replaced by index-based resolution).
  • Unused or obsolete code in tests and main sources.

1.4.1 – 2025-06-05

Improved

  • Faster completion load - Completion suggestions load faster with a project-level cache of variable names. The cache is cleared whenever the index is rebuilt.

1.4.0 – 2025-06-02

Added

  • Global scope by default - the assistant now indexes node_modules out of the box, so external design-system variables resolve automatically.
  • LESS arithmetic evaluation - expressions such as @lessVar-spacing-md - (@lessVar-spacing * 3) are calculated (e.g. 24px) in both completion and quick-docs.
  • One-time settings migrator - keeps the previous scope for existing users while new projects start with the global scope.

Changed

  • File-based index version bumped to 95 - a safe re-index is triggered automatically after upgrade.
  • Internal cache - import-resolution tweaks improve performance on large monorepos.

Fixed

  • Completion and documentation no longer show raw aliases like @lessVar-spacing-md - they always display the final literal value.
  • Stability improvements for deep import chains and long-running background indexing tasks.

1.3.1 – 2025-05-28

Added

  • Enhanced Debug CSS Import Resolution action – comprehensive import chain analysis with tree visualization, variable counting, and detailed resolution paths.
  • Dedicated completion cache (CssVarCompletionCache) – separate caching system for LESS/SCSS variable resolution with improved performance.
  • Index rebuilder utility (CssVariableIndexRebuilder) – centralized index management for better code organization.
  • Dynamic completion popup width – automatically adjusts popup width based on longest variable name for better readability.
  • Enhanced progress reporting – detailed progress indicators for re-indexing operations with step-by-step feedback.

Changed

  • Code architecture improvements – extracted cache and index management into dedicated utility classes for better maintainability.
  • Index version bump to 50 (from 36) for improved stability and compatibility.
  • Re-index process enhancement – more detailed progress reporting with visual feedback and error handling.
  • Import resolution debugging – comprehensive analysis shows full import trees, variable counts, and resolution failures.

Fixed

  • Cache management – resolved issues with stale cache entries affecting completion accuracy.
  • Index rebuilding reliability – improved error handling and progress tracking during index operations.
  • Threading improvements – better handling of background tasks and cancellation scenarios.
  • Memory optimization – more efficient cache management reducing memory footprint.

1.3.0 – 2025-05-27

Added

  • Dynamic pre-processor resolution: automatic, depth-limited resolution of chained @less, \$scss and nested var(--foo) references.
  • Import cache: remembers every file reached via @import; instant look-ups after first pass.
  • 🔄 Re-index Now button in the Settings panel – rebuilds the variable index without needing Invalidate Caches / Restart.
  • Debug CSS Import Resolution action to print the full, resolved import chain for any stylesheet.
  • Background-task integration: long operations are cancellable and show progress.

Changed

  • Default maxImportDepth raised from 3 to 10 (still user-configurable).
  • Consistent plugin-shield icon for all completions originating from the assistant.
  • Scope utilities refactored – fresh scope calculated for every resolution to avoid stale caches.

Fixed

  • Project + Imports scope now resolves real values (e.g. --ffe-farge-vann → #005aa4) instead of showing @lessVar.
  • Race condition that caused occasional ProcessCanceledException in large projects.
  • Index rebuild no longer double-counts node_modules in Global scope.
  • Numerous threading and cancellation-handling improvements.

1.2.0 – 2025‑05‑22

Added

  • Advanced @import resolution: intelligent resolution of @import statements across CSS, SCSS, SASS, and LESS files.
  • Smart node_modules handling: properly resolves scoped packages like @company/package/path.
  • Configurable indexing scope: choose between project‑only, project + imports, or full global indexing.
  • Import depth control: configurable maximum depth for @import chains to prevent infinite recursion.
  • Enhanced settings panel: fine‑tune plugin behavior with expanded configuration options.
  • Debug tools: new "Debug CSS Import Resolution" action for troubleshooting import chains.

Improved

  • Multi‑extension support: automatically tries .css, .scss, .sass, .less extensions when resolving imports.
  • Relative path resolution: better handling of ./ and ../ import paths.
  • Performance optimizations: smarter file filtering and caching for faster completion suggestions.
  • Error handling: improved stability when processing malformed import statements.

Fixed

  • Import resolution now correctly distinguishes between relative paths and node_modules packages.
  • Deprecated API usage replaced with modern IntelliJ Platform APIs.
  • Better handling of circular import dependencies.
  • Improved compatibility with latest WebStorm/IntelliJ versions.

1.1.0 – 2025‑05‑19

Added

  • Alias resolution: completions & docs now resolve var(--alias) chains to show the literal value.
  • Duplicate squashing: identical context + value pairs collapse into a single row.
  • Smart documentation order: rows are now Default / Light → Dark → desktop‑first break‑points → mobile‑first → other media.
  • Light as primary: prefers-color-scheme: light is treated the same as default.
  • Stricter index filter: non‑stylesheet files (e.g. .txt, templates) are ignored.

Changed

  • Completion row: always lists context values (no more “(+N)” placeholders) and follows the new smart order.
  • Colour chips: dual‑swatch also shown when light/dark values alias to the same colour.

Fixed

  • No more duplicate “Default” rows when a variable is declared multiple times with the same value.
  • Documentation no longer displays raw var(--xyz) strings when they can be resolved.
  • Colour swatch detection & WebAIM links work for resolved alias values.

1.0.2 – 2025‑05‑19

Added

  • Settings page: Plugin is now user-configurable (toggle context-based variable values).
  • Smarter completions:
    • Dual color swatch if a variable has both light and dark color values.
    • All original value syntaxes shown (e.g., #fff, hsl(0 0% 100%), rgb(...)).
    • Context-aware completions: e.g. “🌙” for dark mode, no overlays.
  • Color swatches:
    • Now supports shadcn/ui color variable format, --foreground: 0 0% 100%; and usage like hsl(var(--foreground)).
  • Robust comment parsing: All major CSS comment styles now supported for variable docs (JSDoc, plain, single-line, multiline).
  • Context tracking: Indexer now properly tracks context (media queries, dark/light, nested queries, etc).
  • Documentation enhancements:
    • Multi-context variables shown as a table.
    • Color swatches always use original value syntax.
    • WebAIM contrast checker link for color variables.

Changed

  • Consistent UI:
    • No overlay/context icons on completion swatch—context info is right-aligned only.
    • Completions/docs now fully respect user settings.

Fixed

  • Comment parsing bugs: One-line, multi-line, and mixed-format doc-comments now always recognized.
  • Threading issues: Docs and completions no longer trigger read-access warnings.

1.0.1 – 2025‑05‑18

Added

  • Updated plugin logo

Changed

  • Alphabetical sorting when all variable values are non‑numeric
  • Miscellaneous bugfixes and performance tweaks

Fixed

  • Completions now trigger immediately after typing `var(--`
  • Completions now trigger without needing `--` inside the `var()`
  • Completions now trigger when clicking inside an existing `var(--your-var)`