Skip to content

feat: add language: 'svelte' with dedicated class regexes - #42

Merged
jrmybtlr merged 10 commits into
mainfrom
cursor/svelte-language-support-253d
Jul 20, 2026
Merged

feat: add language: 'svelte' with dedicated class regexes#42
jrmybtlr merged 10 commits into
mainfrom
cursor/svelte-language-support-253d

Conversation

@jrmybtlr

@jrmybtlr jrmybtlr commented Jul 17, 2026

Copy link
Copy Markdown
Owner

Summary

.svelte was already in SUPPORTED_FILES, but there was no language: 'svelte' option and no Svelte-specific regexes (Vue’s regexes include a :class lookahead that doesn’t apply to Svelte).

This PR adds first-class Svelte support:

  • SVELTE_CLASS_REGEX / SVELTE_CLASS_MODIFIER_REGEX in core.ts
    • Transforms quoted UseClassy modifiers (class:hover="...")
    • Leaves native Svelte class directives alone (class:active={cond}, shorthand class:active)
    • No Vue :class binding lookahead
  • language: 'svelte' on ClassyOptions, wired in the Vite plugin
  • CLI / init: --language svelte
  • README + cursor rules updated
  • demos/svelte — Vite + Svelte 5 + Tailwind v4 smoke demo (mirrors demos/react), port 3002

Usage

useClassy({ language: 'svelte' })
pnpm --filter svelte-demo dev

Place the plugin before @sveltejs/vite-plugin-svelte so modifiers are rewritten before the Svelte compiler runs.

Test plan

  • npm test — 184 passed
  • npm run build (library) — succeeds
  • pnpm --filter svelte-demo build — succeeds; manifest has hover/md variants; native class:scale-110={pressed} preserved in compiled output
  • Dev server starts on :3002 and serves transformed App.svelte
Open in Web Open in Cursor 

SUPPORTTED_FILES already listed .svelte, but the plugin only had vue/react/blade
language options. Add Svelte-aware regexes that transform quoted UseClassy
modifiers while preserving native class:name={cond} directives, and wire
language through the plugin, CLI, and init helper.

Co-authored-by: Jeremy Butler <jrmybtlr@users.noreply.github.com>
@cloudflare-workers-and-pages

cloudflare-workers-and-pages Bot commented Jul 17, 2026

Copy link
Copy Markdown

Deploying with  Cloudflare Workers  Cloudflare Workers

The latest updates on your project. Learn more about integrating Git with Workers.

Status Name Latest Commit Preview URL Updated (UTC)
✅ Deployment successful!
View logs
useclassy-com 92dd32a Commit Preview URL

Branch Preview URL
Jul 20 2026, 10:06 PM

Add demos/svelte as a Vite + Svelte 5 + Tailwind v4 smoke app using
language: 'svelte', with UseClassy variants alongside a native class
directive so the coexistence path is exercised.

Co-authored-by: Jeremy Butler <jrmybtlr@users.noreply.github.com>
@jrmybtlr
jrmybtlr marked this pull request as ready for review July 17, 2026 21:42
@cursor

cursor Bot commented Jul 17, 2026

Copy link
Copy Markdown

Bugbot is not enabled for your account, so this pull request was not reviewed.

Enable Bugbot in the Cursor dashboard to get automatic reviews on future PRs.

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Adds first-class Svelte support to the UseClassy Vite plugin by introducing Svelte-specific class attribute regexes and exposing language: 'svelte' across the public API, CLI init flow, docs, and demos.

Changes:

  • Add SVELTE_CLASS_REGEX / SVELTE_CLASS_MODIFIER_REGEX and wire language: 'svelte' through the plugin + type definitions.
  • Extend init/CLI/docs to accept --language svelte and document correct Vite plugin ordering for Svelte.
  • Add a new demos/svelte smoke demo and update the Vue demo UI to include Svelte alongside existing framework selections.

Reviewed changes

Copilot reviewed 29 out of 33 changed files in this pull request and generated no comments.

