eslint-plugin-jest-formatting 1.2.0 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -7,7 +7,7 @@ version: 2
7
7
  defaults: &defaults
8
8
  working_directory: ~/repo
9
9
  docker:
10
- - image: circleci/node:8.10.0
10
+ - image: circleci/node:10
11
11
 
12
12
  jobs:
13
13
  test:
@@ -28,7 +28,7 @@ jobs:
28
28
  command: yarn test
29
29
 
30
30
  - run: yarn lint
31
-
31
+
32
32
  - save_cache:
33
33
  paths:
34
34
  - node_modules
package/.eslintrc CHANGED
@@ -3,21 +3,32 @@
3
3
  "parserOptions": {
4
4
  "sourceType": "module"
5
5
  },
6
- "plugins": ["jest-formatting", "jest"],
6
+ "plugins": ["jest-formatting", "jest", "@typescript-eslint/eslint-plugin"],
7
7
  "env": {
8
8
  "jest/globals": true
9
9
  },
10
10
  "extends": [
11
11
  "airbnb-base",
12
+ "plugin:@typescript-eslint/recommended",
12
13
  "plugin:prettier/recommended",
13
- "plugin:jest-formatting/recommended"
14
+ "plugin:jest-formatting/recommended",
15
+ "plugin:import/typescript"
14
16
  ],
15
17
  "overrides": [
16
18
  {
17
19
  "files": ["**.*"],
18
20
  "rules": {
19
- "camelcase": "off"
21
+ "camelcase": "off",
22
+ "no-plusplus": "off",
23
+ "import/extensions": "off"
20
24
  }
21
25
  }
22
- ]
26
+ ],
27
+ "settings": {
28
+ "import/resolver": {
29
+ "typescript": {
30
+ "alwaysTryTypes": true // Without this `@types/estree` `estree` isn't actually in our node_modules.
31
+ }
32
+ }
33
+ }
23
34
  }
