Compare commits

..

9 Commits

Author SHA1 Message Date
Jordan Harband
34b5bc39f1 [meta] revert changes from d4e39c9b10
Caused by https://github.com/npm/cli/issues/3619
2021-12-25 12:34:37 -08:00
Jordan Harband
d4e39c9b10 v19.0.4 2021-12-25 07:34:29 -08:00
Jordan Harband
baaa5e8d26 [eslint config] v19.0.3 2021-12-24 12:27:19 -08:00
David Petersen
274c8d5701 [eslint config] [patch] set namedComponents option to match style guide
Change the `namedComponents` option to `function-declaration` to match what the style guide requires.

019e0f7e07 (r60060792)
2021-11-10 17:05:21 -06:00
Jordan Harband
38bc026fe4 [eslint config] [base] add disabled prefer-object-has-own rule 2021-12-22 15:12:04 -08:00
Jordan Harband
445322db64 [eslint config] [deps] update eslint-plugin-react 2021-12-22 15:09:25 -08:00
Jordan Harband
152bd5e85a [eslint config] v19.0.2 2021-12-02 10:34:58 -08:00
Jordan Harband
afc2cc3432 [eslint config] [meta] fix "exports" path
Fixes #2524
2021-12-02 10:04:51 -08:00
Jordan Harband
371537f393 [Tests] re-enable tests disabled for the eslint 8 upgrade 2021-11-22 13:44:36 -08:00
6 changed files with 52 additions and 48 deletions

View File

@@ -62,16 +62,12 @@ jobs:
matrix:
node-version: ${{ fromJson(needs.matrix.outputs.latest) }}
eslint:
- 8
- 7
# - 6
# - 5
package:
- eslint-config-airbnb
react-hooks:
- ''
# - 3 # TODO: re-enable these once the react config uses eslint 8
# - 2.3
# - 1.7
- 4
defaults:
run:
@@ -131,16 +127,12 @@ jobs:
fail-fast: false
matrix:
eslint:
- 8
- 7
# - 6
# - 5
package:
- eslint-config-airbnb
react-hooks:
- ''
# - 3 # TODO: re-enable these once the react config uses eslint 8
# - 2.3
# - 1.7
- 4
defaults:
run:

View File

