eslint-plugin-jest-formatting 1.0.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.
Files changed (33) hide show
  1. package/.circleci/config.yml +2 -2
  2. package/.eslintrc +15 -4
  3. package/CHANGELOG.md +28 -6
  4. package/README.md +21 -13
  5. package/docs/rules/padding-around-all.md +13 -0
  6. package/lib/ast-utils.js +41 -0
  7. package/lib/index.js +159 -76
  8. package/lib/rules/padding.js +131 -158
  9. package/package.json +20 -19
  10. package/src/ast-utils.ts +80 -0
  11. package/src/index.ts +166 -81
  12. package/src/rules/padding.ts +263 -252
  13. package/tests/catfood.js +41 -0
  14. package/tests/dogfood.spec.js +2 -0
  15. package/tests/lib/ast-utils.spec.ts +94 -0
  16. package/tests/lib/rules/padding-around-after-all-blocks.spec.js +3 -8
  17. package/tests/lib/rules/padding-around-after-each-blocks.spec.js +3 -8
  18. package/tests/lib/rules/padding-around-before-all-blocks.spec.js +3 -8
  19. package/tests/lib/rules/padding-around-before-each-blocks.spec.js +3 -8
  20. package/tests/lib/rules/padding-around-describe-blocks.spec.js +7 -12
  21. package/tests/lib/rules/padding-around-expect-groups.spec.js +3 -8
  22. package/tests/lib/rules/padding-around-test-blocks.spec.js +15 -12
  23. package/tsconfig.json +1 -1
  24. package/lib/utils.js +0 -15
  25. package/src/utils.ts +0 -40
  26. package/tests/lib/rules/padding-before-after-all-blocks.spec.js +0 -104
  27. package/tests/lib/rules/padding-before-after-each-blocks.spec.js +0 -104
  28. package/tests/lib/rules/padding-before-before-all-blocks.spec.js +0 -104
  29. package/tests/lib/rules/padding-before-before-each-blocks.spec.js +0 -104
  30. package/tests/lib/rules/padding-before-describe-blocks.spec.js +0 -150
  31. package/tests/lib/rules/padding-before-expect-statements.spec.js +0 -144
  32. package/tests/lib/rules/padding-before-test-blocks.spec.js +0 -159
  33. package/yarn.lock +0 -4232
