Skip to content

Commit da7a045

Browse files
chiawendtljharb
authored andcommitted
[Fix] no-unused-state: handle optional chaining
Fixes #2515
1 parent 9861469 commit da7a045

File tree

4 files changed

+36
-15
lines changed

4 files changed

+36
-15
lines changed

lib/rules/no-unused-state.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -415,7 +415,7 @@ module.exports = {
415415
handleAssignment(node.id, node.init);
416416
},
417417

418-
MemberExpression(node) {
418+
'MemberExpression, OptionalMemberExpression'(node) {
419419
if (!classInfo) {
420420
return;
421421
}

tests/helpers/parsers.js

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,19 @@
11
'use strict';
22

33
const path = require('path');
4+
const semver = require('semver');
5+
const version = require('eslint/package.json').version;
46

57
const NODE_MODULES = '../../node_modules';
68

79
module.exports = {
810
BABEL_ESLINT: path.join(__dirname, NODE_MODULES, 'babel-eslint'),
911
TYPESCRIPT_ESLINT: path.join(__dirname, NODE_MODULES, 'typescript-eslint-parser'),
10-
'@TYPESCRIPT_ESLINT': path.join(__dirname, NODE_MODULES, '@typescript-eslint/parser')
12+
'@TYPESCRIPT_ESLINT': path.join(__dirname, NODE_MODULES, '@typescript-eslint/parser'),
13+
TS: function TS(tests) {
14+
if (semver.satisfies(version, '>= 5')) {
15+
return tests;
16+
}
17+
return [];
18+
}
1119
};

tests/lib/rules/jsx-no-comment-textnodes.js

Lines changed: 2 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -9,20 +9,11 @@
99
// Requirements
1010
// ------------------------------------------------------------------------------
1111

12-
const semver = require('semver');
13-
const version = require('eslint/package.json').version;
1412
const RuleTester = require('eslint').RuleTester;
1513
const rule = require('../../../lib/rules/jsx-no-comment-textnodes');
1614

1715
const parsers = require('../../helpers/parsers');
1816

19-
function TS(tests) {
20-
if (semver.satisfies(version, '>= 5')) {
21-
return tests;
22-
}
23-
return [];
24-
}
25-
2617
const parserOptions = {
2718
ecmaVersion: 2018,
2819
sourceType: 'module',
@@ -182,7 +173,7 @@ ruleTester.run('jsx-no-comment-textnodes', rule, {
182173
code: '<pre>&#x2F;&#42; TODO: Write perfect code &#42;&#x2F;</pre>',
183174
parser: parsers.BABEL_ESLINT
184175
}
185-
].concat(TS([
176+
].concat(parsers.TS([
186177
{
187178
code: `
188179
class Comp1 extends Component {
@@ -388,7 +379,7 @@ ruleTester.run('jsx-no-comment-textnodes', rule, {
388379
parser: parsers.BABEL_ESLINT,
389380
errors: [{message: 'Comments inside children section of tag should be placed inside braces'}]
390381
}
391-
].concat(TS([
382+
].concat(parsers.TS([
392383
{
393384
code: `
394385
class Comp1 extends Component {

tests/lib/rules/no-unused-state.js

Lines changed: 24 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ function getErrorMessages(unusedFields) {
2525
}
2626

2727
eslintTester.run('no-unused-state', rule, {
28-
valid: [
28+
valid: [].concat(
2929
`function StatelessFnUnaffectedTest(props) {
3030
return <SomeComponent foo={props.foo} />;
3131
};`,
@@ -231,6 +231,28 @@ eslintTester.run('no-unused-state', rule, {
231231
}
232232
}`,
233233
parser: parsers.BABEL_ESLINT
234+
}, parsers.TS([{
235+
code: `
236+
class OptionalChaining extends React.Component {
237+
constructor() {
238+
this.state = { foo: 0 };
239+
}
240+
render() {
241+
return <SomeComponent foo={this.state?.foo} />;
242+
}
243+
}`,
244+
parser: parsers['@TYPESCRIPT_ESLINT']
245+
}]), {
246+
code: `
247+
class OptionalChaining extends React.Component {
248+
constructor() {
249+
this.state = { foo: 0 };
250+
}
251+
render() {
252+
return <SomeComponent foo={this.state?.foo} />;
253+
}
254+
}`,
255+
parser: parsers.BABEL_ESLINT
234256
},
235257
`class VariableDeclarationTest extends React.Component {
236258
constructor() {
@@ -795,7 +817,7 @@ eslintTester.run('no-unused-state', rule, {
795817
`,
796818
parser: parsers.TYPESCRIPT_ESLINT
797819
}
798-
],
820+
),
799821

800822
invalid: [
801823
{

0 commit comments

Comments
 (0)