Skip to content

Releases: DrSkillIssue/Ganko

v0.3.3

24 Mar 03:33

Choose a tag to compare

Core

  • harden TypeScript 6 compatibility across the toolchain

Infrastructure

  • bump package versions to 0.3.3

v0.3.2

23 Mar 23:40

Choose a tag to compare

Solid rule and analysis improvements

  • New loop-indexed aggregate signal detection flags signal()[item.key] patterns only when paired with incremental spread-map setter updates
  • Shared Solid query/rule helpers now centralize variable call discovery and updater body extraction instead of duplicating AST plumbing
  • Cleanup for existing ganko lint blockers: inline type imports removed and hot-loop traversal no longer allocates callback closures

LSP Tailwind and VS Code startup fixes

  • LSP workspace enrichment now starts Tailwind resolution earlier so initial enriched compilations can include Tailwind state on startup
  • Tailwind re-resolution refreshes the active validator and rebuilds compilation state after watched entry-file changes instead of keeping stale state
  • Added focused Tailwind lifecycle regression tests covering startup ordering and validator refresh behavior

v0.3.1

23 Mar 08:33

Choose a tag to compare

Tailwind compilation pipeline

  • Single-pass Tailwind symbol resolution in buildSymbolTable — solid tree class tokens resolved alongside CSS trees during construction
  • ClassNameSymbol.tailwindResolvedCSS field preserves CSS source metadata while carrying Tailwind resolution for cascade augmentation
  • Evaluator returns resolved CSS strings from candidatesToCss instead of booleans
  • Batch resolution sends all solid tree class tokens (previously excluded compiled Tailwind utilities)
  • Cascade augmentation fills scope gaps for classes in both CSS selectors and Tailwind

Analysis rule improvements

  • Attribute selector matching: [attr] existence checks treat static boolean attributes as definite matches
  • Alignment analysis: suppress all evidence when parent uses geometric alignment (center, stretch, flex-start, etc.)
  • Unstable style toggle: exempt elements inside overflow:hidden/clip parents
  • Unused custom prop: check var() references instead of definitions
  • Hidden class transition: handle string index signatures and pre-initialized literal properties

v0.3.0

23 Mar 02:59

Choose a tag to compare

v0.3.0 — StyleCompilation architecture, LSP redesign, analysis dispatcher

Full architectural rewrite from the legacy SolidGraph/CSSGraph/cross-file/ system to a Roslyn-inspired compilation model.

Highlights

  • StyleCompilation — immutable compilation object replacing the ad-hoc graph caching layer. Owns all CSS/Solid trees and a unified SymbolTable.
  • Cascade binder — full CSS cascade resolution per element with selector matching, specificity ordering, conditional guard tracking, and layout fact computation.
  • Analysis dispatcher — tiered rule execution framework. 70+ rules migrated to self-contained modules with typed registry subscriptions.
  • Incremental tracker — dependency graph-based change propagation for minimal re-analysis.
  • LSP redesign — immutable Session model, unified diagnostic pipeline (push + pull), compilation builder, cancellation support, daemon rewrite.
  • Tailwind integrationTailwindValidator wired through SymbolTable.hasClassName() for class-name-aware rules. Arbitrary value batch validation across CLI, daemon, and LSP.

Bug fixes

  • css-layout-conditional-offset-shift: suppressed false positives for elements inside position: fixed/absolute containers.
  • no-duplicate-selectors: accounts for parent at-rule context.
  • Monorepo support: workspace files synced into TS program.
  • Replaced all Bun.spawn calls with Node child_process for runtime compatibility.

Breaking changes

  • Deleted cross-file/ directory, cache.ts, SolidGraph/CSSGraph classes.
  • Rule IDs unchanged but internal registration API moved from imperative visitors to defineAnalysisRule + registerConditionalDeltaAction / registerElementAction / etc.

See PR #33 for the full diff.

v0.2.82

21 Mar 02:52

Choose a tag to compare

Conditional Cascade Shadowing Fix

Fixes ~130 false-positive padding-right: 0px warnings on Button components where a conditional CSS variant (e.g., [data-icon]) with higher specificity shadowed the unconditional base sizing.

Changes

  • var() substitution moved to declaration collection — resolves once per selector instead of per element; delta fact system automatically receives resolved values
  • Touch-target unconditional fallback — when a conditional selector shadows the base value, the rule consults the delta fact's unconditional values instead of falling through to the global reset

