- Delete old Vite+Svelte frontend - Initialize new SvelteKit project with TypeScript - Configure Tailwind CSS v4 + DaisyUI - Implement JWT authentication with auto-refresh - Create login page with form validation (Zod) - Add protected route guards - Update Docker configuration for single-stage build - Add E2E tests with Playwright (6/11 passing) - Fix Svelte 5 reactivity with $state() runes Known issues: - 5 E2E tests failing (timing/async issues) - Token refresh implementation needs debugging - Validation error display timing
286 lines
7.7 KiB
Markdown
286 lines
7.7 KiB
Markdown
[](https://www.npmjs.com/package/svelte-eslint-parser)
|
|
[](https://www.npmjs.com/package/svelte-eslint-parser)
|
|
[](http://www.npmtrends.com/svelte-eslint-parser)
|
|
[](http://www.npmtrends.com/svelte-eslint-parser)
|
|
[](http://www.npmtrends.com/svelte-eslint-parser)
|
|
[](http://www.npmtrends.com/svelte-eslint-parser)
|
|
[](http://www.npmtrends.com/svelte-eslint-parser)
|
|
[](https://github.com/sveltejs/svelte-eslint-parser/actions?query=workflow%3ACI)
|
|
[](https://coveralls.io/github/sveltejs/svelte-eslint-parser?branch=main)
|
|
|
|
<div align="center">
|
|
|
|
# svelte-eslint-parser
|
|
|
|
## [Svelte](https://svelte.dev/) parser for [ESLint](https://eslint.org/)
|
|
|
|
[Live DEMO](https://sveltejs.github.io/svelte-eslint-parser/playground) •
|
|
[Discord](https://svelte.dev/chat)
|
|
|
|
</div>
|
|
|
|
## Motivation
|
|
|
|
The `svelte-eslint-parser` aims to make it easy to create your own ESLint rules for [Svelte](https://svelte.dev/).
|
|
|
|
[eslint-plugin-svelte](https://github.com/sveltejs/eslint-plugin-svelte) is an ESLint plugin built upon this parser, and it already [implements some rules](https://sveltejs.github.io/eslint-plugin-svelte/rules/).
|
|
|
|
### ESLint Plugins Using svelte-eslint-parser
|
|
|
|
#### [eslint-plugin-svelte](https://sveltejs.github.io/eslint-plugin-svelte/)
|
|
|
|
ESLint plugin for Svelte.
|
|
Provides a variety of template-based checks using the Svelte AST.
|
|
|
|
#### [@intlify/eslint-plugin-svelte](https://github.com/intlify/eslint-plugin-svelte)
|
|
|
|
ESLint plugin for internationalization (i18n) in Svelte applications, offering helpful i18n-related rules.
|
|
|
|
---
|
|
|
|
## Installation
|
|
|
|
```bash
|
|
npm install --save-dev eslint svelte-eslint-parser
|
|
```
|
|
|
|
---
|
|
|
|
## Usage
|
|
|
|
### ESLint Config (`eslint.config.js`)
|
|
|
|
```js
|
|
import js from "@eslint/js";
|
|
import svelteParser from "svelte-eslint-parser";
|
|
|
|
export default [
|
|
js.configs.recommended,
|
|
{
|
|
files: [
|
|
"**/*.svelte",
|
|
"*.svelte",
|
|
// Need to specify the file extension for Svelte 5 with rune symbols
|
|
"**/*.svelte.js",
|
|
"*.svelte.js",
|
|
"**/*.svelte.ts",
|
|
"*.svelte.ts",
|
|
],
|
|
languageOptions: {
|
|
parser: svelteParser,
|
|
},
|
|
},
|
|
];
|
|
```
|
|
|
|
### CLI
|
|
|
|
```bash
|
|
eslint "src/**/*.{js,svelte}"
|
|
```
|
|
|
|
---
|
|
|
|
## Options
|
|
|
|
The [parserOptions](https://eslint.org/docs/latest/use/configure/parser#configure-parser-options) for this parser generally match what [espree](https://github.com/eslint/espree#usage)—ESLint's default parser—supports.
|
|
|
|
For example:
|
|
|
|
```js
|
|
import svelteParser from "svelte-eslint-parser";
|
|
|
|
export default [
|
|
// ...
|
|
{
|
|
files: [
|
|
// Set .svelte/.js/.ts files. See above for more details.
|
|
],
|
|
languageOptions: {
|
|
parser: svelteParser,
|
|
parserOptions: {
|
|
sourceType: "module",
|
|
ecmaVersion: 2024,
|
|
ecmaFeatures: {
|
|
globalReturn: false,
|
|
impliedStrict: false,
|
|
jsx: false,
|
|
},
|
|
},
|
|
},
|
|
},
|
|
];
|
|
```
|
|
|
|
### parserOptions.parser
|
|
|
|
Use the `parserOptions.parser` property to define a custom parser for `<script>` tags. Any additional parser options (besides the parser itself) are passed along to the specified parser.
|
|
|
|
```js
|
|
import tsParser from "@typescript-eslint/parser";
|
|
|
|
export default [
|
|
{
|
|
files: [
|
|
// Set .svelte/.js/.ts files. See above for more details.
|
|
],
|
|
languageOptions: {
|
|
parser: svelteParser,
|
|
parserOptions: {
|
|
parser: tsParser,
|
|
},
|
|
},
|
|
},
|
|
];
|
|
```
|
|
|
|
#### Using TypeScript in `<script>`
|
|
|
|
If you use `@typescript-eslint/parser` for TypeScript within `<script>` of `.svelte` files, additional configuration is needed. For example:
|
|
|
|
```js
|
|
import tsParser from "@typescript-eslint/parser";
|
|
|
|
export default [
|
|
// Other config for non-Svelte files
|
|
{
|
|
languageOptions: {
|
|
parser: tsParser,
|
|
parserOptions: {
|
|
project: "path/to/your/tsconfig.json",
|
|
extraFileExtensions: [".svelte"],
|
|
},
|
|
},
|
|
},
|
|
// Svelte config
|
|
{
|
|
files: [
|
|
// Set .svelte/.js/.ts files. See above for more details.
|
|
],
|
|
languageOptions: {
|
|
parser: svelteParser,
|
|
// Parse the `<script>` in `.svelte` as TypeScript by adding the following configuration.
|
|
parserOptions: {
|
|
parser: tsParser,
|
|
},
|
|
},
|
|
},
|
|
];
|
|
```
|
|
|
|
#### Multiple parsers
|
|
|
|
To switch parsers for each language, provide an object:
|
|
|
|
```js
|
|
import tsParser from "@typescript-eslint/parser";
|
|
import espree from "espree";
|
|
|
|
export default [
|
|
{
|
|
files: [
|
|
// Set .svelte/.js/.ts files. See above for more details.
|
|
],
|
|
languageOptions: {
|
|
parser: svelteParser,
|
|
parserOptions: {
|
|
parser: {
|
|
ts: tsParser,
|
|
js: espree,
|
|
typescript: tsParser,
|
|
},
|
|
},
|
|
},
|
|
},
|
|
];
|
|
```
|
|
|
|
### parserOptions.svelteConfig
|
|
|
|
If you use `eslint.config.js`, you can specify a `svelte.config.js` file via `parserOptions.svelteConfig`.
|
|
|
|
```js
|
|
import svelteConfig from "./svelte.config.js";
|
|
|
|
export default [
|
|
{
|
|
files: [
|
|
// Set .svelte/.js/.ts files. See above for more details.
|
|
],
|
|
languageOptions: {
|
|
parser: svelteParser,
|
|
parserOptions: {
|
|
svelteConfig,
|
|
},
|
|
},
|
|
},
|
|
];
|
|
```
|
|
|
|
If `parserOptions.svelteConfig` is not set, the parser attempts to statically read some config from `svelte.config.js`.
|
|
|
|
### parserOptions.svelteFeatures
|
|
|
|
You can configure how Svelte-specific features are parsed via `parserOptions.svelteFeatures`.
|
|
|
|
For example:
|
|
|
|
```js
|
|
export default [
|
|
{
|
|
files: [
|
|
// Set .svelte/.js/.ts files. See above for more details.
|
|
],
|
|
languageOptions: {
|
|
parser: svelteParser,
|
|
parserOptions: {
|
|
svelteFeatures: {
|
|
// This is for Svelte 5. The default is true.
|
|
// If false, ESLint won't recognize rune symbols.
|
|
// If not specified, the parser tries to read compilerOptions.runes from `svelte.config.js`.
|
|
// If `parserOptions.svelteConfig` is not given and static analysis fails, it defaults to true.
|
|
runes: true,
|
|
},
|
|
},
|
|
},
|
|
},
|
|
];
|
|
```
|
|
|
|
---
|
|
|
|
## Editor Integrations
|
|
|
|
### Visual Studio Code
|
|
|
|
Use the [dbaeumer.vscode-eslint](https://marketplace.visualstudio.com/items?itemName=dbaeumer.vscode-eslint) extension provided by Microsoft.
|
|
|
|
By default, it only targets `*.js` and `*.jsx`, so you need to configure `.svelte` file support. For example, in **.vscode/settings.json**:
|
|
|
|
```json
|
|
{
|
|
"eslint.validate": ["javascript", "javascriptreact", "svelte"]
|
|
}
|
|
```
|
|
|
|
---
|
|
|
|
## Usage for Custom Rules / Plugins
|
|
|
|
- See [AST.md](./docs/AST.md) for the AST specification. You can explore it on the [Live DEMO](https://sveltejs.github.io/svelte-eslint-parser/).
|
|
- This parser generates its own [ScopeManager](https://eslint.org/docs/developer-guide/scope-manager-interface). Check the [Live DEMO](https://sveltejs.github.io/svelte-eslint-parser/scope).
|
|
- Several rules are [already implemented] in [`eslint-plugin-svelte`], and their source code can be a helpful reference.
|
|
|
|
---
|
|
|
|
## Contributing
|
|
|
|
Contributions are welcome! Please open an issue or submit a PR on GitHub.
|
|
For internal details, see [internal-mechanism.md](./docs/internal-mechanism.md).
|
|
|
|
---
|
|
|
|
## License
|
|
|
|
See [LICENSE](LICENSE) (MIT) for rights and limitations.
|