1010// -----------------------------------------------------------------------------
1111
1212const ruleNoUnusedVars = require ( '../../helpers/getESLintCoreRule' ) ( 'no-unused-vars' ) ;
13+
1314const rulePreferConst = require ( '../../helpers/getESLintCoreRule' ) ( 'prefer-const' ) ;
1415
1516const RuleTester = require ( '../../helpers/ruleTester' ) ;
@@ -136,7 +137,13 @@ ruleTester.run('no-unused-vars', ruleNoUnusedVars, {
136137 invalid : parsers . all ( [
137138 {
138139 code : '/* eslint react/jsx-uses-vars: 1 */ var App;' ,
139- errors : [ { message : '\'App\' is defined but never used.' } ] ,
140+ errors : [ {
141+ message : '\'App\' is defined but never used.' ,
142+ suggestions : [ {
143+ messageId : 'removeVar' ,
144+ output : '/* eslint react/jsx-uses-vars: 1 */ ' ,
145+ } ] ,
146+ } ] ,
140147 } ,
141148 {
142149 code : `
@@ -145,7 +152,18 @@ ruleTester.run('no-unused-vars', ruleNoUnusedVars, {
145152 var unused;
146153 React.render(<App unused=""/>);
147154 ` ,
148- errors : [ { message : '\'unused\' is defined but never used.' } ] ,
155+ errors : [ {
156+ message : '\'unused\' is defined but never used.' ,
157+ suggestions : [ {
158+ messageId : 'removeVar' ,
159+ output : `
160+ /* eslint react/jsx-uses-vars: 1 */
161+ var App;
162+ ${ '' }
163+ React.render(<App unused=""/>);
164+ ` ,
165+ } ] ,
166+ } ] ,
149167 } ,
150168 {
151169 code : `
@@ -155,8 +173,30 @@ ruleTester.run('no-unused-vars', ruleNoUnusedVars, {
155173 React.render(<App:Hello/>);
156174 ` ,
157175 errors : [
158- { message : '\'App\' is defined but never used.' } ,
159- { message : '\'Hello\' is defined but never used.' } ,
176+ {
177+ message : '\'App\' is defined but never used.' ,
178+ suggestions : [ {
179+ messageId : 'removeVar' ,
180+ output : `
181+ /* eslint react/jsx-uses-vars: 1 */
182+ ${ '' }
183+ var Hello;
184+ React.render(<App:Hello/>);
185+ ` ,
186+ } ] ,
187+ } ,
188+ {
189+ message : '\'Hello\' is defined but never used.' ,
190+ suggestions : [ {
191+ messageId : 'removeVar' ,
192+ output : `
193+ /* eslint react/jsx-uses-vars: 1 */
194+ var App;
195+ ${ '' }
196+ React.render(<App:Hello/>);
197+ ` ,
198+ } ] ,
199+ } ,
160200 ] ,
161201 features : [ 'jsx namespace' ] ,
162202 } ,
@@ -167,14 +207,34 @@ ruleTester.run('no-unused-vars', ruleNoUnusedVars, {
167207 var Input;
168208 React.render(<Button.Input unused=""/>);
169209 ` ,
170- errors : [ { message : '\'Input\' is defined but never used.' } ] ,
210+ errors : [ {
211+ message : '\'Input\' is defined but never used.' ,
212+ suggestions : [ {
213+ messageId : 'removeVar' ,
214+ output : `
215+ /* eslint react/jsx-uses-vars: 1 */
216+ var Button;
217+ ${ '' }
218+ React.render(<Button.Input unused=""/>);
219+ ` ,
220+ } ] ,
221+ } ] ,
171222 } ,
172223 {
173224 code : `
174225 /* eslint react/jsx-uses-vars: 1 */
175226 class unused {}
176227 ` ,
177- errors : [ { message : '\'unused\' is defined but never used.' } ] ,
228+ errors : [ {
229+ message : '\'unused\' is defined but never used.' ,
230+ suggestions : [ {
231+ messageId : 'removeVar' ,
232+ output : `
233+ /* eslint react/jsx-uses-vars: 1 */
234+ ${ '' }
235+ ` ,
236+ } ] ,
237+ } ] ,
178238 } ,
179239 {
180240 code : `
@@ -190,6 +250,13 @@ ruleTester.run('no-unused-vars', ruleNoUnusedVars, {
190250 {
191251 message : '\'HelloMessage\' is defined but never used.' ,
192252 line : 3 ,
253+ suggestions : [ {
254+ messageId : 'removeVar' ,
255+ output : `
256+ /* eslint react/jsx-uses-vars: 1 */
257+ ${ '' }
258+ ` ,
259+ } ] ,
193260 } ,
194261 ] ,
195262 } ,
@@ -207,6 +274,18 @@ ruleTester.run('no-unused-vars', ruleNoUnusedVars, {
207274 {
208275 message : '\'Hello\' is defined but never used.' ,
209276 line : 3 ,
277+ suggestions : [ {
278+ messageId : 'removeVar' ,
279+ output : `
280+ /* eslint react/jsx-uses-vars: 1 */
281+ ${ '' }
282+ function Greetings() {
283+ const Hello = require('Hello').default;
284+ return <Hello />;
285+ }
286+ Greetings();
287+ ` ,
288+ } ] ,
210289 } ,
211290 ] ,
212291 } ,
@@ -216,7 +295,17 @@ ruleTester.run('no-unused-vars', ruleNoUnusedVars, {
216295 var lowercase;
217296 React.render(<lowercase />);
218297 ` ,
219- errors : [ { message : '\'lowercase\' is defined but never used.' } ] ,
298+ errors : [ {
299+ message : '\'lowercase\' is defined but never used.' ,
300+ suggestions : [ {
301+ messageId : 'removeVar' ,
302+ output : `
303+ /* eslint react/jsx-uses-vars: 1 */
304+ ${ '' }
305+ React.render(<lowercase />);
306+ ` ,
307+ } ] ,
308+ } ] ,
220309 } ,
221310 {
222311 code : `
@@ -230,10 +319,29 @@ ruleTester.run('no-unused-vars', ruleNoUnusedVars, {
230319 {
231320 message : '\'div\' is defined but never used.' ,
232321 line : 3 ,
322+ suggestions : [ {
323+ messageId : 'removeVar' ,
324+ output : `
325+ /* eslint react/jsx-uses-vars: 1 */
326+ function Greetings() {
327+ return <div />;
328+ }
329+ Greetings();
330+ ` ,
331+ } ] ,
233332 } ,
234333 ] ,
235334 } ,
236- ] ) ,
335+ ] . map ( ( test ) => {
336+ if ( ! ruleNoUnusedVars . meta . hasSuggestions ) {
337+ test . errors = test . errors . map ( ( error ) => {
338+ // https://github.com/eslint/eslint/pull/18352 added suggestions to no-unused-vars in eslint v9.17.0
339+ delete error . suggestions ;
340+ return error ;
341+ } ) ;
342+ }
343+ return test ;
344+ } ) ) ,
237345} ) ;
238346
239347// Check compatibility with eslint prefer-const rule (#716)
0 commit comments