@@ -376,6 +376,11 @@ module.exports = {
// https://eslint.org/docs/rules/prefer-named-capture-group
'prefer-named-capture-group': 'off',
// Prefer Object.hasOwn() over Object.prototype.hasOwnProperty.call()
// https://eslint.org/docs/rules/prefer-object-has-own
// TODO: semver-major: enable thus rule, once eslint v8.5.0 is required
'prefer-object-has-own': 'off',
// https://eslint.org/docs/rules/prefer-regex-literals
'prefer-regex-literals': ['error', {
disallowRedundantWrapping: true,

View File

@@ -1,3 +1,17 @@
19.0.4 / 2021-12-25
==================
- republish to fix #2529
19.0.3 / 2021-12-24
==================
- [patch] set `namedComponents` option to match style guide
- [deps] update `eslint-plugin-react`
19.0.2 / 2021-12-02
==================
- [meta] fix "exports" path (#2525)
- [Tests] re-enable tests disabled for the eslint 8 upgrade
19.0.1 / 2021-11-22
==================
- [fix] `whitespace`: update to support eslint 8 (#2517)

View File

@@ -1,6 +1,6 @@
{
"name": "eslint-config-airbnb",
"version": "19.0.1",
"version": "19.0.4",
"description": "Airbnb's ESLint config, following our styleguide",
"main": "index.js",
"exports": {
@@ -11,7 +11,7 @@
"./whitespace": "./whitespace.js",
"./rules/react": "./rules/react.js",
"./rules/react-a11y": "./rules/react-a11y.js",
"./rules/react-hooks": "./rules/react-hook.js",
"./rules/react-hooks": "./rules/react-hooks.js",
"./package.json": "./package.json"
},
"scripts": {
@@ -79,7 +79,7 @@
"eslint-find-rules": "^4.0.0",
"eslint-plugin-import": "^2.25.3",
"eslint-plugin-jsx-a11y": "^6.5.1",
"eslint-plugin-react": "^7.27.1",
"eslint-plugin-react": "^7.28.0",
"eslint-plugin-react-hooks": "^4.3.0",
"in-publish": "^2.0.1",
"react": ">= 0.13.0",
@@ -90,7 +90,7 @@
"eslint": "^7.32.0 || ^8.2.0",
"eslint-plugin-import": "^2.25.3",
"eslint-plugin-jsx-a11y": "^6.5.1",
"eslint-plugin-react": "^7.27.1",
"eslint-plugin-react": "^7.28.0",
"eslint-plugin-react-hooks": "^4.3.0"
},
"engines": {

View File

@@ -524,9 +524,8 @@ module.exports = {
// Enforce a specific function type for function components
// https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/function-component-definition.md
// TODO: investigate if setting namedComponents to expression vs declaration is problematic
'react/function-component-definition': ['error', {
namedComponents: 'function-expression',
namedComponents: ['function-declaration', 'function-expression'],
unnamedComponents: 'function-expression',
}],

View File

@@ -4,25 +4,25 @@ import eslintrc from '..';
import reactRules from '../rules/react';
import reactA11yRules from '../rules/react-a11y';
const rules = {
// It is okay to import devDependencies in tests.
'import/no-extraneous-dependencies': [2, { devDependencies: true }],
// this doesn't matter for tests
'lines-between-class-members': 0,
// otherwise we need some junk in our fixture code
'react/no-unused-class-component-methods': 0,
};
const cli = new (CLIEngine || ESLint)({
useEslintrc: false,
baseConfig: eslintrc,
rules: {
// It is okay to import devDependencies in tests.
'import/no-extraneous-dependencies': [2, { devDependencies: true }],
// this doesn't matter for tests
'lines-between-class-members': 0,
// otherwise we need some junk in our fixture code
'react/no-unused-class-component-methods': 0,
},
...(CLIEngine ? { rules } : { overrideConfig: { rules } }),
});
function lint(text) {
async function lint(text) {
// @see https://eslint.org/docs/developer-guide/nodejs-api.html#executeonfiles
// @see https://eslint.org/docs/developer-guide/nodejs-api.html#executeontext
const linter = CLIEngine ? cli.executeOnText(text) : cli.lintText(text);
return linter.results[0];
const linter = CLIEngine ? cli.executeOnText(text) : await cli.lintText(text);
return (CLIEngine ? linter.results : linter)[0];
}
function wrapComponent(body) {
@@ -42,9 +42,8 @@ test('validate react methods order', (t) => {
t.deepEqual(reactA11yRules.plugins, ['jsx-a11y', 'react']);
});
t.test('passes a good component', (t) => {
t.plan(3);
const result = lint(wrapComponent(`
t.test('passes a good component', async (t) => {
const result = await lint(wrapComponent(`
componentDidMount() {}
handleSubmit() {}
onButtonAClick() {}
@@ -61,9 +60,8 @@ test('validate react methods order', (t) => {
t.notOk(result.errorCount, 'no errors');
});
t.test('order: when random method is first', (t) => {
t.plan(2);
const result = lint(wrapComponent(`
t.test('order: when random method is first', async (t) => {
const result = await lint(wrapComponent(`
someMethod() {}
componentDidMount() {}
setFoo() {}
@@ -77,9 +75,8 @@ test('validate react methods order', (t) => {
t.deepEqual(result.messages.map((msg) => msg.ruleId), ['react/sort-comp'], 'fails due to sort');
});
t.test('order: when random method after lifecycle methods', (t) => {
t.plan(2);
const result = lint(wrapComponent(`
t.test('order: when random method after lifecycle methods', async (t) => {
const result = await lint(wrapComponent(`
componentDidMount() {}
someMethod() {}
setFoo() {}
@@ -93,9 +90,8 @@ test('validate react methods order', (t) => {
t.deepEqual(result.messages.map((msg) => msg.ruleId), ['react/sort-comp'], 'fails due to sort');
});
t.test('order: when handler method with `handle` prefix after method with `on` prefix', (t) => {
t.plan(2);
const result = lint(wrapComponent(`
t.test('order: when handler method with `handle` prefix after method with `on` prefix', async (t) => {
const result = await lint(wrapComponent(`
componentDidMount() {}
onButtonAClick() {}
handleSubmit() {}
@@ -108,9 +104,8 @@ test('validate react methods order', (t) => {
t.deepEqual(result.messages.map((msg) => msg.ruleId), ['react/sort-comp'], 'fails due to sort');
});
t.test('order: when lifecycle methods after event handler methods', (t) => {
t.plan(2);
const result = lint(wrapComponent(`
t.test('order: when lifecycle methods after event handler methods', async (t) => {
const result = await lint(wrapComponent(`
handleSubmit() {}
componentDidMount() {}
setFoo() {}
@@ -122,9 +117,8 @@ test('validate react methods order', (t) => {
t.deepEqual(result.messages.map((msg) => msg.ruleId), ['react/sort-comp'], 'fails due to sort');
});
t.test('order: when event handler methods after getters and setters', (t) => {
t.plan(2);
const result = lint(wrapComponent(`
t.test('order: when event handler methods after getters and setters', async (t) => {
const result = await lint(wrapComponent(`
componentDidMount() {}
setFoo() {}
getFoo() {}