@odg/eslint-config 0.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/index.js ADDED
@@ -0,0 +1,137 @@
1
+ module.exports = {
2
+ plugins: [
3
+ "@typescript-eslint",
4
+ "import",
5
+ "jsdoc",
6
+ "promise",
7
+ "regexp",
8
+ "filenames",
9
+ "security",
10
+ "unicorn",
11
+ "html",
12
+ "n",
13
+ "array-func",
14
+ "no-constructor-bind",
15
+ "anti-trojan-source",
16
+ "sonar",
17
+ ],
18
+ env: {
19
+ node: true,
20
+ browser: true,
21
+ },
22
+ extends: [
23
+ "./rules/javascript/best-practices.js",
24
+ "./rules/javascript/js-documentation.js",
25
+ "./rules/javascript/errors.js",
26
+ "./rules/javascript/security.js",
27
+ "./rules/javascript/performance.js",
28
+ "./rules/javascript/possible-errors.js",
29
+ ],
30
+ ignorePatterns: [
31
+ "!.*",
32
+
33
+ ".git/",
34
+ "node_modules/",
35
+ "bower_components/",
36
+ "jspm_packages/",
37
+ ".npm/",
38
+ "vendor/",
39
+
40
+ "lib-cov/",
41
+ "coverage/",
42
+ ".nyc_output/",
43
+ ".cache/",
44
+
45
+ "build/",
46
+ "dist/",
47
+ "tmp/",
48
+
49
+ "**/*.min.*",
50
+ ],
51
+ settings: {
52
+ "html/report-bad-indent": "error",
53
+ "html/indent": "+4",
54
+ "import/resolver": {
55
+ "node": {
56
+ "extensions": [ ".mjs", ".js", ".jsx", ".json", ".ts", ".tsx", ".d.ts" ],
57
+ },
58
+ },
59
+ "import/extensions": [
60
+ ".js",
61
+ ".mjs",
62
+ ".jsx",
63
+ ],
64
+ "import/core-modules": [
65
+ ],
66
+ "import/ignore": [
67
+ "node_modules",
68
+ "\\.(coffee|scss|css|less|hbs|svg|json)$",
69
+ ],
70
+ },
71
+ parserOptions: {
72
+ sourceType: "module",
73
+ ecmaVersion: 2022,
74
+ },
75
+ overrides: [
76
+ {
77
+ files: [ "*.ts", "*.tsx", "*.mts", "*.cts" ],
78
+ plugins: [
79
+ "@typescript-eslint",
80
+ "import",
81
+ "jsdoc",
82
+ "promise",
83
+ "regexp",
84
+ "filenames",
85
+ ],
86
+ extends: [
87
+ "./rules/typescript/best-practices.js",
88
+ "./rules/typescript/errors.js",
89
+ ],
90
+ parser: "@typescript-eslint/parser",
91
+ parserOptions: {
92
+ ecmaFeatures: {
93
+ jsx: true,
94
+ },
95
+ ecmaVersion: 2022,
96
+ sourceType: "module",
97
+ project: [ "tsconfig.json" ], // Specify it only for TypeScript files
98
+ },
99
+ },
100
+ {
101
+ files: [ "**.php" ],
102
+ plugins: [
103
+ "php-markup",
104
+ ],
105
+ globals: {
106
+ "lintPHPCode": true,
107
+ },
108
+ settings: {
109
+ "php/php-extensions": [ ".php" ],
110
+ "php/markup-replacement": {
111
+ "php": "0",
112
+ "=": "0",
113
+ },
114
+ "php/keep-eol": true,
115
+ "php/remove-whitespace": false,
116
+ "php/remove-empty-line": false,
117
+ "php/remove-php-lint": true,
118
+ },
119
+ },
120
+ {
121
+ files: [
122
+ "**/test/**",
123
+ "**/tests/**",
124
+ "**/spec/**",
125
+ "**/__tests__/**",
126
+ "*.test.*",
127
+ "*.spec.*",
128
+ "*.e2e.*",
129
+ "*.e2e-spec.*",
130
+ ],
131
+ extends: [
132
+ "./rules/typescript/tests.js",
133
+ ],
134
+ },
135
+ ],
136
+ rules: {},
137
+ };
package/package.json ADDED
@@ -0,0 +1,43 @@
1
+ {
2
+ "name": "@odg/eslint-config",
3
+ "version": "0.8.0",
4
+ "description": "Linter for JavaScript And Typescript project",
5
+ "main": "index.js",
6
+ "scripts": {},
7
+ "repository": {
8
+ "type": "git",
9
+ "url": "git+https://github.com/ODGodinho/ODG-Linter-Js.git"
10
+ },
11
+ "author": "Dragons Gamers <https://www.linkedin.com/in/victor-alves-odgodinho>",
12
+ "license": "MIT",
13
+ "devDependencies": {
14
+ "typescript": "*"
15
+ },
16
+ "peerDependencies": {
17
+ "eslint": "*"
18
+ },
19
+ "dependencies": {
20
+ "@babel/core": "*",
21
+ "@typescript-eslint/eslint-plugin": "*",
22
+ "@typescript-eslint/parser": "*",
23
+ "eslint": "*",
24
+ "eslint-plugin-anti-trojan-source": "*",
25
+ "eslint-plugin-array-func": "*",
26
+ "eslint-plugin-filenames": "*",
27
+ "eslint-plugin-html": "*",
28
+ "eslint-plugin-import": "*",
29
+ "eslint-plugin-jsdoc": "*",
30
+ "eslint-plugin-n": "*",
31
+ "eslint-plugin-no-constructor-bind": "*",
32
+ "eslint-plugin-php-markup": "*",
33
+ "eslint-plugin-promise": "*",
34
+ "eslint-plugin-regexp": "*",
35
+ "eslint-plugin-security": "*",
36
+ "eslint-plugin-sonar": "*",
37
+ "eslint-plugin-unicorn": "*"
38
+ },
39
+ "bugs": {
40
+ "url": "https://github.com/ODGodinho/ODG-Linter-Js/issues"
41
+ },
42
+ "homepage": "https://github.com/ODGodinho/ODG-Linter-Js#readme"
43
+ }
Binary file
@@ -0,0 +1,423 @@
1
+ module.exports = {
2
+ rules: {
3
+ "indent": [ "error", 4 ], // 4 spaces
4
+ "semi": [ "error", "always" ], // Força usar ponto-virgula ;
5
+ "quotes": [ "error", "double" ], // Aspas duplas
6
+ "lines-between-class-members": [ "error", "always" ], // Força linha em branco entre props classe e funções
7
+ "space-before-function-paren": [ "error", {
8
+ anonymous: "never",
9
+ named: "never",
10
+ } ], // Não permite espaço antes dos parenteses
11
+ "no-unused-vars": [ "error", {
12
+ "vars": "all",
13
+ "args": "after-used",
14
+ "caughtErrors": "all",
15
+ "varsIgnorePattern": "^_",
16
+ "argsIgnorePattern": "^_",
17
+ } ],
18
+ "default-param-last": [ "error" ],
19
+ "comma-spacing": [ "error" ],
20
+ "comma-dangle": [ "error", {
21
+ arrays: "always-multiline",
22
+ objects: "always-multiline",
23
+ imports: "always-multiline",
24
+ exports: "always-multiline",
25
+ functions: "always-multiline",
26
+ } ], // Virgula no final de tudo
27
+ "no-array-constructor": [ "error" ], // Não permite usar new Array()
28
+ "no-unused-expressions": [ "error", {
29
+ allowTernary: true,
30
+ allowShortCircuit: true,
31
+ enforceForJSX: true,
32
+ } ],
33
+ "no-useless-constructor": [ "error" ], // Não permite construtores desnecessários
34
+ "no-throw-literal": [ "error" ], // Não permite throw "string" ou diferente de classe
35
+ "no-invalid-this": [ "error" ], // Desliga invalid this Js
36
+ "dot-location": [ "error" ], // Object.property ponto junto com a property
37
+ "no-extra-parens": [ "error" ], // Não permite parênteses extra
38
+ "no-extra-semi": [ "error" ], // Não permite ;, duplicadas ou desnecessárias
39
+ "no-empty-function": [ "error" ], // Não permite funções vazias
40
+ "no-duplicate-imports": [ "error" ], // Bloqueia import duplicado
41
+ "import/no-duplicates": [ "error" ], // Bloqueia import duplicado
42
+ "prefer-const": [ "error" ], // Preferir constantes
43
+ "generator-star-spacing": [ "error", { before: true, after: false } ], // Espaço Funções Yield;
44
+ "no-unsafe-optional-chaining": [
45
+ "error",
46
+ { disallowArithmeticOperators: true },
47
+ ], // Protege de optional que pode gerar errors
48
+ "linebreak-style": [ "error", "unix" ], // Força usar \n apenas em vez de \r\n
49
+ "eol-last": [ "error", "always" ], // Força finalizar com \n no final
50
+ "max-len": [ "warn", {
51
+ code: 120,
52
+ ignoreUrls: true,
53
+ } ], // Caracteres máximo por linhas
54
+ "camelcase": [ "error" ], // Força camelCase
55
+ "padded-blocks": [ "error", {
56
+ classes: "always",
57
+ blocks: "never",
58
+ switches: "never",
59
+ } ], // Força não usar blocos com espaços
60
+ "no-multi-assign": [ "error" ], // Força não usar atribuição múltipla
61
+ "array-bracket-spacing": [ "error", "always" ], // Força usar espaço entre chaves
62
+ "keyword-spacing": [ "error", {
63
+ before: true,
64
+ after: true,
65
+ } ], // Requer espaço apos try {}
66
+ "space-before-blocks": [ "error" ], // Requer espaço antes das chaves
67
+ "space-unary-ops": [
68
+ 2, {
69
+ words: true, // Espaço apos Await e palavras chaves
70
+ nonwords: false, // Força nao ter espaço antes de operadores unários !, -, +
71
+ overrides: {
72
+ "new": false,
73
+ "++": false, // Nao permite espaço no ++
74
+ },
75
+ },
76
+ ],
77
+ "unicode-bom": [ "error", "never" ], // Disabled "unicode-bom"
78
+ "space-in-parens": [ "error", "never" ], // Não permite espaço entre parenteses
79
+ "no-multi-spaces": [ "error" ], // Nao permite vários espaços if( i )
80
+ "computed-property-spacing": [ "error", "never" ], // Desliga espaço ao recuperar item $a[ 'I' ] ou $a[ ] = 12;
81
+ "no-useless-concat": [ "error" ], // Desabilita concatenação de strings desnecessárias ex: "a" + "b"
82
+ "no-self-assign": [ "error" ], // Nao se atribua seu próprio valor a variável
83
+ "array-bracket-newline": [ "error", "consistent" ], // Quebra linha Array
84
+ "prefer-arrow-callback": [ "error" ], // Força arrow function
85
+ "arrow-body-style": [ "error", "as-needed" ], // Força arrow function sem body
86
+ "no-empty": [ "error" ], // Não permite blocos vazios (if, while, for, function, etc)
87
+ "no-useless-call": [ "error" ], // Não permite chamadas desnecessárias.call
88
+ "no-useless-catch": [ "error" ], // Não permite catch desnecessários
89
+ "no-useless-return": [ "error" ], // Não permite retornos desnecessários
90
+ "newline-before-return": [ "error" ], // Força retorno de função com \n antes
91
+ "multiline-comment-style": [ "error", "starred-block" ], // Força /* comentário */ ao invés de // varias vezes
92
+ "no-unreachable": [ "error" ], // Não permite unreachable code
93
+ "no-multi-str": [ "error" ], // Não quebre linha dentro de uma string
94
+ "consistent-this": [ "error", "that" ], // Não permite this em locais inconsistente.
95
+ "no-irregular-whitespace": [ "error" ], // Não permite espaços entre palavras
96
+ "dot-notation": "off",
97
+ "no-whitespace-before-property": [ "error" ], // Não permite espaço antes de property
98
+ "no-trailing-spaces": [ "error" ], // Não permite espaço apos ou antes do ponto
99
+ "no-extra-boolean-cast": [
100
+ "error",
101
+ { "enforceForLogicalOperands": true },
102
+ ], // Não permite cast de boolean extra !!!
103
+ "no-constant-condition": [ "error" ], // Não permite condições constantes if (true)
104
+ "no-debugger": [ "error" ], // Não permite usar debugger
105
+ "no-duplicate-case": [ "error" ], // Não permite duplicar case em switch
106
+ "no-empty-character-class": [ "error" ], // Não permite classe de caracteres vazia em regex
107
+ "no-ex-assign": [ "error" ], // Não permite atribuição de exceção
108
+ "no-func-assign": [ "error" ], // Não permite atribuição de função
109
+ "no-inner-declarations": [ "error" ], // Não permite declarações dentro de escopos
110
+ "no-invalid-regexp": [ "error" ], // Não permite expressões regulares inválidas RegExp()
111
+ "no-negated-in-lhs": [ "error" ], // Não permite negação em IN
112
+ "no-regex-spaces": [ "error" ], // Não permite múltiplos espaços em regex utilize
113
+ "no-sparse-arrays": [ "error" ], // Não permite arrays com itens vagos no meio
114
+ "valid-typeof": [ "error" ], // Não permite typeof inválido
115
+ "eqeqeq": [ "error", "always" ], // Usa igual e do mesmo tipo
116
+ "no-extra-label": [ "error" ], // Não permite usar labels extra desnecessárias
117
+ "no-labels": [ "error" ], // Disable Label/GOTO
118
+ "no-floating-decimal": [ "error" ], // Não permite decimais flutuantes sem zero a esquerda.
119
+ "no-native-reassign": [ "error" ], // Não permite reatribuição de funções/vars nativas
120
+ "no-new": [ "error" ], // Não permite usar new sem salva-lo
121
+ "no-new-func": [ "error" ], // Não permite usar new Function()
122
+ "no-redeclare": [ "error" ], // Não permite redeclarar variáveis
123
+ "no-self-compare": [ "error" ], // Não permite comparar com seu próprio valor
124
+ "no-unmodified-loop-condition": [ "error" ], // Loop sem modificar o valor do contador ou check único
125
+ "no-useless-escape": [ "error" ], // Não permite usar escape desnecessárias
126
+ "yoda": [ "error" ], // Força if Variável === "COMPARATION"
127
+ "no-undef-init": [ "error" ], // Não permite variáveis definidas como undefined ao inicializar
128
+ "no-new-require": [ "error" ], // Não permite usar new require()
129
+ "no-new-object": [ "error" ], // Não permite usar new Object
130
+ "prefer-template": [ "error" ], // Prefer template literals over string concatenation
131
+ "no-multiple-empty-lines": [ "error", { "max": 1 } ], // Não permita varias linhas em branco
132
+ "no-async-promise-executor": [ "error" ], // Não permita use função async para executar promise
133
+ "prefer-promise-reject-errors": [ "error" ], // Passe uma Exception em promise ao invés de string/number
134
+ "semi-spacing": [ "error", { before: false, after: true } ], // Não permite espaço antes do ;
135
+ "no-var": [ "error" ], // Não user var prefira let ou const
136
+ "promise/no-new-statics": [ "error" ], // Não permite usar new em static promise
137
+ "promise/no-return-wrap": [ "error" ], // Não use promise.resolve ou reject dentro de then e catch
138
+ "promise/param-names": [ "error" ], // Use nome correto para promise
139
+ "promise/always-return": [ "error" ], // Se a promise não tiver retorno reportar erro
140
+ "promise/no-nesting": [ "warn" ], // Warn se colocar uma then ou catch dentro de outra promise
141
+ "promise/no-return-in-finally": [ "error" ], // No Return in finally
142
+ "promise/valid-params": [ "error" ], // Valida Parâmetros da promise
143
+ "import/newline-after-import": [ "error", { count: 1 } ], // Linhas em branco apos o import
144
+ "operator-linebreak": [
145
+ "error",
146
+ "before",
147
+ { overrides: { "+=": "none", "=": "none" } },
148
+ ], // Sem quebra de linha em operadores
149
+ "array-callback-return": [ "error" ], // Força returno em array callback
150
+ "space-infix-ops": [ "error" ], // Espaço em operadores
151
+ "curly": [ "off" ], // Utilize chaves em multi linhas
152
+ "no-useless-rename": [ "error" ], // Disable Rename desnecessários
153
+ "handle-callback-err": [ "error" ], // Funções que recebem error deve ser tratado
154
+ "n/handle-callback-err": [
155
+ "error",
156
+ "^(err|error|\\w+Error|\\w+Exception|exception)$",
157
+ ], // Funções que recebem error deve ser tratado
158
+ "new-cap": [ "error", { newIsCap: true } ], // New require first Letter uppercase
159
+ "no-caller": [ "error" ], // Não permite usar callee
160
+ "no-script-url": [ "error" ], // Não permite usar script url
161
+ "no-undef": [ "error", { "typeof": true } ], // Não chame variáveis não definidas
162
+ "func-names": [ "error", "as-needed" ], // Nome de funções somente quando necessário
163
+ "no-param-reassign": [ "error" ], // Não permite reatribuição de parâmetros
164
+ "quote-props": [ "error", "consistent" ], // Aspas no objeto somente se algum for necessário
165
+ "block-scoped-var": [ "error" ], // INFO: Bloqueia Vars for escopo, mas ainda sim prefira Lets
166
+ "brace-style": [ "error" ], // Força formatação {}
167
+ "comma-style": [ "error", "last" ], // Separa variável por virgula alinhando a direita
168
+ "key-spacing": [ "error" ], // Espaçamento propriedade objects
169
+ "object-property-newline": [ "error", {
170
+ allowAllPropertiesOnSameLine: true,
171
+ } ], // Quebre todos objetos ou nenhum
172
+ "regexp/confusing-quantifier": [ "error" ], // No Especifique quantidade em opcional
173
+ "regexp/control-character-escape": [ "error" ], // Use \r ao invés de \u0009
174
+ "regexp/negation": [ "error" ], // This rule enforces use of \D, \W, \S and \P on negation.
175
+ "regexp/no-dupe-characters-character-class": [ "error" ], // Rvita condições duplicada em []
176
+ "regexp/no-invisible-character": [ "error" ], // Evita colocar tab espaço em regex
177
+ "regexp/no-legacy-features": [ "error", {
178
+ staticProperties: [
179
+ "input", "$_",
180
+ "lastMatch", "$&",
181
+ "lastParen", "$+",
182
+ "leftContext", "$`",
183
+ "rightContext", "$'",
184
+ "$1", "$2", "$3", "$4", "$5", "$6", "$7", "$8", "$9",
185
+ ],
186
+ prototypeMethods: [ "compile" ],
187
+ } ],
188
+ "regexp/no-non-standard-flag": [ "error" ], // Bloqueia flags não padronizada
189
+ "regexp/no-obscure-range": [ "error" ], // Range regex /[A-\x43]/;
190
+ "regexp/no-trivially-nested-quantifier": [ "error" ], // Bloqueia flags não padronizada
191
+ "regexp/no-unused-capturing-group": [ "error" ], // Não crie grupos que não está sendo usado.
192
+ "regexp/no-useless-character-class": [ "error" ], // Não crie blocos desnecessários
193
+ "regexp/no-useless-flag": [ "error" ], // Não Use Flag desnecessários
194
+ "regexp/no-useless-lazy": [ "error" ],
195
+ "regexp/no-useless-quantifier": [ "error" ], // Não permite Quantifiers sem efeitos
196
+ "regexp/no-useless-range": [ "error" ], // Não permite Range desnecessários
197
+ "regexp/no-useless-two-nums-quantifier": [ "error" ], // Não permite Range Iguais
198
+ "regexp/no-zero-quantifier": [ "error" ], // Não permite Quantidade {0}
199
+ "regexp/optimal-lookaround-quantifier": [ "error" ],
200
+ "regexp/optimal-quantifier-concatenation": [ "error" ],
201
+ "regexp/prefer-quantifier": [ "error" ], // Use {4} ao invés de replicar
202
+ "regexp/prefer-range": [ "error" ], // Prefira [0-9] ao invés [1234567890]
203
+ "regexp/sort-alternatives": [ "error" ], // Coloque [a|b|c] ordem alfabética
204
+ "regexp/hexadecimal-escape": [ "error" ], // \x0a ao invés \u000a
205
+ "regexp/match-any": [ "error" ], // Não da match com qualquer coisa
206
+ "regexp/no-useless-escape": [ "error" ], // Não coloca \ contra em local sem efeito
207
+ "regexp/no-useless-non-capturing-group": [ "error" ], // Grupo não necessário
208
+ "regexp/prefer-character-class": [ "error" ], // Prefira [] ao invés de |
209
+ "regexp/prefer-d": [ "error" ], // Prefira \d
210
+ "regexp/prefer-plus-quantifier": [ "error" ], // Prefira + ao invés de {1, }
211
+ "regexp/prefer-question-quantifier": [ "error" ], // Prefira ? ao invés de {0,1}
212
+ "regexp/prefer-star-quantifier": [ "error" ], // Prefira * ao invés de {0,}
213
+ "regexp/prefer-unicode-codepoint-escapes": [ "error" ], // Use Unicode
214
+ "regexp/prefer-w": [ "error" ], // Use \w
215
+ "regexp/sort-character-class-elements": [ "error" ], // Coloque [] em ordem Alfabética
216
+ "regexp/sort-flags": [ "error" ], // Flag em ordem alfabética
217
+ "regexp/prefer-named-capture-group": [ "error" ], // Prefira group com nomes
218
+ "max-statements-per-line": [ "error", { "max": 1 } ], // Máximo operação em 1 linha
219
+ "arrow-parens": [ "error", "always" ], // Arrow Function sempre com parentese
220
+ "padding-line-between-statements": [
221
+ "error",
222
+ { "blankLine": "always", "prev": "*", "next": "export" }, // Uma linha em branco antes do export
223
+ { "blankLine": "always", "prev": "export", "next": "*" }, // Uma linha em branco apos do export
224
+ { "blankLine": "always", "prev": "*", "next": "class" }, // Uma linha em branco antes da classe
225
+ { "blankLine": "always", "prev": "class", "next": "*" }, // Uma linha em branco Apos da classe
226
+ ],
227
+ "filenames/match-regex": [
228
+ "error",
229
+ "^[a-zA-Z][a-zA-Z0-9_-]+((\\.[a-z]+)?)+$",
230
+ ], // Nome de arquivo deve ser alfanumérico
231
+ "filenames/match-exported": [ "error", "^[a-zA-Z0-9_-]+$" ], // Nome do arquivo igual export default
232
+ "unicorn/catch-error-name": [
233
+ "error",
234
+ {
235
+ "name": "exception",
236
+ "ignore": [
237
+ "^error\\w*$",
238
+ "^error$",
239
+ "^exception\\w*$",
240
+ ],
241
+ },
242
+ ], // Chame todos os catch erros de exception
243
+ "unicorn/consistent-destructuring": [ "error" ], // Usa destructuring ou usa acesso direto sem alternar
244
+ "unicorn/consistent-function-scoping": [ "error" ], // Remova sub função quando possível
245
+ "unicorn/error-message": [ "error" ], // Exception tem q ter mensagem
246
+ "unicorn/escape-case": [ "error" ], // Ao escapar use letra maiúscula hexadecimal
247
+ "unicorn/new-for-builtins": [ "error" ], // Use new sempre em Promise, Array, Error, RegExp
248
+ "unicorn/no-abusive-eslint-disable": [ "error" ], // Não desabilite todas as regras ESLInt
249
+ "unicorn/no-array-for-each": [ "error" ], // Prefira forOf ao invés Foreach
250
+ "unicorn/no-array-method-this-argument": [ "error" ], // Evita this array que pode falhar
251
+ "unicorn/no-array-push-push": [ "error" ], // Faça apenas 1 push ao invés de vários
252
+ "unicorn/no-await-expression-member": [ "error" ], // Não use (await getObject()).property;
253
+ "unicorn/no-empty-file": [ "error" ], // Não crie arquivo vazio
254
+ "unicorn/no-for-loop": [ "error" ], // Use ForOf em vez de for
255
+ "unicorn/no-invalid-remove-event-listener": [ "error" ], // Não use removeEventListener Invalid
256
+ "no-lonely-if": [ "error" ], // Não faz if cadeia desnecessário
257
+ "unicorn/no-lonely-if": [ "error" ], // Não faz if cadeia desnecessário
258
+ "unicorn/no-new-buffer": [ "error" ], // Não faz if cadeia desnecessário
259
+ "unicorn/no-this-assignment": [ "error" ], // Desabilita invalido this
260
+ "unicorn/no-useless-fallback-in-spread": [ "error" ], // Desabilita não usado opcional literals ...
261
+ "unicorn/no-useless-length-check": [ "error" ], // Desabilita não usado opcional literals ...
262
+ "unicorn/no-useless-spread": [ "error" ], // Desabilita ... em array desnecessário
263
+ "unicorn/no-useless-switch-case": [ "error" ], // Desabilita Case não usado
264
+ "unicorn/no-useless-undefined": [ "error" ], // Desabilita undefined desnecessário
265
+ "unicorn/number-literal-case": [ "error" ],
266
+ "unicorn/prefer-add-event-listener": [ "error" ], // Prefira AddEventListener em vez de onclick props
267
+ "unicorn/prefer-array-find": [ "error" ], // Prefira array Find quando possível
268
+ "unicorn/prefer-array-index-of": [ "error" ], // Prefira usar IndexOf
269
+ "unicorn/prefer-array-some": [ "error" ], // Prefira usar Array some invés de length
270
+ "unicorn/prefer-dom-node-append": [ "error" ], // Prefira append no DOM
271
+ "unicorn/prefer-dom-node-remove": [ "error" ], // Prefira remove invés removeChild
272
+ "unicorn/prefer-includes": [ "error" ], // Prefira usar include ao invés IndexOf
273
+ "unicorn/prefer-keyboard-event-key": [ "error" ], // Prefira use Key invés de KeyCode
274
+ "unicorn/prefer-optional-catch-binding": [ "error" ], // Omita o parâmetro .catch se não usado
275
+ "unicorn/prefer-prototype-methods": [ "error" ], // Omita o parâmetro .catch se não usado
276
+ "unicorn/prefer-query-selector": [ "error" ], // Prefira QuerySelector
277
+ "unicorn/prefer-regexp-test": [ "error" ], // Prefira Regex test invés match
278
+ "unicorn/prefer-spread": [ "error" ], // Prefira destructuring
279
+ "unicorn/prefer-string-replace-all": [ "error" ], // Prefira replace ao invés de regex
280
+ "unicorn/prefer-string-starts-ends-with": [ "error" ], // Prefira startWith ao invés de regex
281
+ "unicorn/prefer-string-trim-start-end": [ "error" ], // Prefira trim Start/End invés de Left/Right
282
+ "unicorn/prefer-switch": [ "error" ], // Prefira switch
283
+ "unicorn/prefer-ternary": [ "error" ], // Prefira ternário em vez de if else
284
+ "unicorn/prevent-abbreviations": [ "error" ], // Prefira ternário em vez de if else
285
+ "unicorn/relative-url-style": [ "error" ], // Não coloque ./ em new URL
286
+ "unicorn/require-array-join-separator": [ "error" ], // Sempre passe parâmetro Array#join
287
+ "unicorn/require-number-to-fixed-digits-argument": [ "error" ], // Passe quantidade em ToFixed
288
+ "unicorn/template-indent": [ "error" ], // Indenter em template string
289
+ "no-shadow": [ "error" ], // Erro caso ja esteja declarado escopo a cima
290
+ "no-delete-var": [ "error" ], // Não delete variáveis
291
+ "no-lone-blocks": [ "error" ], // Não crie bloco desnecessários
292
+ "no-proto": [ "error" ], // Não use __proto__ depreciada desde ECMA 3.1
293
+ "id-length": [ "error", { "min": 3 } ], // Tamanho mínimo das variáveis
294
+ "max-depth": [ "error", { "max": 3 } ], // Tamanho máximo do Hadouken
295
+ "max-params": [ "error", { "max": 3 } ], // Máximo de parâmetros
296
+ "max-statements": [ "error" ], // Máximo atribuição em função
297
+ "operator-assignment": [ "error", "always" ], // Prefira atribuição curtas +=
298
+ "prefer-rest-params": [ "error" ], // Prefira ..args em vez de arguments
299
+ "no-useless-computed-key": [ "error" ], // Chave de objeto computada de forma desnecessária
300
+ "symbol-description": [ "error" ], // Symbol deve ter descrição
301
+ "no-return-await": [ "error" ], // Não coloque await no return
302
+ "max-classes-per-file": [ "error", 1 ], // Apenas 1 classe por arquivo
303
+ "no-constructor-return": [ "error" ], // Construtor não deve ter um retorno
304
+ "prefer-exponentiation-operator": [ "error" ], // Prefira ** em vez de Math.pow
305
+ "prefer-object-spread": [ "error" ], // Prefira Desestruturar para concatenar objetos
306
+ "default-case-last": [ "error" ], // Default switch case por ultimo
307
+ "no-new-symbol": [ "error" ], // Use apenas Symbol()
308
+ "accessor-pairs": [ "error" ], // Crie o get e set
309
+ "no-promise-executor-return": [ "error" ], // Não coloque um retorno em new Promise()
310
+ "no-nonoctal-decimal-escape": [ "error" ], // Não coloque scape em numero decimais
311
+ "prefer-destructuring": [ "error" ], // Prefira desestruturar array ao invés
312
+ "no-magic-numbers": [
313
+ "warn",
314
+ { "ignore": [ 0, 1, -1 ], "enforceConst": true, "ignoreDefaultValues": true },
315
+ ], // Não permite numero mágicos
316
+ "complexity": [ "error", { "max": 10 } ], // Complexidade código
317
+ "func-style": [ "error", "declaration" ], // Declare function name() em vez de var = function()
318
+ "no-else-return": [ "error" ], // Não use else se tem retorno
319
+ "use-isnan": [
320
+ "error",
321
+ { "enforceForSwitchCase": true, "enforceForIndexOf": true },
322
+ ], // Use a função isNan
323
+ "prefer-regex-literals": [ "error", { "disallowRedundantWrapping": true } ], // Use a função isNan
324
+ "import/no-absolute-path": [ "error" ], // Não informa caminho absoluto
325
+ "import/no-webpack-loader-syntax": [ "error" ], // Bloqueia syntax webpack import
326
+ "import/no-named-as-default": [ "error" ],
327
+ "import/no-named-as-default-member": [ "error" ],
328
+ "import/no-mutable-exports": [ "error" ], // Não export var nem let
329
+ "import/no-amd": [ "error" ], // Não require, define array
330
+ "import/max-dependencies": [ "error", {
331
+ "max": 25,
332
+ "ignoreTypeImports": false,
333
+ } ], // Máximo de 25 dependências
334
+ "import/no-import-module-exports": [ "error" ], // Import e export CommanJs bloqueado
335
+ "import/no-useless-path-segments": [ "error", { "commonjs": true } ], // Não volte pasta desnecessária import
336
+ "import/no-extraneous-dependencies": [
337
+ "error",
338
+ {
339
+ "devDependencies": [
340
+ "**/*.e2e-spec.*",
341
+ "**/*.e2e.*",
342
+ "**/*.spec.*",
343
+ "**/*.test.*",
344
+ "**/.eslintrc.{js,cjs,ts}",
345
+ "**/Gruntfile{,.js,.ts}",
346
+ "**/__mocks__/**",
347
+ "**/__tests__/**",
348
+ "**/cypress.config.{js,ts}",
349
+ "**/gulpfile.*.{js,ts}",
350
+ "**/gulpfile.{js,ts}",
351
+ "**/jest.config.{js,ts}",
352
+ "**/jest.setup.{js,ts}",
353
+ "**/karma.conf.{js,ts}",
354
+ "**/nuxt.config.{js,ts}",
355
+ "**/protractor.conf.*.{js,ts}",
356
+ "**/protractor.conf.{js,ts}",
357
+ "**/rollup.config.*.{js,ts}",
358
+ "**/rollup.config.{js,ts}",
359
+ "**/setupTests.{js,ts}",
360
+ "**/spec/**",
361
+ "**/test/**",
362
+ "**/tests/**",
363
+ "**/vite.config.{js,ts}",
364
+ "**/vue.config.{js,ts}",
365
+ "**/webpack.config.*.{js,ts}",
366
+ "**/webpack.config.{js,ts}",
367
+ ],
368
+ "optionalDependencies": true,
369
+ "peerDependencies": false,
370
+ "bundledDependencies": false,
371
+ },
372
+ ], // Não dependa de pacotes em devDependencies
373
+ "import/order": [
374
+ "error",
375
+ {
376
+ "groups": [
377
+ "builtin",
378
+ "external",
379
+ "internal",
380
+ "unknown",
381
+ "parent",
382
+ "sibling",
383
+ "index",
384
+ ],
385
+ "newlines-between": "always",
386
+ },
387
+ ], // Força essa ordem no import
388
+ "import/no-anonymous-default-export": [
389
+ "error",
390
+ { "allowCallExpression": false },
391
+ ],
392
+ "unicorn/no-console-spaces": [ "error" ], // Separe por virgula em vez de colocar espaço no console
393
+ "unicorn/no-hex-escape": [ "error" ], // Use \u001B em vez de \x1B
394
+ "unicorn/prefer-array-flat-map": [ "error" ], // Prefira FlatMap in vez de map().flat().
395
+ "unicorn/prefer-array-flat": [ "error" ], // Prefira usar array Flat
396
+ "array-func/prefer-flat": [ "error" ], // Não passe parâmetro desnecessário
397
+ "unicorn/prefer-string-slice": [ "error" ], // Use slice em vez de substr ou substring
398
+ "unicorn/prefer-negative-index": [ "error" ], // Use slice em vez de substr ou substring
399
+ "unicorn/prefer-modern-dom-apis": [ "error" ], // Prefira usar o DOM moderno
400
+ "unicorn/prefer-number-properties": [ "error" ], // Prefira Number.numberVar() in vez de numberVar()
401
+ "unicorn/numeric-separators-style": [ "error" ], // Separe Numero com Underline
402
+ "unicorn/prefer-default-parameters": [ "error" ], // Prefira parâmetros padrões
403
+ "unicorn/prefer-node-protocol": [ "error" ], // Prefira node: antes do import
404
+ "unicorn/prefer-code-point": [ "error" ], // Prefira codePointAt no lugar de charCodeAt
405
+ "unicorn/no-thenable": [ "error" ], // Não crie os nome com o nome Then
406
+ "unicorn/no-unreadable-iife": [ "error" ], // Ternários não legíveis com funções
407
+ "unicorn/prefer-native-coercion-functions": [ "error" ], // Prefira função cast nativa
408
+ "unicorn/prefer-logical-operator-over-ternary": [ "error" ], // Mude "a ? a : b" para "a || b"
409
+ "unicorn/prefer-event-target": [ "error" ], // Use EventTarget no Lugar de EventEmitter
410
+ "unicorn/prefer-export-from": [ "error", { "ignoreUsedVariables": true } ], // Prefira Export From
411
+ "array-func/from-map": [ "error" ], // Use .map invés do segundo parâmetro do From
412
+ "array-func/no-unnecessary-this-arg": [ "error" ], // Não passe parâmetro desnecessário
413
+ "array-func/avoid-reverse": [ "error" ], // Não passe parâmetro desnecessário
414
+ "sonar/array-callback-without-return": [ "error" ], // Não use new Array
415
+ "sonar/bool-param-default": [ "error" ], // Param do tipo boolean deve ter um valor padrão e não optional
416
+ "sonar/call-argument-line": [ "error" ], // Chamada função anonima auto executável deve ter ;
417
+ "sonar/class-name": [ "error", { format: "^[A-Z][a-zA-Z0-9]*$" } ], // Convenção nome Classe
418
+ "sonar/class-prototype": [ "error" ], // No Prototype in class
419
+ "sonar/comma-or-logical-or-case": [ "error" ], // Switch Case logica invalida
420
+ "sonar/conditional-indentation": [ "error" ], // Formatação IF
421
+ "sonar/deprecation": [ "warn" ], // Alerta em funções depreciadas
422
+ },
423
+ };