yeslint/configs/svelte.js

116 lines
2.6 KiB
JavaScript

'use strict';
const generic = require('./generic.js');
let typescriptInstalled = true;
try {
require('typescript');
typescriptInstalled = true;
}
catch { /* not installed */ }
/**
* An extension on the default yeslint! generic config, with rules specific to
* Svelte codebases and JavaScript source code for browser environments.
*
* @package yeslint!
* @author Romein van Buren
* @license MIT
* @type {import('eslint').Linter.Config}
*/
const svelte = {
...generic,
parserOptions: {
...generic.parserOptions,
ecmaVersion: 2020,
sourceType: 'module',
},
env: {
...generic.browser,
browser: true,
node: true,
es6: true,
},
extends: [
...generic.extends,
'plugin:svelte/recommended',
],
plugins: [
...generic.plugins,
'svelte',
],
overrides: [
...generic.overrides,
{
files: '*.svelte',
parser: 'svelte-eslint-parser',
parserOptions: typescriptInstalled ? {
parser: '@typescript-eslint/parser',
} : undefined,
rules: {
'no-inner-declarations': 0,
'svelte/no-inner-declarations': [
'error',
'functions',
],
'svelte/html-quotes': [
'error',
{
prefer: 'double',
dynamic: {
quoted: false,
avoidInvalidUnquotedInHTML: false,
},
},
],
'svelte/no-useless-mustaches': 'warn',
'svelte/require-store-reactive-access': 'warn',
'svelte/no-reactive-literals': 'error',
'svelte/html-closing-bracket-spacing': 'warn',
'svelte/indent': [
'warn',
{
indent: 2,
ignoredNodes: [],
switchCase: 1,
alignAttributesVertically: false,
},
],
'svelte/max-attributes-per-line': [
'warn',
{
multiline: 1,
singleline: 4,
},
],
'svelte/first-attribute-linebreak': [
'warn',
{
multiline: 'below',
singleline: 'beside',
},
],
'svelte/mustache-spacing': 'warn',
'svelte/no-extra-reactive-curlies': 'error',
'svelte/no-spaces-around-equal-signs-in-attribute': 'warn',
'svelte/prefer-class-directive': 'warn',
'svelte/shorthand-attribute': 'warn',
'svelte/shorthand-directive': 'warn',
'svelte/spaced-html-comment': 'warn',
'svelte/no-at-html-tags': 0,
'svelte/html-self-closing': [
'warn',
'all',
],
},
},
],
rules: {
...generic.rules,
strict: 0,
},
};
module.exports = svelte;