svelte-5-vs-svelte-4-cursorrules-prompt-file — правило для Cursor
Инструктирует Cursor писать код по стандартам Svelte 5: использовать руны $state и $derived, стандартные атрибуты событий и snippets вместо синтаксиса Svelte 4.
.cursor/rules/svelte-5-vs-svelte-4-cursorrules-prompt-file.mdcЧто делает svelte-5-vs-svelte-4-cursorrules-prompt-file
Правило задаёт для Cursor рамки перехода со старого синтаксиса Svelte 4 на Svelte 5. Модель перестаёт генерировать реактивные метки $: и директивы вроде on:click, заменяя их на руны $state, $derived, $effect и стандартные HTML-атрибуты onclick.
Внутри зафиксированы ключевые нюансы компилятора: руны встроены в синтаксис фреймворка, поэтому попытка импортировать $state или $props вызовет ошибку сборки. Для отмены стандартных действий браузера правило исключает модификатор |preventDefault и требует вызывать e.preventDefault() прямо в коде обработчика.
В конфигурации файла указана маска **/* и отключено принудительное применение через alwaysApply: false. Правило вступает в силу по контексту запроса, удерживая Cursor от устаревших паттернов разметки.
Какие задачи решает
- Переписать реактивные метки
$:на руны$derivedи$effect - Заменить директивы
on:clickна стандартные свойстваonclick - Убрать устаревшие модификаторы событий вроде
|preventDefault - Предотвратить ошибочный импорт компиляторных рун в блоке
<script>
Примеры запросов агенту
- Перепиши этот компонент счётчика со Svelte 4 на синтаксис Svelte 5 с рунами
- Добавь обработчик клика на кнопку без использования устаревшей директивы on:click
- Сделай вычисляемое значение для общей суммы через $derived
Как установить svelte-5-vs-svelte-4-cursorrules-prompt-file
Вручную: положить файлы
.cursor/rules/svelte-5-vs-svelte-4-cursorrules-prompt-file.mdcВо frontmatter: description, globs, alwaysApply
Вручную: положить файлы
.claude/rules/svelte-5-vs-svelte-4-cursorrules-prompt-file.mdПоле paths во frontmatter ограничивает файлы: globs из источника → paths
AGENTS.md
Codex читает AGENTS.md: вставьте текст правила туда
Вручную: положить файлы
.github/instructions/svelte-5-vs-svelte-4-cursorrules-prompt-file.instructions.mdПоле applyTo задаёт, к каким файлам применять: globs из источника → applyTo
Вручную: положить файлы
.devin/rules/svelte-5-vs-svelte-4-cursorrules-prompt-file.mdВручную: положить файлы
.clinerules/svelte-5-vs-svelte-4-cursorrules-prompt-file.mdПо шагам, с командами для каждой платформы: Cursor rules: файлы .mdc, четыре режима и замена .cursorrules
Вопросы о svelte-5-vs-svelte-4-cursorrules-prompt-file
Как установить svelte-5-vs-svelte-4-cursorrules-prompt-file в Cursor?
Создайте в корне проекта файл .cursor/rules/svelte-5-vs-svelte-4-cursorrules-prompt-file.mdc и добавьте в него текст правила.
Что делает это правило?
Оно обучает Cursor генерировать компоненты Svelte 5, заменяя синтаксис Svelte 4 на явные руны реактивности и стандартные свойства событий HTML.
Нужно ли импортировать руны $state и $derived?
Нет, компилятор Svelte 5 обрабатывает руны как синтаксические конструкции. Импортировать нужно только вспомогательные утилиты вроде tick или untrack.
Исходный текст
svelte-5-vs-svelte-4-cursorrules-prompt-file.mdc · CC0-1.0
---
description: "Cursor rules for comparing Svelte 5 and Svelte 4 development."
globs: **/*
alwaysApply: false
---
I'm using svelte 5 instead of svelte 4 here is an overview of the changes.
# .cursorrules for Svelte 5
## Overview of Changes
Svelte 5 introduces runes, a set of advanced primitives for controlling reactivity. The runes replace certain non-runes features and provide more explicit control over state and effects.
Snippets, along with render tags, help create reusable chunks of markup inside your components, reducing duplication and enhancing maintainability.
## Event Handlers in Svelte 5
In Svelte 5, event handlers are treated as standard HTML properties rather than Svelte-specific directives, simplifying their use and integrating them more closely with the rest of the properties in the component.
### Svelte 4 vs. Svelte 5:
**Before (Svelte 4):**
```html
<script>
let count = 0;
$: double = count * 2;
$: {
if (count > 10) alert('Too high!');
}
</script>
<button on:click={() => count++}> {count} / {double}</button>
```
**After (Svelte 5):**
```html
<script>
// Define state with runes
let count = $state(0);
// Option 1: Using $derived for computed values
let double = $derived(count * 2);
// Reactive effects using runes
$effect(() => {
if (count > 10) alert('Too high!');
});
</script>
<!-- Standard HTML event attributes instead of Svelte directives -->
<button onclick={() => count++}>
{count} / {double}
</button>
<!-- Alternatively, you can compute values inline -->
<!-- <button onclick={() => count++}>
{count} / {count * 2}
</button> -->
```
## Key Differences:
1. **Reactivity is Explicit**:
- Svelte 5 uses `$state()` to explicitly mark reactive variables
- `$derived()` replaces `$:` for computed values
- `$effect()` replaces `$: {}` blocks for side effects
2. **Event Handling is Standardized**:
- Svelte 4: `on:click={handler}`
- Svelte 5: `onclick={handler}`
3. **Runes are Compiler Syntax**:
- Do not import `$state`, `$derived`, `$effect`, `$props`, `$bindable`, or `$inspect`.
- Import only regular Svelte utilities that require imports, such as `tick`, `untrack`, `mount`, or `unmount`.
4. **No More Event Modifiers**:
- Svelte 4: `on:click|preventDefault={handler}`
- Svelte 5: `onclick={e => { e.preventDefault(); handler(e); }}`
This creates clearer, more maintainable components compared to Svelte 4's previous syntax by making reactivity explicit and using standardized web platform features.
© PatrickJS · CC0-1.0 · PatrickJS/awesome-cursorrules