@tapie-kr/code-guideline-base
Version:
TAPIE Code Style Standards - Base Configuration
496 lines (413 loc) • 11.7 kB
TypeScript
import tsParser from '@typescript-eslint/parser';
import stylistic from '@stylistic/eslint-plugin';
import newlineDestructuring from 'eslint-plugin-newline-destructuring';
import importNewLines from 'eslint-plugin-import-newlines';
import simpleImportSort from 'eslint-plugin-simple-import-sort';
import unusedImports from 'eslint-plugin-unused-imports';
import typescript from '@typescript-eslint/eslint-plugin';
/**
* @type {import('eslint').Linter.Config}
*/
const config$3 = {
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',
{
minItems: 3,
multiline: true,
},
],
'@stylistic/arrow-parens': ['error', 'as-needed'],
'@stylistic/arrow-spacing': [
'error',
{
after: true,
before: true,
},
],
'@stylistic/block-spacing': ['error', 'always'],
'@stylistic/brace-style': ['error', '1tbs'],
'@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', 'always'],
'@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': 'error',
'@stylistic/linebreak-style': ['error', 'unix'],
'@stylistic/lines-around-comment': [
'error',
{
beforeLineComment: true,
allowClassStart: false,
allowClassEnd: false,
allowObjectStart: false,
allowObjectEnd: false,
allowArrayStart: false,
allowArrayEnd: false,
allowBlockStart: true,
allowBlockEnd: false,
allowEnumStart: false,
allowEnumEnd: false,
allowInterfaceStart: false,
allowInterfaceEnd: false,
allowModuleStart: false,
allowModuleEnd: false,
allowTypeStart: false,
allowTypeEnd: false,
applyDefaultIgnorePatterns: false,
afterHashbangComment: true,
},
],
'@stylistic/lines-between-class-members': [
'error',
{ enforce: [
{
blankLine: 'never',
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: 1,
ignoredNodes: [
'BreakStatement',
'ContinueStatement',
'ReturnStatement',
],
},
],
'@stylistic/member-delimiter-style': 'error',
'@stylistic/multiline-comment-style': ['error', 'starred-block'],
'@stylistic/multiline-ternary': ['error', 'always-multiline'],
'@stylistic/new-parens': ['error', 'never'],
'@stylistic/newline-per-chained-call': ['error', { ignoreChainWithDepth: 2 }],
'@stylistic/no-confusing-arrow': ['error', { onlyOneSimpleParam: true }],
'@stylistic/no-extra-parens': [
'error',
'all',
{
nestedBinaryExpressions: false,
ternaryOperandBinaryExpressions: false,
ignoreJSX: 'multi-line',
nestedConditionalExpressions: false,
enforceForArrowConditionals: false,
},
],
'@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,
allowMultiplePropertiesPerLine: true,
},
],
'@stylistic/one-var-declaration-per-line': ['error', 'always'],
'@stylistic/operator-linebreak': [
'error',
'after',
{ overrides: {
'?': 'before',
':': 'before',
} },
],
'@stylistic/padded-blocks': ['error', 'never'],
'@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 }],
},
};
/**
* @type {import('eslint').Linter.Config}
*/
const config$2 = {
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$'],
[
'^@cottons-kr/react-foundation',
'@tapie-kr/inspire-react',
'^@/components/(?!.*?/shared$)',
],
[
'^@?\\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.',
},
],
},
};
/**
* @type {import('eslint').Linter.Config}
*/
const config$1 = {
plugins: { '@stylistic': stylistic },
files: ['**/*.{js,mjs,cjs,jsx,ts,mts,cts,tsx}'],
rules: { '@stylistic/padding-line-between-statements': [
'error',
{
blankLine: 'always',
prev: '*',
next: '*',
},
{
blankLine: 'any',
prev: 'import',
next: 'import',
},
{
blankLine: 'never',
prev: 'singleline-export',
next: 'singleline-export',
},
{
blankLine: 'never',
prev: 'singleline-const',
next: 'singleline-const',
},
{
blankLine: 'never',
prev: 'let',
next: 'let',
},
] },
};
/**
* @type {import('eslint').Linter.Config}
*/
const defaultConfig = { rules: {
'no-console': ['warn', { allow: ['warn', 'error'] }],
'no-debugger': 'error',
'no-alert': 'error',
'no-var': 'error',
'no-duplicate-imports': 'error',
} };
/**
* @type {import('eslint').Linter.Config}
*/
const typescriptConfig = {
plugins: { '@typescript-eslint': typescript },
files: ['**/*.{ts,mts,cts,tsx}'],
rules: {
'@typescript-eslint/no-explicit-any': 'error',
'@typescript-eslint/no-unused-vars': [
'error',
{
varsIgnorePattern: '^_',
caughtErrorsIgnorePattern: '^_',
destructuredArrayIgnorePattern: '^_',
argsIgnorePattern: '^_',
},
],
},
};
/**
* @type {import('eslint').Linter.Config}
*/
const javascriptConfig = {
plugins: { '@typescript-eslint': typescript },
files: ['**/*.{js,mjs,cjs,jsx}'],
rules: {
'no-unused-vars': [
'error',
{
varsIgnorePattern: '^_',
caughtErrorsIgnorePattern: '^_',
destructuredArrayIgnorePattern: '^_',
argsIgnorePattern: '^_',
},
],
'no-redeclare': 'error',
},
};
var restrictConfig = [
defaultConfig,
typescriptConfig,
javascriptConfig,
];
/**
* @type {Array<import('eslint').Linter.Config>}
*/
const config = [
{ languageOptions: {
ecmaVersion: 'latest',
sourceType: 'module',
parser: tsParser,
parserOptions: { ecmaFeatures: { jsx: true } },
} },
{ ignores: [
'**/node_modules/**',
'**/dist/**',
'**/build/**',
] },
config$3,
config$2,
config$1,
...restrictConfig,
];
export { config as default };