v0.2.81

21 Mar 02:04

Choose a tag to compare

Touch-Target False Positive Elimination

Eliminates false-positive 0px padding/height warnings from jsx-layout-policy-touch-target on component-authored interactive elements.

Core fixes

  • Cross-component CSS scope propagation — component co-located CSS enters call-site cascade
  • Cross-component attribute prop bindingsdata-size={props.size ?? "sm"} resolves from call-site props
  • CSS var() value substitutionvar(--name) resolved to concrete values from CSSGraph
  • Polymorphic as={Component} resolutionas={Button} traced through host resolver

Additional improvements

  • padding-inline shorthand expansion
  • Parenthesis-aware shorthand tokenization (padding: 0 calc(...))
  • Static calc()/min()/max()/clamp() evaluation
  • max-width/max-height constraining signal monitoring
  • flex-basis counted as declared inline dimension
  • CSS-wide keywords (inherit/initial/unset/revert) as non-reserving
  • sr-only 1px × 1px pattern detection (Kobalte/Radix/Tailwind)
  • String fallback extraction (x ?? "literal")

Stats

  • 13 files changed, +1158 −36
  • 22 new tests (45 total touch-target tests, 445 cross-file + CSS tests)

v0.2.9

21 Mar 09:43

Choose a tag to compare

LSP Architecture Redesign + Bug Fixes

LSP Architecture Redesign

Complete redesign modeled after typescript-language-server:

  • LifecyclePhase discriminated unionphase.tag narrowing replaces nullable fields. Each phase declares exactly what's available.
  • DiagnosticsManager — per-file aggregation by kind (Ganko/CrossFile/TypeScript). Eliminates tsDiagCache.
  • DocumentManager — coherent lifecycle state machine. Eliminates handlers/document.ts.
  • TsService — unified Quick/Incremental tier interface. Eliminates cachedCompilerOptions/cachedTier1Host.
  • ChangeProcessor — atomic change propagation. Eliminates evictFileCache/rediagnoseAffected/rediagnoseAll.
  • ResourceMap — type-safe canonical-path-keyed maps.
  • Three handler context types — FeatureHandlerContext, DocumentHandlerContext, LifecycleHandlerContext.
  • ServerConfig — extracted from mutable ServerState.

Bug Fixes

  • Workspace symlink discovery — follows symlinked workspace packages in node_modules using package.json workspaces field. Component CSS from workspace deps now in analysis set.
  • Keyframe selector indexing16.67%/33.33% no longer parsed as class selectors.
  • Diagnostic pipeline — removed double publication and unnecessary debounce.

v0.2.8

20 Mar 06:20

Choose a tag to compare

Core

  • compound-grouped CSS selector parsing, eliminate cross-file re-parse
  • delete trivial query accessors, consolidate deferred index methods
  • fold selector and declaration index building into insertion time
  • inline element kind classification into AST selector creation
  • remove dead CSS indexes, lazy-compute derived collections
  • eliminate redundant string allocations in signal normalization and dispatch
  • replace string discriminants with numeric const enums
  • flatten LayoutGraph interface, unify dispatch key extraction
  • unified single-pass graph builder, forward-pass signal snapshots
  • consolidated LayoutElementRecord, pre-expanded shorthand declarations
  • dispatch-key-indexed cross-component selector fallback, unified dimension facts, test batch optimization
  • migrate touch-target rule to cross-file layout graph, fix diagCache poisoning

Infrastructure

  • remove completed implementation plan documents
  • bump version to 0.2.8
  • CSS selector compound grouping implementation plan
  • update CSS overhaul plan — Phase 4 deferred, Phase 6 assessed
  • CSS subsystem architecture overhaul implementation plan
  • bump version to 0.2.72

v0.2.72

20 Mar 02:17

Choose a tag to compare

Core

  • migrate touch-target rule to cross-file layout graph, fix diagCache poisoning

Infrastructure

  • bump version to 0.2.72

v0.2.71

19 Mar 04:30

Choose a tag to compare

Fix

  • getStaticStringFromJSXValue now serializes numeric JSX literals (e.g. width={16}) to their string representation ("16") instead of dropping them to null, fixing css-layout-unsized-replaced-element false positives on components with numeric HTML size attributes