mirror of
https://github.com/morluto/rea.git
synced 2026-11-11 01:13:39 +00:00
fix(javascript): retain implicit property conversion and disposal effects
This commit is contained in:
1 parent
44efd920c6
commit
905ae18451
9 files changed
+569
-68
No files matched your search
@@ -0,0 +1,33 @@
|
||||
import * as t from "@babel/types";
|
||||
|
||||
/** Operands exposed to user-defined primitive conversion by language operations. */
|
||||
export const semanticCoercionOperands = (node: t.Node): readonly t.Node[] => {
|
||||
if (t.isBinaryExpression(node)) {
|
||||
if (["===", "!==", "instanceof"].includes(node.operator)) return [];
|
||||
return node.operator === "in" ? [node.left] : [node.left, node.right];
|
||||
}
|
||||
if (t.isUnaryExpression(node) && ["+", "-", "~"].includes(node.operator))
|
||||
return [node.argument];
|
||||
if (t.isUpdateExpression(node)) return [node.argument];
|
||||
if (
|
||||
t.isAssignmentExpression(node) &&
|
||||
!["=", "&&=", "||=", "??="].includes(node.operator)
|
||||
)
|
||||
return [node.left, node.right];
|
||||
if (
|
||||
(t.isMemberExpression(node) ||
|
||||
t.isOptionalMemberExpression(node) ||
|
||||
t.isObjectProperty(node) ||
|
||||
t.isObjectMethod(node) ||
|
||||
t.isClassProperty(node) ||
|
||||
t.isClassMethod(node) ||
|
||||
t.isClassAccessorProperty(node)) &&
|
||||
node.computed
|
||||
)
|
||||
return [
|
||||
t.isMemberExpression(node) || t.isOptionalMemberExpression(node)
|
||||
? node.property
|
||||
: node.key,
|
||||
];
|
||||
return [];
|
||||
};
|
||||
Reference in new issue
Block a user