@@ -5,7 +5,7 @@ import eslintPluginPrettierRecommended from "eslint-plugin-prettier/recommended"
55
66export default defineConfig ( [
77 {
8- files : [ "**/*.{js,mjs,cjs}" ] ,
8+ files : [ "./src/ **/*.{js,mjs,cjs}" ] ,
99 languageOptions : {
1010 ecmaVersion : "latest" ,
1111 sourceType : "module" ,
@@ -16,11 +16,101 @@ export default defineConfig([
1616 } ,
1717 plugins : { js } ,
1818 extends : [ "js/recommended" ] ,
19- ignores : [ "**/*.spec.js" ] ,
20- } ,
21- {
22- files : [ "**/*.{js,mjs,cjs}" ] ,
23- languageOptions : { globals : globals . browser } ,
19+ rules : {
20+ // ===== Code style =====
21+ indent : [ "error" , 2 ] ,
22+ quotes : [ "error" , "single" ] ,
23+ semi : [ "error" , "always" ] ,
24+ "comma-dangle" : [ "error" , "never" ] ,
25+ "comma-spacing" : [ "error" , { before : false , after : true } ] ,
26+ "space-before-function-paren" : [ "error" , "always" ] ,
27+ "space-in-parens" : [ "error" , "never" ] ,
28+ "space-infix-ops" : "error" ,
29+ "object-curly-spacing" : [ "error" , "always" ] ,
30+ "array-bracket-spacing" : [ "error" , "never" ] ,
31+ "arrow-spacing" : [ "error" , { before : true , after : true } ] ,
32+ "block-spacing" : "error" ,
33+ "brace-style" : [ "error" , "1tbs" , { allowSingleLine : false } ] ,
34+ "max-len" : [
35+ "error" ,
36+ { code : 100 , ignoreComments : false , ignoreStrings : false } ,
37+ ] ,
38+
39+ // ===== Best practices =====
40+ "no-var" : "error" ,
41+ "prefer-const" : "error" ,
42+ eqeqeq : [ "error" , "always" ] ,
43+ curly : [ "error" , "all" ] ,
44+ "no-console" : [ "error" ] ,
45+ "no-debugger" : "error" ,
46+ "no-alert" : "error" ,
47+ "no-eval" : "error" ,
48+ "no-duplicate-imports" : "error" ,
49+ "no-unused-vars" : [
50+ "error" ,
51+ { args : "after-used" , ignoreRestSiblings : false } ,
52+ ] ,
53+ "no-implicit-globals" : "error" ,
54+ "no-magic-numbers" : [
55+ "warn" ,
56+ { ignore : [ 0 , 1 , - 1 ] , ignoreArrayIndexes : true , enforceConst : true } ,
57+ ] ,
58+ "no-empty-function" : "error" ,
59+ "no-fallthrough" : "error" ,
60+ "no-invalid-this" : "error" ,
61+ "no-return-assign" : "error" ,
62+ "no-self-assign" : "error" ,
63+ "no-self-compare" : "error" ,
64+ "no-shadow" : "error" ,
65+ "no-useless-catch" : "error" ,
66+ "no-useless-return" : "error" ,
67+
68+ // ===== Modern JS =====
69+ "prefer-arrow-callback" : "error" ,
70+ "prefer-template" : "error" ,
71+ "prefer-exponentiation-operator" : "error" ,
72+ "prefer-destructuring" : [ "error" , { object : true , array : false } ] ,
73+ "object-shorthand" : [ "error" , "always" ] ,
74+ "arrow-body-style" : [ "error" , "as-needed" ] ,
75+ "no-useless-constructor" : "error" ,
76+
77+ // ===== Readability & organization =====
78+ "newline-per-chained-call" : [ "error" , { ignoreChainWithDepth : 1 } ] ,
79+ "padding-line-between-statements" : [
80+ "error" ,
81+ { blankLine : "always" , prev : "*" , next : "return" } ,
82+ { blankLine : "always" , prev : [ "const" , "let" , "var" ] , next : "*" } ,
83+ { blankLine : "always" , prev : "*" , next : "if" } ,
84+ { blankLine : "always" , prev : "*" , next : "for" } ,
85+ { blankLine : "always" , prev : "*" , next : "while" } ,
86+ { blankLine : "always" , prev : "*" , next : "try" } ,
87+ ] ,
88+ "lines-between-class-members" : [
89+ "error" ,
90+ "always" ,
91+ { exceptAfterSingleLine : true } ,
92+ ] ,
93+ "max-classes-per-file" : [ "error" , 1 ] ,
94+ "consistent-return" : "error" ,
95+ "dot-notation" : "error" ,
96+ "id-length" : [ "warn" , { min : 2 , exceptions : [ "i" , "j" ] } ] ,
97+ "sort-imports" : [
98+ "error" ,
99+ {
100+ ignoreCase : false ,
101+ ignoreDeclarationSort : false ,
102+ memberSyntaxSortOrder : [ "none" , "all" , "multiple" , "single" ] ,
103+ } ,
104+ ] ,
105+ "newline-before-return" : "error" ,
106+
107+ // ===== Security & safety =====
108+ "no-prototype-builtins" : "error" ,
109+ "no-new-object" : "error" ,
110+ "no-new-func" : "error" ,
111+ "no-with" : "error" ,
112+ } ,
113+ ignores : [ "**/*.spec.js" , "**/*.test.js" ] ,
24114 } ,
25115 eslintPluginPrettierRecommended ,
26116] ) ;
0 commit comments