Skip to content

Commit

Permalink
Fix: do not fail on nested unknown operators (#10561)
Browse files Browse the repository at this point in the history
  • Loading branch information
rubennorte authored and not-an-aardvark committed Jul 6, 2018
1 parent 92b19ca commit 02efeac
Show file tree
Hide file tree
Showing 3 changed files with 238 additions and 1 deletion.
2 changes: 1 addition & 1 deletion lib/code-path-analysis/code-path-analyzer.js
Expand Up @@ -60,7 +60,7 @@ function isForkingByTrueOrFalse(node) {
return parent.test === node;

case "LogicalExpression":
return true;
return isHandledLogicalOperator(parent.operator);

default:
return false;
Expand Down
@@ -0,0 +1,227 @@
/**
* The output AST has been modified to represent an unknown operator
* (replaced ?? with %%)
*
* Parser: babel-eslint v8.2.3
* (with this fix for tokens: https://github.com/babel/babel-eslint/pull/632)
* Source code:
* foo && bar ?? baz
*/

exports.parse = () => ({
type: "Program",
start: 0,
end: 17,
loc: {
start: {
line: 1,
column: 0
},
end: {
line: 1,
column: 17
}
},
range: [0, 17],
comments: [],
tokens: [
{
type: "Identifier",
value: "foo",
start: 0,
end: 3,
loc: {
start: {
line: 1,
column: 0
},
end: {
line: 1,
column: 3
}
},
range: [0, 3]
},
{
type: "Punctuator",
value: "&&",
start: 4,
end: 6,
loc: {
start: {
line: 1,
column: 4
},
end: {
line: 1,
column: 6
}
},
range: [4, 6]
},
{
type: "Identifier",
value: "bar",
start: 7,
end: 10,
loc: {
start: {
line: 1,
column: 7
},
end: {
line: 1,
column: 10
}
},
range: [7, 10]
},
{
type: "Punctuator",
value: "%%",
start: 11,
end: 13,
loc: {
start: {
line: 1,
column: 11
},
end: {
line: 1,
column: 13
}
},
range: [11, 13]
},
{
type: "Identifier",
value: "baz",
start: 14,
end: 17,
loc: {
start: {
line: 1,
column: 14
},
end: {
line: 1,
column: 17
}
},
range: [14, 17]
}
],
sourceType: "module",
body: [
{
type: "ExpressionStatement",
start: 0,
end: 17,
loc: {
start: {
line: 1,
column: 0
},
end: {
line: 1,
column: 17
}
},
range: [0, 17],
expression: {
type: "LogicalExpression",
start: 0,
end: 17,
loc: {
start: {
line: 1,
column: 0
},
end: {
line: 1,
column: 17
}
},
range: [0, 17],
left: {
type: "LogicalExpression",
start: 0,
end: 10,
loc: {
start: {
line: 1,
column: 0
},
end: {
line: 1,
column: 10
}
},
range: [0, 10],
left: {
type: "Identifier",
start: 0,
end: 3,
loc: {
start: {
line: 1,
column: 0
},
end: {
line: 1,
column: 3
},
identifierName: "foo"
},
range: [0, 3],
name: "foo",
_babelType: "Identifier"
},
operator: "&&",
right: {
type: "Identifier",
start: 7,
end: 10,
loc: {
start: {
line: 1,
column: 7
},
end: {
line: 1,
column: 10
},
identifierName: "bar"
},
range: [7, 10],
name: "bar",
_babelType: "Identifier"
},
_babelType: "LogicalExpression"
},
operator: "%%",
right: {
type: "Identifier",
start: 14,
end: 17,
loc: {
start: {
line: 1,
column: 14
},
end: {
line: 1,
column: 17
},
identifierName: "baz"
},
range: [14, 17],
name: "baz",
_babelType: "Identifier"
},
_babelType: "LogicalExpression"
},
_babelType: "ExpressionStatement"
}
]
});
10 changes: 10 additions & 0 deletions tests/lib/linter.js
Expand Up @@ -4480,6 +4480,16 @@ describe("Linter", () => {
assert.strictEqual(messages.length, 0);
});

it("should not throw or report errors when the custom parser returns nested unrecognized operators (https://github.com/eslint/eslint/issues/10560)", () => {
const code = "foo && bar %% baz";
const parser = path.join(parserFixtures, "unknown-operators", "unknown-logical-operator-nested.js");

// This shouldn't throw
const messages = linter.verify(code, { parser }, filename, true);

assert.strictEqual(messages.length, 0);
});

it("should strip leading line: prefix from parser error", () => {
const parser = path.join(parserFixtures, "line-error.js");
const messages = linter.verify(";", { parser }, "filename");
Expand Down

0 comments on commit 02efeac

Please sign in to comment.