* Skip TSAsExpression when transforming spread in CallExpression * Create @babel/helper-get-call-context package * Support OptionalCallExpressions * Use helper in optional chaining plugin, and move tests * Update package.json files * Use dot notation to access property * Remove private method tests until future MR * Update packages/babel-plugin-transform-spread/package.json * Rename @babel/helper-get-call-context to @babel/helper-skip-transparent-expr-wrappers * Handle typed OptionalMemberExpressions * Make @babel/helper-skip-transparent-expr-wrappers a dependency * Support TSNonNullExpressions * Use named import instead of default * Add test for call context when parenthesized call expression has type * Improve handling of member expressions inside transparent expression wrappers * Add comment explaining what a transparent expression wrapper is * Add newlines to test fixtures * Pass correct parameter type to skipTransparentExprWrappers * Rename to babel-helper-skip-transparent-expression-wrappers * Remove getCallContext helper * Fixed exports key * Preserve types in babel-plugin-transform-spread tests * Use external-helpers to avoid inlining helper functions in tests Co-authored-by: Nicolò Ribaudo <nicolo.ribaudo@gmail.com>
28 lines
856 B
JavaScript
28 lines
856 B
JavaScript
// @flow
|
|
|
|
import * as t from "@babel/types";
|
|
import type { NodePath } from "@babel/traverse";
|
|
|
|
// A transparent expression wrapper is an AST node that most plugins will wish
|
|
// to skip, as its presence does not affect the behaviour of the code. This
|
|
// includes expressions used for types, and extra parenthesis. For example, in
|
|
// (a as any)(), this helper can be used to skip the TSAsExpression when
|
|
// determining the callee.
|
|
export function isTransparentExprWrapper(node: Node) {
|
|
return (
|
|
t.isTSAsExpression(node) ||
|
|
t.isTSTypeAssertion(node) ||
|
|
t.isTSNonNullExpression(node) ||
|
|
t.isTypeCastExpression(node) ||
|
|
t.isParenthesizedExpression(node)
|
|
);
|
|
}
|
|
|
|
export function skipTransparentExprWrappers(path: NodePath): NodePath {
|
|
while (isTransparentExprWrapper(path.node)) {
|
|
path = path.get("expression");
|
|
}
|
|
|
|
return path;
|
|
}
|