Skip to content

Commits on Source 25

package.json
node_modules/**
/** @type {import("eslint").Linter.Config} */
module.exports = {
extends: './index'
}
/** @type {import("prettier").Config} */
module.exports = {
export default {
printWidth: 179,
tabWidth: 2,
useTabs: false,
......
## [2.7.60](https://gitlab.kilic.dev/config/eslint-config/compare/v2.7.59...v2.7.60) (2024-10-18)
### Performance Improvements
* update with new methodology on eslint9 ([9b96609](https://gitlab.kilic.dev/config/eslint-config/commit/9b9660906d6a2a816e64e496e9e76a309fd3383a))
## [2.7.59](https://gitlab.kilic.dev/config/eslint-config/compare/v2.7.58...v2.7.59) (2024-10-03)
......
import js from '@eslint/js'
import StylisticPlugin from '@stylistic/eslint-plugin'
import imports from './import.js'
/** @type {import("eslint").Linter.Config[]} */
export default [
js.configs.recommended,
...imports,
{
languageOptions: {
globals: {
browser: true,
es6: true,
node: true
},
parserOptions: {
createDefaultProgram: true,
ecmaVersion: 'latest',
sourceType: 'module'
}
},
plugins: {
stylistic: StylisticPlugin
},
rules: {
'stylistic/semi': ['error', 'never'],
'stylistic/linebreak-style': ['error', 'unix'],
'sort-imports': 'off',
'stylistic/indent': ['error', 2],
'stylistic/brace-style': ['error', '1tbs', { allowSingleLine: true } ],
'stylistic/comma-spacing': ['error', { before: false, after: true } ],
'stylistic/func-call-spacing': ['error', 'never'],
'stylistic/max-len': [
'error',
{
code: 180,
comments: 180
}
],
'stylistic/no-multi-spaces': 'error',
'stylistic/no-multiple-empty-lines': [
'error',
{
max: 1
}
],
'stylistic/space-before-function-paren': ['error', 'never'],
'stylistic/object-curly-newline': [
'error',
{
ObjectExpression: {
multiline: true,
minProperties: 3,
consistent: true
},
ObjectPattern: 'never',
ImportDeclaration: {
multiline: true,
minProperties: 10
},
ExportDeclaration: {
multiline: true,
minProperties: 10
}
}
],
'stylistic/object-curly-spacing': ['error', 'always'],
'stylistic/comma-dangle': ['error', 'never'],
'stylistic/array-element-newline': ['error', 'consistent'],
'stylistic/array-bracket-newline': ['error', 'consistent'],
'stylistic/array-bracket-spacing': [
'error',
'never',
{
objectsInArrays: true,
arraysInArrays: true
}
],
curly: ['error', 'all'],
complexity: ['error', 25],
'dot-notation': 'error',
eqeqeq: ['error', 'smart'],
'stylistic/quotes': ['error', 'single'],
'stylistic/quote-props': ['error', 'as-needed'],
'guard-for-in': 'error',
'id-match': 'off',
'max-classes-per-file': 'off',
'stylistic/new-parens': 'error',
'no-bitwise': 'error',
'no-caller': 'error',
'no-prototype-builtins': 'off',
'no-console': 'warn',
'no-debugger': 'warn',
'no-empty': 'warn',
'no-eval': 'error',
'no-invalid-this': 'off',
'no-new-wrappers': 'error',
'no-shadow': [
'off',
{
hoist: 'all'
}
],
'no-throw-literal': 'error',
'stylistic/no-trailing-spaces': 'error',
'no-undef-init': 'error',
'no-underscore-dangle': 'error',
'no-unsafe-finally': 'error',
'no-unused-expressions': 'warn',
'no-unused-vars': 'error',
'object-shorthand': 'error',
'one-var': ['error', 'never'],
'stylistic/template-curly-spacing': ['error', 'never'],
radix: 'error',
'stylistic/spaced-comment': 'error',
'use-isnan': 'error',
'valid-typeof': 'warn',
'stylistic/arrow-parens': ['error', 'always'],
'stylistic/keyword-spacing': 'error',
'stylistic/lines-between-class-members': 'off',
'stylistic/padding-line-between-statements': [
'error',
{
blankLine: 'always',
prev: '*',
next: 'return'
},
{
blankLine: 'always',
prev: ['const', 'let', 'var'],
next: '*'
},
{
blankLine: 'any',
prev: ['const', 'let', 'var'],
next: ['const', 'let', 'var']
},
{
blankLine: 'always',
prev: ['case', 'default'],
next: '*'
},
{
blankLine: 'always',
prev: '*',
next: ['function', 'if', 'try', 'break', 'class', 'for', 'while', 'do']
}
]
}
}
]
const ALL_KNOWN_JAVASCRIPT_FILE_EXTENSIONS = [ '*.js', '*.cjs', '*.mjs', '*.ts', '*.tsx', '*.vue', '*.svelte' ]
module.exports = { ALL_KNOWN_JAVASCRIPT_FILE_EXTENSIONS }
export const ALL_KNOWN_JAVASCRIPT_FILE_EXTENSIONS = ['*.js', '*.cjs', '*.mjs', '*.ts', '*.tsx', '*.vue', '*.svelte']
import base from './base.js'
/** @type {import("eslint").Linter.Config[]} */
export default [
...base,
{
files: ['**/*.js']
}
]
const { ALL_KNOWN_JAVASCRIPT_FILE_EXTENSIONS } = require('./constants')
import ImportPlugin from 'eslint-plugin-import'
/** @type {import("eslint").Linter.Config} */
module.exports = {
overrides: [
import { ALL_KNOWN_JAVASCRIPT_FILE_EXTENSIONS } from './constants.js'
/** @type {import("eslint").Linter.Config[]} */
export default [
{
files: ALL_KNOWN_JAVASCRIPT_FILE_EXTENSIONS,
plugins: [ 'import' ],
plugins: {
import: ImportPlugin
},
rules: {
'import/no-extraneous-dependencies': 'error',
'import/exports-last': 'error'
}
}
]
}
const { ALL_KNOWN_JAVASCRIPT_FILE_EXTENSIONS } = require('./constants')
import ImportPlugin from 'eslint-plugin-import'
/** @type {import("eslint").Linter.Config} */
module.exports = {
overrides: [
import { ALL_KNOWN_JAVASCRIPT_FILE_EXTENSIONS } from './constants.js'
/** @type {import("eslint").Linter.Config[]} */
export default [
{
files: ALL_KNOWN_JAVASCRIPT_FILE_EXTENSIONS,
plugins: [ 'import' ],
plugins: { import: ImportPlugin },
rules: {
'sort-imports': 'off',
'import/first': 'error',
'import/newline-after-import': 'error',
'import/no-duplicates': 'error',
'import/order': [
'error',
{
pathGroups: [
{
pattern: '@{cenk1cenk2,cenk1cenk2-*}/**',
group: 'index'
},
{
pattern: '@{src,interfaces,utils,constants,commands}/**',
group: 'index'
},
{
pattern: '@{src,interfaces,utils,constants,commands}',
group: 'index'
}
],
pathGroupsExcludedImportTypes: [ 'builtin' ],
groups: [
[ 'builtin', 'external' ],
[ 'index', 'parent', 'sibling' ]
],
'newlines-between': 'always',
alphabetize: {
order: 'asc',
caseInsensitive: true
}
}
],
'import/export': 'error',
'import/no-extraneous-dependencies': 'error',
'import/no-self-import': 'error',
......@@ -47,4 +18,3 @@ module.exports = {
}
}
]
}
/** @type {import("eslint").Linter.Config} */
module.exports = {
env: {
browser: true,
es6: true,
node: true
},
parserOptions: {
createDefaultProgram: true,
ecmaVersion: 'latest',
sourceType: 'module'
},
extends: [ 'eslint:recommended', './import' ],
rules: {
semi: [ 'error', 'never' ],
'linebreak-style': [ 'error', 'unix' ],
'sort-imports': 'off',
indent: [ 'error', 2 ],
'brace-style': [ 'error', '1tbs', { allowSingleLine: true } ],
'comma-spacing': [ 'error', { before: false, after: true } ],
'func-call-spacing': [ 'error', 'never' ],
'max-len': [
'error',
{
code: 180,
comments: 180
}
],
'no-multi-spaces': 'error',
'no-multiple-empty-lines': [
'error',
{
max: 1
}
],
'space-before-function-paren': 'error',
'object-curly-newline': [
'error',
{
ObjectExpression: {
multiline: true,
minProperties: 3,
consistent: true
},
ObjectPattern: 'never',
ImportDeclaration: {
multiline: true,
minProperties: 10
},
ExportDeclaration: {
multiline: true,
minProperties: 10
}
}
],
'object-curly-spacing': [ 'error', 'always' ],
'comma-dangle': [ 'error', 'never' ],
'array-element-newline': [ 'error', 'consistent' ],
'array-bracket-newline': [ 'error', 'consistent' ],
'array-bracket-spacing': [
'error',
'always',
{
objectsInArrays: true,
arraysInArrays: true
}
],
curly: [ 'error', 'all' ],
complexity: [ 'error', 25 ],
'constructor-super': 'error',
'dot-notation': 'error',
eqeqeq: [ 'error', 'smart' ],
quotes: [ 'error', 'single' ],
'quote-props': [ 'error', 'as-needed' ],
'guard-for-in': 'error',
'id-blacklist': 'off',
'id-match': 'off',
'max-classes-per-file': 'off',
'new-parens': 'error',
'no-bitwise': 'error',
'no-caller': 'error',
'no-prototype-builtins': 'off',
'no-console': 'warn',
'no-debugger': 'warn',
'no-empty': 'warn',
'no-eval': 'error',
'no-invalid-this': 'off',
'no-new-wrappers': 'error',
'no-shadow': [
'off',
{
hoist: 'all'
}
],
'no-throw-literal': 'error',
'no-trailing-spaces': 'error',
'no-undef-init': 'error',
'no-underscore-dangle': 'error',
'no-unsafe-finally': 'error',
'no-unused-expressions': 'warn',
'no-unused-vars': 'error',
'object-shorthand': 'error',
'one-var': [ 'error', 'never' ],
'template-curly-spacing': [ 'error', 'never' ],
radix: 'error',
'spaced-comment': 'error',
'use-isnan': 'error',
'valid-typeof': 'warn',
'arrow-parens': [ 'error', 'always' ],
'keyword-spacing': 'error',
'lines-between-class-members': 'off',
'padding-line-between-statements': [
'error',
{
blankLine: 'always',
prev: '*',
next: 'return'
},
{
blankLine: 'always',
prev: [ 'const', 'let', 'var' ],
next: '*'
},
{
blankLine: 'any',
prev: [ 'const', 'let', 'var' ],
next: [ 'const', 'let', 'var' ]
},
{
blankLine: 'always',
prev: [ 'case', 'default' ],
next: '*'
},
{
blankLine: 'always',
prev: '*',
next: [ 'function', 'if', 'try', 'break', 'class', 'for', 'while', 'do' ]
}
]
}
}
{
"compilerOptions": {
"target": "ESNext",
"module": "NodeNext",
"checkJs": true
}
}
{
"name": "@cenk1cenk2/eslint-config",
"version": "2.7.59",
"version": "2.7.60",
"description": "Eslint configuration for my taste.",
"main": "index.js",
"repository": "git@gitlab.kilic.dev:config/eslint-config.git",
"author": "Cenk Kilic",
"license": "MIT",
"type": "module",
"scripts": {
"format": "prettier --loglevel warn --write ./*.js && eslint --ext .ts,.js,.tsx,.jsx --fix ./",
"lint": "eslint --ext .ts,.js,.tsx,.jsx ./"
"format": "prettier --log-level warn --write ./*.js && eslint --fix",
"lint": "eslint",
"inspect": "eslint --inspect-config"
},
"simple-git-hooks": {
"pre-commit": "pnpm exec lint-staged",
......@@ -26,7 +28,7 @@
"peerDependencies": {
"@nuxtjs/eslint-config": ">= 7",
"@nuxtjs/eslint-config-typescript": ">= 7",
"eslint": ">= 8",
"eslint": ">= 9",
"eslint-config-react": ">= 1",
"eslint-plugin-react-hooks": ">= 4",
"eslint-plugin-svelte": ">= 2",
......@@ -53,14 +55,16 @@
}
},
"dependencies": {
"@typescript-eslint/eslint-plugin": "^7.18.0",
"@typescript-eslint/parser": "^7.18.0",
"@eslint/js": "^9.13.0",
"@stylistic/eslint-plugin": "^2.9.0",
"@typescript-eslint/eslint-plugin": "^8.10.0",
"@typescript-eslint/parser": "^8.10.0",
"eslint-plugin-import": "^2.31.0",
"load-tsconfig": "^0.2.5"
},
"devDependencies": {
"@cenk1cenk2/cz-cc": "^1.7.10",
"eslint": "^8.57.1",
"@cenk1cenk2/cz-cc": "^1.7.11",
"eslint": "^9.12.0",
"lint-staged": "^15.2.10",
"prettier": "^3.3.3",
"simple-git-hooks": "^2.11.1"
......
This diff is collapsed.
/** @type {import("eslint").Linter.Config} */
module.exports = {
extends: [ './typescript', './react' ],
overrides: [
import react from './react.js'
import typescript from './typescript.js'
/** @type {import("eslint").Linter.Config[]} */
export default [
...typescript,
...react,
{
files: ['*.tsx'],
plugins: ['react', 'react-hooks'],
......@@ -15,4 +18,3 @@ module.exports = {
}
}
]
}
/** @type {import("eslint").Linter.Config} */
module.exports = {
extends: [ './index' ],
overrides: [
import base from './base.js'
/** @type {import("eslint").Linter.Config[]} */
export default [
...base,
{
files: ['*.jsx', '*.tsx'],
plugins: ['react', 'react-hooks'],
languageOptions: {
parserOptions: {
project: null,
ecmaFeatures: {
......@@ -12,6 +14,7 @@ module.exports = {
},
ecmaVersion: 2018,
sourceType: 'module'
}
},
settings: {
react: {
......@@ -63,4 +66,3 @@ module.exports = {
}
}
]
}
module.exports = {
export default {
branches: [
'main',
'master',
......
/** @type {import("eslint").Linter.Config} */
module.exports = {
extends: [ 'plugin:svelte/recommended', './typescript-dynamic' ],
import svelte from 'eslint-plugin-svelte'
import typescript from './typescript-dynamic.js'
/** @type {import("eslint").Linter.Config[]} */
export default [
...svelte.configs['flat/recommended'],
...typescript,
{
languageOptions: {
parserOptions: {
extraFileExtensions: ['.svelte']
}
},
overrides: [
{
files: ['*.svelte'],
parser: 'svelte-eslint-parser',
parserOptions: {
......@@ -18,4 +24,3 @@ module.exports = {
}
}
]
}
/** @type {import("eslint").Linter.Config} */
module.exports = {
extends: [ './typescript' ],
overrides: [
import typescript from './typescript.js'
/** @type {import("eslint").Linter.Config[]} */
export default [
...typescript,
{
files: ['*.ts', '*.tsx'],
languageOptions: {
parserOptions: {
project: 'tsconfig.json'
}
},
rules: {
'@typescript-eslint/no-floating-promises': 'error',
......@@ -27,4 +30,3 @@ module.exports = {
}
}
]
}
/** @type {import("eslint").Linter.Config} */
module.exports = {
extends: [ './index' ],
overrides: [
import StylisticPlugin from '@stylistic/eslint-plugin'
import TypescriptEslintPlugin from '@typescript-eslint/eslint-plugin'
import base from './base.js'
/** @type {import("eslint").Linter.Config[]} */
export default [
...base,
{
files: ['*.ts', '*.tsx'],
plugins: [ '@typescript-eslint' ],
plugins: {
'stylestic': StylisticPlugin,
'@typescript-eslint': TypescriptEslintPlugin
},
extends: ['plugin:@typescript-eslint/eslint-recommended', 'plugin:@typescript-eslint/recommended'],
parserOptions: {},
rules: {
......@@ -21,7 +28,6 @@ module.exports = {
}
],
'@typescript-eslint/no-unused-vars': 'error',
'@typescript-eslint/ban-ts-ignore': 'off',
'@typescript-eslint/explicit-member-accessibility': [
'error',
{
......@@ -35,29 +41,7 @@ module.exports = {
}
}
],
'@typescript-eslint/interface-name-prefix': 'off',
'@typescript-eslint/member-delimiter-style': [
'error',
{
multiline: {
delimiter: 'none',
requireLast: true
},
singleline: {
delimiter: 'comma',
requireLast: false
}
}
],
'@typescript-eslint/no-var-requires': 'off',
'@typescript-eslint/no-unnecessary-boolean-literal-compare': 'off',
'@typescript-eslint/brace-style': [
'error',
'1tbs',
{
allowSingleLine: true
}
],
'@typescript-eslint/member-ordering': [
'warn',
{
......@@ -241,31 +225,8 @@ module.exports = {
format: ['PascalCase']
}
],
'@typescript-eslint/no-parameter-properties': 'off',
'func-call-spacing': 'off',
'@typescript-eslint/func-call-spacing': [ 'error' ],
'@typescript-eslint/prefer-for-of': 'warn',
'@typescript-eslint/prefer-function-type': 'error',
'space-before-function-paren': 'off',
'@typescript-eslint/space-before-function-paren': [ 'error' ],
'no-extra-parens': 'off',
'@typescript-eslint/no-extra-parens': [ 'error' ],
'@typescript-eslint/comma-spacing': [
'error',
{
before: false,
after: true
}
],
'@typescript-eslint/indent': [
'error',
2,
{
ignoreComments: false
}
],
'@typescript-eslint/quotes': [ 'error', 'single' ],
'@typescript-eslint/semi': [ 'error', 'never' ],
'@typescript-eslint/unified-signatures': 'error',
'@typescript-eslint/no-use-before-define': 'off',
'@typescript-eslint/array-type': ['error', { default: 'array' } ],
......@@ -273,10 +234,10 @@ module.exports = {
'@typescript-eslint/consistent-type-assertions': ['error', { assertionStyle: 'as', objectLiteralTypeAssertions: 'allow' } ],
'@typescript-eslint/consistent-type-definitions': ['error', 'interface'],
'@typescript-eslint/method-signature-style': ['error', 'property'],
'@typescript-eslint/no-empty-interface': [
'@typescript-eslint/no-empty-object-type': [
'error',
{
allowSingleExtends: true
allowInterfaces: 'with-single-extends'
}
],
'@typescript-eslint/no-extra-non-null-assertion': ['error'],
......@@ -291,46 +252,7 @@ module.exports = {
],
'@typescript-eslint/no-inferrable-types': 'error',
'@typescript-eslint/no-misused-new': 'error',
'@typescript-eslint/prefer-enum-initializers': 'error',
'keyword-spacing': 'off',
'@typescript-eslint/keyword-spacing': [ 'error' ],
'lines-between-class-members': 'off',
'@typescript-eslint/lines-between-class-members': [ 'off' ],
'padding-line-between-statements': 'off',
'@typescript-eslint/padding-line-between-statements': [
'error',
{
blankLine: 'always',
prev: '*',
next: 'return'
},
{
blankLine: 'always',
prev: [ 'const', 'let', 'var' ],
next: '*'
},
{
blankLine: 'any',
prev: [ 'const', 'let', 'var' ],
next: [ 'const', 'let', 'var' ]
},
{
blankLine: 'always',
prev: [ 'case', 'default' ],
next: '*'
},
{
blankLine: 'always',
prev: '*',
next: [ 'interface', 'type' ]
},
{
blankLine: 'always',
prev: '*',
next: [ 'function', 'if', 'try', 'break', 'class', 'for', 'while', 'do' ]
}
]
'@typescript-eslint/prefer-enum-initializers': 'error'
}
}
]
}
const { loadTsConfig } = require('load-tsconfig')
import { loadTsConfig } from 'load-tsconfig'
import ImportPlugin from 'eslint-plugin-import'
const { ALL_KNOWN_JAVASCRIPT_FILE_EXTENSIONS } = require('./constants')
import { ALL_KNOWN_JAVASCRIPT_FILE_EXTENSIONS } from './constants.js'
/**
* @param {{ paths?: string[] tsconfig?: string, tsconfigDir?: string}} options
* @param {{ paths?: string[], tsconfig?: string, tsconfigDir?: string}} options
* @returns {import("eslint").Linter.Config['rules']}
*/
function generateImportGroups (options) {
export function generateImportGroups(options) {
const defaults = ['@cenk1cenk2', '@cenk1cenk2-*']
options.paths = Array.isArray(options.paths) ? [...options.paths, ...defaults] : defaults
......@@ -71,17 +72,17 @@ function generateImportGroups (options) {
}
/**
* @param {{ paths?: string[] tsconfig?: string, tsconfigDir?: string}} options
* @returns {import("eslint").Linter.ConfigOverride}
* @param {{ paths?: string[], tsconfig?: string, tsconfigDir?: string}} options
* @returns {import("eslint").Linter.Config[]}
*/
function generateImportGroupsWithOverride (options) {
export function generateImportGroupsWithOverride(options) {
return [
{
files: ALL_KNOWN_JAVASCRIPT_FILE_EXTENSIONS,
plugins: [ 'import' ],
plugins: {
import: ImportPlugin
},
rules: generateImportGroups(options)
}
]
}
module.exports = { generateImportGroups, generateImportGroupsWithOverride }