/**
* @fileoverview Prevent variables used in JSX to be marked as unused
* @author Michał Sajnóg
*/
'use strict'
const semver = require('semver')
const { RuleTester, ESLint } = require('../../eslint-compat')
const rule = require('../../../lib/rules/jsx-uses-vars')
const { getCoreRule } = require('../../../lib/utils')
const ruleNoUnusedVars = getCoreRule('no-unused-vars')
const ruleTester = new RuleTester({
languageOptions: {
ecmaVersion: 6,
sourceType: 'module',
parserOptions: {
ecmaFeatures: {
jsx: true
}
}
},
plugins: {
vue: {
rules: {
'jsx-uses-vars': rule
}
}
}
})
ruleTester.run('jsx-uses-vars', rule, {
// Visually check that there are no warnings in the console.
valid: [
`
import SomeComponent from './SomeComponent.jsx';
export default {
render () {
return (
)
},
};
`
],
invalid: []
})
describe('jsx-uses-vars', () => {
ruleTester.run('no-unused-vars', ruleNoUnusedVars, {
valid: [
`
/* eslint vue/jsx-uses-vars: 1 */
import SomeComponent from './SomeComponent.jsx';
export default {
render () {
return (
)
},
};
`,
`
/* eslint vue/jsx-uses-vars: 1 */
import SomeComponent from './SomeComponent.vue';
import OtherComponent from './OtherComponent.vue';
const wrapper = {
testComponent: SomeComponent,
group: {
otherComponent: OtherComponent,
},
};
export default {
render () {
return (
)
}
}
`,
`
/* eslint vue/jsx-uses-vars: 1 */
export default {
render () {
return (
Lorem ipsum
)
}
}
`
],
invalid: [
{
code: `
/* eslint vue/jsx-uses-vars: 1 */
import SomeComponent from './SomeComponent.jsx';
export default {
render () {
return ;
},
};
`,
errors: [
{
message: "'SomeComponent' is defined but never used.",
suggestions: semver.gte(ESLint.version, '9.17.0')
? [
{
desc: "Remove unused variable 'SomeComponent'.",
output: `
/* eslint vue/jsx-uses-vars: 1 */
import './SomeComponent.jsx';
export default {
render () {
return ;
},
};
`
}
]
: null
}
]
},
{
code: `
/* eslint vue/jsx-uses-vars: 1 */
import SomeComponent from './SomeComponent.jsx';
const wrapper = {
something: SomeComponent,
};
export default {
render () {
return ;
},
};
`,
errors: [
{
message: "'wrapper' is assigned a value but never used.",
suggestions: semver.gte(ESLint.version, '9.17.0')
? [
{
desc: "Remove unused variable 'wrapper'.",
output: `
/* eslint vue/jsx-uses-vars: 1 */
import SomeComponent from './SomeComponent.jsx';
export default {
render () {
return ;
},
};
`
}
]
: null
}
]
}
]
})
})