@@ -0,0 +1,94 @@
1
+ import { isValidParent, isTokenASemicolon, areTokensOnSameLine } from "../../src/ast-utils";
2
+ import { AST } from "eslint";
3
+ import { Node } from "estree";
4
+
5
+ describe('isValidParent', () => {
6
+ test.each`
7
+ type | expected
8
+ ${'Program'} | ${true}
9
+ ${'BlockStatement'} | ${true}
10
+ ${'SwitchCase'} | ${true}
11
+ ${'SwitchStatement'} | ${true}
12
+ ${'Statement'} | ${false}
13
+ `('returns $expected for parent value of $type', ({ type, expected }) => {
14
+ expect(isValidParent(type)).toBe(expected);
15
+ });
16
+ });
17
+
18
+ describe('isTokenASemicolon', () => {
19
+ test.each`
20
+ type | value | expected
21
+ ${'Punctuator'} | ${';'} | ${true}
22
+ ${'Punctuator'} | ${'.'} | ${false}
23
+ ${'String'} | ${';'} | ${false}
24
+ `('returns $expected for $type and $value', ({ type, value, expected}) => {
25
+ const token: AST.Token = {
26
+ type,
27
+ value,
28
+ range: [0, 1],
29
+ loc: {
30
+ start: {
31
+ line: 0,
32
+ column: 0,
33
+ },
34
+ end: {
35
+ line: 0,
36
+ column: 1,
37
+ }
38
+ }
39
+ };
40
+
41
+ expect(isTokenASemicolon(token)).toBe(expected);
42
+ });
43
+ });
44
+
45
+ describe('areTokensOnSameLine', () => {
46
+ const makeNode = (line: number): Node => {
47
+ return {
48
+ type: 'Identifier',
49
+ name: 'describe',
50
+ loc: {
51
+ start: {
52
+ line,
53
+ column: 10
54
+ },
55
+ end: {
56
+ line,
57
+ column: 10
58
+ },
59
+ },
60
+ };
61
+ };
62
+
63
+ const makeToken = (line: number): AST.Token => {
64
+ return {
65
+ type: 'Punctuator',
66
+ value: ';',
67
+ range: [0, 1],
68
+ loc: {
69
+ start: {
70
+ line,
71
+ column: 10
72
+ },
73
+ end: {
74
+ line,
75
+ column: 10
76
+ },
77
+ },
78
+ };
79
+ };
80
+
81
+ test.each`
82
+ left | right | expected
83
+ ${makeNode(1)} | ${makeNode(1)} | ${true}
84
+ ${makeNode(1)} | ${makeToken(1)} | ${true}
85
+ ${makeToken(1)} | ${makeNode(1)} | ${true}
86
+ ${makeToken(1)} | ${makeToken(1)} | ${true}
87
+ ${makeNode(1)} | ${makeNode(2)} | ${false}
88
+ ${makeNode(1)} | ${makeToken(2)} | ${false}
89
+ ${makeToken(1)} | ${makeNode(2)} | ${false}
90
+ ${makeToken(1)} | ${makeToken(2)} | ${false}
91
+ `('returns $expected for left node/token ending on $left.loc.end.line and right node/token starting on $right.loc.start.line', ({ left, right, expected }) => {
92
+ expect(areTokensOnSameLine(left, right)).toBe(expected);
93
+ });
94
+ });
@@ -71,13 +71,7 @@ describe('someText', () => {
71
71
  `;
72
72
 
73
73
  ruleTester.run('padding-before-after-all-blocks', rule, {
74
- valid: [
75
- valid,
76
- {
77
- code: invalid,
78
- filename: 'src/component.jsx'
79
- }
80
- ],
74
+ valid: [valid],
81
75
  invalid: [
82
76
  {
83
77
  code: invalid,
@@ -114,7 +108,8 @@ ruleTester.run('padding-before-after-all-blocks', rule, {
114
108
  line: 18,
115
109
  column: 3
116
110
  },
117
- ]
111
+ ],
112
+ output: valid,
118
113
  },
119
114
  ]
120
115
  });
@@ -69,13 +69,7 @@ describe('someText', () => {
69
69
  `;
70
70
 
71
71
  ruleTester.run('padding-before-after-each-blocks', rule, {
72
- valid: [
73
- valid,
74
- {
75
- code: invalid,
76
- filename: 'src/component.jsx'
77
- }
78
- ],
72
+ valid: [valid],
79
73
  invalid: [
80
74
  {
81
75
  code: invalid,
@@ -112,7 +106,8 @@ ruleTester.run('padding-before-after-each-blocks', rule, {
112
106
  line: 17,
113
107
  column: 3
114
108
  },
115
- ]
109
+ ],
110
+ output: valid,
116
111
  },
117
112
  ]
118
113
  });
@@ -71,13 +71,7 @@ describe('someText', () => {
71
71
  `;
72
72
 
73
73
  ruleTester.run('padding-before-before-all-blocks', rule, {
74
- valid: [
75
- valid,
76
- {
77
- code: invalid,
78
- filename: 'src/component.jsx'
79
- }
80
- ],
74
+ valid: [valid],
81
75
  invalid: [
82
76
  {
83
77
  code: invalid,
@@ -114,7 +108,8 @@ ruleTester.run('padding-before-before-all-blocks', rule, {
114
108
  line: 18,
115
109
  column: 3
116
110
  },
117
- ]
111
+ ],
112
+ output: valid,
118
113
  },
119
114
  ]
120
115
  });
@@ -71,13 +71,7 @@ describe('someText', () => {
71
71
  `;
72
72
 
73
73
  ruleTester.run('padding-before-before-each-blocks', rule, {
74
- valid: [
75
- valid,
76
- {
77
- code: invalid,
78
- filename: 'src/component.jsx'
79
- }
80
- ],
74
+ valid: [valid],
81
75
  invalid: [
82
76
  {
83
77
  code: invalid,
@@ -114,7 +108,8 @@ ruleTester.run('padding-before-before-each-blocks', rule, {
114
108
  line: 18,
115
109
  column: 3
116
110
  },
117
- ]
111
+ ],
112
+ output: valid,
118
113
  },
119
114
  ]
120
115
  });
@@ -39,7 +39,7 @@ describe('someText', () => {
39
39
  });
40
40
  });
41
41
 