Show a summary per file
File Description
tasks/todo.md Updates internal tracking notes related to framework selection sync.
src/types.d.ts Extends ClassyOptions.language union to include 'svelte'.
src/init-setup.ts Adds 'svelte' to INIT_LANGUAGES for init flows.
src/cli.ts Updates CLI help text to include `--language ...
src/core.ts Introduces Svelte-specific class / modifier regex exports.
src/index.ts Wires Svelte regex selection via language: 'svelte' in the Vite plugin.
src/tests/init-setup.test.ts Adds init test coverage for Tailwind VS Code classAttributes behavior with Svelte.
src/tests/index.test.ts Adds plugin-level test ensuring Svelte language path is exercised.
src/tests/core.test.ts Adds core behavior tests for Svelte modifiers + native directive preservation.
README.md Documents Svelte usage and init command; updates language option references.
package.json Adds svelte to package keywords.
pnpm-lock.yaml Adds lock entries for the new Svelte demo and Vue demo icon deps; updates related dependency graph.
demos/vue/package.json Adds Nuxt Icon + icon collection dependencies for framework icons in the demo UI.
demos/vue/nuxt.config.ts Enables @nuxt/icon and configures server-bundled icon collection.
demos/vue/app/components/SegmentedControl.vue Enhances segmented control options to support optional icons.
demos/vue/app/components/ClassExample.vue Adds Svelte to demo formats and drives format via v-model + icons.
demos/vue/app/app.vue Lifts shared demo format state and synchronizes hero/init/manual snippets.
demos/svelte/package.json Adds a new Svelte demo package (Vite + Svelte + Tailwind + TS).
demos/svelte/vite.config.ts Configures demo plugin ordering: UseClassy before Svelte compiler; sets port 3002.
demos/svelte/index.html Adds the demo HTML entrypoint.
demos/svelte/svelte.config.js Adds Svelte preprocess config.
demos/svelte/tsconfig.json Adds TS project references for app/node configs.
demos/svelte/tsconfig.app.json Adds app TS config extending @tsconfig/svelte.
demos/svelte/tsconfig.node.json Adds node TS config for Vite/Svelte config files.
demos/svelte/.gitignore Ignores demo build outputs and .classy/ generated manifest directory.
demos/svelte/public/vite.svg Adds the demo favicon asset.
demos/svelte/src/vite-env.d.ts Adds Svelte + Vite ambient type references.
demos/svelte/src/main.ts Bootstraps Svelte app mount + Tailwind CSS import.
demos/svelte/src/main.css Adds Tailwind import + @source pointing at the UseClassy manifest.
demos/svelte/src/App.svelte Demo component showing quoted UseClassy modifiers + preserved native directives.
demos/svelte/README.md Documents how to run the Svelte demo.
.cursor/rules/useclassy-plugin.mdc Updates Cursor rules doc to include Svelte support details.
.cursor/rules/file-processing.mdc Updates file-processing rules doc to include .svelte.
Files not reviewed (1)
  • pnpm-lock.yaml: Generated file

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 29 out of 33 changed files in this pull request and generated 2 comments.

Files not reviewed (1)
  • pnpm-lock.yaml: Generated file

Comment thread src/tests/core.test.ts
Comment thread src/tests/core.test.ts Outdated
jrmybtlr and others added 2 commits July 18, 2026 08:34
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 29 out of 34 changed files in this pull request and generated 2 comments.

Files not reviewed (1)
  • pnpm-lock.yaml: Generated file

Comment thread src/tests/core.test.ts
Comment thread src/core.ts Outdated
jrmybtlr added 3 commits July 18, 2026 12:45
- Updated @vitejs/plugin-react to version 6.0.3 in React demo.
- Updated @sveltejs/vite-plugin-svelte to version 7.2.0 and svelte to version 5.46.4 in Svelte demo.
- Improved logging in setupLaravelServiceProvider to check for the presence of the useclassy/laravel package and adjust messages accordingly.
- Added tests to verify logging behavior based on package installation status.
…ing class attribute merging

- Added `stripViteQuery` function to remove query and hash suffixes from file paths, aiding in accurate extension checks during HMR.
- Updated `shouldProcessFile` to utilize `stripViteQuery` for better handling of file paths with Vite-specific queries.
- Introduced tests for `stripViteQuery` and enhanced existing tests to cover new processing logic for class attributes.
…DATA sections

- Enhanced `mergeClassAttributes` to correctly skip merging class attributes within HTML comments and CDATA sections that contain '>'.
- Added a test case to verify that class attributes are not merged inside HTML comments, ensuring expected behavior in edge cases.
@jrmybtlr
jrmybtlr merged commit bde65e4 into main Jul 20, 2026
7 checks passed
@jrmybtlr
jrmybtlr deleted the cursor/svelte-language-support-253d branch July 20, 2026 22:27
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants