babel/eslint/babel-eslint-parser/test/specs/z_parser-for-eslint-after-patched.js
2019-01-10 15:25:00 -05:00

46 lines
1.6 KiB
JavaScript

"use strict";
const eslint = require("eslint");
const assert = require("assert");
const babelEslint = require("../..");
const espree = require("espree");
const assertImplementsAST = require("../helpers/assert-implements-ast");
describe("https://github.com/babel/babel-eslint/issues/558", () => {
it("don't crash with eslint-plugin-import", () => {
const engine = new eslint.CLIEngine({ ignore: false });
engine.executeOnFiles([
"../test/fixtures/eslint-plugin-import/a.js",
"../test/fixtures/eslint-plugin-import/b.js",
"../test/fixtures/eslint-plugin-import/c.js",
]);
});
/*
* This test ensures that the enhanced referencer does not get used if eslint-scope has already been
* monkeypatched, because this causes some correctness issues. For example, if the enhanced referencer
* is used after the original referencer is monkeypatched, type annotation references are counted twice.
*/
it("does not visit type annotations multiple times after monkeypatching and calling parseForESLint()", () => {
assertImplementsAST(
espree.parse("foo", { sourceType: "module" }),
babelEslint.parse("foo", {})
);
const parseResult = babelEslint.parseForESLint(
"type Foo = {}; function x(): Foo {}",
{
eslintVisitorKeys: true,
eslintScopeManager: true,
}
);
assert(parseResult.visitorKeys);
assert(parseResult.scopeManager);
const fooVariable = parseResult.scopeManager.getDeclaredVariables(
parseResult.ast.body[0]
)[0];
assert.strictEqual(fooVariable.references.length, 1);
});
});