Skip to content

Commit 2c76b13

Browse files
authored
feat: add experimental support for Svelte v4 (#343)
* feat: add experimental support for Svelte v4 * Create two-months-yawn.md * format * fix type fixtures
1 parent 5d68e03 commit 2c76b13

9 files changed

+41
-26
lines changed

.changeset/two-months-yawn.md

+5
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"svelte-eslint-parser": minor
3+
---
4+
5+
feat: add experimental support for Svelte v4

.github/workflows/NodeCI.yml

+23-3
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ jobs:
2323
runs-on: ubuntu-latest
2424
strategy:
2525
matrix:
26-
node-version: [14.x, 16.x, 17.x, 18.x, 19.x]
26+
node-version: [16.x, 17.x, 18.x, 19.x, 20.x]
2727
steps:
2828
- uses: actions/checkout@v3
2929
- uses: pnpm/action-setup@v2
@@ -35,6 +35,26 @@ jobs:
3535
run: pnpm install
3636
- name: Test
3737
run: pnpm run test
38+
test-for-svelte-v3:
39+
runs-on: ubuntu-latest
40+
strategy:
41+
matrix:
42+
node-version: [14.x]
43+
steps:
44+
- uses: actions/checkout@v3
45+
- uses: pnpm/action-setup@v2
46+
- name: Use Node.js ${{ matrix.node-version }}
47+
uses: actions/setup-node@v3
48+
with:
49+
node-version: ${{ matrix.node-version }}
50+
- name: Install Svelte v3
51+
run: |+
52+
pnpm install -D svelte@3
53+
rm -rf node_modules
54+
- name: Install Packages
55+
run: pnpm install
56+
- name: Test
57+
run: pnpm run test
3858
test-for-ts-eslint-v4:
3959
runs-on: ubuntu-latest
4060
strategy:
@@ -49,7 +69,7 @@ jobs:
4969
node-version: ${{ matrix.node-version }}
5070
- name: Install @typescript-eslint v4
5171
run: |+
52-
pnpm install -D @typescript-eslint/parser@4 @typescript-eslint/eslint-plugin@4 eslint@7
72+
pnpm install -D @typescript-eslint/parser@4 @typescript-eslint/eslint-plugin@4 eslint@7 svelte@3
5373
rm -rf node_modules
5474
- name: Install Packages
5575
run: pnpm install
@@ -69,7 +89,7 @@ jobs:
6989
node-version: ${{ matrix.node-version }}
7090
- name: Install eslint v7
7191
run: |+
72-
pnpm install -D eslint@7
92+
pnpm install -D eslint@7 svelte@3
7393
rm -rf node_modules
7494
- name: Install Packages
7595
run: pnpm install

explorer-v2/src/lib/Header.svelte

+3-12
Original file line numberDiff line numberDiff line change
@@ -14,23 +14,14 @@
1414

1515
<header class="header">
1616
<span class="title">svelte-eslint-parser</span>
17-
<a
18-
class="menu"
19-
class:active={isActive($page.url.pathname, `/`)}
20-
sveltekit:prefetch
21-
href="{baseUrl}/">AST</a
22-
>
17+
<a class="menu" class:active={isActive($page.url.pathname, `/`)} href="{baseUrl}/">AST</a>
2318
<a
2419
class="menu"
2520
class:active={isActive($page.url.pathname, `/playground`)}
26-
sveltekit:prefetch
2721
href="{baseUrl}/playground">Playgroud</a
2822
>
29-
<a
30-
class="menu"
31-
class:active={isActive($page.url.pathname, `/scope`)}
32-
sveltekit:prefetch
33-
href="{baseUrl}/scope">Scope</a
23+
<a class="menu" class:active={isActive($page.url.pathname, `/scope`)} href="{baseUrl}/scope"
24+
>Scope</a
3425
>
3526
<a
3627
class="menu"

package.json

+4-5
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@
4545
"version:ci": "env-cmd -e version-ci pnpm run build:meta && changeset version"
4646
},
4747
"peerDependencies": {
48-
"svelte": "^3.37.0"
48+
"svelte": "^3.37.0 || ^4.0.0-0"
4949
},
5050
"peerDependenciesMeta": {
5151
"svelte": {
@@ -89,7 +89,6 @@
8989
"eslint-plugin-prettier": "^4.0.0",
9090
"eslint-plugin-regexp": "^1.5.0",
9191
"eslint-plugin-svelte": "^2.28.0",
92-
"eslint-plugin-svelte3": "^4.0.0",
9392
"eslint-plugin-yml": "^1.0.0",
9493
"estree-walker": "^3.0.0",
9594
"locate-character": "^2.0.5",
@@ -99,11 +98,11 @@
9998
"nyc": "^15.1.0",
10099
"prettier": "^2.8.0",
101100
"prettier-plugin-pkg": "^0.17.0",
102-
"prettier-plugin-svelte": "^2.10.0",
101+
"prettier-plugin-svelte": "^2.10.1",
103102
"rimraf": "^5.0.0",
104103
"semver": "^7.3.5",
105-
"svelte": "^3.57.0",
106-
"svelte2tsx": "^0.6.11",
104+
"svelte": "^4.0.0-0",
105+
"svelte2tsx": "^0.6.15",
107106
"typescript": "~5.0.0",
108107
"typescript-eslint-parser-for-extra-files": "^0.5.0",
109108
"vue-eslint-parser": "^9.0.0"

tests/fixtures/parser/ast/ts-event03-type-output.svelte

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<script lang="ts">
2-
import {createEventDispatcher} from 'svelte' // createEventDispatcher: <EventMap extends {} = any>() => <EventKey extends Extract<keyof EventMap, string>>(type: EventKey, detail?: EventMap[EventKey] | undefined, options?: DispatchOptions | undefined) => boolean, createEventDispatcher: <EventMap extends {} = any>() => <EventKey extends Extract<keyof EventMap, string>>(type: EventKey, detail?: EventMap[EventKey] | undefined, options?: DispatchOptions | undefined) => boolean
3-
const emit = createEventDispatcher<{ // emit: <EventKey extends "foo" | "bar">(type: EventKey, detail?: { foo: number; bar: string; }[EventKey] | undefined, options?: DispatchOptions | undefined) => boolean, createEventDispatcher<{ foo: number, bar: string }>(): <EventKey extends "foo" | "bar">(type: EventKey, detail?: { foo: number; bar: string; }[EventKey] | undefined, options?: DispatchOptions | undefined) => boolean
2+
import {createEventDispatcher} from 'svelte' // createEventDispatcher: <EventMap extends Record<string, any> = any>() => EventDispatcher<EventMap>, createEventDispatcher: <EventMap extends Record<string, any> = any>() => EventDispatcher<EventMap>
3+
const emit = createEventDispatcher<{ // emit: EventDispatcher<{ foo: number; bar: string; }>, createEventDispatcher<{ foo: number, bar: string }>(): EventDispatcher<{ foo: number; bar: string; }>
44
foo: number,
55
bar: string
66
}>()

tests/fixtures/parser/ast/ts-reactive02-type-output.svelte

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
<script lang="ts">
2-
import { writable } from 'svelte/store'; // writable: <T>(value?: T | undefined, start?: StartStopNotifier<T> | undefined) => Writable<T>, writable: <T>(value?: T | undefined, start?: StartStopNotifier<T> | undefined) => Writable<T>
2+
import { writable } from 'svelte/store'; // writable: <T>(value: T, start?: StartStopNotifier<T> | undefined) => Writable<T>, writable: <T>(value: T, start?: StartStopNotifier<T> | undefined) => Writable<T>
33
let x = "hello" // x: string
44
const get = ()=>"hello" // get: () => string
55

tests/fixtures/parser/ast/ts-reactive05-type-output.svelte

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
<script lang="ts">
2-
import { writable } from 'svelte/store'; // writable: <T>(value?: T | undefined, start?: StartStopNotifier<T> | undefined) => Writable<T>, writable: <T>(value?: T | undefined, start?: StartStopNotifier<T> | undefined) => Writable<T>
2+
import { writable } from 'svelte/store'; // writable: <T>(value: T, start?: StartStopNotifier<T> | undefined) => Writable<T>, writable: <T>(value: T, start?: StartStopNotifier<T> | undefined) => Writable<T>
33
44
const a = writable(0) // a: Writable<number>, writable(0): Writable<number>
55
$: aValue = $a // $: any, aValue: number, $a: number

tests/fixtures/parser/ast/ts-store01-type-output.svelte

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
<script lang="ts">
2-
import { writable } from 'svelte/store'; // writable: <T>(value?: T | undefined, start?: StartStopNotifier<T> | undefined) => Writable<T>, writable: <T>(value?: T | undefined, start?: StartStopNotifier<T> | undefined) => Writable<T>
2+
import { writable } from 'svelte/store'; // writable: <T>(value: T, start?: StartStopNotifier<T> | undefined) => Writable<T>, writable: <T>(value: T, start?: StartStopNotifier<T> | undefined) => Writable<T>
33
const a = writable(0) // a: Writable<number>, writable(0): Writable<number>
44
const b = writable(0) // b: Writable<number>, writable(0): Writable<number>
55
const $b = 'abc' // $b: "abc"

tests/fixtures/parser/ast/ts-store02-type-output.svelte

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
<script context="module" lang="ts">
2-
import { writable } from 'svelte/store'; // writable: <T>(value?: T | undefined, start?: StartStopNotifier<T> | undefined) => Writable<T>, writable: <T>(value?: T | undefined, start?: StartStopNotifier<T> | undefined) => Writable<T>
2+
import { writable } from 'svelte/store'; // writable: <T>(value: T, start?: StartStopNotifier<T> | undefined) => Writable<T>, writable: <T>(value: T, start?: StartStopNotifier<T> | undefined) => Writable<T>
33
const a = writable(0) // a: Writable<number>, writable(0): Writable<number>
44
declare const $a: string // $a: string
55
</script>

0 commit comments

Comments
 (0)