ESLint plugin for Svelte applications providing comprehensive linting rules and configurations using AST parsing
—
Pending
Does it follow best practices?
Impact
Pending
No eval scenarios have been run
Pending
The risk profile of this skill
Comprehensive collection of 79 ESLint rules specifically designed for Svelte applications, covering security, best practices, styling, and Svelte-specific patterns.
Essential system-level rules for ESLint plugin operation.
/**
* Support comment-based rule directives in Svelte files
*/
'svelte/comment-directive': Rule.RuleModule;
/**
* Internal system rule for plugin operation
*/
'svelte/system': Rule.RuleModule;Rules focused on preventing security vulnerabilities and enforcing best practices.
/**
* Disallow {@html} tags to prevent XSS attacks
*/
'svelte/no-at-html-tags': Rule.RuleModule;
/**
* Disallow {@debug} tags in production code
*/
'svelte/no-at-debug-tags': Rule.RuleModule;
/**
* Disallow DOM manipulation in favor of Svelte bindings
*/
'svelte/no-dom-manipulating': Rule.RuleModule;
/**
* Disallow use of Svelte internal APIs
*/
'svelte/no-svelte-internal': Rule.RuleModule;
/**
* Require rel="noopener noreferrer" with target="_blank"
*/
'svelte/no-target-blank': Rule.RuleModule;
/**
* Disallow use of top-level browser globals in SSR contexts
*/
'svelte/no-top-level-browser-globals': Rule.RuleModule;
/**
* Disallow inspect expressions in production
*/
'svelte/no-inspect': Rule.RuleModule;Rules for Svelte's reactivity system and state management.
/**
* Prevent infinite reactive loops
*/
'svelte/infinite-reactive-loop': Rule.RuleModule;
/**
* Disallow immutable reactive statements
*/
'svelte/no-immutable-reactive-statements': Rule.RuleModule;
/**
* Disallow reactive functions that don't depend on state
*/
'svelte/no-reactive-functions': Rule.RuleModule;
/**
* Disallow reactive literals
*/
'svelte/no-reactive-literals': Rule.RuleModule;
/**
* Prevent reactive reassignment issues
*/
'svelte/no-reactive-reassign': Rule.RuleModule;
/**
* Prefer Svelte reactivity over DOM event listeners
*/
'svelte/prefer-svelte-reactivity': Rule.RuleModule;
/**
* Disallow unnecessary curly braces in reactive statements
*/
'svelte/no-extra-reactive-curlies': Rule.RuleModule;Rules for Svelte store patterns and best practices.
/**
* Disallow async stores
*/
'svelte/no-store-async': Rule.RuleModule;
/**
* Prefer destructured store props
*/
'svelte/prefer-destructured-store-props': Rule.RuleModule;
/**
* Require store callbacks to use set parameter
*/
'svelte/require-store-callbacks-use-set-param': Rule.RuleModule;
/**
* Require reactive store access
*/
'svelte/require-store-reactive-access': Rule.RuleModule;
/**
* Require store initialization
*/
'svelte/require-stores-init': Rule.RuleModule;
/**
* Prefer writable derived stores
*/
'svelte/prefer-writable-derived': Rule.RuleModule;
/**
* Ensure derived stores have consistent inputs and outputs
*/
'svelte/derived-has-same-inputs-outputs': Rule.RuleModule;
/**
* Disallow unsubscribe calls that are ignored
*/
'svelte/no-ignored-unsubscribe': Rule.RuleModule;Rules for maintaining code quality and preventing common errors.
/**
* Disallow duplicate else-if blocks
*/
'svelte/no-dupe-else-if-blocks': Rule.RuleModule;
/**
* Disallow duplicate on: directives
*/
'svelte/no-dupe-on-directives': Rule.RuleModule;
/**
* Disallow duplicate style properties
*/
'svelte/no-dupe-style-properties': Rule.RuleModule;
/**
* Disallow duplicate use: directives
*/
'svelte/no-dupe-use-directives': Rule.RuleModule;
/**
* Disallow unused component props
*/
'svelte/no-unused-props': Rule.RuleModule;
/**
* Disallow unused CSS class names
*/
'svelte/no-unused-class-name': Rule.RuleModule;
/**
* Disallow unused svelte-ignore comments
*/
'svelte/no-unused-svelte-ignore': Rule.RuleModule;
/**
* Disallow unnecessary mustache expressions
*/
'svelte/no-useless-mustaches': Rule.RuleModule;
/**
* Disallow useless children snippets
*/
'svelte/no-useless-children-snippet': Rule.RuleModule;
/**
* Disallow objects in text mustaches
*/
'svelte/no-object-in-text-mustaches': Rule.RuleModule;Rules for consistent code formatting and styling patterns.
/**
* Enforce first attribute linebreak
*/
'svelte/first-attribute-linebreak': Rule.RuleModule;
/**
* Enforce closing bracket placement
*/
'svelte/html-closing-bracket-new-line': Rule.RuleModule;
/**
* Enforce closing bracket spacing
*/
'svelte/html-closing-bracket-spacing': Rule.RuleModule;
/**
* Enforce consistent quotes in HTML attributes
*/
'svelte/html-quotes': Rule.RuleModule;
/**
* Configure self-closing tag style
*/
'svelte/html-self-closing': Rule.RuleModule;
/**
* Enforce consistent indentation
*/
'svelte/indent': Rule.RuleModule;
/**
* Limit attributes per line
*/
'svelte/max-attributes-per-line': Rule.RuleModule;
/**
* Enforce spacing in mustache expressions
*/
'svelte/mustache-spacing': Rule.RuleModule;
/**
* Sort component attributes
*/
'svelte/sort-attributes': Rule.RuleModule;
/**
* Enforce spacing around equal signs in attributes
*/
'svelte/no-spaces-around-equal-signs-in-attribute': Rule.RuleModule;
/**
* Disallow trailing spaces
*/
'svelte/no-trailing-spaces': Rule.RuleModule;
/**
* Enforce spacing in HTML comments
*/
'svelte/spaced-html-comment': Rule.RuleModule;Rules for Svelte directive usage and patterns.
/**
* Prefer class directive over conditional classes
*/
'svelte/prefer-class-directive': Rule.RuleModule;
/**
* Prefer style directive over conditional styles
*/
'svelte/prefer-style-directive': Rule.RuleModule;
/**
* Enforce shorthand attribute syntax
*/
'svelte/shorthand-attribute': Rule.RuleModule;
/**
* Enforce shorthand directive syntax
*/
'svelte/shorthand-directive': Rule.RuleModule;
/**
* Disallow dynamic slot names
*/
'svelte/no-dynamic-slot-name': Rule.RuleModule;
/**
* Disallow unknown style directive properties
*/
'svelte/no-unknown-style-directive-property': Rule.RuleModule;
/**
* Disallow shorthand style property overrides
*/
'svelte/no-shorthand-style-property-overrides': Rule.RuleModule;Rules for event handling patterns and best practices.
/**
* Disallow addEventListener in favor of on: directives
*/
'svelte/no-add-event-listener': Rule.RuleModule;
/**
* Ensure event handlers are functions
*/
'svelte/no-not-function-handler': Rule.RuleModule;
/**
* Require types for event dispatchers
*/
'svelte/require-event-dispatcher-types': Rule.RuleModule;
/**
* Require event name prefix
*/
'svelte/require-event-prefix': Rule.RuleModule;Rules for validating Svelte syntax and compilation.
/**
* Validate Svelte compilation
*/
'svelte/valid-compile': Rule.RuleModule;
/**
* Validate each block keys
*/
'svelte/valid-each-key': Rule.RuleModule;
/**
* Require key in each blocks
*/
'svelte/require-each-key': Rule.RuleModule;
/**
* Validate style parsing
*/
'svelte/valid-style-parse': Rule.RuleModule;
/**
* Ensure proper block language syntax
*/
'svelte/block-lang': Rule.RuleModule;
/**
* Enforce consistent selector styles
*/
'svelte/consistent-selector-style': Rule.RuleModule;Rules specific to SvelteKit applications and patterns.
/**
* Prevent load export in page modules
*/
'svelte/no-export-load-in-svelte-module-in-kit-pages': Rule.RuleModule;
/**
* Require base for goto navigation
*/
'svelte/no-goto-without-base': Rule.RuleModule;
/**
* Require base for navigation
*/
'svelte/no-navigation-without-base': Rule.RuleModule;
/**
* Require resolve for navigation
*/
'svelte/no-navigation-without-resolve': Rule.RuleModule;
/**
* Validate prop names in Kit pages
*/
'svelte/valid-prop-names-in-kit-pages': Rule.RuleModule;Rules for HTML elements and accessibility.
/**
* Require button elements to have explicit type
*/
'svelte/button-has-type': Rule.RuleModule;
/**
* Disallow inline styles
*/
'svelte/no-inline-styles': Rule.RuleModule;
/**
* Disallow restricted HTML elements
*/
'svelte/no-restricted-html-elements': Rule.RuleModule;
/**
* Disallow raw special elements (script, style)
*/
'svelte/no-raw-special-elements': Rule.RuleModule;
/**
* Require optimized style attributes
*/
'svelte/require-optimized-style-attribute': Rule.RuleModule;Advanced rules and experimental features.
/**
* Require slot types (experimental)
*/
'svelte/experimental-require-slot-types': Rule.RuleModule;
/**
* Require strict event types (experimental)
*/
'svelte/experimental-require-strict-events': Rule.RuleModule;
/**
* Disallow unnecessary state wrapping
*/
'svelte/no-unnecessary-state-wrap': Rule.RuleModule;
/**
* Prefer const declarations
*/
'svelte/prefer-const': Rule.RuleModule;
/**
* Disallow inner declarations
*/
'svelte/no-inner-declarations': Rule.RuleModule;Rules that extend existing ESLint rules for Svelte context.
/**
* TypeScript ESLint extension: no unnecessary conditions
*/
'@typescript-eslint/no-unnecessary-condition': Rule.RuleModule;type RuleCategory =
| 'Possible Errors' // Rules preventing runtime errors
| 'Security Vulnerability' // Security-focused rules
| 'Best Practices' // Code quality and maintainability
| 'Stylistic Issues' // Code formatting and style
| 'Extension Rules' // Extensions of existing ESLint rules
| 'SvelteKit' // SvelteKit-specific patterns
| 'Experimental' // Experimental features
| 'System'; // Internal system rulestype RuleType =
| 'problem' // Code correctness issues
| 'suggestion' // Code improvement suggestions
| 'layout'; // Code formatting issuesexport default [
{
rules: {
'svelte/no-at-html-tags': 'error',
'svelte/prefer-class-directive': 'warn',
'svelte/html-quotes': ['error', { prefer: 'double' }]
}
}
];export default [
{
rules: {
'svelte/max-attributes-per-line': ['error', {
multiline: 1,
singleline: 3
}],
'svelte/sort-attributes': ['error', {
order: ['class', 'id', 'name', 'slot']
}]
}
}
];interface RuleModule {
meta: RuleMetaData;
create: (context: RuleContext) => RuleListener;
}
interface RuleMetaData {
docs: {
description: string;
category: RuleCategory;
recommended: boolean | 'base';
url: string;
ruleId: string;
ruleName: string;
default?: 'error' | 'warn';
conflictWithPrettier?: boolean;
};
messages: { [messageId: string]: string };
fixable?: 'code' | 'whitespace';
hasSuggestions?: boolean;
schema: JSONSchema4 | JSONSchema4[];
deprecated?: boolean;
replacedBy?: string[] | { note: string };
type: 'problem' | 'suggestion' | 'layout';
}
interface RuleListener {
[key: string]: ((node: any) => void) | undefined;
onCodePathStart?(codePath: any, node: never): void;
onCodePathEnd?(codePath: any, node: never): void;
}