42
- describe('someObject', () => {
42
+ xdescribe('someObject', () => {
43
43
  // Another comment
44
44
  describe('some condition', () => {
45
45
  const anotherThing = 500;
@@ -49,7 +49,7 @@ describe('someObject', () => {
49
49
  });
50
50
  });
51
51
 
52
- describe('weird', () => {});
52
+ fdescribe('weird', () => {});
53
53
 
54
54
  describe.skip('skip me', () => {});
55
55
 
@@ -77,14 +77,14 @@ describe('someText', () => {
77
77
  describe('some other condition', () => {
78
78
  });
79
79
  });
80
- describe('someObject', () => {
80
+ xdescribe('someObject', () => {
81
81
  // Another comment
82
82
  describe('some condition', () => {
83
83
  const anotherThing = 500;
84
84
  describe('yet another condition', () => { // A comment over here!
85
85
  });
86
86
  });
87
- });describe('weird', () => {});
87
+ });fdescribe('weird', () => {});
88
88
  describe.skip('skip me', () => {});
89
89
  const BOOP = "boop";
90
90
  describe
@@ -94,13 +94,7 @@ describe
94
94
  `;
95
95
 
96
96
  ruleTester.run('padding-around-describe-blocks', rule, {
97
- valid: [
98
- valid,
99
- {
100
- code: invalid,
101
- filename: 'src/component.jsx',
102
- }
103
- ],
97
+ valid: [valid],
104
98
  invalid: [
105
99
  {
106
100
  code: invalid,
@@ -152,7 +146,8 @@ ruleTester.run('padding-around-describe-blocks', rule, {
152
146
  line: 27,
153
147
  column: 1
154
148
  },
155
- ]
149
+ ],
150
+ output: valid,
156
151
  },
157
152
  ]
158
153
  });
@@ -106,13 +106,7 @@ describe('someText', () => {
106
106
  `;
107
107
 
108
108
  ruleTester.run('padding-around-expect-groups', rule, {
109
- valid: [
110
- valid,
111
- {
112
- code: invalid,
113
- filename: 'src/component.jsx',
114
- }
115
- ],
109
+ valid: [valid],
116
110
  invalid: [
117
111
  {
118
112
  code: invalid,
@@ -154,7 +148,8 @@ ruleTester.run('padding-around-expect-groups', rule, {
154
148
  line: 32,
155
149
  column: 7
156
150
  },
157
- ]
151
+ ],
152
+ output: valid,
158
153
  },
159
154
  ]
160
155
  });
@@ -27,7 +27,7 @@ it('foo', () => {
27
27
  // stuff
28
28
  });
29
29
 
30
- it('bar', () => {
30
+ fit('bar', () => {
31
31
  // stuff
32
32
  });
33
33
 
@@ -51,10 +51,12 @@ describe('other bar', () => {
51
51
  it.skip('skipping too', () => {});
52
52
  });
53
53
 
54
- test('weird', () => {});
54
+ xtest('weird', () => {});
55
55
 
56
56
  test
57
57
  .skip('skippy skip', () => {});
58
+
59
+ xit('bar foo', () => {});
58
60
  `;
59
61
 
60
62
  const invalid = `
@@ -63,7 +65,7 @@ const bar = 'baz';
63
65
  it('foo', () => {
64
66
  // stuff
65
67
  });
66
- it('bar', () => {
68
+ fit('bar', () => {
67
69
  // stuff
68
70
  });
69
71
  test('foo foo', () => {});
@@ -79,24 +81,19 @@ describe('other bar', () => {
79
81
  });
80
82
  test.skip('skipping', () => {}); // Another comment
81
83
  it.skip('skipping too', () => {});
82
- });test('weird', () => {});
84
+ });xtest('weird', () => {});
83
85
  test
84
86
  .skip('skippy skip', () => {});
87
+ xit('bar foo', () => {});
85
88
  `;
86
89
 
87
90
  ruleTester.run('padding-around-test-blocks', rule, {
88
- valid: [
89
- valid,
90
- {
91
- code: invalid,
92
- filename: 'src/component.jsx'
93
- }
94
- ],
91
+ valid: [valid],
95
92
  invalid: [
96
93
  {
97
94
  code: invalid,
98
95
  filename: 'src/component.test.jsx',
99
- errors: 10,
96
+ errors: 11,
100
97
  output: valid,
101
98
  },
102
99
  {
@@ -153,7 +150,13 @@ ruleTester.run('padding-around-test-blocks', rule, {
153
150
  line: 24,
154
151
  column: 1
155
152
  },
153
+ {
154
+ message: 'Expected blank line before this statement.',
155
+ line: 26,
156
+ column: 1
157
+ },
156
158
  ],
159
+ output: valid,
157
160
  },
158
161
  ],
159
162
  });
package/tsconfig.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "compilerOptions": {
3
3
  "module": "commonjs",
4
- "noImplicitAny": false,
4
+ "noImplicitAny": true,
5
5
  "removeComments": true,
6
6
  "preserveConstEnums": true,
7
7
  "target": "es2015",
package/lib/utils.js DELETED
@@ -1,15 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const padding_1 = require("./rules/padding");
4
- exports.makeRule = (options) => {
5
- return {
6
- meta: {
7
- fixable: 'whitespace',
8
- },
9
- create(context) {
10
- const ctx = Object.create(context, { options: { value: options } });
11
- Object.freeze(ctx);
12
- return padding_1.default.create(ctx);
13
- },
14
- };
15
- };
package/src/utils.ts DELETED
@@ -1,40 +0,0 @@
1
- import { Rule } from 'eslint';
2
- import padding from './rules/padding';
3
-
4
- type TokenIdentifier =
5
- | '*'
6
- | 'afterAll'
7
- | 'afterEach'
8
- | 'beforeAll'
9
- | 'beforeEach'
10
- | 'describe'
11
- | 'expect'
12
- | 'it'
13
- | 'test';
14
-
15
- interface RuleOption {
16
- blankLine: 'always' | 'any' | 'never';
17
- prev: TokenIdentifier | TokenIdentifier[];
18
- next: TokenIdentifier | TokenIdentifier[];
19
- }
20
-
21
- // Returns a rule that wraps a call to padding.create and adds the given options
22
- // to the RuleContext so users don't have to.
23
- export const makeRule = (options: RuleOption[]): Rule.RuleModule => {
24
- return {
25
- meta: {
26
- fixable: 'whitespace',
27
- },
28
- create(context: Rule.RuleContext) {
29
- // Copy the RuleContext and overwrite options; it's frozen and
30
- // we can't set them directly.
31
- const ctx = Object.create(context, { options: { value: options } });
32
-
33
- // Freeze it again
34
- Object.freeze(ctx);
35
-
36
- // Call the original create method with new context
37
- return padding.create(ctx);
38
- },
39
- };
40
- };
@@ -1,104 +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: [
69
- valid,
70
- {
71
- code: invalid,
72
- filename: 'src/component.jsx'
73
- }
74
- ],
75
- invalid: [
76
- {
77
- code: invalid,
78
- filename: 'src/component.test.jsx',
79
- errors: 3,
80
- output: valid,
81
- },
82
- {
83
- code: invalid,
84
- filename: 'src/component.test.js',
85
- errors: [
86
- {
87
- message: 'Expected blank line before this statement.',
88
- line: 3,
89
- column: 1
90
- },
91
- {
92
- message: 'Expected blank line before this statement.',
93
- line: 9,
94
- column: 3
95
- },
96
- {
97
- message: 'Expected blank line before this statement.',
98
- line: 16,
99
- column: 3
100
- },
101
- ]
102
- },
103
- ]
104
- });
@@ -1,104 +0,0 @@
1
- /**
2
- * @fileoverview Enforces single line padding before afterEach blocks
3
- */
4
-
5
- //------------------------------------------------------------------------------
6
- // Requirements
7
- //------------------------------------------------------------------------------
8
-
9
- const { RuleTester } = require('eslint');
10
- const rule = require('../../../lib').rules['padding-before-after-each-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
- afterEach(() => {
25
- });
26
-
27
- describe('someText', () => {
28
- const something = 'abc';
29
- // A comment
30
- afterEach(() => {
31
- // stuff
32
- });
33
- });
34
-
35
- describe('someText', () => {
36
- const something = 'abc';
37
- afterEach(() => {
38
- // stuff
39
- });
40
- });
41
- `;
42
-
43
- const valid = `
44
- const someText = 'abc';
45
-
46
- afterEach(() => {
47
- });
48
-
49
- describe('someText', () => {
50
- const something = 'abc';
51
-
52
- // A comment
53
- afterEach(() => {
54
- // stuff
55
- });
56
- });
57
-
58
- describe('someText', () => {
59
- const something = 'abc';
60
-
61
- afterEach(() => {
62
- // stuff
63
- });
64
- });
65
- `;
66
-
67
- ruleTester.run('padding-before-after-each-blocks', rule, {
68
- valid: [
69
- valid,
70
- {
71
- code: invalid,
72
- filename: 'src/component.jsx'
73
- }
74
- ],
75
- invalid: [
76
- {
77
- code: invalid,
78
- errors: 3,
79
- filename: 'src/component.test.jsx',
80
- output: valid,
81
- },
82
- {
83
- code: invalid,
84
- filename: 'src/component.test.js',
85
- errors: [
86
- {
87
- message: 'Expected blank line before this statement.',
88
- line: 3,
89
- column: 1
90
- },
91
- {
92
- message: 'Expected blank line before this statement.',
93
- line: 9,
94
- column: 3
95
- },
96
- {
97
- message: 'Expected blank line before this statement.',
98
- line: 16,
99
- column: 3
100
- },
101
- ]
102
- },
103
- ]
104
- });