ESLint Plugin De Morgan

VersionGitHub starsDownloads per weekLicense

Идея появилась на работе. В коде то и дело попадались условия с отрицанием перед скобками, и каждый раз их приходилось мысленно раскрывать. Мне показалось, что это вполне может делать линтер.

ESLint Plugin De Morgan переписывает такие условия по законам де Моргана. Это два закона булевой алгебры:

Было:

JavaScript
if (!(user.role === 'admin' || user.isOwner)) {
  throw new Error('Access denied')
}

Стало:

JavaScript
if (user.role !== 'admin' && !user.isOwner) {
  throw new Error('Access denied')
}

В плагине два правила: no-negated-conjunction для !(a && b) и no-negated-disjunction для !(a || b).

Плагин не меняет поведение кода. Например, отрицание count >= 10 он запишет как !(count >= 10), а не count < 10. Если count равен NaN, оба сравнения вернут false, и такая замена сломала бы условие.

Как начать его использовать?

Установите ESLint и плагин:

Bash
npm install --save-dev eslint eslint-plugin-de-morgan

Подключите рекомендуемый конфиг в eslint.config.js:

JavaScript
import deMorgan from 'eslint-plugin-de-morgan'

export default [deMorgan.configs.recommended]

Оба правила исправляют код автоматически. Запустите ESLint с флагом --fix, и плагин перепишет все выражения сам.