UNPKG

@code-guideline/eslint

Version:
900 lines (889 loc) 23.8 kB
// src/index.mjs import tsParser2 from "@typescript-eslint/parser"; // src/base/formatter.mjs import stylistic from "@stylistic/eslint-plugin"; import newlineDestructuring from "eslint-plugin-newline-destructuring"; var config = { plugins: { "@stylistic": stylistic, "newline-destructuring": newlineDestructuring }, files: ["**/*.{js,mjs,cjs,jsx,ts,mts,cts,tsx}"], rules: { "@stylistic/array-bracket-newline": [ "error", { minItems: 3, multiline: true } ], "@stylistic/array-bracket-spacing": ["error", "never"], "@stylistic/array-element-newline": [ "error", { ArrayExpression: "consistent", ArrayPattern: "consistent" } ], "@stylistic/arrow-parens": ["error", "as-needed"], "@stylistic/arrow-spacing": [ "error", { after: true, before: true } ], "@stylistic/block-spacing": ["error", "always"], "@stylistic/brace-style": [ "error", "1tbs", { allowSingleLine: true } ], "@stylistic/comma-dangle": ["error", "always-multiline"], "@stylistic/comma-spacing": [ "error", { after: true, before: false } ], "@stylistic/comma-style": ["error", "last"], "@stylistic/computed-property-spacing": ["error", "never"], "@stylistic/curly-newline": ["error", { consistent: true }], "@stylistic/dot-location": ["error", "property"], "@stylistic/eol-last": ["error", "always"], "@stylistic/function-call-argument-newline": ["error", "consistent"], "@stylistic/function-call-spacing": ["error", "never"], "@stylistic/function-paren-newline": ["error", { minItems: 5 }], "@stylistic/generator-star-spacing": [ "error", { after: true, before: false } ], "@stylistic/implicit-arrow-linebreak": ["error", "beside"], "@stylistic/indent": ["error", 2], "@stylistic/indent-binary-ops": ["error", 2], "@stylistic/key-spacing": [ "error", { align: { beforeColon: false, afterColon: true, mode: "strict", on: "value" } } ], "@stylistic/keyword-spacing": [ "error", { before: true, after: true } ], "@stylistic/line-comment-position": "off", "@stylistic/linebreak-style": ["off", "unix"], "@stylistic/lines-around-comment": [ "error", { beforeLineComment: false, beforeBlockComment: true, allowClassStart: true, allowClassEnd: true, allowObjectStart: true, allowObjectEnd: true, allowArrayStart: true, allowArrayEnd: true, allowBlockStart: true, allowBlockEnd: true, allowEnumStart: true, allowEnumEnd: true, allowInterfaceStart: true, allowInterfaceEnd: true, allowModuleStart: true, allowModuleEnd: true, allowTypeStart: true, allowTypeEnd: true, applyDefaultIgnorePatterns: true, afterHashbangComment: true } ], "@stylistic/lines-between-class-members": [ "error", { enforce: [ { blankLine: "always", prev: "method", next: "method" } ] } ], "@stylistic/max-len": [ "error", { code: Number.POSITIVE_INFINITY, tabWidth: 2, comments: 100, ignoreComments: true, ignoreTrailingComments: true, ignoreUrls: true, ignoreStrings: true, ignoreTemplateLiterals: true, ignoreRegExpLiterals: true } ], "@stylistic/max-statements-per-line": ["error", { max: 2 }], "@stylistic/member-delimiter-style": "error", "@stylistic/multiline-comment-style": "off", "@stylistic/multiline-ternary": ["error", "always-multiline"], "@stylistic/new-parens": ["error", "always"], "@stylistic/newline-per-chained-call": ["error", { ignoreChainWithDepth: 2 }], "@stylistic/no-confusing-arrow": [ "error", { onlyOneSimpleParam: true, allowParens: true } ], "@stylistic/no-extra-parens": [ "error", "all", { nestedBinaryExpressions: false, ternaryOperandBinaryExpressions: false, ignoreJSX: "multi-line", nestedConditionalExpressions: false, ignoredNodes: ["ConditionalExpression", "ArrowFunctionExpression"] } ], "@stylistic/no-extra-semi": "error", "@stylistic/no-floating-decimal": "error", "@stylistic/no-mixed-operators": "error", "@stylistic/no-mixed-spaces-and-tabs": "error", "@stylistic/no-multi-spaces": "off", "@stylistic/no-multiple-empty-lines": [ "error", { max: 1, maxBOF: 0, maxEOF: 1 } ], "@stylistic/no-tabs": "error", "@stylistic/no-trailing-spaces": "error", "@stylistic/no-whitespace-before-property": "error", "@stylistic/nonblock-statement-body-position": ["error", "beside"], "@stylistic/object-curly-newline": [ "error", { ObjectExpression: { minProperties: 2 }, ObjectPattern: { minProperties: 3 }, ImportDeclaration: { minProperties: 4 }, ExportDeclaration: "always", TSTypeLiteral: "always", TSInterfaceBody: "always" } ], "@stylistic/object-curly-spacing": [ "error", "always", { arraysInObjects: true } ], // allowMultiplePropertiesPerLine: true, // ESLint 9.x에서 지원하지 않으므로 삭제 "@stylistic/object-property-newline": ["error", { allowAllPropertiesOnSameLine: true }], "@stylistic/one-var-declaration-per-line": ["error", "always"], "@stylistic/operator-linebreak": [ "error", "after", { overrides: { "?": "before", ":": "before" } } ], "@stylistic/padded-blocks": ["error", "never"], "@stylistic/padding-line-between-statements": [ "error", { blankLine: "always", prev: "*", next: "return" }, { blankLine: "always", prev: "*", next: "function" }, { blankLine: "always", prev: "function", next: "*" }, { blankLine: "always", prev: "*", next: "class" }, { blankLine: "always", prev: "class", next: "*" }, { blankLine: "always", prev: "*", next: "export" }, { blankLine: "any", prev: "export", next: "export" }, { blankLine: "always", prev: "block-like", next: "*" }, { blankLine: "always", prev: "*", next: "block-like" }, { blankLine: "any", prev: "import", next: "import" } ], "@stylistic/quote-props": ["error", "as-needed"], "@stylistic/quotes": [ "error", "single", { avoidEscape: true } ], "@stylistic/rest-spread-spacing": "error", "@stylistic/semi": "error", "@stylistic/semi-spacing": [ "error", { before: false, after: true } ], "@stylistic/semi-style": "error", "@stylistic/space-before-blocks": "error", "@stylistic/space-before-function-paren": [ "error", { anonymous: "never", named: "never", asyncArrow: "always" } ], "@stylistic/space-in-parens": "error", "@stylistic/space-infix-ops": "error", "@stylistic/space-unary-ops": "error", "@stylistic/spaced-comment": ["error", "always"], "@stylistic/switch-colon-spacing": "error", "@stylistic/template-curly-spacing": "error", "@stylistic/template-tag-spacing": "error", "@stylistic/type-annotation-spacing": "error", "@stylistic/type-generic-spacing": "error", "@stylistic/type-named-tuple-spacing": "error", "@stylistic/wrap-iife": ["error", "inside"], "@stylistic/wrap-regex": "error", "@stylistic/yield-star-spacing": ["error", "after"], "newline-destructuring/newline": ["error", { itemsWithRest: 2 }] } }; var formatter_default = config; // src/base/import.mjs import importNewLines from "eslint-plugin-import-newlines"; import simpleImportSort from "eslint-plugin-simple-import-sort"; import unusedImports from "eslint-plugin-unused-imports"; var config2 = { plugins: { "simple-import-sort": simpleImportSort, "import-newlines": importNewLines, "unused-imports": unusedImports }, settings: { "import/resolver": { typescript: {}, node: { extensions: [ ".js", ".mjs", ".cjs", ".jsx", ".ts", ".mts", ".cts", ".tsx" ] } } }, rules: { "simple-import-sort/imports": [ "error", { groups: [ ["^.+\\.css$"], [ "^@?\\w", "^@/", "^\\." ], ["^\\u0000"] ] } ], "import-newlines/enforce": ["error", { items: 3 }], "unused-imports/no-unused-imports": "error", "no-restricted-imports": ["error", { patterns: ["../../*"] }], "no-restricted-syntax": [ "error", { selector: ":not(ImportDeclaration[source.value=/.css$/]) > ImportNamespaceSpecifier", message: "Importing entire module is not allowed." } ] } }; var import_default = config2; // src/base/restrict.mjs import typescript from "@typescript-eslint/eslint-plugin"; var defaultConfig = { rules: { "no-console": ["warn", { allow: ["warn", "error"] }], "no-debugger": "error", "no-alert": "error", "no-var": "error", "no-duplicate-imports": "error", "no-restricted-syntax": "off" } }; var typescriptConfig = { plugins: { "@typescript-eslint": typescript }, files: ["**/*.{js,ts,mjs,mts,cjs,cts,jsx,tsx}"], rules: { "@typescript-eslint/no-explicit-any": "error", "@typescript-eslint/no-unused-vars": [ "error", { varsIgnorePattern: "^_", caughtErrorsIgnorePattern: "^_", destructuredArrayIgnorePattern: "^_", argsIgnorePattern: "^_" } ], "no-unused-vars": [ "error", { varsIgnorePattern: "^_", caughtErrorsIgnorePattern: "^_", destructuredArrayIgnorePattern: "^_", argsIgnorePattern: "^_" } ], "no-redeclare": "error" } }; var restrict_default = [defaultConfig, typescriptConfig]; // src/nestjs/formatter.mjs import stylistic2 from "@stylistic/eslint-plugin"; import newlineDestructuring2 from "eslint-plugin-newline-destructuring"; var config3 = { plugins: { "@stylistic": stylistic2, "newline-destructuring": newlineDestructuring2 }, files: ["**/*.{js,mjs,cjs,jsx,ts,mts,cts,tsx}"], rules: { "@stylistic/array-bracket-newline": [ "error", { minItems: 3, multiline: true } ], "@stylistic/array-bracket-spacing": ["error", "never"], "@stylistic/array-element-newline": [ "error", { ArrayExpression: "consistent", ArrayPattern: "consistent" } ], "@stylistic/arrow-parens": ["error", "as-needed"], "@stylistic/arrow-spacing": [ "error", { after: true, before: true } ], "@stylistic/block-spacing": ["error", "always"], "@stylistic/brace-style": [ "error", "1tbs", { allowSingleLine: true } ], "@stylistic/comma-dangle": ["error", "always-multiline"], "@stylistic/comma-spacing": [ "error", { after: true, before: false } ], "@stylistic/comma-style": ["error", "last"], "@stylistic/computed-property-spacing": ["error", "never"], "@stylistic/curly-newline": ["error", { consistent: true }], "@stylistic/dot-location": ["error", "property"], "@stylistic/eol-last": ["error", "always"], "@stylistic/function-call-argument-newline": ["error", "consistent"], "@stylistic/function-call-spacing": ["error", "never"], "@stylistic/function-paren-newline": ["error", { minItems: 5 }], "@stylistic/generator-star-spacing": [ "error", { after: true, before: false } ], "@stylistic/implicit-arrow-linebreak": ["error", "beside"], "@stylistic/indent": ["error", 2], "@stylistic/indent-binary-ops": ["error", 2], "@stylistic/key-spacing": [ "error", { align: { beforeColon: false, afterColon: true, mode: "strict", on: "value" } } ], "@stylistic/keyword-spacing": [ "error", { before: true, after: true } ], "@stylistic/line-comment-position": "off", "@stylistic/linebreak-style": ["off", "unix"], "@stylistic/lines-around-comment": [ "error", { beforeLineComment: false, beforeBlockComment: true, allowClassStart: true, allowClassEnd: true, allowObjectStart: true, allowObjectEnd: true, allowArrayStart: true, allowArrayEnd: true, allowBlockStart: true, allowBlockEnd: true, allowEnumStart: true, allowEnumEnd: true, allowInterfaceStart: true, allowInterfaceEnd: true, allowModuleStart: true, allowModuleEnd: true, allowTypeStart: true, allowTypeEnd: true, applyDefaultIgnorePatterns: true, afterHashbangComment: true } ], "@stylistic/lines-between-class-members": [ "error", { enforce: [ { blankLine: "always", prev: "method", next: "method" } ] } ], "@stylistic/max-len": [ "error", { code: Number.POSITIVE_INFINITY, tabWidth: 2, comments: 100, ignoreComments: true, ignoreTrailingComments: true, ignoreUrls: true, ignoreStrings: true, ignoreTemplateLiterals: true, ignoreRegExpLiterals: true } ], "@stylistic/max-statements-per-line": ["error", { max: 2 }], "@stylistic/member-delimiter-style": "error", "@stylistic/multiline-comment-style": "off", "@stylistic/multiline-ternary": ["error", "always-multiline"], "@stylistic/new-parens": ["error", "always"], "@stylistic/newline-per-chained-call": ["error", { ignoreChainWithDepth: 2 }], "@stylistic/no-confusing-arrow": [ "error", { onlyOneSimpleParam: true, allowParens: true } ], "@stylistic/no-extra-parens": [ "error", "all", { nestedBinaryExpressions: false, ternaryOperandBinaryExpressions: false, ignoreJSX: "multi-line", nestedConditionalExpressions: false, ignoredNodes: ["ConditionalExpression", "ArrowFunctionExpression"] } ], "@stylistic/no-extra-semi": "error", "@stylistic/no-floating-decimal": "error", "@stylistic/no-mixed-operators": "error", "@stylistic/no-mixed-spaces-and-tabs": "error", "@stylistic/no-multi-spaces": "off", "@stylistic/no-multiple-empty-lines": [ "error", { max: 1, maxBOF: 0, maxEOF: 1 } ], "@stylistic/no-tabs": "error", "@stylistic/no-trailing-spaces": "error", "@stylistic/no-whitespace-before-property": "error", "@stylistic/nonblock-statement-body-position": ["error", "beside"], "@stylistic/object-curly-newline": [ "error", { ObjectExpression: { minProperties: 2 }, ObjectPattern: { minProperties: 3 }, ImportDeclaration: { minProperties: 4 }, ExportDeclaration: "always", TSTypeLiteral: "always", TSInterfaceBody: "always" } ], "@stylistic/object-curly-spacing": [ "error", "always", { arraysInObjects: true } ], "@stylistic/object-property-newline": [ "error", { allowAllPropertiesOnSameLine: true } ], "@stylistic/one-var-declaration-per-line": ["error", "always"], "@stylistic/operator-linebreak": [ "error", "after", { overrides: { "?": "before", ":": "before" } } ], "@stylistic/padded-blocks": ["error", "never"], "@stylistic/padding-line-between-statements": [ "error", { blankLine: "always", prev: "*", next: "return" }, { blankLine: "always", prev: "*", next: "function" }, { blankLine: "always", prev: "function", next: "*" }, { blankLine: "always", prev: "*", next: "class" }, { blankLine: "always", prev: "class", next: "*" }, { blankLine: "always", prev: "*", next: "export" }, { blankLine: "any", prev: "export", next: "export" }, { blankLine: "always", prev: "block-like", next: "*" }, { blankLine: "always", prev: "*", next: "block-like" }, { blankLine: "any", prev: "import", next: "import" } ], "@stylistic/quote-props": ["error", "as-needed"], "@stylistic/quotes": [ "error", "single", { avoidEscape: true } ], "@stylistic/rest-spread-spacing": "error", "@stylistic/semi": "error", "@stylistic/semi-spacing": [ "error", { before: false, after: true } ], "@stylistic/semi-style": "error", "@stylistic/space-before-blocks": "error", "@stylistic/space-before-function-paren": [ "error", { anonymous: "never", named: "never", asyncArrow: "always" } ], "@stylistic/space-in-parens": "error", "@stylistic/space-infix-ops": "error", "@stylistic/space-unary-ops": "error", "@stylistic/spaced-comment": ["error", "always"], "@stylistic/switch-colon-spacing": "error", "@stylistic/template-curly-spacing": "error", "@stylistic/template-tag-spacing": "error", "@stylistic/type-annotation-spacing": "error", "@stylistic/type-generic-spacing": "error", "@stylistic/type-named-tuple-spacing": "error", "@stylistic/wrap-iife": ["error", "inside"], "@stylistic/wrap-regex": "error", "@stylistic/yield-star-spacing": ["error", "after"], "newline-destructuring/newline": ["error", { itemsWithRest: 2 }] } }; var formatter_default2 = config3; // src/nestjs/import.mjs import importNewLines2 from "eslint-plugin-import-newlines"; import simpleImportSort2 from "eslint-plugin-simple-import-sort"; import unusedImports2 from "eslint-plugin-unused-imports"; var config4 = { plugins: { "simple-import-sort": simpleImportSort2, "import-newlines": importNewLines2, "unused-imports": unusedImports2 }, settings: { "import/resolver": { typescript: {}, node: { extensions: [ ".js", ".mjs", ".cjs", ".jsx", ".ts", ".mts", ".cts", ".tsx" ] } } } }; var import_default2 = config4; // src/nestjs/nestjs.mjs import tsParser from "@typescript-eslint/parser"; var typedConfig = { languageOptions: { parser: tsParser, parserOptions: { project: "./tsconfig.json", tsconfigRootDir: process.cwd(), sourceType: "module" } } }; var nestjs_default = [ typedConfig, formatter_default2 ]; // src/nestjs/restrict.mjs import typescript2 from "@typescript-eslint/eslint-plugin"; var defaultConfig2 = { rules: { "no-console": ["warn", { allow: ["warn", "error"] }], "no-debugger": "error", "no-alert": "error", "no-var": "error", "no-duplicate-imports": "error", "no-restricted-syntax": "off" } }; var typescriptConfig2 = { plugins: { "@typescript-eslint": typescript2 }, files: ["**/*.{js,ts,mjs,mts,cjs,cts,jsx,tsx}"], rules: { "@typescript-eslint/no-explicit-any": "error", "@typescript-eslint/no-unused-vars": [ "error", { varsIgnorePattern: "^_", caughtErrorsIgnorePattern: "^_", destructuredArrayIgnorePattern: "^_", argsIgnorePattern: "^_" } ], "no-unused-vars": [ "error", { varsIgnorePattern: "^_", caughtErrorsIgnorePattern: "^_", destructuredArrayIgnorePattern: "^_", argsIgnorePattern: "^_" } ], "no-redeclare": "error" } }; var restrict_default2 = [defaultConfig2, typescriptConfig2]; // src/react/formatter.mjs import stylistic3 from "@stylistic/eslint-plugin"; var config5 = { plugins: { "@stylistic": stylistic3 }, rules: { "@stylistic/jsx-child-element-spacing": "off", "@stylistic/jsx-closing-bracket-location": ["error", "line-aligned"], "@stylistic/jsx-closing-tag-location": ["error", "line-aligned"], "@stylistic/jsx-curly-brace-presence": [ "error", { props: "never", children: "never", propElementValues: "always" } ], "@stylistic/jsx-curly-newline": [ "error", { multiline: "consistent", singleline: "forbid" } ], "@stylistic/jsx-curly-spacing": [ "error", "never", { allowMultiline: true } ], "@stylistic/jsx-equals-spacing": ["error", "never"], "@stylistic/jsx-first-prop-new-line": ["error", "multiline"], "@stylistic/jsx-function-call-newline": ["error", "multiline"], "@stylistic/jsx-indent-props": ["error", 2], "@stylistic/jsx-max-props-per-line": [ "error", { maximum: { single: 3, multi: 1 } } ], "@stylistic/jsx-newline": "off", "@stylistic/jsx-one-expression-per-line": ["error", { allow: "single-line" }], "@stylistic/jsx-pascal-case": [ "error", { allowAllCaps: true, allowNamespace: true } ], "@stylistic/jsx-quotes": ["error", "prefer-single"], "@stylistic/jsx-self-closing-comp": [ "error", { component: true, html: true } ], "@stylistic/jsx-sort-props": "off", "@stylistic/jsx-tag-spacing": [ "error", { closingSlash: "allow", beforeClosing: "never", beforeSelfClosing: "always" } ], "@stylistic/jsx-wrap-multilines": [ "error", { declaration: "parens-new-line", assignment: "parens-new-line", return: "parens-new-line", arrow: "parens-new-line", condition: "ignore", logical: "ignore", prop: "ignore", propertyValue: "ignore" } ] } }; var formatter_default3 = config5; // src/configMap.mjs var configMap = { react: [formatter_default3], nestjs: [ formatter_default2, import_default2, ...restrict_default2, ...nestjs_default ] }; var configMap_default = configMap; // src/index.mjs var defaultConfig3 = [ { languageOptions: { ecmaVersion: "latest", sourceType: "module", parser: tsParser2, parserOptions: { ecmaFeatures: { jsx: true } } }, settings: { react: { version: "detect" } } }, { ignores: [ "**/node_modules/**", "**/dist/**", "**/build/**", "**/.next/**", "**/next-env.d.ts" ] }, formatter_default, import_default, ...restrict_default ]; function eslintCodeGuideline(extendsConfig) { if (!extendsConfig) { return defaultConfig3; } let configs = [...defaultConfig3]; if (extendsConfig) { const extendItems = Array.isArray(extendsConfig) ? extendsConfig : [extendsConfig]; extendItems.forEach((item) => { configs = [...configs, ...configMap_default[item]]; }); } return configs; } var index_default = eslintCodeGuideline; export { index_default as default };