Skip to content

Commit

Permalink
Move jest, typescript and webpack rules into base rules folders (#458)
Browse files Browse the repository at this point in the history
* Move jest, typescript and webpack rules into base rules folders

The new config format doesn't allow slashes in rule names so rule names
in the style `typescript/*` were already renamed to `typescript-*`.
Lets stop nesting them in folders to reflect the new rule names.

* Fix jest-no-all-mocks-method test
  • Loading branch information
BPScott authored Jan 31, 2025
1 parent e347da8 commit 421b2b9
Show file tree
Hide file tree
Showing 20 changed files with 46 additions and 44 deletions.
10 changes: 5 additions & 5 deletions packages/eslint-plugin/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -142,7 +142,7 @@ This plugin provides the following custom rules, which are included as appropria
- [binary-assignment-parens](docs/rules/binary-assignment-parens.md): Require (or disallow) assignments of binary, boolean-producing expressions to be wrapped in parentheses.
- [class-property-semi](docs/rules/class-property-semi.md): Require (or disallow) semicolons for class properties.
- [images-no-direct-imports](docs/rules/images-no-direct-imports.md): Prevent images from being directly imported.
- [jest/no-snapshots](docs/rules/jest/no-snapshots.md): Disallows jest snapshots.
- [jest-no-snapshots](docs/rules/jest-no-snapshots.md): Disallows jest snapshots.
- [jsx-no-complex-expressions](docs/rules/jsx-no-complex-expressions.md): Disallow complex expressions embedded in in JSX.
- [jsx-no-hardcoded-content](docs/rules/jsx-no-hardcoded-content.md): Disallow hardcoded content in JSX.
- [jsx-prefer-fragment-wrappers](docs/rules/jsx-prefer-fragment-wrappers.md): Disallow useless wrapping elements in favour of fragment shorthand in JSX.
Expand All @@ -164,10 +164,10 @@ This plugin provides the following custom rules, which are included as appropria
- [sinon-no-restricted-features](docs/rules/sinon-no-restricted-features.md): Restrict the use of specified sinon features.
- [sinon-prefer-meaningful-assertions](docs/rules/sinon-prefer-meaningful-assertions.md): Require the use of meaningful sinon assertions through sinon.assert or sinon-chai.
- [strict-component-boundaries](docs/rules/strict-component-boundaries.md): Prevent module imports between components.
- [typescript/prefer-pascal-case-enums](docs/rules/typescript/prefer-pascal-case-enums.md): Prefer TypeScript enums be defined using Pascal case.
- [typescript/prefer-singular-enums](docs/rules/typescript/prefer-singular-enums.md): Prefer TypeScript enums be singular.
- [typescript/prefer-build-client-schema](docs/rules/typescript/prefer-build-client-schema.md): Prefer buildClientSchema for schema building.
- [webpack/no-unnamed-dynamic-imports](docs/rules/webpack/no-unnamed-dynamic-imports.md): Require that all dynamic imports contain a `webpackChunkName` comment.
- [typescript-prefer-pascal-case-enums](docs/rules/typescript-prefer-pascal-case-enums.md): Prefer TypeScript enums be defined using Pascal case.
- [typescript-prefer-singular-enums](docs/rules/typescript-prefer-singular-enums.md): Prefer TypeScript enums be singular.
- [typescript-prefer-build-client-schema](docs/rules/typescript-prefer-build-client-schema.md): Prefer buildClientSchema for schema building.
- [webpack-no-unnamed-dynamic-imports](docs/rules/webpack-no-unnamed-dynamic-imports.md): Require that all dynamic imports contain a `webpackChunkName` comment.

## Suggested additional configs

Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# Disallows jest allMocks methods.
# Disallows jest allMocks methods. (jest-no-all-mocks-methods)

This rule discourages the use of overly broad Jest methods such as `resetAllMocks`, `clearAllMocks`, `restoreAllMocks` and `resetModules`.

Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# Disallows jest snapshots. (no-snapshots)
# Disallows jest snapshots. (jest-no-snapshots)

Jest’s snapshot feature allows you to assert that a value has not changed from a stored value in a previous test. The matchers `toMatchSnapshot`, `toMatchInlineSnapshot`, `toThrowErrorMatchingSnapshot` and `toThrowErrorMatchingInlineSnapshot` will generate snapshots when used inside test blocks.

Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# Prefer buildClientSchema (typescript/prefer-build-client-schema)
# Prefer buildClientSchema (typescript-prefer-build-client-schema)

Enforces [buildClientSchema](https://graphql.org/graphql-js/utilities/#buildclientschema) to `buildSchema` for performance within TypeScript code.

Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# Enforce Pascal case when naming enums. (typescript/prefer-pascal-case-enums)
# Enforce Pascal case when naming enums. (typescript-prefer-pascal-case-enums)

Provides consistency when naming [Enums](https://www.typescriptlang.org/docs/handbook/enums.html) within TypeScript code.

Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# Prefer singular TypeScript enums. (typescript/prefer-singular-enums)
# Prefer singular TypeScript enums. (typescript-prefer-singular-enums)

Provides consistency when naming [enums](https://www.typescriptlang.org/docs/handbook/enums.html) within TypeScript code.

Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# Enforces named dynamic webpack chunks. (`shopify/webpack/no-unnamed-dynamic-imports`)
# Enforces named dynamic webpack chunks. (`webpack-no-unnamed-dynamic-imports`)

Omiting a dynamic import's `webpackChunkName` leads to hashed JavaScript filenames being deployed to production servers. Including a human-readable fragment in filenames makes stack traces more readable, and improves triage accuracy.

Expand Down
Original file line number Diff line number Diff line change
@@ -1,15 +1,17 @@
const {docsUrl} = require('../utilities');

module.exports = {
meta: {
docs: {
description: 'Disallows jest allMocks methods.',
category: 'Best Practices',
recommended: false,
uri: 'https://github.com/Shopify/web-configs/blob/main/packages/eslint-plugin/docs/rules/jest/no-all-mocks-methods.md',
uri: docsUrl('jest-no-all-mocks-methods'),
},
messages: {
allMocksMethod:
'Do not use {{method}} or related methods that are not explicit to a single mock. Instead, clear, reset and restore mocks individually.',
},
},
messages: {
allMocksMethod:
'Do not use {{method}} or related methods that are not explicit to a single mock. Instead, clear, reset and restore mocks individually.',
},

create(context) {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
const {docsUrl} = require('../../utilities');
const {docsUrl} = require('../utilities');

module.exports = {
meta: {
docs: {
description: 'Disallows jest snapshots.',
category: 'Best Practices',
recommended: false,
uri: docsUrl('jest/no-snapshots'),
uri: docsUrl('jest-no-snapshots'),
},
},

Expand Down
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
const {docsUrl} = require('../../utilities');
const {docsUrl} = require('../utilities');

module.exports = {
meta: {
docs: {
description: 'Prefer buildClientSchema for schema building',
category: 'Best Practices',
recommended: true,
uri: docsUrl('typescript/prefer-build-client-schema'),
uri: docsUrl('typescript-prefer-build-client-schema'),
},
fixable: null,
},
Expand Down
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
const {pascalCase} = require('change-case');

const {docsUrl} = require('../../utilities');
const {docsUrl} = require('../utilities');

module.exports = {
meta: {
docs: {
description: 'Enforce Pascal case when naming enums.',
category: 'Stylistic Issues',
recommended: false,
uri: docsUrl('typescript/prefer-pascal-case-enum'),
uri: docsUrl('typescript-prefer-pascal-case-enum'),
},
fixable: null,
},
Expand Down
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
const pluralize = require('pluralize');

const {docsUrl} = require('../../utilities');
const {docsUrl} = require('../utilities');

module.exports = {
meta: {
docs: {
description: 'Prefer singular TypeScript enums.',
category: 'Stylistic Issues',
recommended: false,
uri: docsUrl('typescript/prefer-singular-enums'),
uri: docsUrl('typescript-prefer-singular-enums'),
},
fixable: null,
},
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
const {docsUrl} = require('../../utilities');
const {docsUrl} = require('../utilities');

function isDynamicImport(node) {
if (node.type !== 'CallExpression') {
Expand Down Expand Up @@ -52,7 +52,7 @@ module.exports = {
'Require that all dynamic imports contain a `webpackChunkName` comment.',
category: 'Best Practices',
recommended: true,
uri: docsUrl('webpack/no-unnamed-dynamic-imports'),
uri: docsUrl('webpack-no-unnamed-dynamic-imports'),
},
},

Expand Down
12 changes: 6 additions & 6 deletions packages/eslint-plugin/plugin.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,8 @@ module.exports = {
'binary-assignment-parens': require('./lib/rules/binary-assignment-parens'),
'class-property-semi': require('./lib/rules/class-property-semi'),
'images-no-direct-imports': require('./lib/rules/images-no-direct-imports'),
'jest-no-all-mocks-methods': require('./lib/rules/jest/no-all-mocks-methods'),
'jest-no-snapshots': require('./lib/rules/jest/no-snapshots'),
'jest-no-all-mocks-methods': require('./lib/rules/jest-no-all-mocks-methods'),
'jest-no-snapshots': require('./lib/rules/jest-no-snapshots'),
'jsx-no-complex-expressions': require('./lib/rules/jsx-no-complex-expressions'),
'jsx-no-hardcoded-content': require('./lib/rules/jsx-no-hardcoded-content'),
'jsx-prefer-fragment-wrappers': require('./lib/rules/jsx-prefer-fragment-wrappers'),
Expand All @@ -29,9 +29,9 @@ module.exports = {
'sinon-no-restricted-features': require('./lib/rules/sinon-no-restricted-features'),
'sinon-prefer-meaningful-assertions': require('./lib/rules/sinon-prefer-meaningful-assertions'),
'strict-component-boundaries': require('./lib/rules/strict-component-boundaries'),
'typescript-prefer-pascal-case-enums': require('./lib/rules/typescript/prefer-pascal-case-enums'),
'typescript-prefer-singular-enums': require('./lib/rules/typescript/prefer-singular-enums'),
'typescript-prefer-build-client-schema': require('./lib/rules/typescript/prefer-build-client-schema'),
'webpack-no-unnamed-dynamic-imports': require('./lib/rules/webpack/no-unnamed-dynamic-imports'),
'typescript-prefer-pascal-case-enums': require('./lib/rules/typescript-prefer-pascal-case-enums'),
'typescript-prefer-singular-enums': require('./lib/rules/typescript-prefer-singular-enums'),
'typescript-prefer-build-client-schema': require('./lib/rules/typescript-prefer-build-client-schema'),
'webpack-no-unnamed-dynamic-imports': require('./lib/rules/webpack-no-unnamed-dynamic-imports'),
},
};
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
const {FlatRuleTester: RuleTester} = require('eslint/use-at-your-own-risk');

const rule = require('../../../../lib/rules/jest/no-all-mocks-methods');
const rule = require('../../../lib/rules/jest-no-all-mocks-methods');

const ruleTester = new RuleTester();

ruleTester.run('no-all-mocks-methods', rule, {
ruleTester.run('jest-no-all-mocks-methods', rule, {
valid: [
{
code: `jest.mock()`,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
const {FlatRuleTester: RuleTester} = require('eslint/use-at-your-own-risk');

const rule = require('../../../../lib/rules/jest/no-snapshots');
const rule = require('../../../lib/rules/jest-no-snapshots');

const ruleTester = new RuleTester();
function errorWithMethodName(name) {
Expand All @@ -12,7 +12,7 @@ function errorWithMethodName(name) {
];
}

ruleTester.run('no-snapshots', rule, {
ruleTester.run('jest-no-snapshots', rule, {
valid: [
{
code: `expect(something).toHaveProperty('something');`,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
const {FlatRuleTester: RuleTester} = require('eslint/use-at-your-own-risk');
const typescriptParser = require('@typescript-eslint/parser');

const rule = require('../../../../lib/rules/typescript/prefer-build-client-schema');
const rule = require('../../../lib/rules/typescript-prefer-build-client-schema');

const ruleTester = new RuleTester({
languageOptions: {parser: typescriptParser},
Expand All @@ -13,7 +13,7 @@ function error() {
};
}

ruleTester.run('prefer-build-client-schema', rule, {
ruleTester.run('typescript-prefer-build-client-schema', rule, {
valid: [
{
code: `import {foo} from 'bar';`,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
const {FlatRuleTester: RuleTester} = require('eslint/use-at-your-own-risk');
const typescriptParser = require('@typescript-eslint/parser');

const rule = require('../../../../lib/rules/typescript/prefer-pascal-case-enums');
const rule = require('../../../lib/rules/typescript-prefer-pascal-case-enums');

const ruleTester = new RuleTester({
languageOptions: {parser: typescriptParser},
Expand All @@ -13,7 +13,7 @@ function errorWithName(name) {
};
}

ruleTester.run('prefer-pascal-case-enums', rule, {
ruleTester.run('typescript-prefer-pascal-case-enums', rule, {
valid: [
{
code: `enum SortOrder {MostRecent, LeastRecent, Newest, Oldest}`,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
const {FlatRuleTester: RuleTester} = require('eslint/use-at-your-own-risk');
const typescriptParser = require('@typescript-eslint/parser');

const rule = require('../../../../lib/rules/typescript/prefer-singular-enums');
const rule = require('../../../lib/rules/typescript-prefer-singular-enums');

const ruleTester = new RuleTester({
languageOptions: {parser: typescriptParser},
Expand All @@ -14,7 +14,7 @@ function errorWithName(name) {
};
}

ruleTester.run('prefer-singular-enums', rule, {
ruleTester.run('typescript-prefer-singular-enums', rule, {
valid: [
{
code: `enum SortOrder {MostRecent, LeastRecent, Newest, Oldest}`,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
const {FlatRuleTester: RuleTester} = require('eslint/use-at-your-own-risk');
const typescriptParser = require('@typescript-eslint/parser');

const rule = require('../../../../lib/rules/webpack/no-unnamed-dynamic-imports');
const rule = require('../../../lib/rules/webpack-no-unnamed-dynamic-imports');

const ruleTester = new RuleTester();

const CHUNK_NAME_REQUIRED =
'imports should have a webpackChunkName (https://webpack.js.org/api/module-methods/#import-)';

ruleTester.run('webpack/no-unnamed-dynamic-imports', rule, {
ruleTester.run('webpack-no-unnamed-dynamic-imports', rule, {
valid: [
{
code: `
Expand Down

0 comments on commit 421b2b9

Please sign in to comment.