From 2e6b756b1b584877bcbe507a3d7f90e6af2eabc3 Mon Sep 17 00:00:00 2001 From: Knut Ahlers Date: Wed, 14 Apr 2021 00:55:18 +0200 Subject: [PATCH] Add eslint config Signed-off-by: Knut Ahlers --- .eslintrc.js | 122 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 122 insertions(+) create mode 100644 .eslintrc.js diff --git a/.eslintrc.js b/.eslintrc.js new file mode 100644 index 0000000..f3b03d9 --- /dev/null +++ b/.eslintrc.js @@ -0,0 +1,122 @@ +/* + * Hack to automatically load globally installed eslint modules + * on Archlinux systems placed in /usr/lib/node_modules + * + * Source: https://github.com/eslint/eslint/issues/11914#issuecomment-569108633 + */ + +const Module = require('module') + +const hacks = [ + 'babel-eslint', + 'eslint-plugin-vue', +] + +const ModuleFindPath = Module._findPath +Module._findPath = (request, paths, isMain) => { + const r = ModuleFindPath(request, paths, isMain) + if (!r && hacks.includes(request)) { + return require.resolve(`/usr/lib/node_modules/${request}`) + } + return r +} + +// https://eslint.org/docs/user-guide/configuring + +module.exports = { + env: { + browser: true, + node: true, + }, + + extends: [ + 'plugin:vue/strongly-recommended', + // https://github.com/standard/standard/blob/master/docs/RULES-en.md + 'eslint:recommended', + ], + + globals: { + process: true, + }, + + parserOptions: { + ecmaVersion: 2020, + parser: 'babel-eslint', + }, + + plugins: [ + // required to lint *.vue files + 'vue', + ], + + root: true, + + // add your custom rules here + rules: { + 'array-bracket-newline': ['error', { multiline: true }], + 'array-bracket-spacing': ['error'], + 'arrow-body-style': ['error', 'as-needed'], + 'arrow-parens': ['error', 'as-needed'], + 'arrow-spacing': ['error', { after: true, before: true }], + 'block-spacing': ['error'], + 'brace-style': ['error', '1tbs'], + 'comma-dangle': ['error', 'always-multiline'], // Apply Contentflow rules + 'comma-spacing': ['error'], + 'comma-style': ['error', 'last'], + 'curly': ['error'], + 'dot-location': ['error', 'property'], + 'dot-notation': ['error'], + 'eol-last': ['error', 'always'], + 'eqeqeq': ['error', 'always', { null: 'ignore' }], + 'func-call-spacing': ['error', 'never'], + 'function-paren-newline': ['error', 'multiline'], + 'generator-star-spacing': ['off'], // allow async-await + 'implicit-arrow-linebreak': ['error'], + 'indent': ['error', 2], + 'key-spacing': ['error', { afterColon: true, beforeColon: false, mode: 'strict' }], + 'keyword-spacing': ['error'], + 'linebreak-style': ['error', 'unix'], + 'lines-between-class-members': ['error'], + 'multiline-comment-style': ['warn'], + 'newline-per-chained-call': ['error'], + 'no-console': ['off'], + 'no-debugger': process.env.NODE_ENV === 'production' ? 'error' : 'off', // allow debugger during development + 'no-duplicate-imports': ['error'], + 'no-else-return': ['error'], + 'no-extra-parens': ['error'], + 'no-implicit-coercion': ['error'], + 'no-lonely-if': ['error'], + 'no-multi-spaces': ['error'], + 'no-multiple-empty-lines': ['warn', { max: 2, maxBOF: 0, maxEOF: 0 }], + 'no-trailing-spaces': ['error'], + 'no-unneeded-ternary': ['error'], + 'no-useless-return': ['error'], + 'no-var': ['error'], + 'no-whitespace-before-property': ['error'], + 'object-curly-newline': ['error', { consistent: true }], + 'object-curly-spacing': ['error', 'always'], + 'object-shorthand': ['error'], + 'padded-blocks': ['error', 'never'], + 'prefer-arrow-callback': ['error'], + 'prefer-const': ['error'], + 'prefer-object-spread': ['error'], + 'prefer-rest-params': ['error'], + 'prefer-template': ['error'], + 'quote-props': ['error', 'consistent-as-needed', { keywords: false }], + 'quotes': ['error', 'single', { allowTemplateLiterals: true }], + 'semi': ['error', 'never'], + 'sort-imports': ['error', { ignoreCase: true, ignoreDeclarationSort: false, ignoreMemberSort: false }], + 'sort-keys': ['error', 'asc', { caseSensitive: true, natural: false }], + 'space-before-blocks': ['error', 'always'], + 'space-before-function-paren': ['error', 'never'], + 'space-in-parens': ['error', 'never'], + 'space-infix-ops': ['error'], + 'space-unary-ops': ['error', { nonwords: false, words: true }], + 'spaced-comment': ['warn', 'always'], + 'switch-colon-spacing': ['error'], + 'template-curly-spacing': ['error', 'never'], + 'unicode-bom': ['error', 'never'], + 'wrap-iife': ['error'], + 'yoda': ['error'], + }, +}