Skip to content

Commit ee75483

Browse files
authored
fix(helpers): Fix prototype construction (#561)
* Return ["String"] as protochain part when object type is "Literal" * Update compat data * Only return "String" if the literal is a string literal * Return "Array" for "ArrayExpression"
1 parent 3af66ff commit ee75483

File tree

6 files changed

+129
-83
lines changed

6 files changed

+129
-83
lines changed

package-lock.json

Lines changed: 32 additions & 18 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -83,10 +83,10 @@
8383
"semi": true
8484
},
8585
"dependencies": {
86-
"@mdn/browser-compat-data": "^5.2.34",
87-
"ast-metadata-inferer": "^0.7.0",
86+
"@mdn/browser-compat-data": "^5.2.47",
87+
"ast-metadata-inferer": "^0.8.0",
8888
"browserslist": "^4.21.5",
89-
"caniuse-lite": "^1.0.30001451",
89+
"caniuse-lite": "^1.0.30001473",
9090
"find-up": "^5.0.0",
9191
"lodash.memoize": "4.1.2",
9292
"semver": "7.3.8"

src/helpers.ts

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -91,15 +91,24 @@ export function lintExpressionStatement(
9191
);
9292
}
9393

94+
function isStringLiteral(node: ESLintNode): boolean {
95+
return node.type === "Literal" && typeof node.value === "string";
96+
}
97+
9498
function protoChainFromMemberExpression(node: ESLintNode): string[] {
9599
if (!node.object) return [node.name];
96100
const protoChain = (() => {
97-
switch (node.object.type) {
98-
case "NewExpression":
99-
case "CallExpression":
100-
return protoChainFromMemberExpression(node.object.callee!);
101-
default:
102-
return protoChainFromMemberExpression(node.object);
101+
if (
102+
node.object.type === "NewExpression" ||
103+
node.object.type === "CallExpression"
104+
) {
105+
return protoChainFromMemberExpression(node.object.callee!);
106+
} else if (node.object.type === "ArrayExpression") {
107+
return ["Array"];
108+
} else if (isStringLiteral(node.object)) {
109+
return ["String"];
110+
} else {
111+
return protoChainFromMemberExpression(node.object);
103112
}
104113
})();
105114
return [...protoChain, node.property!.name];

src/types.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ export type TargetNames = Array<string>;
3939
export type ESLintNode = {
4040
name: string;
4141
type: string;
42+
value?: unknown;
4243
object?: ESLintNode;
4344
parent?: ESLintNode;
4445
expression?: ESLintNode;

0 commit comments

Comments
 (0)