package/README.md CHANGED
@@ -1,14 +1,16 @@
1
1
  [![CircleCI](https://circleci.com/gh/dangreenisrael/eslint-plugin-jest-formatting/tree/master.svg?style=svg)](https://circleci.com/gh/dangreenisrael/eslint-plugin-jest-formatting/tree/master)
2
2
  ![npm monthly downloads](https://img.shields.io/npm/dm/eslint-plugin-jest-formatting.svg)
3
3
 
4
- **_Note: The master version may not be the version deployed to npm. Please treat https://www.npmjs.com/package/eslint-plugin-jest-formatting as the cannonical source for docs._**
5
-
6
4
  # eslint-plugin-jest-formatting
7
5
 
6
+ This package provides ESLint rules for jest test suites.
7
+
8
8
  This project aims to provide formatting rules (auto-fixable where possible) to ensure consistency and readability in jest test suites.
9
9
 
10
10
  Like this plugin? [Say thanks with a ⭐️](https://github.com/dangreenisrael/eslint-plugin-jest-formatting/stargazers)
11
11
 
12
+ **_Note: The master version may not be the version deployed to npm. Please treat https://www.npmjs.com/package/eslint-plugin-jest-formatting as the cannonical source for docs._**
13
+
12
14
  ## Installation
13
15
 
14
16
  You'll first need to install [ESLint](http://eslint.org):
@@ -75,13 +77,10 @@ We also support a "strict" settings which enabled all of the rules for you
75
77
  - [padding-around-test-blocks](docs/rules/padding-around-test-blocks.md)
76
78
  - [padding-around-all](docs/rules/padding-around-all.md)
77
79
 
78
- ### Deprecated
80
+ ## Related Projects
81
+
82
+ ### eslint-plugin-jest
83
+
84
+ This provides an extensive set of jest eslint rules
79
85
 
80
- - [padding-before-all](docs/rules/padding-before-all.md)
81
- - [padding-before-before-each-blocks](docs/rules/padding-before-before-each-blocks.md)
82
- - [padding-before-after-each-blocks](docs/rules/padding-before-after-each-blocks.md)
83
- - [padding-before-before-all-blocks](docs/rules/padding-before-before-all-blocks.md)
84
- - [padding-before-after-all-blocks](docs/rules/padding-before-after-all-blocks.md)
85
- - [padding-before-describe-blocks](docs/rules/padding-before-describe-blocks.md)
86
- - [padding-before-expect-statements](docs/rules/padding-before-expect-statements.md)
87
- - [padding-before-test-blocks](docs/rules/padding-before-test-blocks.md)
86
+ https://github.com/jest-community/eslint-plugin-jest
package/lib/ast-utils.js CHANGED
@@ -1,5 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getPaddingLineSequences = exports.getActualLastToken = exports.isValidParent = exports.areTokensOnSameLine = exports.isTokenASemicolon = void 0;
3
4
  exports.isTokenASemicolon = (token) => token.value === ';' && token.type === 'Punctuator';
4
5
  exports.areTokensOnSameLine = (left, right) => left.loc.end.line === right.loc.start.line;
5
6
  const STATEMENT_LIST_PARENTS = new Set([
package/lib/index.js CHANGED
@@ -1,5 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.configs = exports.rules = void 0;
3
4
  const padding_1 = require("./rules/padding");
4
5
  const paddingConfigs = {
5
6
  afterAll: [
@@ -120,82 +121,7 @@ exports.rules = {
120
121
  'padding-around-describe-blocks': padding_1.createRule(paddingConfigs.describe),
121
122
  'padding-around-expect-groups': padding_1.createRule(paddingConfigs.expect),
122
123
  'padding-around-test-blocks': padding_1.createRule(paddingConfigs.test),
123
- 'padding-around-all': padding_1.createRule([].concat(...Object.keys(paddingConfigs).map(k => paddingConfigs[k]))),
124
- 'padding-before-after-all-blocks': padding_1.createRule([
125
- {
126
- paddingType: 1,
127
- prevStatementType: 0,
128
- nextStatementType: 1,
129
- },
130
- ], true),
131
- 'padding-before-after-each-blocks': padding_1.createRule([
132
- {
133
- paddingType: 1,
134
- prevStatementType: 0,
135
- nextStatementType: 2,
136
- },
137
- ], true),
138
- 'padding-before-before-all-blocks': padding_1.createRule([
139
- {
140
- paddingType: 1,
141
- prevStatementType: 0,
142
- nextStatementType: 3,
143
- },
144
- ], true),
145
- 'padding-before-before-each-blocks': padding_1.createRule([
146
- {
147
- paddingType: 1,
148
- prevStatementType: 0,
149
- nextStatementType: 4,
150
- },
151
- ], true),
152
- 'padding-before-describe-blocks': padding_1.createRule([
153
- {
154
- paddingType: 1,
155
- prevStatementType: 0,
156
- nextStatementType: 5,
157
- },
158
- ], true),
159
- 'padding-before-expect-statements': padding_1.createRule([
160
- {
161
- paddingType: 1,
162
- prevStatementType: 0,
163
- nextStatementType: 6,
164
- },
165
- {
166
- paddingType: 0,
167
- prevStatementType: 6,
168
- nextStatementType: 6,
169
- },
170
- ], true),
171
- 'padding-before-test-blocks': padding_1.createRule([
172
- {
173
- paddingType: 1,
174
- prevStatementType: 0,
175
- nextStatementType: [10, 9],
176
- },
177
- ], true),
178
- 'padding-before-all': padding_1.createRule([
179
- {
180
- paddingType: 1,
181
- prevStatementType: 0,
182
- nextStatementType: [
183
- 1,
184
- 2,
185
- 3,
186
- 4,
187
- 5,
188
- 6,
189
- 9,
190
- 10,
191
- ],
192
- },
193
- {
194
- paddingType: 0,
195
- prevStatementType: 6,
196
- nextStatementType: 6,
197
- },
198
- ], true),
124
+ 'padding-around-all': padding_1.createRule([].concat(...Object.keys(paddingConfigs).map((k) => paddingConfigs[k]))),
199
125
  };
200
126
  exports.configs = {
201
127
  recommended: {
@@ -1,5 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createRule = exports.PaddingType = exports.StatementType = void 0;
3
4
  const astUtils = require("../ast-utils");
4
5
  var StatementType;
5
6
  (function (StatementType) {
@@ -105,7 +106,7 @@ const nodeMatchesType = (node, statementType, paddingContext) => {
105
106
  innerStatementNode = innerStatementNode.body;
106
107
  }
107
108
  if (Array.isArray(statementType)) {
108
- return statementType.some(type => nodeMatchesType(innerStatementNode, type, paddingContext));
109
+ return statementType.some((type) => nodeMatchesType(innerStatementNode, type, paddingContext));
109
110
  }
110
111
  return statementTesters[statementType](innerStatementNode, sourceCode);
111
112
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "eslint-plugin-jest-formatting",
3
- "version": "1.2.0",
3
+ "version": "2.0.0",
4
4
  "description": "Formatting rules for jest tests",
5
5
  "keywords": [
6
6
  "eslint",
@@ -20,8 +20,8 @@
20
20
  "module": "src/index.ts",
21
21
  "scripts": {
22
22
  "pretty": "yarn prettier '**/*.*'",
23
- "lint": "yarn build && yarn link-plugin && yarn pretty --check && yarn eslint .",
24
- "format": "yarn build && yarn link-plugin && yarn pretty --write && yarn eslint --fix .",
23
+ "lint": "yarn build && yarn link-plugin && yarn pretty --check && yarn eslint --ext .ts,.js .",
24
+ "format": "yarn build && yarn link-plugin && yarn pretty --write && yarn eslint --fix --ext .ts,.js .",
25
25
  "build": "tsc",
26
26
  "test": "yarn build && jest",
27
27
  "link-plugin": "yarn link && yarn link eslint-plugin-jest-formatting"
@@ -30,25 +30,26 @@
30
30
  "eslint": ">=0.8.0"
31
31
  },
32
32
  "devDependencies": {
33
- "@types/eslint": "4.16.6",
34
- "@types/estree": "0.0.39",
35
- "@types/jest": "24.0.11",
36
- "@types/node": "8.10.0",
37
- "@typescript-eslint/parser": "1.10.2",
38
- "eslint": "5.16.0",
39
- "eslint-config-airbnb-base": "13.1.0",
40
- "eslint-config-prettier": "5.0.0",
41
- "eslint-plugin-import": "2.14.0",
42
- "eslint-plugin-jest": "22.7.0",
33
+ "@types/eslint": "^7.2.0",
34
+ "@types/jest": "^26.0.0",
35
+ "@types/node": "^14.0.13",
36
+ "@typescript-eslint/eslint-plugin": "^3.4.0",
37
+ "@typescript-eslint/parser": "^3.4.0",
38
+ "eslint": "^7.3.1",
39
+ "eslint-config-airbnb-base": "^14.2.0",
40
+ "eslint-config-prettier": "^6.11.0",
41
+ "eslint-import-resolver-typescript": "^2.0.0",
42
+ "eslint-plugin-import": "^2.21.2",
43
+ "eslint-plugin-jest": "^23.17.1",
43
44
  "eslint-plugin-jest-formatting": "file:.",
44
- "eslint-plugin-prettier": "3.1.0",
45
- "jest": "24.8.0",
46
- "prettier": "1.18.2",
47
- "typescript": "3.4.1",
48
- "ts-jest": "24.0.2"
45
+ "eslint-plugin-prettier": "^3.1.4",
46
+ "jest": "^26.1.0",
47
+ "prettier": "2.0.5",
48
+ "typescript": "^3.9.5",
49
+ "ts-jest": "^26.1.1"
49
50
  },
50
51
  "engines": {
51
- "node": ">=8.10.0"
52
+ "node": "^10.12.0 || >=12.0.0"
52
53
  },
53
54
  "license": "MIT"
54
55
  }
package/src/ast-utils.ts CHANGED
@@ -1,4 +1,6 @@
1
1
  import { AST, SourceCode } from 'eslint';
2
+ // This is because we are using @types/estree that are brought in with eslint
3
+ // eslint-disable-next-line import/no-extraneous-dependencies
2
4
  import { Node } from 'estree';
3
5
 
4
6
  export const isTokenASemicolon = (token: AST.Token): boolean =>
package/src/index.ts CHANGED
@@ -131,116 +131,7 @@ export const rules = {
131
131
  'padding-around-expect-groups': createRule(paddingConfigs.expect),
132
132
  'padding-around-test-blocks': createRule(paddingConfigs.test),
133
133
  'padding-around-all': createRule(
134
- [].concat(...Object.keys(paddingConfigs).map(k => paddingConfigs[k])),
135
- ),
136
-
137
- // ===========================================================================
138
- // DEPRECATED
139
- 'padding-before-after-all-blocks': createRule(
140
- [
141
- {
142
- paddingType: PaddingType.Always,
143
- prevStatementType: StatementType.Any,
144
- nextStatementType: StatementType.AfterAllToken,
145
- },
146
- ],
147
- true,
148
- ),
149
- // DEPRECATED
150
- 'padding-before-after-each-blocks': createRule(
151
- [
152
- {
153
- paddingType: PaddingType.Always,
154
- prevStatementType: StatementType.Any,
155
- nextStatementType: StatementType.AfterEachToken,
156
- },
157
- ],
158
- true,
159
- ),
160
- // DEPRECATED
161
- 'padding-before-before-all-blocks': createRule(
162
- [
163
- {
164
- paddingType: PaddingType.Always,
165
- prevStatementType: StatementType.Any,
166
- nextStatementType: StatementType.BeforeAllToken,
167
- },
168
- ],
169
- true,
170
- ),
171
- // DEPRECATED
172
- 'padding-before-before-each-blocks': createRule(
173
- [
174
- {
175
- paddingType: PaddingType.Always,
176
- prevStatementType: StatementType.Any,
177
- nextStatementType: StatementType.BeforeEachToken,
178
- },
179
- ],
180
- true,
181
- ),
182
- // DEPRECATED
183
- 'padding-before-describe-blocks': createRule(
184
- [
185
- {
186
- paddingType: PaddingType.Always,
187
- prevStatementType: StatementType.Any,
188
- nextStatementType: StatementType.DescribeToken,
189
- },
190
- ],
191
- true,
192
- ),
193
- // DEPRECATED
194
- 'padding-before-expect-statements': createRule(
195
- [
196
- {
197
- paddingType: PaddingType.Always,
198
- prevStatementType: StatementType.Any,
199
- nextStatementType: StatementType.ExpectToken,
200
- },
201
- {
202
- paddingType: PaddingType.Any,
203
- prevStatementType: StatementType.ExpectToken,
204
- nextStatementType: StatementType.ExpectToken,
205
- },
206
- ],
207
- true,
208
- ),
209
- // DEPRECATED
210
- 'padding-before-test-blocks': createRule(
211
- [
212
- {
213
- paddingType: PaddingType.Always,
214
- prevStatementType: StatementType.Any,
215
- nextStatementType: [StatementType.TestToken, StatementType.ItToken],
216
- },
217
- ],
218
- true,
219
- ),
220
- // DEPRECATED
221
- 'padding-before-all': createRule(
222
- [
223
- {
224
- paddingType: PaddingType.Always,
225
- prevStatementType: StatementType.Any,
226
- nextStatementType: [
227
- StatementType.AfterAllToken,
228
- StatementType.AfterEachToken,
229
- StatementType.BeforeAllToken,
230
- StatementType.BeforeEachToken,
231
- StatementType.DescribeToken,
232
- StatementType.ExpectToken,
233
- StatementType.ItToken,
234
- StatementType.TestToken,
235
- ],
236
- },
237
- {
238
- paddingType: PaddingType.Any,
239
- prevStatementType: StatementType.ExpectToken,
240
- nextStatementType: StatementType.ExpectToken,
241
- },
242
- ],
243
- true,
134
+ [].concat(...Object.keys(paddingConfigs).map((k) => paddingConfigs[k])),
244
135
  ),
245
136
  };
246
137
 
@@ -9,6 +9,8 @@
9
9
  */
10
10
 
11
11
  import { AST, Rule, SourceCode } from 'eslint';
12
+ // This is because we are using @types/estree that are brought in with eslint
13
+ // eslint-disable-next-line import/no-extraneous-dependencies
12
14
  import { Node } from 'estree';
13
15
  import * as astUtils from '../ast-utils';
14
16
 
@@ -219,7 +221,7 @@ const nodeMatchesType = (
219
221
  // If it's an array recursively check if any of the statement types match
220
222
  // the node
221
223
  if (Array.isArray(statementType)) {
222
- return statementType.some(type =>
224
+ return statementType.some((type) =>
223
225
  nodeMatchesType(innerStatementNode, type, paddingContext),
224
226
  );
225
227
  }
@@ -271,8 +273,8 @@ const verifyNode = (node: Node, paddingContext: PaddingContext): void => {
271
273
  // ESTree.Node doesn't support the parent property which is added by
272
274
  // ESLint during traversal. Our best bet is to ignore the property access
273
275
  // here as it's the only place that it's checked.
274
- // @ts-ignore
275
- if (!astUtils.isValidParent(node.parent.type)) {
276
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
277
+ if (!astUtils.isValidParent((node as any).parent.type)) {
276
278
  return;
277
279
  }
278
280
 
@@ -314,7 +316,7 @@ const verifyNode = (node: Node, paddingContext: PaddingContext): void => {
314
316
  */
315
317
  export const createRule = (
316
318
  configs: Config[],
317
- deprecated: boolean = false,
319
+ deprecated = false,
318
320
  ): Rule.RuleModule => ({
319
321
  meta: {
320
322
  fixable: 'whitespace',
package/tests/catfood.js CHANGED
@@ -4,6 +4,8 @@
4
4
  * globs.
5
5
  */
6
6
 
7
+ /* eslint-disable @typescript-eslint/no-empty-function */
8
+
7
9
  beforeAll(() => {});
8
10
  beforeEach(() => {});
9
11
  afterAll(() => {});
@@ -1,3 +1,5 @@
1
+ /* eslint-disable @typescript-eslint/no-empty-function */
2
+
1
3
  beforeAll(() => {});
2
4
 
3
5
  beforeEach(() => {});
@@ -108,7 +108,8 @@ ruleTester.run('padding-before-after-all-blocks', rule, {
108
108
  line: 18,
109
109
  column: 3
110
110
  },
111
- ]
111
+ ],
112
+ output: valid,
112
113
  },
113
114
  ]
114
115
  });
@@ -106,7 +106,8 @@ ruleTester.run('padding-before-after-each-blocks', rule, {
106
106
  line: 17,
107
107
  column: 3
108
108
  },
109
- ]
109
+ ],
110
+ output: valid,
110
111
  },
111
112
  ]
112
113
  });
@@ -108,7 +108,8 @@ ruleTester.run('padding-before-before-all-blocks', rule, {
108
108
  line: 18,
109
109
  column: 3
110
110
  },
111
- ]
111
+ ],
112
+ output: valid,
112
113
  },
113
114
  ]
114
115
  });
@@ -108,7 +108,8 @@ ruleTester.run('padding-before-before-each-blocks', rule, {
108
108
  line: 18,
109
109
  column: 3
110
110
  },
111
- ]
111
+ ],
112
+ output: valid,
112
113
  },
113
114
  ]
114
115
  });
