Skip to content

Commit 5c1bdeb

Browse files
authoredApr 23, 2020
Update: Improve report location for getter-return (refs #12334) (#13164)
1 parent 56d2bee commit 5c1bdeb

File tree

2 files changed

+117
-18
lines changed

2 files changed

+117
-18
lines changed
 

‎lib/rules/getter-return.js

+2-12
Original file line numberDiff line numberDiff line change
@@ -25,17 +25,6 @@ function isReachable(segment) {
2525
return segment.reachable;
2626
}
2727

28-
/**
29-
* Gets a readable location.
30-
*
31-
* - FunctionExpression -> the function name or `function` keyword.
32-
* @param {ASTNode} node A function node to get.
33-
* @returns {ASTNode|Token} The node or the token of a location.
34-
*/
35-
function getId(node) {
36-
return node.id || node;
37-
}
38-
3928
//------------------------------------------------------------------------------
4029
// Rule Definition
4130
//------------------------------------------------------------------------------
@@ -75,6 +64,7 @@ module.exports = {
7564
create(context) {
7665

7766
const options = context.options[0] || { allowImplicit: false };
67+
const sourceCode = context.getSourceCode();
7868

7969
let funcInfo = {
8070
upper: null,
@@ -99,7 +89,7 @@ module.exports = {
9989
) {
10090
context.report({
10191
node,
102-
loc: getId(node).loc.start,
92+
loc: astUtils.getFunctionHeadLoc(node, sourceCode),
10393
messageId: funcInfo.hasReturn ? "expectedAlways" : "expected",
10494
data: {
10595
name: astUtils.getFunctionNameWithKind(funcInfo.node)

‎tests/lib/rules/getter-return.js

+115-6
Original file line numberDiff line numberDiff line change
@@ -81,9 +81,56 @@ ruleTester.run("getter-return", rule, {
8181
* test obj: get
8282
* option: {allowImplicit: false}
8383
*/
84-
{ code: "var foo = { get bar() {} };", errors: [expectedError] },
85-
{ code: "var foo = { get bar(){if(baz) {return true;}} };", errors: [expectedAlwaysError] },
86-
{ code: "var foo = { get bar() { ~function () {return true;}} };", errors: [expectedError] },
84+
{
85+
code: "var foo = { get bar() {} };",
86+
errors: [{
87+
...expectedError,
88+
line: 1,
89+
column: 13,
90+
endLine: 1,
91+
endColumn: 20
92+
}]
93+
},
94+
{
95+
code: "var foo = { get\n bar () {} };",
96+
errors: [{
97+
...expectedError,
98+
line: 1,
99+
column: 13,
100+
endLine: 2,
101+
endColumn: 6
102+
}]
103+
},
104+
{
105+
code: "var foo = { get bar(){if(baz) {return true;}} };",
106+
errors: [{
107+
...expectedAlwaysError,
108+
line: 1,
109+
column: 13,
110+
endLine: 1,
111+
endColumn: 20
112+
}]
113+
},
114+
{
115+
code: "var foo = { get bar() { ~function () {return true;}} };",
116+
errors: [{
117+
...expectedError,
118+
line: 1,
119+
column: 13,
120+
endLine: 1,
121+
endColumn: 20
122+
}]
123+
},
124+
{
125+
code: "var foo = { get bar() { return; } };",
126+
errors: [{
127+
...expectedError,
128+
line: 1,
129+
column: 25,
130+
endLine: 1,
131+
endColumn: 32
132+
}]
133+
},
87134

88135
// option: {allowImplicit: true}
89136
{ code: "var foo = { get bar() {} };", options, errors: [expectedError] },
@@ -93,7 +140,27 @@ ruleTester.run("getter-return", rule, {
93140
* test class: get
94141
* option: {allowImplicit: false}
95142
*/
96-
{ code: "class foo { get bar(){} }", errors: [expectedError] },
143+
{
144+
code: "class foo { get bar(){} }",
145+
errors: [{
146+
...expectedError,
147+
line: 1,
148+
column: 13,
149+
endLine: 1,
150+
endColumn: 20
151+
}]
152+
},
153+
{
154+
code: "var foo = class {\n static get\nbar(){} }",
155+
errors: [{
156+
messageId: "expected",
157+
data: { name: "static getter 'bar'" },
158+
line: 2,
159+
column: 3,
160+
endLine: 3,
161+
endColumn: 4
162+
}]
163+
},
97164
{ code: "class foo { get bar(){ if (baz) { return true; }}}", errors: [expectedAlwaysError] },
98165
{ code: "class foo { get bar(){ ~function () { return true; }()}}", errors: [expectedError] },
99166

@@ -105,8 +172,50 @@ ruleTester.run("getter-return", rule, {
105172
* test object.defineProperty(s)
106173
* option: {allowImplicit: false}
107174
*/
108-
{ code: "Object.defineProperty(foo, \"bar\", { get: function (){}});", errors: [{ messageId: "expected", data: { name: "method 'get'" } }] },
109-
{ code: "Object.defineProperty(foo, \"bar\", { get: () => {}});", errors: [{ messageId: "expected", data: { name: "arrow function 'get'" } }] },
175+
{
176+
code: "Object.defineProperty(foo, 'bar', { get: function (){}});",
177+
errors: [{
178+
messageId: "expected",
179+
data: { name: "method 'get'" },
180+
line: 1,
181+
column: 37,
182+
endLine: 1,
183+
endColumn: 51
184+
}]
185+
},
186+
{
187+
code: "Object.defineProperty(foo, 'bar', { get: function getfoo (){}});",
188+
errors: [{
189+
messageId: "expected",
190+
data: { name: "method 'getfoo'" },
191+
line: 1,
192+
column: 37,
193+
endLine: 1,
194+
endColumn: 58
195+
}]
196+
},
197+
{
198+
code: "Object.defineProperty(foo, 'bar', { get(){} });",
199+
errors: [{
200+
messageId: "expected",
201+
data: { name: "method 'get'" },
202+
line: 1,
203+
column: 37,
204+
endLine: 1,
205+
endColumn: 40
206+
}]
207+
},
208+
{
209+
code: "Object.defineProperty(foo, 'bar', { get: () => {}});",
210+
errors: [{
211+
messageId: "expected",
212+
data: { name: "arrow function 'get'" },
213+
line: 1,
214+
column: 45,
215+
endLine: 1,
216+
endColumn: 47
217+
}]
218+
},
110219
{ code: "Object.defineProperty(foo, \"bar\", { get: function (){if(bar) {return true;}}});", errors: [{ messageId: "expectedAlways" }] },
111220
{ code: "Object.defineProperty(foo, \"bar\", { get: function (){ ~function () { return true; }()}});", errors: [{ messageId: "expected" }] },
112221
{ code: "Object.defineProperties(foo, { bar: { get: function () {}} });", options, errors: [{ messageId: "expected" }] },

0 commit comments

Comments
 (0)
Please sign in to comment.