Skip to content
This repository was archived by the owner on Jul 9, 2025. It is now read-only.

Commit dbed838

Browse files
Bug 1944976 - Fix eslint rules to avoid throwing when arguments are missing r=frontend-codestyle-reviewers,Gijs
Avoid some linter rules throwing during validation due to unexpected argument lengths. Arguably some of those cases should probably also be caught by other linting rules. Differential Revision: https://phabricator.services.mozilla.com/D236271
1 parent 03f9352 commit dbed838

14 files changed

+50
-17
lines changed

tools/lint/eslint/eslint-plugin-mozilla/lib/rules/balanced-observers.js

Lines changed: 18 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -41,35 +41,43 @@ module.exports = {
4141
return api == "obs" || api == "prefs";
4242
}
4343

44-
function getObservableName(node, api) {
45-
if (api === "obs") {
46-
return node.arguments[1].value;
44+
function getObservableName(node) {
45+
const api = getObserverAPI(node);
46+
if (!isServicesObserver(api)) {
47+
return null;
48+
}
49+
50+
const observableArgument =
51+
api === "obs" ? node.arguments[1] : node.arguments[0];
52+
if (!observableArgument) {
53+
return null;
4754
}
48-
return node.arguments[0].value;
55+
56+
return observableArgument.value;
4957
}
5058

5159
function addAddedObserver(node) {
52-
const api = getObserverAPI(node);
53-
if (!isServicesObserver(api)) {
60+
const observableName = getObservableName(node);
61+
if (observableName === null) {
5462
return;
5563
}
5664

5765
addedObservers.push({
5866
functionName: node.callee.property.name,
59-
observable: getObservableName(node, api),
67+
observable: observableName,
6068
node: node.callee.property,
6169
});
6270
}
6371

6472
function addRemovedObserver(node) {
65-
const api = getObserverAPI(node);
66-
if (!isServicesObserver(api)) {
73+
const observableName = getObservableName(node);
74+
if (observableName === null) {
6775
return;
6876
}
6977

7078
removedObservers.push({
7179
functionName: node.callee.property.name,
72-
observable: getObservableName(node, api),
80+
observable: observableName,
7381
});
7482
}
7583

@@ -90,10 +98,6 @@ module.exports = {
9098

9199
return {
92100
CallExpression(node) {
93-
if (node.arguments.length === 0) {
94-
return;
95-
}
96-
97101
if (node.callee.type === "MemberExpression") {
98102
var methodName = node.callee.property.name;
99103

tools/lint/eslint/eslint-plugin-mozilla/lib/rules/no-addtask-setup.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ module.exports = {
3232
if (callee.type === "Identifier" && callee.name === "add_task") {
3333
let arg = node.arguments[0];
3434
if (
35+
!arg ||
3536
arg.type !== "FunctionExpression" ||
3637
!arg.id ||
3738
!isNamedLikeSetup(arg.id.name)

tools/lint/eslint/eslint-plugin-mozilla/lib/rules/no-comparison-or-assignment-inside-ok.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ module.exports = {
4545
return;
4646
}
4747
let firstArg = node.arguments[0];
48-
if (!exprs.has(firstArg.type)) {
48+
if (!firstArg || !exprs.has(firstArg.type)) {
4949
return;
5050
}
5151
if (firstArg.type == "AssignmentExpression") {

tools/lint/eslint/eslint-plugin-mozilla/lib/rules/no-cu-reportError.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,7 @@ module.exports = {
111111
// into multiple arguments instead:
112112
if (
113113
checkNode == node.callee &&
114+
node.arguments.length >= 1 &&
114115
isConcatenation(node.arguments[0])
115116
) {
116117
let { fixes: recursiveFixes } = replaceConcatWithComma(

tools/lint/eslint/eslint-plugin-mozilla/lib/rules/no-useless-removeEventListener.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@ module.exports = {
5353
call.callee.type == "MemberExpression" &&
5454
call.callee.property.type == "Identifier" &&
5555
call.callee.property.name == "removeEventListener" &&
56+
call.arguments[0] &&
5657
((call.arguments[0].type == "Literal" &&
5758
call.arguments[0].value == node.arguments[0].value) ||
5859
(call.arguments[0].type == "Identifier" &&

tools/lint/eslint/eslint-plugin-mozilla/lib/rules/reject-importGlobalProperties.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,8 @@ module.exports = {
5454
// Only Cu, not Components.utils as `use-cc-etc` handles this for us.
5555
memexp.object.name === "Cu" &&
5656
memexp.property.type === "Identifier" &&
57-
memexp.property.name === "importGlobalProperties"
57+
memexp.property.name === "importGlobalProperties" &&
58+
node.arguments.length >= 1
5859
) {
5960
if (context.options.includes("allownonwebidl")) {
6061
for (let element of node.arguments[0].elements) {

tools/lint/eslint/eslint-plugin-mozilla/lib/rules/valid-lazy.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -143,7 +143,8 @@ module.exports = {
143143
node.id.type === "Identifier" &&
144144
node.id.name == "lazy" &&
145145
node.init.type == "CallExpression" &&
146-
node.init.callee.name == "createLazyLoaders"
146+
node.init.callee.name == "createLazyLoaders" &&
147+
node.init.arguments.length >= 1
147148
) {
148149
setPropertiesFromArgument(node.init, node.init.arguments[0]);
149150
}

tools/lint/eslint/eslint-plugin-mozilla/tests/balanced-observers.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,10 @@ function error(code, observable) {
3131

3232
ruleTester.run("balanced-observers", rule, {
3333
valid: [
34+
"Services.obs.addObserver(observer);",
35+
"Services.obs.removeObserver(observer);",
36+
"Services.prefs.addObserver();",
37+
"Services.prefs.removeObserver();",
3438
"Services.obs.addObserver(observer, 'observable');" +
3539
"Services.obs.removeObserver(observer, 'observable');",
3640
"Services.prefs.addObserver('preference.name', otherObserver);" +

tools/lint/eslint/eslint-plugin-mozilla/tests/no-addtask-setup.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ function callError() {
2222

2323
ruleTester.run("no-addtask-setup", rule, {
2424
valid: [
25+
"add_task();",
2526
"add_task(function() {});",
2627
"add_task(function () {});",
2728
"add_task(function foo() {});",

tools/lint/eslint/eslint-plugin-mozilla/tests/no-comparison-or-assignment-inside-ok.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ function invalidCode(code, output, messageId, data) {
2929

3030
ruleTester.run("no-comparison-or-assignment-inside-ok", rule, {
3131
valid: [
32+
"ok()",
3233
"ok(foo)",
3334
"ok(!bar)",
3435
"ok(!foo, 'Message')",

0 commit comments

Comments
 (0)