@@ -148,6 +148,59 @@ ruleTester.run('no-unused-modules', rule, {
148
148
code : 'const o0 = 0; const o1 = 1; export { o0, o1 as o2 }; export default () => {}' ,
149
149
filename : testFilePath ( './no-unused-modules/file-o.js' ) ,
150
150
} ) ,
151
+ test ( {
152
+ options : unusedExportsOptions ,
153
+ code : 'import { o2 } from "./file-o";export default () => 12' ,
154
+ filename : testFilePath ( './no-unused-modules/file-a.js' ) ,
155
+ parser : require . resolve ( 'babel-eslint' ) ,
156
+ } ) ,
157
+ test ( {
158
+ options : unusedExportsOptions ,
159
+ code : 'export const b = 2' ,
160
+ filename : testFilePath ( './no-unused-modules/file-b.js' ) ,
161
+ parser : require . resolve ( 'babel-eslint' ) ,
162
+ } ) ,
163
+ test ( {
164
+ options : unusedExportsOptions ,
165
+ code : 'const c1 = 3; function c2() { return 3 }; export { c1, c2 }' ,
166
+ filename : testFilePath ( './no-unused-modules/file-c.js' ) ,
167
+ parser : require . resolve ( 'babel-eslint' ) ,
168
+ } ) ,
169
+ test ( {
170
+ options : unusedExportsOptions ,
171
+ code : 'export function d() { return 4 }' ,
172
+ filename : testFilePath ( './no-unused-modules/file-d.js' ) ,
173
+ parser : require . resolve ( 'babel-eslint' ) ,
174
+ } ) ,
175
+ test ( {
176
+ options : unusedExportsOptions ,
177
+ code : 'export class q { q0() {} }' ,
178
+ filename : testFilePath ( './no-unused-modules/file-q.js' ) ,
179
+ parser : require . resolve ( 'babel-eslint' ) ,
180
+ } ) ,
181
+ test ( {
182
+ options : unusedExportsOptions ,
183
+ code : 'const e0 = 5; export { e0 as e }' ,
184
+ filename : testFilePath ( './no-unused-modules/file-e.js' ) ,
185
+ parser : require . resolve ( 'babel-eslint' ) ,
186
+ } ) ,
187
+ test ( {
188
+ options : unusedExportsOptions ,
189
+ code : 'const l0 = 5; const l = 10; export { l0 as l1, l }; export default () => {}' ,
190
+ filename : testFilePath ( './no-unused-modules/file-l.js' ) ,
191
+ parser : require . resolve ( 'babel-eslint' ) ,
192
+ } ) ,
193
+ test ( {
194
+ options : unusedExportsOptions ,
195
+ code : 'const o0 = 0; const o1 = 1; export { o0, o1 as o2 }; export default () => {}' ,
196
+ filename : testFilePath ( './no-unused-modules/file-o.js' ) ,
197
+ parser : require . resolve ( 'babel-eslint' ) ,
198
+ } ) ,
199
+ test ( { options : unusedExportsOptions ,
200
+ code : 'export class q { q0() {} }' ,
201
+ filename : testFilePath ( './no-unused-modules/file-q.js' ) ,
202
+ parser : require . resolve ( 'babel-eslint' ) ,
203
+ } ) ,
151
204
] ,
152
205
invalid : [
153
206
test ( {
@@ -234,6 +287,89 @@ ruleTester.run('no-unused-modules', rule, {
234
287
] ,
235
288
} ) ;
236
289
290
+ // test for export from
291
+ ruleTester . run ( 'no-unused-modules' , rule , {
292
+ valid : [
293
+ test ( {
294
+ options : unusedExportsOptions ,
295
+ code : `
296
+ export const a = 10
297
+ export const b = 20
298
+ export const c = 30
299
+ const d = 40
300
+ export default d
301
+ ` ,
302
+ parser : require . resolve ( 'babel-eslint' ) ,
303
+ filename : testFilePath ( './no-unused-modules/exports-for-dynamic-js.js' ) ,
304
+ } ) ,
305
+ ] ,
306
+ invalid : [
307
+ test ( {
308
+ options : unusedExportsOptions ,
309
+ code : `
310
+ export const a = 10
311
+ export const b = 20
312
+ export const c = 30
313
+ const d = 40
314
+ export default d
315
+ ` ,
316
+ parser : require . resolve ( 'babel-eslint' ) ,
317
+ filename : testFilePath ( './no-unused-modules/exports-for-dynamic-js-2.js' ) ,
318
+ errors : [
319
+ error ( `exported declaration 'a' not used within other modules` ) ,
320
+ error ( `exported declaration 'b' not used within other modules` ) ,
321
+ error ( `exported declaration 'c' not used within other modules` ) ,
322
+ error ( `exported declaration 'default' not used within other modules` ) ,
323
+ ] ,
324
+ } ) ,
325
+ ] ,
326
+ } ) ;
327
+
328
+ describe ( 'dynamic imports' , ( ) => {
329
+ if ( semver . satisfies ( eslintPkg . version , '< 6' ) ) {
330
+ this . skip ( ) ;
331
+ return ;
332
+ }
333
+
334
+ // test for unused exports with `import()`
335
+ ruleTester . run ( 'no-unused-modules' , rule , {
336
+ valid : [
337
+ test ( {
338
+ options : unusedExportsOptions ,
339
+ code : `
340
+ export const a = 10
341
+ export const b = 20
342
+ export const c = 30
343
+ const d = 40
344
+ export default d
345
+ ` ,
346
+ parser : require . resolve ( 'babel-eslint' ) ,
347
+ filename : testFilePath ( './no-unused-modules/exports-for-dynamic-js.js' ) ,
348
+ } ) ,
349
+ ] ,
350
+ invalid : [
351
+ test ( {
352
+ options : unusedExportsOptions ,
353
+ code : `
354
+ export const a = 10
355
+ export const b = 20
356
+ export const c = 30
357
+ const d = 40
358
+ export default d
359
+ ` ,
360
+ parser : require . resolve ( 'babel-eslint' ) ,
361
+ filename : testFilePath ( './no-unused-modules/exports-for-dynamic-js-2.js' ) ,
362
+ errors : [
363
+ error ( `exported declaration 'a' not used within other modules` ) ,
364
+ error ( `exported declaration 'b' not used within other modules` ) ,
365
+ error ( `exported declaration 'c' not used within other modules` ) ,
366
+ error ( `exported declaration 'default' not used within other modules` ) ,
367
+ ] ,
368
+ } ) ,
369
+ ] ,
370
+ } ) ;
371
+ } ) ;
372
+
237
373
// test for export from
238
374
ruleTester . run ( 'no-unused-modules' , rule , {
239
375
valid : [
@@ -951,6 +1087,18 @@ context('TypeScript', function () {
951
1087
getTSParsers ( ) . forEach ( ( parser ) => {
952
1088
typescriptRuleTester . run ( 'no-unused-modules' , rule , {
953
1089
valid : [ ] . concat (
1090
+ test ( {
1091
+ options : unusedExportsTypescriptOptions ,
1092
+ code : `
1093
+ export const ts_a = 10;
1094
+ export const ts_b = 20;
1095
+ export const ts_c = 30;
1096
+ const ts_d = 40;
1097
+ export default ts_d;
1098
+ ` ,
1099
+ parser : require . resolve ( '@typescript-eslint/parser' ) ,
1100
+ filename : testFilePath ( './no-unused-modules/typescript/exports-for-dynamic-ts.ts' ) ,
1101
+ } ) ,
954
1102
test ( {
955
1103
options : unusedExportsTypescriptOptions ,
956
1104
code : `
0 commit comments