@babel/eslint-parser: Fix ClassPrivateMethods (#10913)

This commit is contained in:
Kai Cataldo 2020-01-02 18:36:58 -05:00 committed by GitHub
parent daaa2063bb
commit 9f832c2716
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 103 additions and 30 deletions

View File

@ -34,6 +34,7 @@
"@babel/plugin-proposal-nullish-coalescing-operator": "^7.0.0",
"@babel/plugin-proposal-optional-chaining": "^7.0.0",
"@babel/plugin-proposal-pipeline-operator": "^7.0.0",
"@babel/plugin-proposal-private-methods": "^7.7.4",
"@babel/plugin-syntax-bigint": "^7.7.4",
"@babel/plugin-syntax-dynamic-import": "^7.0.0",
"@babel/plugin-syntax-export-default-from": "^7.0.0",

View File

@ -16,16 +16,16 @@ const flowFlippedAliasKeys = t.FLIPPED_ALIAS_KEYS.Flow.concat([
"ObjectPattern",
"RestElement",
]);
const visitorKeysMap = Object.entries(t.VISITOR_KEYS).reduce(function(
acc,
[key, value],
) {
if (flowFlippedAliasKeys.indexOf(value) === -1) {
acc[key] = value;
}
return acc;
},
{});
const visitorKeysMap = Object.entries(t.VISITOR_KEYS).reduce(
(acc, [key, value]) => {
if (!flowFlippedAliasKeys.includes(value)) {
acc[key] = value;
}
return acc;
},
{},
);
const propertyTypes = {
// loops
@ -166,6 +166,11 @@ class Referencer extends OriginalReferencer {
this._visitClassProperty(node);
}
// TODO: Update to visit type annotations when TypeScript/Flow support this syntax.
ClassPrivateMethod(node) {
super.MethodDefinition(node);
}
DeclareModule(node) {
this._visitDeclareX(node);
}

View File

@ -270,7 +270,7 @@ describe("babylon-to-espree", () => {
assert.strictEqual(babylonAST.tokens[1].type, "Punctuator");
});
// Espree doesn't support the private fields yet
// Espree doesn't support private fields yet
it("hash (token)", () => {
const code = "class A { #x }";
const babylonAST = parseForESLint(code, {

View File

@ -18,5 +18,6 @@ module.exports = {
["@babel/plugin-proposal-decorators", { decoratorsBeforeExport: false }],
["@babel/plugin-proposal-pipeline-operator", { proposal: "minimal" }],
"@babel/plugin-syntax-bigint",
"@babel/plugin-proposal-private-methods",
],
};

View File

@ -1763,27 +1763,77 @@ describe("verify", () => {
);
});
describe("private class properties", () => {
it("should not be undefined", () => {
verifyAndAssertMessages(
`
class C {
#d = 1;
}
`,
{ "no-undef": 1 },
);
describe("class field declarations", () => {
describe("field declarations", () => {
it("should not be undefined", () => {
verifyAndAssertMessages(
`
class C {
d = 1;
}
`,
{ "no-undef": 1 },
);
});
it("should not be unused", () => {
verifyAndAssertMessages(
`
export class C {
d = 1;
}
`,
{ "no-unused-vars": 1 },
);
});
});
it("should not be unused", () => {
verifyAndAssertMessages(
`
export class C {
#d = 1;
}
`,
{ "no-unused-vars": 1 },
);
describe("private field declarations", () => {
it("should not be undefined", () => {
verifyAndAssertMessages(
`
class C {
#d = 1;
}
`,
{ "no-undef": 1 },
);
});
it("should not be unused", () => {
verifyAndAssertMessages(
`
export class C {
#d = 1;
}
`,
{ "no-unused-vars": 1 },
);
});
});
describe("private methods", () => {
it("should not be undefined", () => {
verifyAndAssertMessages(
`
class C {
#d() {};
}
`,
{ "no-undef": 1 },
);
});
it("should not be unused", () => {
verifyAndAssertMessages(
`
export class C {
#d() {};
}
`,
{ "no-unused-vars": 1 },
);
});
});
});
@ -1853,6 +1903,22 @@ describe("verify", () => {
);
});
it("works with classPrivateMethods", () => {
verifyAndAssertMessages(
`
class A { #a(b, c) {} }
`,
);
});
it("works with arrow function classPrivateProperties", () => {
verifyAndAssertMessages(
`
class A { #a = (a, b) => {}; }
`,
);
});
it("works with optionalCatchBinding", () => {
verifyAndAssertMessages(
`