You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
- Запрещена "проверка Йоды" — в условных операторах в блоке условия при сравнении переменной или свойства со значением сначала идет переменная или свойство объекта и только потом значения не наоброт.
204
+
- Запрещена "проверка Йоды" — в условных операторах в блоке условия при сравнении переменной или свойства со значением сначала идет переменная или свойство объекта и только потом значения, а не наоброт.
205
205
206
206
```javascript
207
207
if (1 === myValue) {} // Плохо
@@ -338,11 +338,25 @@ function myFunc() {}; // Плохо
338
338
339
339
## Приведение типов
340
340
'no-extra-boolean-cast': 'error',
341
-
'valid-typeof': 'error', // проверка на правильный тип в typeof
342
-
'radix': 'error',
341
+
- Не используется лишнее приведение к Boolean. Например, нет большого смысла переводить в boolean условия в конструкциях `if`, `while`, `for`, в первом операнде тернарного оператора
343
342
344
-
### Зафиксированный if (if..true)
345
-
'no-constant-condition': 'error',
343
+
'valid-typeof': 'error',
344
+
- Оператор `typeof` используется корректно — используются только правильные значения, возвращаемые оператором, не производится сравнения со строковыми литералами, которые содержат некорректные значения `typeof`
345
+
346
+
'radix': 'error'
347
+
- В `parseInt` обязательно передается второй параметр — основание системы счисления, даже в случае с десятичной системой счисления
348
+
349
+
### Константы в условиях
350
+
'no-constant-condition': 'error'
351
+
- В блоки условия операторов if, while, for и тернарного оператора не передается константное значение, которое подразумевает, что условие выполняется (или не выполняется) всегда
352
+
```diff
353
+
- if (true) {}
354
+
+ if (a > 1) {}
355
+
```
356
+
```diff
357
+
- var ternaryValue = true ? 'a' : 'b';
358
+
+ var ternaryValue = isA() ? 'a' : 'b';
359
+
```
346
360
347
361
# Модульность и области видимости
348
362
## Глобальная область видимости
@@ -351,21 +365,50 @@ function myFunc() {}; // Плохо
351
365
# Чистый код
352
366
## Лишние символы (пробелы, точки с запятой и прочее)
353
367
'no-extra-semi': 'error',
368
+
- Не используются лишние (множественные) точки с запятой
354
369
355
370
## Отладчик и консоль
356
371
'no-console': 'error',
372
+
- В коде не используется оставленных выводов в консоль
- В проекте нет недоступного кода, который никогда не выполнится
380
+
```diff
381
+
- if (false) {
382
+
- doSomething();
383
+
- }
384
+
+ if (needToDoSomething()) {
385
+
+ doSomething();
386
+
+ }
387
+
```
388
+
389
+
'no-unused-vars': ['error', {args: 'none'}]
390
+
- В коде нет объявленных, но неиспользуемых переменных. Проверка не относится к параметрам функций.
391
+
362
392
'no-unused-expressions': 'error',
393
+
- В коде нет выражений, значения которых не записываются в переменные, параметры функций, свойства объектов и не передаются как параметры функций
394
+
```diff
395
+
- check === true && doSomething();
396
+
+ if (check) {
397
+
+ doSomething();
398
+
+ }
399
+
```
363
400
364
401
## Обработка ошибок и исключения
365
-
'no-throw-literal': 'error', // eslint:recommended // запрет на выброс исключениями не объектов Error а литералов
402
+
'no-throw-literal': 'error',
403
+
- Для выбрасывания исключения в оператор `throw` передаются только объекты Error. Передавать литералы запрещено.
404
+
```diff
405
+
- throw 'Passed value is out of range';
406
+
+ throw new RangeError('Rassed value is out of range');
407
+
```
366
408
367
409
### try..catch с пустым try
368
410
'no-ex-assign': 'error'
411
+
- В конструкции `try..catch` запрещен пустой блок `try`
369
412
370
413
# Документирование
371
414
'valid-jsdoc': ['error', {
@@ -374,21 +417,71 @@ function myFunc() {}; // Плохо
374
417
requireReturn: false,
375
418
prefer: {returns: 'return'}
376
419
}],
420
+
При написании jsDoc используются следующие ограничения:
421
+
- необязательно добавлять текстовое описание конструкциям @return и @param, достаточно просто указания типа и названия параметра для @param
422
+
- описание возвращаемного типа @return требуется только в том случае, если функция возвращает какое-то значение. Правило не действует для конструкторов, для них указывать @return необязательно. Также необязательно указывать тег @return для функций, в которых конструкуия `return` используется без возвращаемого значения для выхода из функции
423
+
- для описания возвращаемого значения из функции используется тег @return, а не @returns
377
424
378
425
# Прочее
379
-
'guard-for-in': 'error', // Итерирование по объектам через hasOwnProp
380
-
'no-caller': 'error', // запрет на использование caller/callee в функциях
381
-
'no-iterator': 'error', // запрет на использование __iterator__
382
-
'no-proto': 'error', // запрет на использование __proto__
426
+
'guard-for-in': 'error'
427
+
- При итерировании по объектам через `for..in` при работе со свойствами используется конструкция `hasOwnProperty`
428
+
429
+
'no-caller': 'error',
430
+
- В функциях не используются обращения к `caller` и `callee`
431
+
432
+
'no-iterator': 'error',
433
+
- В объектах напрямую не переопределяется свойство `__iterator__`
434
+
435
+
'no-proto': 'error',
436
+
- В объектах напрямую не переопределяется свойство `__proto__`. Разрешено переопределять `__proto__` через `Object.create` или запись в прототип, объектов, созданных другими конструкторами, но напрямую редактировать `__proto__` нельзя
437
+
```diff
438
+
- var obj = {
439
+
- __proto__: Parent
440
+
- };
441
+
+
442
+
+ var Obj = function() {};
443
+
+ Obj.prototype = new Parent();
444
+
+ var obj = new obj;
445
+
+
446
+
+ var obj = Object.create(Parent.prototype);
447
+
```
448
+
383
449
'no-labels': 'error',
450
+
- В коде не используются лейблы. Лейблы используются с конструкциями `break` и `continue` для направленного выхода из цикла и могут привести к слишком сложному для понимания коду
451
+
384
452
'no-lone-blocks': 'error',
453
+
- Блоки, использующиеся в коде должны описывать тело функции, условия, оператора `switch` и прочие конструкции относящиеся к группировке множественных операций. Блоки не должны использваться сами по себе, любой блок должен быть частью другого выражения.
454
+
385
455
'no-sequences': 'error',
456
+
- В коде не используется оператор «запятая» для описания последовательностей действий. Для создания переменных используются отдельные ключевые слова `let`, `const`, `var`, в операторы группировки, условные операторы и прочие конструкции. Исключение составляет начальное условие оператора `for`
457
+
```diff
458
+
- const result = (1, 2); // 2
459
+
+ const result = 2;
460
+
461
+
- switch (val = getVal(), val) {}
462
+
+ val = getVal();
463
+
+ switch(val) {}
464
+
465
+
+ for (var i = 0, l = 100; i < l; i++);
466
+
```
386
467
387
468
## Регулярные выражения
388
469
'no-control-regex': 'error',
470
+
- В регулярных выражениях не используются «управляющие выражения»
471
+
389
472
'no-empty-character-class': 'error',
390
-
'no-invalid-regexp': 'error', // нельзя создавать объект RegExp из неправильной строки
391
-
'no-regex-spaces': 'error', // запрет на использование нескольких пробелов в регулярках. Вместо этого предлагается использовать {3}
473
+
- В регулярных выражениях не используются пустые классы символов `[]` (блоки, ограниченные квадратными скобками)
474
+
475
+
'no-invalid-regexp': 'error',
476
+
- В коде регулярные выражения не создаются через конструктор RegExp из строки, которая не может быть разобрана как правильное регулярное выражение
477
+
478
+
'no-regex-spaces': 'error',
479
+
- В регулярных выражениях не используются нескольких последовательных пробелов. Вместо этого предлагается использовать модификаторы количества {3}
480
+
```diff
481
+
- / /.exec(myString);
482
+
+ /\s{3}/.exec(myString);
483
+
```
392
484
393
485
# node.js
394
486
'no-process-exit': 'error',
487
+
- В node.js файлах не используется конструкция `process.exit`.
0 commit comments