⛑ ESLint plugin for AMO.
Перейти к файлу
dependabot[bot] 683f91d4c6
⬆️ Bump inquirer from 12.0.1 to 12.1.0 (#348)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-11-13 09:12:48 +01:00
.circleci
.github
bin
lib
tests
.gitignore
.npmrc
.prettierignore
.prettierrc
CODE_OF_CONDUCT.md
CONTRIBUTING.md
LICENSE.txt
README.md
package-lock.json
package.json

README.md

eslint-plugin-amo

CircleCI npm version

ESLint plugin for AMO.

Installation

You'll first need to install ESLint:

$ npm i eslint --save-dev

Next, install eslint-plugin-amo:

$ npm install eslint-plugin-amo --save-dev

Note: If you installed ESLint globally (using the -g flag) then you must also install eslint-plugin-amo globally.

Usage

Add amo to the plugins section of your .eslintrc configuration file. You can omit the eslint-plugin- prefix:

{
  "plugins": ["amo"]
}

Then configure the rules you want to use under the rules section.

{
  "rules": {
    "amo/rule-name": 2
  }
}

Alternatively, you can use the recommended preset to get reasonable defaults:

{
  "extends": ["plugin:amo/recommended"]
}

TypeScript

You can use the typescript preset to get reasonable defaults (it includes the recommended rules) as well as TypeScript specific rules:

{
  "extends": ["plugin:amo/typescript"]
}

Rules

dangerously-set-inner-html

Ensure dangerouslySetInnerHTML is used on elements that permit flow content:

// BAD
<p dangerouslySetInnerHTML={sanitizeUserHTML(content)} />

// GOOD
<div dangerouslySetInnerHTML={sanitizeUserHTML(content)} />

describe-with-filename

Ensure the top-level describe block has __filename as description:

// BAD
describe('foo', () => {});

// GOOD
describe(__filename, () => {});

🔧 Use the ESLint --fix option on the command line to automatically fixes problems reported by this rule.

💡 We enforce this rule because of the following issue: https://github.com/mozilla/addons-frontend/issues/2928.

i18n-no-interpolated-values

Ensure no interpolated values are passed to i18n methods:

// BAD
i18n.gettext(`some ${value}`)

// GOOD
i18n.gettext(`some %(value)s`)

i18n-no-reference

Ensure predictable static values are passed as i18n method arguments:

// BAD
i18n.gettext(hello)

// GOOD
i18n.gettext('hello')

💡 We enforce this rule because of the following issue: https://github.com/mozilla/eslint-plugin-amo/issues/232.

⚠️ This rule is not part of the recommended preset.

i18n-no-tagged-templates

Ensure no template literal tags are passed to i18n methods:

// BAD
i18n.gettext(tag`translated string`)

// GOOD
i18n.gettext('hello')

🔧 Use the ESLint --fix option on the command line to automatically fixes problems reported by this rule.

💡 We enforce this rule because of the following issue: https://github.com/mozilla/addons-frontend/issues/2108.

i18n-no-template-literal

Ensure predictable static values are passed as i18n method arguments:

// BAD
i18n.gettext(`

hello`)

// GOOD
i18n.gettext('hello')

🔧 Use the ESLint --fix option on the command line to automatically fixes problems reported by this rule.

⚠️ This rule is not part of the recommended preset.

no-sinon-assert-called-if-called-with

Ensure sinon.assert.called() is absent when sinon.assert.calledWith() is used:

// BAD
it('description', () => {
  sinon.assert.called(stub);
  sinon.assert.calledWith(stub, params);
});

// GOOD
it('description', () => {
  sinon.assert.calledWith(stub, params);
});

💡 We enforce this rule because of the following issue: https://github.com/mozilla/addons-frontend/issues/2437.

one-top-level-describe-per-test

Ensure there is a single top-level describe block per test file:

// BAD
describe('foo', () => {});
describe('bar', () => {});

// GOOD
describe(__filename, () => {
  describe('foo', () => {});
  describe('bar', () => {});
});

only-log-strings

Ensure we do not log full objects:

// BAD
log.info("response:", response);

// GOOD
log.info("this is a log message");
log.debug(oneLine`A very long string message`);
_log.warn(`request ID: ${requestId}`);

📐 This rule can be configured with the following options:

Name Type Description
methods array A list of logger methods, e.g., info or debug.
objects array A list of logger objects, e.g., log or console.

💡 We enforce this rule because of the following issue: https://github.com/mozilla/addons-frontend/issues/6512.

only-tsx-files

Enforce .tsx file extensions (definition files are ignored by this rule):

  • src/api/index.ts
  • src/api/index.tsx

💡 We enforce this rule because of the following issue: https://github.com/mozilla/addons-code-manager/issues/75.

redux-app-state

Ensure the AppState Flow type is used on state arguments:

// BAD
const mapStateToProps = (state: Object) => {};

// GOOD
const mapStateToProps = (state: AppState) => {};

💡 We enforce this rule because of the following issue: https://github.com/mozilla/addons-frontend/issues/4058.

sort-destructured-props

Ensure destructured props are sorted:

// BAD
const { a, _c, b, Component, ...otherProps } = this.props;

// GOOD
const { Component, _c, a, b, ...otherProps } = this.props;

🔧 Use the ESLint --fix option on the command line to automatically fixes problems reported by this rule.

⚠️ This rule is not part of the recommended preset.

with-router-hoc-first

Ensures the withRouter HOC is the first in compose():

// BAD
compose(
  connect(mapStateToProps),
  withRouter
)(MyComponent)

// GOOD
compose(
  withRouter,
  connect(mapStateToProps)
)(MyComponent)

Contributing

Install the project dependencies:

npm install

Run the test suite:

npm test

New rules can be added with the npm run new-rule command:

npm run new-rule

This command will ask a few questions and generate the source and test files.

The "Rules" documentation section is automatically generated with:

npm run build-doc

For further information, please see the CONTRIBUTING.md file.

License

eslint-plugin-amo is released under the Mozilla Public License Version 2.0. See the bundled LICENSE file for details.