@@ -146,7 +146,8 @@ ruleTester.run('padding-around-describe-blocks', rule, {
146
146
  line: 27,
147
147
  column: 1
148
148
  },
149
- ]
149
+ ],
150
+ output: valid,
150
151
  },
151
152
  ]
152
153
  });
@@ -148,7 +148,8 @@ ruleTester.run('padding-around-expect-groups', rule, {
148
148
  line: 32,
149
149
  column: 7
150
150
  },
151
- ]
151
+ ],
152
+ output: valid,
152
153
  },
153
154
  ]
154
155
  });
@@ -156,6 +156,7 @@ ruleTester.run('padding-around-test-blocks', rule, {
156
156
  column: 1
157
157
  },
158
158
  ],
159
+ output: valid,
159
160
  },
160
161
  ],
161
162
  });
@@ -1,98 +0,0 @@
1
- /**
2
- * @fileoverview Enforces single line padding before afterAll blocks
3
- */
4
-
5
- //------------------------------------------------------------------------------
6
- // Requirements
7
- //------------------------------------------------------------------------------
8
-
9
- const { RuleTester } = require('eslint');
10
- const rule = require('../../../lib').rules['padding-before-after-all-blocks'];
11
-
12
- const ruleTester = new RuleTester({
13
- parserOptions: {
14
- ecmaVersion: 6,
15
- },
16
- });
17
-
18
- //------------------------------------------------------------------------------
19
- // Tests
20
- //------------------------------------------------------------------------------
21
-
22
- const invalid = `
23
- const someText = 'abc';
24
- afterAll(() => {
25
- });
26
-
27
- describe('someText', () => {
28
- const something = 'abc';
29
- // A comment
30
- afterAll(() => {
31
- // stuff
32
- });
33
- });
34
-
35
- describe('someText', () => {
36
- const something = 'abc';
37
- afterAll(() => {
38
- // stuff
39
- });
40
- });
41
- `;
42
-
43
- const valid = `
44
- const someText = 'abc';
45
-
46
- afterAll(() => {
47
- });
48
-
49
- describe('someText', () => {
50
- const something = 'abc';
51
-
52
- // A comment
53
- afterAll(() => {
54
- // stuff
55
- });
56
- });
57
-
58
- describe('someText', () => {
59
- const something = 'abc';
60
-
61
- afterAll(() => {
62
- // stuff
63
- });
64
- });
65
- `;
66
-
67
- ruleTester.run('padding-before-after-all-blocks', rule, {
68
- valid: [valid],
69
- invalid: [
70
- {
71
- code: invalid,
72
- filename: 'src/component.test.jsx',
73
- errors: 3,
74
- output: valid,
75
- },
76
- {
77
- code: invalid,
78
- filename: 'src/component.test.js',
79
- errors: [
80
- {
81
- message: 'Expected blank line before this statement.',
82
- line: 3,
83
- column: 1
84
- },
85
- {
86
- message: 'Expected blank line before this statement.',
87
- line: 9,
88
- column: 3
89
- },
90
- {
91
- message: 'Expected blank line before this statement.',
92
- line: 16,
93
- column: 3
94
- },
95
- ]
96
- },
97
- ]
98
- });