@code-guideline/eslint
Version:
Code Guideline for eslint
900 lines (889 loc) • 23.8 kB
JavaScript
// 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
};