Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
epidemian
GitHub Repository: epidemian/eslint-plugin-import
Path: blob/main/tests/src/rules/newline-after-import.js
829 views
1
import { RuleTester } from 'eslint';
2
import flatMap from 'array.prototype.flatmap';
3
4
import { getTSParsers, testVersion } from '../utils';
5
6
const IMPORT_ERROR_MESSAGE = 'Expected 1 empty line after import statement not followed by another import.';
7
const IMPORT_ERROR_MESSAGE_MULTIPLE = (count) => {
8
return `Expected ${count} empty lines after import statement not followed by another import.`;
9
};
10
const REQUIRE_ERROR_MESSAGE = 'Expected 1 empty line after require statement not followed by another require.';
11
12
const ruleTester = new RuleTester();
13
14
ruleTester.run('newline-after-import', require('rules/newline-after-import'), {
15
valid: [
16
`var path = require('path');\nvar foo = require('foo');\n`,
17
`require('foo');`,
18
`switch ('foo') { case 'bar': require('baz'); }`,
19
{
20
code: `
21
const x = () => require('baz')
22
, y = () => require('bar')`,
23
parserOptions: { ecmaVersion: 6 } ,
24
},
25
{
26
code: `const x = () => require('baz') && require('bar')`,
27
parserOptions: { ecmaVersion: 6 } ,
28
},
29
`function x() { require('baz'); }`,
30
`a(require('b'), require('c'), require('d'));`,
31
`function foo() {
32
switch (renderData.modalViewKey) {
33
case 'value':
34
var bar = require('bar');
35
return bar(renderData, options)
36
default:
37
return renderData.mainModalContent.clone()
38
}
39
}`,
40
{ code: `//issue 441
41
function bar() {
42
switch (foo) {
43
case '1':
44
return require('../path/to/file1.jst.hbs')(renderData, options);
45
case '2':
46
return require('../path/to/file2.jst.hbs')(renderData, options);
47
case '3':
48
return require('../path/to/file3.jst.hbs')(renderData, options);
49
case '4':
50
return require('../path/to/file4.jst.hbs')(renderData, options);
51
case '5':
52
return require('../path/to/file5.jst.hbs')(renderData, options);
53
case '6':
54
return require('../path/to/file6.jst.hbs')(renderData, options);
55
case '7':
56
return require('../path/to/file7.jst.hbs')(renderData, options);
57
case '8':
58
return require('../path/to/file8.jst.hbs')(renderData, options);
59
case '9':
60
return require('../path/to/file9.jst.hbs')(renderData, options);
61
case '10':
62
return require('../path/to/file10.jst.hbs')(renderData, options);
63
case '11':
64
return require('../path/to/file11.jst.hbs')(renderData, options);
65
case '12':
66
return something();
67
default:
68
return somethingElse();
69
}
70
}`,
71
parserOptions: { ecmaVersion: 2015, sourceType: 'module' },
72
},
73
{
74
code: `import path from 'path';\nimport foo from 'foo';\n`,
75
parserOptions: { ecmaVersion: 2015, sourceType: 'module' },
76
},
77
{
78
code: `import path from 'path';import foo from 'foo';\n`,
79
parserOptions: { ecmaVersion: 2015, sourceType: 'module' },
80
},
81
{
82
code: `import path from 'path';import foo from 'foo';\n\nvar bar = 42;`,
83
parserOptions: { ecmaVersion: 2015, sourceType: 'module' },
84
},
85
{
86
code: `import foo from 'foo';\n\nvar bar = 'bar';`,
87
parserOptions: { ecmaVersion: 2015, sourceType: 'module' },
88
},
89
{
90
code: `import foo from 'foo';\n\n\nvar bar = 'bar';`,
91
parserOptions: { ecmaVersion: 2015, sourceType: 'module' },
92
options: [{ 'count': 2 }],
93
},
94
{
95
code: `import foo from 'foo';\n\n\n\n\nvar bar = 'bar';`,
96
parserOptions: { ecmaVersion: 2015, sourceType: 'module' },
97
options: [{ 'count': 4 }],
98
},
99
{
100
code: `var foo = require('foo-module');\n\nvar foo = 'bar';`,
101
parserOptions: { ecmaVersion: 2015, sourceType: 'module' },
102
},
103
{
104
code: `var foo = require('foo-module');\n\n\nvar foo = 'bar';`,
105
parserOptions: { ecmaVersion: 2015, sourceType: 'module' },
106
options: [{ 'count': 2 }],
107
},
108
{
109
code: `var foo = require('foo-module');\n\n\n\n\nvar foo = 'bar';`,
110
parserOptions: { ecmaVersion: 2015, sourceType: 'module' },
111
options: [{ 'count': 4 }],
112
},
113
{
114
code: `require('foo-module');\n\nvar foo = 'bar';`,
115
parserOptions: { ecmaVersion: 2015, sourceType: 'module' },
116
},
117
{
118
code: `import foo from 'foo';\nimport { bar } from './bar-lib';`,
119
parserOptions: { ecmaVersion: 2015, sourceType: 'module' },
120
},
121
{
122
code: `import foo from 'foo';\n\nvar a = 123;\n\nimport { bar } from './bar-lib';`,
123
parserOptions: { ecmaVersion: 2015, sourceType: 'module' },
124
},
125
{
126
code: `var foo = require('foo-module');\n\nvar a = 123;\n\nvar bar = require('bar-lib');`,
127
parserOptions: { ecmaVersion: 2015, sourceType: 'module' },
128
},
129
{
130
code: `
131
function foo() {
132
var foo = require('foo');
133
foo();
134
}
135
`,
136
parserOptions: { ecmaVersion: 2015, sourceType: 'module' },
137
},
138
{
139
code: `
140
if (true) {
141
var foo = require('foo');
142
foo();
143
}
144
`,
145
parserOptions: { ecmaVersion: 2015, sourceType: 'module' },
146
},
147
{
148
code: `
149
function a() {
150
var assign = Object.assign || require('object-assign');
151
var foo = require('foo');
152
var bar = 42;
153
}
154
`,
155
parserOptions: { ecmaVersion: 2015, sourceType: 'module' },
156
},
157
{
158
code: `//issue 592
159
export default
160
@SomeDecorator(require('./some-file'))
161
class App {}
162
`,
163
parserOptions: { ecmaVersion: 2015, sourceType: 'module' },
164
parser: require.resolve('babel-eslint'),
165
},
166
{
167
code: `var foo = require('foo');\n\n@SomeDecorator(foo)\nclass Foo {}`,
168
parserOptions: { ecmaVersion: 2015, sourceType: 'module' },
169
parser: require.resolve('babel-eslint'),
170
},
171
{
172
code : `// issue 1004\nimport foo from 'foo';\n\n@SomeDecorator(foo)\nexport default class Test {}`,
173
parserOptions: { sourceType: 'module' },
174
parser: require.resolve('babel-eslint'),
175
},
176
{
177
code : `// issue 1004\nconst foo = require('foo');\n\n@SomeDecorator(foo)\nexport default class Test {}`,
178
parserOptions: { sourceType: 'module' },
179
parser: require.resolve('babel-eslint'),
180
},
181
...flatMap(getTSParsers(), (parser) => [
182
{
183
code: `
184
import { ExecaReturnValue } from 'execa';
185
import execa = require('execa');
186
`,
187
parser,
188
parserOptions: { ecmaVersion: 2015, sourceType: 'module' },
189
},
190
{
191
code: `
192
import execa = require('execa');
193
import { ExecaReturnValue } from 'execa';
194
`,
195
parser,
196
parserOptions: { ecmaVersion: 2015, sourceType: 'module' },
197
},
198
{
199
code: `
200
import { ExecaReturnValue } from 'execa';
201
import execa = require('execa');
202
import { ExecbReturnValue } from 'execb';
203
`,
204
parser,
205
parserOptions: { ecmaVersion: 2015, sourceType: 'module' },
206
},
207
{
208
code: `
209
import execa = require('execa');
210
import { ExecaReturnValue } from 'execa';
211
import execb = require('execb');
212
`,
213
parser,
214
parserOptions: { ecmaVersion: 2015, sourceType: 'module' },
215
},
216
{
217
code: `
218
export import a = obj;\nf(a);
219
`,
220
parser,
221
parserOptions: { ecmaVersion: 2015, sourceType: 'module' },
222
},
223
{
224
code: `
225
import { a } from "./a";
226
227
export namespace SomeNamespace {
228
export import a2 = a;
229
f(a);
230
}`,
231
parser,
232
parserOptions: { ecmaVersion: 2015, sourceType: 'module' },
233
},
234
{
235
code: `
236
import stub from './stub';
237
238
export {
239
stub
240
}
241
`,
242
parser,
243
parserOptions: { ecmaVersion: 2015, sourceType: 'module' },
244
},
245
]),
246
{
247
code: `
248
import stub from './stub';
249
250
export {
251
stub
252
}
253
`,
254
parserOptions: { ecmaVersion: 2015, sourceType: 'module' },
255
},
256
],
257
258
invalid: [].concat(
259
{
260
code: `import foo from 'foo';\nexport default function() {};`,
261
output: `import foo from 'foo';\n\nexport default function() {};`,
262
errors: [ {
263
line: 1,
264
column: 1,
265
message: IMPORT_ERROR_MESSAGE,
266
} ],
267
parserOptions: { ecmaVersion: 2015, sourceType: 'module' },
268
},
269
{
270
code: `import foo from 'foo';\n\nexport default function() {};`,
271
output: `import foo from 'foo';\n\n\nexport default function() {};`,
272
options: [{ 'count': 2 }],
273
errors: [ {
274
line: 1,
275
column: 1,
276
message: IMPORT_ERROR_MESSAGE_MULTIPLE(2),
277
} ],
278
parserOptions: { ecmaVersion: 2015, sourceType: 'module' },
279
},
280
{
281
code: `var foo = require('foo-module');\nvar something = 123;`,
282
output: `var foo = require('foo-module');\n\nvar something = 123;`,
283
errors: [ {
284
line: 1,
285
column: 1,
286
message: REQUIRE_ERROR_MESSAGE,
287
} ],
288
parserOptions: { ecmaVersion: 2015, sourceType: 'module' },
289
},
290
{
291
code: `import foo from 'foo';\nexport default function() {};`,
292
output: `import foo from 'foo';\n\nexport default function() {};`,
293
options: [{ 'count': 1 }],
294
errors: [ {
295
line: 1,
296
column: 1,
297
message: IMPORT_ERROR_MESSAGE,
298
} ],
299
parserOptions: { ecmaVersion: 2015, sourceType: 'module' },
300
},
301
{
302
code: `import foo from 'foo';\nvar a = 123;\n\nimport { bar } from './bar-lib';\nvar b=456;`,
303
output: `import foo from 'foo';\n\nvar a = 123;\n\nimport { bar } from './bar-lib';\n\nvar b=456;`,
304
errors: [
305
{
306
line: 1,
307
column: 1,
308
message: IMPORT_ERROR_MESSAGE,
309
},
310
{
311
line: 4,
312
column: 1,
313
message: IMPORT_ERROR_MESSAGE,
314
}],
315
parserOptions: { ecmaVersion: 2015, sourceType: 'module' },
316
},
317
{
318
code: `var foo = require('foo-module');\nvar a = 123;\n\nvar bar = require('bar-lib');\nvar b=456;`,
319
output: `var foo = require('foo-module');\n\nvar a = 123;\n\nvar bar = require('bar-lib');\n\nvar b=456;`,
320
errors: [
321
{
322
line: 1,
323
column: 1,
324
message: REQUIRE_ERROR_MESSAGE,
325
},
326
{
327
line: 4,
328
column: 1,
329
message: REQUIRE_ERROR_MESSAGE,
330
}],
331
parserOptions: { ecmaVersion: 2015, sourceType: 'module' },
332
},
333
{
334
code: `var foo = require('foo-module');\nvar a = 123;\n\nrequire('bar-lib');\nvar b=456;`,
335
output: `var foo = require('foo-module');\n\nvar a = 123;\n\nrequire('bar-lib');\n\nvar b=456;`,
336
errors: [
337
{
338
line: 1,
339
column: 1,
340
message: REQUIRE_ERROR_MESSAGE,
341
},
342
{
343
line: 4,
344
column: 1,
345
message: REQUIRE_ERROR_MESSAGE,
346
}],
347
parserOptions: { ecmaVersion: 2015, sourceType: 'module' },
348
},
349
{
350
code: `var path = require('path');\nvar foo = require('foo');\nvar bar = 42;`,
351
output: `var path = require('path');\nvar foo = require('foo');\n\nvar bar = 42;`,
352
errors: [ {
353
line: 2,
354
column: 1,
355
message: REQUIRE_ERROR_MESSAGE,
356
} ],
357
},
358
{
359
code: `var assign = Object.assign || require('object-assign');\nvar foo = require('foo');\nvar bar = 42;`,
360
output: `var assign = Object.assign || require('object-assign');\nvar foo = require('foo');\n\nvar bar = 42;`,
361
errors: [ {
362
line: 2,
363
column: 1,
364
message: REQUIRE_ERROR_MESSAGE,
365
} ],
366
},
367
{
368
code: `require('a');\nfoo(require('b'), require('c'), require('d'));\nrequire('d');\nvar foo = 'bar';`,
369
output: `require('a');\nfoo(require('b'), require('c'), require('d'));\nrequire('d');\n\nvar foo = 'bar';`,
370
errors: [
371
{
372
line: 3,
373
column: 1,
374
message: REQUIRE_ERROR_MESSAGE,
375
},
376
],
377
},
378
{
379
code: `require('a');\nfoo(\nrequire('b'),\nrequire('c'),\nrequire('d')\n);\nvar foo = 'bar';`,
380
output: `require('a');\nfoo(\nrequire('b'),\nrequire('c'),\nrequire('d')\n);\n\nvar foo = 'bar';`,
381
errors: [
382
{
383
line: 6,
384
column: 1,
385
message: REQUIRE_ERROR_MESSAGE,
386
},
387
],
388
},
389
{
390
code: `import path from 'path';\nimport foo from 'foo';\nvar bar = 42;`,
391
output: `import path from 'path';\nimport foo from 'foo';\n\nvar bar = 42;`,
392
errors: [ {
393
line: 2,
394
column: 1,
395
message: IMPORT_ERROR_MESSAGE,
396
} ],
397
parserOptions: { ecmaVersion: 2015, sourceType: 'module' },
398
},
399
{
400
code: `import path from 'path';import foo from 'foo';var bar = 42;`,
401
output: `import path from 'path';import foo from 'foo';\n\nvar bar = 42;`,
402
errors: [ {
403
line: 1,
404
column: 25,
405
message: IMPORT_ERROR_MESSAGE,
406
} ],
407
parserOptions: { ecmaVersion: 2015, sourceType: 'module' },
408
},
409
{
410
code: `import foo from 'foo';\n@SomeDecorator(foo)\nclass Foo {}`,
411
output: `import foo from 'foo';\n\n@SomeDecorator(foo)\nclass Foo {}`,
412
errors: [ {
413
line: 1,
414
column: 1,
415
message: IMPORT_ERROR_MESSAGE,
416
} ],
417
parserOptions: { ecmaVersion: 2015, sourceType: 'module' },
418
parser: require.resolve('babel-eslint'),
419
},
420
{
421
code: `var foo = require('foo');\n@SomeDecorator(foo)\nclass Foo {}`,
422
output: `var foo = require('foo');\n\n@SomeDecorator(foo)\nclass Foo {}`,
423
errors: [ {
424
line: 1,
425
column: 1,
426
message: REQUIRE_ERROR_MESSAGE,
427
} ],
428
parserOptions: { ecmaVersion: 2015, sourceType: 'module' },
429
parser: require.resolve('babel-eslint'),
430
},
431
{
432
code: `// issue 10042\nimport foo from 'foo';\n@SomeDecorator(foo)\nexport default class Test {}`,
433
output: `// issue 10042\nimport foo from 'foo';\n\n@SomeDecorator(foo)\nexport default class Test {}`,
434
errors: [ {
435
line: 2,
436
column: 1,
437
message: IMPORT_ERROR_MESSAGE,
438
} ],
439
parserOptions: { sourceType: 'module' },
440
parser: require.resolve('babel-eslint'),
441
},
442
{
443
code: `// issue 1004\nconst foo = require('foo');\n@SomeDecorator(foo)\nexport default class Test {}`,
444
output: `// issue 1004\nconst foo = require('foo');\n\n@SomeDecorator(foo)\nexport default class Test {}`,
445
errors: [ {
446
line: 2,
447
column: 1,
448
message: REQUIRE_ERROR_MESSAGE,
449
} ],
450
parserOptions: { sourceType: 'module' },
451
parser: require.resolve('babel-eslint'),
452
},
453
testVersion('>= 6', () => ({
454
code: `
455
// issue 1784
456
import { map } from 'rxjs/operators';
457
@Component({})
458
export class Test {}
459
`,
460
output: `
461
// issue 1784
462
import { map } from 'rxjs/operators';
463
464
@Component({})
465
export class Test {}
466
`,
467
errors: [
468
{
469
line: 3,
470
column: 9,
471
message: IMPORT_ERROR_MESSAGE,
472
},
473
],
474
parserOptions: { sourceType: 'module' },
475
parser: require.resolve('babel-eslint'),
476
})) || [],
477
),
478
});
479
480