Skip to content

Commit 09e6654

Browse files
feat: update error loc of require-yield and no-useless-constructor (#20267)
* feat: update err loc of require-yield and no-useless-constructor * update loc to constructor keyword only
1 parent d6ed1f8 commit 09e6654

File tree

4 files changed

+112
-4
lines changed

4 files changed

+112
-4
lines changed

lib/rules/no-useless-constructor.js

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -185,6 +185,8 @@ module.exports = {
185185
},
186186

187187
create(context) {
188+
const { sourceCode } = context;
189+
188190
/**
189191
* Checks whether a node is a redundant constructor
190192
* @param {ASTNode} node node to check
@@ -211,26 +213,34 @@ module.exports = {
211213
const body = node.value.body.body;
212214
const ctorParams = node.value.params;
213215
const superClass = node.parent.parent.superClass;
216+
const parenToken = sourceCode.getFirstToken(
217+
node,
218+
astUtils.isOpeningParenToken,
219+
);
220+
const loc = {
221+
start: node.loc.start,
222+
end: sourceCode.getTokenBefore(parenToken).loc.end,
223+
};
214224

215225
if (
216226
superClass
217227
? isRedundantSuperCall(body, ctorParams)
218228
: body.length === 0
219229
) {
220230
context.report({
221-
node,
231+
loc,
222232
messageId: "noUselessConstructor",
223233
suggest: [
224234
{
225235
messageId: "removeConstructor",
226236
*fix(fixer) {
227237
const nextToken =
228-
context.sourceCode.getTokenAfter(node);
238+
sourceCode.getTokenAfter(node);
229239
const addSemiColon =
230240
nextToken.type === "Punctuator" &&
231241
nextToken.value === "[" &&
232242
astUtils.needsPrecedingSemicolon(
233-
context.sourceCode,
243+
sourceCode,
234244
node,
235245
);
236246

lib/rules/require-yield.js

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,12 @@
55

66
"use strict";
77

8+
//------------------------------------------------------------------------------
9+
// Requirements
10+
//------------------------------------------------------------------------------
11+
12+
const astUtils = require("./utils/ast-utils");
13+
814
//------------------------------------------------------------------------------
915
// Rule Definition
1016
//------------------------------------------------------------------------------
@@ -29,6 +35,7 @@ module.exports = {
2935

3036
create(context) {
3137
const stack = [];
38+
const sourceCode = context.sourceCode;
3239

3340
/**
3441
* If the node is a generator function, start counting `yield` keywords.
@@ -55,7 +62,10 @@ module.exports = {
5562
const countYield = stack.pop();
5663

5764
if (countYield === 0 && node.body.body.length > 0) {
58-
context.report({ node, messageId: "missingYield" });
65+
context.report({
66+
loc: astUtils.getFunctionHeadLoc(node, sourceCode),
67+
messageId: "missingYield",
68+
});
5969
}
6070
}
6171

tests/lib/rules/no-useless-constructor.js

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,28 @@ ruleTester.run("no-useless-constructor", rule, {
5353
errors: [
5454
{
5555
...error,
56+
line: 1,
57+
column: 11,
58+
endLine: 1,
59+
endColumn: 22,
60+
suggestions: [
61+
{
62+
messageId: "removeConstructor",
63+
output: "class A { }",
64+
},
65+
],
66+
},
67+
],
68+
},
69+
{
70+
code: "class A { constructor (){} }",
71+
errors: [
72+
{
73+
...error,
74+
line: 1,
75+
column: 11,
76+
endLine: 1,
77+
endColumn: 22,
5678
suggestions: [
5779
{
5880
messageId: "removeConstructor",
@@ -67,6 +89,10 @@ ruleTester.run("no-useless-constructor", rule, {
6789
errors: [
6890
{
6991
...error,
92+
line: 1,
93+
column: 11,
94+
endLine: 1,
95+
endColumn: 24,
7096
suggestions: [
7197
{
7298
messageId: "removeConstructor",
@@ -81,6 +107,10 @@ ruleTester.run("no-useless-constructor", rule, {
81107
errors: [
82108
{
83109
...error,
110+
line: 1,
111+
column: 21,
112+
endLine: 1,
113+
endColumn: 32,
84114
suggestions: [
85115
{
86116
messageId: "removeConstructor",
@@ -95,6 +125,10 @@ ruleTester.run("no-useless-constructor", rule, {
95125
errors: [
96126
{
97127
...error,
128+
line: 1,
129+
column: 21,
130+
endLine: 1,
131+
endColumn: 32,
98132
suggestions: [
99133
{
100134
messageId: "removeConstructor",
@@ -109,6 +143,10 @@ ruleTester.run("no-useless-constructor", rule, {
109143
errors: [
110144
{
111145
...error,
146+
line: 1,
147+
column: 21,
148+
endLine: 1,
149+
endColumn: 32,
112150
suggestions: [
113151
{
114152
messageId: "removeConstructor",
@@ -123,6 +161,10 @@ ruleTester.run("no-useless-constructor", rule, {
123161
errors: [
124162
{
125163
...error,
164+
line: 1,
165+
column: 21,
166+
endLine: 1,
167+
endColumn: 32,
126168
suggestions: [
127169
{
128170
messageId: "removeConstructor",
@@ -137,6 +179,10 @@ ruleTester.run("no-useless-constructor", rule, {
137179
errors: [
138180
{
139181
...error,
182+
line: 1,
183+
column: 23,
184+
endLine: 1,
185+
endColumn: 34,
140186
suggestions: [
141187
{
142188
messageId: "removeConstructor",
@@ -151,6 +197,10 @@ ruleTester.run("no-useless-constructor", rule, {
151197
errors: [
152198
{
153199
...error,
200+
line: 1,
201+
column: 21,
202+
endLine: 1,
203+
endColumn: 32,
154204
suggestions: [
155205
{
156206
messageId: "removeConstructor",
@@ -165,6 +215,10 @@ ruleTester.run("no-useless-constructor", rule, {
165215
errors: [
166216
{
167217
...error,
218+
line: 1,
219+
column: 21,
220+
endLine: 1,
221+
endColumn: 32,
168222
suggestions: [
169223
{
170224
messageId: "removeConstructor",
@@ -185,6 +239,10 @@ ruleTester.run("no-useless-constructor", rule, {
185239
errors: [
186240
{
187241
...error,
242+
line: 3,
243+
column: 3,
244+
endLine: 3,
245+
endColumn: 14,
188246
suggestions: [
189247
{
190248
messageId: "removeConstructor",
@@ -328,6 +386,10 @@ ruleTesterTypeScript.run("no-useless-constructor", rule, {
328386
errors: [
329387
{
330388
messageId: "noUselessConstructor",
389+
line: 3,
390+
column: 17,
391+
endLine: 3,
392+
endColumn: 28,
331393
suggestions: [
332394
{
333395
messageId: "removeConstructor",
@@ -350,6 +412,10 @@ ruleTesterTypeScript.run("no-useless-constructor", rule, {
350412
errors: [
351413
{
352414
messageId: "noUselessConstructor",
415+
line: 3,
416+
column: 17,
417+
endLine: 3,
418+
endColumn: 35,
353419
suggestions: [
354420
{
355421
messageId: "removeConstructor",

tests/lib/rules/require-yield.js

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,10 @@ ruleTester.run("require-yield", rule, {
3636
errors: [
3737
{
3838
messageId: "missingYield",
39+
line: 1,
40+
column: 1,
41+
endLine: 1,
42+
endColumn: 14,
3943
},
4044
],
4145
},
@@ -44,6 +48,10 @@ ruleTester.run("require-yield", rule, {
4448
errors: [
4549
{
4650
messageId: "missingYield",
51+
line: 1,
52+
column: 2,
53+
endLine: 1,
54+
endColumn: 15,
4755
},
4856
],
4957
},
@@ -52,6 +60,10 @@ ruleTester.run("require-yield", rule, {
5260
errors: [
5361
{
5462
messageId: "missingYield",
63+
line: 1,
64+
column: 13,
65+
endLine: 1,
66+
endColumn: 17,
5567
},
5668
],
5769
},
@@ -60,6 +72,10 @@ ruleTester.run("require-yield", rule, {
6072
errors: [
6173
{
6274
messageId: "missingYield",
75+
line: 1,
76+
column: 11,
77+
endLine: 1,
78+
endColumn: 15,
6379
},
6480
],
6581
},
@@ -68,7 +84,10 @@ ruleTester.run("require-yield", rule, {
6884
errors: [
6985
{
7086
messageId: "missingYield",
87+
line: 1,
7188
column: 1,
89+
endLine: 1,
90+
endColumn: 14,
7291
},
7392
],
7493
},
@@ -77,7 +96,10 @@ ruleTester.run("require-yield", rule, {
7796
errors: [
7897
{
7998
messageId: "missingYield",
99+
line: 1,
80100
column: 19,
101+
endLine: 1,
102+
endColumn: 32,
81103
},
82104
],
83105
},

0 commit comments

Comments
 (0)