@odg/eslint-config 2.0.3 → 3.0.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.
@@ -0,0 +1,409 @@
1
+ const indentSize = 4;
2
+ const complexity = 15;
3
+ const alwaysMultiline = "always-multiline";
4
+
5
+ export default {
6
+ rules: {
7
+ "capitalized-comments": [
8
+ "error",
9
+ "always",
10
+ {
11
+ ignorePattern: String.raw`\s*region.*|\s*endregion.*|\s*var.*|\s*let.*|\s*const.*`,
12
+ },
13
+ ], // Comentários devem ser iniciados em letras maiúsculas
14
+ "unicode-bom": [ "error", "never" ], // Disabled "unicode-bom"
15
+ "no-self-assign": [ "error" ], // Nao se atribua seu próprio valor a variável
16
+ "no-irregular-whitespace": [ "error" ], // Não permite espaços entre palavras
17
+ "no-undef": [ "error", { typeof: true } ], // Não chame variáveis não definidas
18
+ "regexp/negation": [ "error" ], // This rule enforces use of \D, \W, \S and \P on negation.
19
+ "regexp/prefer-set-operation": [ "error" ],
20
+ "regexp/no-useless-set-operand": [ "error" ],
21
+ "regexp/simplify-set-operations": [ "error" ], // Força simplifica a regex
22
+ "regexp/no-empty-string-literal": [ "error" ], // Não faça blocos vazios de literal
23
+ "regexp/no-useless-string-literal": [ "error" ], // Literal não usada
24
+ "regexp/confusing-quantifier": [ "error" ], // No Especifique quantidade em opcional
25
+ "regexp/control-character-escape": [ "error" ], // Use \r ao invés de \u0009
26
+ "no-control-regex": [ "error" ], // Os caracteres de controle
27
+ "regexp/no-dupe-characters-character-class": [ "error" ], // Rvita condições duplicada em []
28
+ "regexp/no-invisible-character": [ "error" ], // Evita colocar tab espaço em regex
29
+ "regexp/no-legacy-features": [
30
+ "error",
31
+ {
32
+ staticProperties: [
33
+ "input",
34
+ "$_",
35
+ "lastMatch",
36
+ "$&",
37
+ "lastParen",
38
+ "$+",
39
+ "leftContext",
40
+ "$`",
41
+ "rightContext",
42
+ "$'",
43
+ "$1",
44
+ "$2",
45
+ "$3",
46
+ "$4",
47
+ "$5",
48
+ "$6",
49
+ "$7",
50
+ "$8",
51
+ "$9",
52
+ ],
53
+ prototypeMethods: [ "compile" ],
54
+ },
55
+ ],
56
+ "regexp/no-non-standard-flag": [ "error" ], // Bloqueia flags não padronizada
57
+ "regexp/no-obscure-range": [ "error" ], // Range regex /[A-\x43]/;
58
+ "regexp/no-trivially-nested-quantifier": [ "error" ], // Bloqueia flags não padronizada
59
+ "regexp/no-unused-capturing-group": [ "error" ], // Não crie grupos que não está sendo usado.
60
+ "regexp/no-useless-character-class": [ "error" ], // Não crie blocos desnecessários
61
+ "regexp/no-useless-flag": [ "error" ], // Não Use Flag desnecessários
62
+ "regexp/no-useless-lazy": [ "error" ],
63
+ "regexp/no-useless-quantifier": [ "error" ], // Não permite Quantifiers sem efeitos
64
+ "regexp/no-useless-range": [ "error" ], // Não permite Range desnecessários
65
+ "regexp/no-useless-two-nums-quantifier": [ "error" ], // Não permite Range Iguais
66
+ "regexp/no-zero-quantifier": [ "error" ], // Não permite Quantidade {0}
67
+ "regexp/optimal-lookaround-quantifier": [ "error" ],
68
+ "regexp/optimal-quantifier-concatenation": [ "error" ],
69
+ "regexp/prefer-quantifier": [ "error" ], // Use {4} ao invés de replicar
70
+ "regexp/prefer-range": [ "error" ], // Prefira [0-9] ao invés [1234567890]
71
+ "regexp/sort-alternatives": [ "error" ], // Coloque [a|b|c] ordem alfabética
72
+ "regexp/hexadecimal-escape": [ "error" ], // \x0a ao invés \u000a
73
+ "regexp/match-any": [ "error" ], // Não da match com qualquer coisa
74
+ "regexp/no-useless-escape": [ "error" ], // Não coloca \ contra em local sem efeito
75
+ "regexp/no-useless-non-capturing-group": [ "error" ], // Grupo não necessário
76
+ "regexp/prefer-character-class": [ "error" ], // Prefira [] ao invés de |
77
+ "regexp/prefer-d": [ "error" ], // Prefira \d
78
+ "regexp/prefer-plus-quantifier": [ "error" ], // Prefira + ao invés de {1, }
79
+ "regexp/prefer-question-quantifier": [ "error" ], // Prefira ? ao invés de {0,1}
80
+ "regexp/prefer-star-quantifier": [ "error" ], // Prefira * ao invés de {0,}
81
+ "regexp/prefer-unicode-codepoint-escapes": [ "error" ], // Use Unicode
82
+ "regexp/prefer-w": [ "error" ], // Use \w
83
+ "regexp/sort-character-class-elements": [ "error" ], // Coloque [] em ordem Alfabética
84
+ "regexp/sort-flags": [ "error" ], // Flag em ordem alfabética
85
+ "regexp/prefer-named-capture-group": [ "error" ], // Prefira group com nomes
86
+ "regexp/prefer-regexp-exec": [ "error" ], // Prefira exec em regex
87
+
88
+ "unicorn/no-empty-file": [ "error" ], // Não crie arquivo vazio
89
+ "no-magic-numbers": [
90
+ "warn",
91
+ {
92
+ ignore: [ 0, 1, -1 ],
93
+ enforceConst: true,
94
+ ignoreDefaultValues: true,
95
+ },
96
+ ], // Não permite numero mágicos
97
+ "no-negated-condition": [ "error" ], // Não negue condições
98
+ "sonarjs/no-identical-functions": [ "error" ], // Não faça funções iguais
99
+ "sonarjs/no-inverted-boolean-check": [ "error" ], // Não faça funções iguais
100
+ "sonarjs/no-nested-switch": [ "error" ], // Não faça switch dentro do outro
101
+ "sonarjs/no-nested-template-literals": [ "error" ], // Não faça string Template dentro de outra
102
+ "sonarjs/no-redundant-boolean": [ "error" ], // Não faça !false ou `boolReturnFunc() || false`
103
+ "sonarjs/prefer-immediate-return": [ "error" ], // Prefira retornar imediatamente a variável
104
+ "sonarjs/prefer-object-literal": [ "error" ], // Prefira declarar dentro do objeto inicial ao invés de injetar
105
+ "sonarjs/prefer-single-boolean-return": [ "error" ], // Retorne a boolean em vez de fazer if e else
106
+ "sonarjs/cognitive-complexity": [ "error", complexity ], // Complexidade do código
107
+ "sonarjs/no-selector-parameter": [ "error" ], // Não faça if com parâmetro boolean (resp única)
108
+ "sonarjs/no-small-switch": [ "error" ], // Switch Pequeno pode ser if-else ou 2 if
109
+ "sonarjs/no-table-as-layout": [ "error" ], // Não Coloque presentation em table html
110
+ "sonarjs/object-alt-content": [ "error" ], // Tag Object tem q ter conteúdo
111
+ "sonarjs/prefer-read-only-props": [ "error" ], // Props react Readonly
112
+ "@stylistic/array-bracket-newline": [ "error", { "multiline": true } ],
113
+ "@stylistic/array-bracket-spacing": [ "error", "always" ],
114
+ "@stylistic/array-element-newline": [
115
+ "error",
116
+ { "consistent": true, "multiline": true },
117
+ ], // Formatação linhas itens array
118
+ "@stylistic/arrow-parens": [ "error", "always" ], // Arrow Function sempre com parentese
119
+ "@stylistic/arrow-spacing": [ "error", { before: true, after: true } ], // Espaço seta arrow function
120
+ "@stylistic/block-spacing": [ "error" ], // Espaço em { return true } e apos as chaves {
121
+ "@stylistic/brace-style": [ "error" ], // Força formatação {}
122
+ "@stylistic/comma-dangle": [
123
+ "error",
124
+ {
125
+ arrays: alwaysMultiline,
126
+ objects: alwaysMultiline,
127
+ imports: alwaysMultiline,
128
+ exports: alwaysMultiline,
129
+ functions: alwaysMultiline,
130
+ importAttributes: alwaysMultiline,
131
+ dynamicImports: alwaysMultiline,
132
+ enums: alwaysMultiline,
133
+ generics: alwaysMultiline,
134
+ tuples: alwaysMultiline,
135
+ },
136
+ ], // Virgula no final de tudo
137
+ "@stylistic/comma-spacing": [
138
+ "error",
139
+ {
140
+ before: false,
141
+ after: true,
142
+ },
143
+ ], // Espaço apos a virgula
144
+ "@stylistic/comma-style": [ "error", "last" ], // Separa variável por virgula alinhando a direita
145
+ "@stylistic/computed-property-spacing": [ "error", "never" ], // Desliga espaço $a[ 'I' ] ou $a[ ] = 12;
146
+ "@stylistic/curly-newline": [ "error", "always" ], // Quebre conteúdo depois das chaves { do if/else/etc
147
+ "@stylistic/dot-location": [ "error", "property" ], // Coloque o . a esquerda da propriedade
148
+ "@stylistic/eol-last": [ "error", "always" ], // Quebre uma linha no final
149
+ "@stylistic/function-call-argument-newline": [ "error", "consistent" ], // Força formatação parâmetro func
150
+ "@stylistic/function-call-spacing": [ "error", "never" ], // Não use espaço antes dos parens função
151
+ "@stylistic/function-paren-newline": [ "error", "multiline-arguments" ], // Força formatação itens parens
152
+ "@stylistic/generator-star-spacing": [ "error", { before: true, after: false } ], // Espaço Funções Yield
153
+ "@stylistic/implicit-arrow-linebreak": [ "error", "beside" ], // Não quebre arrow function
154
+ "@stylistic/indent": [
155
+ "error",
156
+ indentSize,
157
+ {
158
+ SwitchCase: 1,
159
+ VariableDeclarator: 1,
160
+ outerIIFEBody: 1,
161
+ MemberExpression: 1,
162
+ FunctionDeclaration: { parameters: 1, body: 1 },
163
+ FunctionExpression: { parameters: 1, body: 1 },
164
+ CallExpression: { arguments: 1 },
165
+ ArrayExpression: 1,
166
+ ObjectExpression: 1,
167
+ ImportDeclaration: 1,
168
+ flatTernaryExpressions: true,
169
+ ignoreComments: false,
170
+ offsetTernaryExpressions: false,
171
+ },
172
+ ], // Ajuda indent
173
+ "@stylistic/indent-binary-ops": [ "error", indentSize ],
174
+ "@stylistic/key-spacing": [
175
+ "error",
176
+ {
177
+ beforeColon: false,
178
+ afterColon: true,
179
+ },
180
+ ], // De {a:1} para { a: 1 }
181
+ "@stylistic/keyword-spacing": [
182
+ "error",
183
+ {
184
+ before: true,
185
+ after: true,
186
+ },
187
+ ], // Requer espaço apos try {}
188
+ "@stylistic/linebreak-style": [ "error", "unix" ], // Força usar \n apenas em vez de \r\n
189
+ "@stylistic/lines-around-comment": [
190
+ "error",
191
+ {
192
+ beforeLineComment: true,
193
+ allowBlockStart: true,
194
+ allowInterfaceStart: true,
195
+ allowTypeStart: true,
196
+ },
197
+ ], // Linha em branco antes do comentário
198
+ "@stylistic/lines-between-class-members": [
199
+ "error",
200
+ "always",
201
+ { "exceptAfterOverload": true },
202
+ ], // Força linha em branco entre props classe e funções
203
+ "@stylistic/max-len": [
204
+ "warn",
205
+ {
206
+ code: 120,
207
+ ignoreUrls: true,
208
+ ignoreStrings: true,
209
+ ignoreTemplateLiterals: true,
210
+ ignoreRegExpLiterals: true,
211
+ },
212
+ ], // Caracteres máximo por linhas
213
+ "@stylistic/max-statements-per-line": [ "error", { max: 1 } ], // Máximo operação em 1 linha
214
+ "@stylistic/member-delimiter-style": [
215
+ "error",
216
+ {
217
+ multiline: {
218
+ delimiter: "semi",
219
+ requireLast: true,
220
+ },
221
+ singleline: {
222
+ delimiter: "semi",
223
+ requireLast: false,
224
+ },
225
+ },
226
+ ], // Type e interface usa ;
227
+ "@stylistic/multiline-comment-style": [
228
+ "error",
229
+ "starred-block",
230
+ ], // Força /* comentário */ ao invés de // varias vezes
231
+ "@stylistic/multiline-ternary": [
232
+ "error",
233
+ "always-multiline",
234
+ ], // Força múltiplas linhas em ternários múltiplos
235
+ "@stylistic/new-parens": [ "error" ], // New Sempre precisa ter parenteses
236
+ "@stylistic/no-extra-parens": [ "error" ], // Não permite parênteses extra
237
+ "@stylistic/no-extra-semi": [ "error" ], // Não permite ;, duplicadas ou desnecessárias
238
+ "@stylistic/no-floating-decimal": [ "error" ], // Não permite decimais flutuantes sem zero a esquerda.
239
+ "@stylistic/no-mixed-operators": [
240
+ "error",
241
+ {
242
+ "groups": [ [ "&&", "||" ] ],
243
+ "allowSamePrecedence": true,
244
+ },
245
+ ], // Não misture operator && e ||
246
+ "@stylistic/no-mixed-spaces-and-tabs": [ "error" ], // Não misture espaço e tabs
247
+ "@stylistic/no-multi-spaces": [ "error" ], // Nao permite vários espaços if( i )
248
+ "@stylistic/no-multiple-empty-lines": [
249
+ "error",
250
+ { max: 1, maxEOF: 0, maxBOF: 0 },
251
+ ], // Não permita varias linhas em branco
252
+ "@stylistic/no-tabs": [ "error" ], // Não use tabs
253
+ "@stylistic/no-trailing-spaces": [ "error" ], // Não permite espaço apos ou antes do ponto
254
+ "@stylistic/no-whitespace-before-property": [ "error" ], // Não permite espaço antes de property
255
+ "@stylistic/nonblock-statement-body-position": [ "error", "beside" ], // If sem chaves deve ser inline
256
+ "@stylistic/object-curly-newline": [
257
+ "error",
258
+ {
259
+ "ExportDeclaration": {
260
+ "consistent": true,
261
+ "minProperties": 4,
262
+ "multiline": true,
263
+ },
264
+ "ImportDeclaration": {
265
+ "consistent": true,
266
+ "minProperties": 4,
267
+ "multiline": true,
268
+ },
269
+ "ObjectExpression": {
270
+ "consistent": true,
271
+ "minProperties": 4,
272
+ "multiline": true,
273
+ },
274
+ "ObjectPattern": {
275
+ "consistent": true,
276
+ "minProperties": 4,
277
+ "multiline": true,
278
+ },
279
+ "TSTypeLiteral": {
280
+ "consistent": true,
281
+ "minProperties": 4,
282
+ "multiline": true,
283
+ },
284
+ "TSInterfaceBody": {
285
+ "consistent": true,
286
+ "minProperties": 4,
287
+ "multiline": true,
288
+ },
289
+ "TSEnumBody": {
290
+ "consistent": true,
291
+ "minProperties": 4,
292
+ "multiline": true,
293
+ },
294
+ },
295
+ ], // De {a:1} para { a: 1 }
296
+ "@stylistic/object-curly-spacing": [ "error", "always", { arraysInObjects: true } ], // Espaço declarar objeto
297
+ "@stylistic/object-property-newline": [
298
+ "error",
299
+ {
300
+ allowAllPropertiesOnSameLine: true,
301
+ },
302
+ ], // Quebre todos objetos ou nenhum
303
+ "@stylistic/one-var-declaration-per-line": [ "error", "initializations" ], // 1 var por linha
304
+ "@stylistic/operator-linebreak": [
305
+ "error",
306
+ "before",
307
+ {
308
+ overrides: {
309
+ "+=": "none",
310
+ "=": "none",
311
+ "==": "none",
312
+ "===": "none",
313
+ },
314
+ },
315
+ ], // Sem quebra de linha em operadores
316
+ "@stylistic/padded-blocks": [
317
+ "error",
318
+ {
319
+ classes: "always",
320
+ blocks: "never",
321
+ switches: "never",
322
+ },
323
+ ], // Força não usar blocos com espaços
324
+ "@stylistic/padding-line-between-statements": [
325
+ "error",
326
+ { "blankLine": "always", "prev": "*", "next": "export" }, // Uma linha em branco antes do export
327
+ { "blankLine": "always", "prev": "export", "next": "*" }, // Uma linha em branco apos o export
328
+ { "blankLine": "always", "prev": "*", "next": "class" }, // Uma linha em branco antes da classe
329
+ { "blankLine": "always", "prev": "class", "next": "*" }, // Uma linha em branco apos a classe
330
+ { "blankLine": "always", "prev": "*", "next": "interface" }, // Uma linha em branco antes da interface
331
+ { "blankLine": "always", "prev": "interface", "next": "*" }, // Uma linha em branco apos a interface
332
+ { "blankLine": "always", "prev": "*", "next": "type" }, // Uma linha em branco antes do type
333
+ { "blankLine": "always", "prev": "type", "next": "*" }, // Uma linha em branco apos o type
334
+ { "blankLine": "always", "prev": "multiline-block-like", "next": "*" },
335
+ { "blankLine": "always", "prev": "*", "next": [ "enum", "interface", "type" ] },
336
+ ],
337
+ "@stylistic/quote-props": [ "error", "consistent" ], // Objeto com aspas ou sem consistent
338
+ "@stylistic/quotes": [ "error", "double" ], // Força aspas dupla
339
+ "@stylistic/rest-spread-spacing": [ "error", "never" ], // Não faça fun(... space)
340
+ "@stylistic/semi": [ "error", "always" ], // Força usar ponto-virgula ;
341
+ "@stylistic/semi-spacing": [ "error", { before: false, after: true } ], // Não permite espaço antes do ;
342
+ "@stylistic/semi-style": [ "error", "last" ], // Local do ponto e virgula
343
+ "@stylistic/space-before-blocks": [ "error" ], // Espaço apos antes
344
+ "@stylistic/space-before-function-paren": [
345
+ "error",
346
+ {
347
+ anonymous: "never",
348
+ named: "never",
349
+ asyncArrow: "always",
350
+ catch: "always",
351
+ },
352
+ ], // Não permite espaço antes dos parenteses
353
+ "@stylistic/space-in-parens": [ "error", "never" ], // Não permite espaço entre parenteses
354
+ "@stylistic/space-infix-ops": [ "error" ], // Não permite espaço entre parenteses
355
+ "@stylistic/space-unary-ops": [
356
+ "error",
357
+ {
358
+ words: true, // Espaço apos Await e palavras chaves
359
+ nonwords: false, // Força nao ter espaço antes de operadores unários !, -, +
360
+ overrides: {
361
+ "new": false,
362
+ "++": false, // Nao permite espaço no ++
363
+ },
364
+ },
365
+ ],
366
+ "@stylistic/spaced-comment": [
367
+ "error",
368
+ "always",
369
+ {
370
+ exceptions: [ "-", "+" ],
371
+ },
372
+ ], // Força espaço apos do // comentário
373
+ "@stylistic/switch-colon-spacing": [
374
+ "error",
375
+ { "after": true, "before": false },
376
+ ], // Não coloque espaço antes do : case
377
+ "@stylistic/template-curly-spacing": [ "error" ], // Não coloque espaço em template string
378
+ "@stylistic/template-tag-spacing": [ "error", "never" ], // Sem espaço em template " sql`` "
379
+ "@stylistic/type-annotation-spacing": [ "error" ], // Não colocar junto : tipagem
380
+ "@stylistic/type-generic-spacing": [ "error" ], // Formatação tipos genéricos
381
+ "@stylistic/type-named-tuple-spacing": [ "error" ], // Sem espaço tipagem
382
+ "@stylistic/wrap-iife": [ "error", "inside" ], // Coloque parentese em função auto excetuável
383
+ "@stylistic/yield-star-spacing": [ "error", "before" ], // Espaço a esquerda yield
384
+
385
+ "@stylistic/jsx-closing-bracket-location": [ "error", "line-aligned" ], // Formata fechamento html
386
+ "@stylistic/jsx-closing-tag-location": [ "error", "line-aligned" ], // Formata fechamento html
387
+ "@stylistic/jsx-curly-brace-presence": [ "error" ], // Parâmetro JSX
388
+ "@stylistic/jsx-curly-newline": [ "error" ], // Parâmetro JSX
389
+ "@stylistic/jsx-curly-spacing": [ "error" ], // Parâmetro JSX
390
+ "@stylistic/jsx-equals-spacing": [ "error", "never" ], // Parâmetro JSX
391
+ "@stylistic/jsx-first-prop-new-line": [ "error", "multiline" ], // Formata props html
392
+ "@stylistic/jsx-function-call-newline": [ "error", "multiline" ], // Formata props html
393
+ "@stylistic/jsx-indent-props": [ "error", indentSize ], // Formata props indent
394
+ "@stylistic/jsx-max-props-per-line": [ "error", { "when": "multiline" } ], // Máximo 1 por linha se multilinha
395
+ "@stylistic/jsx-newline": [ "error", { "prevent": true, "allowMultilines": true } ],
396
+ "@stylistic/jsx-one-expression-per-line": [ "error", { "allow": "single-child" } ],
397
+ "@stylistic/jsx-pascal-case": [ "error", { "allowNamespace": true } ],
398
+ "@stylistic/jsx-quotes": [ "error", "prefer-double" ],
399
+ "@stylistic/jsx-self-closing-comp": [
400
+ "error",
401
+ {
402
+ "component": true,
403
+ "html": true,
404
+ },
405
+ ],
406
+ "@stylistic/jsx-tag-spacing": [ "error", { "afterOpening": "never", "beforeSelfClosing": "always" } ],
407
+ "@stylistic/jsx-wrap-multilines": [ "error" ],
408
+ },
409
+ };
@@ -1,4 +1,4 @@
1
- module.exports = {
1
+ export default {
2
2
  rules: {
3
3
  "regexp/no-contradiction-with-assertion": [ "error" ], // Não coloque opcional em uma das condições
4
4
  "regexp/no-dupe-disjunctions": [ "error" ], // Não permite condições duplicadas em regex
@@ -18,7 +18,9 @@ module.exports = {
18
18
  "regexp/no-useless-backreference": [ "error" ],
19
19
  "regexp/no-useless-dollar-replacements": [ "error" ],
20
20
  "regexp/strict": [ "error" ], // Regex strict
21
- "unicorn/no-instanceof-array": [ "error" ], // Não use instanceof Array
21
+ "unicorn/no-instanceof-builtins": [ "error" ], // Não use instanceof Array,Function,String etc
22
+ "unicorn/no-accessor-recursion": [ "error" ], // Não use recursão em getters e setters
23
+ "unicorn/require-module-attributes": [ "error" ], // Não use with {} import sem atributos
22
24
  "constructor-super": [ "error" ], // Bloqueia Super construtor quando invalido
23
25
  "getter-return": [ "error" ], // Getter tem q ter return
24
26
  "no-class-assign": [ "error" ], // Não atribua variável com nome classe
@@ -32,6 +34,7 @@ module.exports = {
32
34
  "no-import-assign": [ "error" ], // Não reatribua variável de import
33
35
  "no-loss-of-precision": [ "error" ], // Não permite numero que pode quebrar precisão
34
36
  "no-unreachable-loop": [ "error" ], // Não permite unreachable loop,
37
+ "no-useless-assignment": [ "error" ], // Não reatribua uma variável se n for usada em sequencia,
35
38
  "import/no-self-import": [ "error" ], // Não import o próprio arquivo
36
39
  "import/export": [ "error" ], // Não permite export de mesmo nome
37
40
  "import/no-unresolved": [
@@ -41,10 +44,7 @@ module.exports = {
41
44
  "caseSensitiveStrict": true,
42
45
  },
43
46
  ], // Import não encontrado
44
- "import/named": [ "error", { "commonjs": true } ], // Import apenas objetos existente no modulo
45
- "sonar/argument-type": [ "error" ], // Caso a tipagem no arquivo Js não bate
46
- "sonar/anchor-precedence": [ "error" ], // Valida melhora de regex
47
- "sonar/different-types-comparison": [ "error" ], // Não compare tipos diferentes
47
+ // "import/named": [ "error", { "commonjs": true } ], // Import apenas objetos existente no modulo // ? slower
48
48
  "no-invalid-this": [ "error" ], // Desliga invalid this Js
49
49
  "no-this-before-super": [ "error" ], // Não faça this antes super
50
50
  "no-obj-calls": [ "error" ], // Não execute objetos
@@ -56,24 +56,33 @@ module.exports = {
56
56
  "no-useless-return": [ "error" ], // Não permite retornos desnecessários
57
57
  "no-useless-escape": [ "error" ], // Não permite usar escape desnecessárias
58
58
  "no-useless-rename": [ "error" ], // Disable Rename desnecessários
59
- "no-unused-expressions": [ "error", {
60
- allowTernary: true,
61
- allowShortCircuit: true,
62
- enforceForJSX: true,
63
- } ],
59
+ "no-unused-expressions": [
60
+ "error",
61
+ {
62
+ allowTernary: true,
63
+ allowShortCircuit: true,
64
+ enforceForJSX: true,
65
+ },
66
+ ],
64
67
  "no-use-before-define": [
65
68
  "error",
66
69
  {
67
70
  "classes": true,
68
71
  },
69
72
  ], // Não use antes de definir
70
- "sonar/in-operator-type-error": [ "error" ], // Não use IN em tipos primitivos
71
- "sonar/inconsistent-function-call": [ "error" ], // Não use IN em tipos primitivos
72
- "sonar/no-associative-arrays": [ "error" ], // Não atribua a um array
73
- "sonar/no-same-argument-assert": [ "error" ], // Não faça assert com mesmo param
74
- "sonar/no-useless-intersection": [ "error" ], // Não faça assert com mesmo param
75
- "sonar/stateful-regex": [ "error" ], // Não faça regex global mais de 1 vez
76
- "sonar/super-invocation": [ "error" ], // Não faça mais de 1 super
77
73
  "regexp/no-misleading-capturing-group": [ "error" ], // Não use grupos de captura enganosos
74
+ "sonarjs/bitwise-operators": [ "error" ], // Bloqueia operadores bitwise em if
75
+ "sonarjs/different-types-comparison": [ "error" ], // Bloqueia comparação ed tipos diferentes com ===
76
+ "sonarjs/existing-groups": [ "error" ], // Impede replace regex impossíveis
77
+ "sonarjs/fixme-tag": [ "error" ], // Corrigir comentário de fix
78
+ "sonarjs/in-operator-type-error": [ "error" ], // Use IN corretamente
79
+ "sonarjs/index-of-compare-to-positive-number": [ "error" ], // Index of zero é valido
80
+ "sonarjs/no-associative-arrays": [ "error" ], // Não crie key com nome no array
81
+ "sonarjs/no-case-label-in-switch": [ "error" ], // Não crie label dentro do switch case
82
+ "sonarjs/no-collection-size-mischeck": [ "error" ], // Não verifique tamanho de array incorretamente
83
+ "sonarjs/no-duplicate-in-composite": [ "error" ], // Não concatene 2 tipos iguais
84
+ "sonarjs/no-hook-setter-in-body": [ "error" ], // Não faça loop infinito react
85
+ "sonarjs/no-literal-call": [ "error" ], // Não faça um tipo literal de função
86
+ "sonarjs/no-useless-react-setstate": [ "error" ], // Botão react sem efeito state
78
87
  },
79
88
  };
@@ -0,0 +1,85 @@
1
+ export default {
2
+ rules: {
3
+ "no-extra-bind": [ "error" ], // Não use bind desnecessário
4
+ "no-global-assign": [ "error" ], // Não atribua propriedade globais
5
+ "require-yield": [ "error" ], // Coloque yield em generator functions
6
+ "no-dupe-else-if": [ "error" ], // Não permite elseif duplicado
7
+ "no-useless-backreference": [ "error" ], // Bloqueia regex com referencia inútil
8
+ "no-unused-private-class-members": [ "error" ], // Métodos privados não sendo usados
9
+ "no-constant-binary-expression": [ "error" ], // Desabilita expressões comparação q afeta o valor da variável
10
+ "no-unneeded-ternary": [ "error" ], // Ternário Desnecessários
11
+ "no-unsafe-negation": [ "error" ], // Não permite negações invalidas
12
+ // "import/no-cycle": [ "error" ], // Não faça import circular
13
+ "unicorn/no-unused-properties": [ "warn" ], // Informe caso um campo não esteja sendo usado.
14
+ "unicorn/text-encoding-identifier-case": [ "error" ], // Encode de texto no formato correto
15
+ "no-empty-static-block": [ "error" ], // Não faça static{ } vazio
16
+ "no-fallthrough": [ "error" ], // Se misturar 2 cases no switch coloque comentário // falls through
17
+ "no-useless-concat": [ "error" ], // Desabilita concatenação de strings desnecessárias ex: "a" + "b"
18
+ "no-octal-escape": [ "error" ], // Não use 071
19
+ "no-octal": [ "error" ], // Use \ em unicode e hexadecimal
20
+ "no-case-declarations": [ "error" ], // Use chaves em caso de declaração em switch case
21
+ "regex/invalid": [
22
+ "error",
23
+ [
24
+ {
25
+ "id": "EmptyImport",
26
+ "message": "Empty import is not allowed",
27
+ "regex": String.raw`import(.*{\s*}.*)from.*\n`,
28
+ "replacement": {
29
+ "function":
30
+ String.raw`return $[1].replace(/\s/g, '') !== '{}' ? $[0].replace(/,?\s{\s*}\s/, ' ') : ''`,
31
+ },
32
+ }, // BLoqueia import vazios
33
+ ],
34
+ ],
35
+ "for-direction": [ "error" ], // Não faça for contador infinito.
36
+ "sonarjs/no-all-duplicated-branches": [ "error" ], // Não faça condições duplicadas
37
+ "sonarjs/no-element-overwrite": [ "error" ], // Não sobrescreva variável de forma desnecessária
38
+ "sonarjs/no-empty-collection": [ "error" ], // Não interaja com array vazios
39
+ "sonarjs/no-extra-arguments": [ "error" ], // Não passe argumentos extra
40
+ "sonarjs/no-identical-expressions": [ "error" ], // Não faça condições iguais
41
+ "sonarjs/no-ignored-return": [ "error" ], // Use retorno das funções
42
+ "sonarjs/no-use-of-empty-return-value": [ "error" ], // Não atribua void em uma variável
43
+ "sonarjs/no-duplicate-string": [ "error" ], // Não permite string duplicadas
44
+ "sonarjs/no-duplicated-branches": [ "error" ], // Em vez de if else igual faça um ||
45
+ "sonarjs/no-gratuitous-expressions": [ "error" ], // Não faça a mesma condição dentro de outra
46
+ "sonarjs/no-unused-collection": [ "error" ], // Não faça array que não é usado
47
+ "sonarjs/anchor-precedence": [ "error" ], // Não faça array que não é usado
48
+ "sonarjs/arguments-order": [ "error" ], // Impede paramentos fora de ordem
49
+ "sonarjs/argument-type": [ "error" ], // Passe o tipo correto de cada argumento
50
+ "sonarjs/array-callback-without-return": [ "error" ], // Precisa de return itens de array
51
+ "sonarjs/generator-without-yield": [ "error" ], // Função generator yield teve ter retorno
52
+ "sonarjs/jsx-no-leaked-render": [ "error" ], // Valida Print em JSX de boolean
53
+ "sonarjs/no-alphabetical-sort": [ "error" ], // Não ordene em ordem alfabética
54
+ "sonarjs/no-array-delete": [ "error" ], // Não use delete no array
55
+ "sonarjs/no-commented-code": [ "error" ], // Não use código comentado
56
+ "sonarjs/no-empty-after-reluctant": [ "error" ], // Regex n pode resultar em string vazia
57
+ "sonarjs/no-equals-in-for-termination": [ "error" ], // Previne for infinitos
58
+ "sonarjs/no-identical-conditions": [ "error" ], // Não faça condições iguais em if e elseif
59
+ "sonarjs/no-implicit-global": [ "error" ], // Não acesse variável global inexistente no arquivo
60
+ "sonarjs/no-in-misuse": [ "error" ], // Use includes ao indez de in em array
61
+ "sonarjs/no-misleading-array-reverse": [ "error" ], // Não salve array revert em variáveis
62
+ "sonarjs/no-misleading-character-class": [ "error" ], // Regex replace possíveis bugs
63
+ "sonarjs/no-try-promise": [ "error" ], // TryCatch apenas com promise sem await dentro
64
+ "sonarjs/no-uniq-key": [ "error" ], // Key react consistent
65
+ "sonarjs/no-useless-intersection": [ "error" ], // Não Coloque coisas desnecessárias nos types
66
+ "sonarjs/null-dereference": [ "error" ], // Não acesse null como object
67
+ "sonarjs/operation-returning-nan": [ "error" ], // Valida Matemática dado errado
68
+ "sonarjs/non-number-in-arithmetic-expression": [ "error" ], // Valida Matemática dado errado
69
+ "sonarjs/reduce-initial-value": [ "error" ], // Reduce tem q ter o segundo parâmetro
70
+ "sonarjs/stateful-regex": [ "error" ], // Valida regex podem ser sempre false
71
+ "sonarjs/super-invocation": [ "error" ], // Não chama super mais de 1 vez
72
+ "sonarjs/table-header": [ "error" ], // Table html deve ter header
73
+ "sonarjs/table-header-reference": [ "error" ], // Table html deve ter header
74
+ "unicorn/consistent-existence-index-check": [ "error" ], // Valide o indexOf() de forma correta
75
+ "unicorn/consistent-date-clone": [ "error" ], // Se clonar uma data clone o objeto completo
76
+ "unicorn/consistent-assert": [ "error" ], // Use assert.ok ao invés de assert(value)
77
+ "unicorn/no-unnecessary-array-splice-count": [ "error" ], // N faça splice com .length ele ja pega tudo
78
+ "unicorn/no-useless-error-capture-stack-trace": [ "error" ], // N faça Error.captureStackTrace se n precisa
79
+ "unicorn/no-unnecessary-polyfills": [ "error" ], // Valida recursos suportados
80
+ "regexp/no-extra-lookaround-assertions": [ "error" ], // Look around invalido em regex
81
+ "n/no-unsupported-features/es-builtins": [ "error", { "ignores": [] } ],
82
+ "n/no-unsupported-features/es-syntax": [ "error", { "ignores": [] } ],
83
+ "n/no-unsupported-features/node-builtins": [ "error", { "ignores": [] } ],
84
+ },
85
+ };