chore: reuse is_function helper (#15467)

pull/15489/head
Rich Harris 6 months ago committed by GitHub
parent e2bbc560e4
commit 1c0e24013f
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

@ -162,16 +162,8 @@ function get_delegated_event(event_name, handler, context) {
return unhoisted; return unhoisted;
} }
if (binding !== null && binding.initial !== null && !binding.updated) { if (binding?.is_function()) {
const binding_type = binding.initial.type; target_function = binding.initial;
if (
binding_type === 'ArrowFunctionExpression' ||
binding_type === 'FunctionDeclaration' ||
binding_type === 'FunctionExpression'
) {
target_function = binding.initial;
}
} }
} }

@ -1,4 +1,4 @@
/** @import { ClassDeclaration, Expression, FunctionDeclaration, Identifier, ImportDeclaration, MemberExpression, Node, Pattern, VariableDeclarator } from 'estree' */ /** @import { ArrowFunctionExpression, ClassDeclaration, Expression, FunctionDeclaration, FunctionExpression, Identifier, ImportDeclaration, MemberExpression, Node, Pattern, VariableDeclarator } from 'estree' */
/** @import { Context, Visitor } from 'zimmerframe' */ /** @import { Context, Visitor } from 'zimmerframe' */
/** @import { AST, BindingKind, DeclarationKind } from '#compiler' */ /** @import { AST, BindingKind, DeclarationKind } from '#compiler' */
import is_reference from 'is-reference'; import is_reference from 'is-reference';
@ -80,19 +80,23 @@ export class Binding {
return this.mutated || this.reassigned; return this.mutated || this.reassigned;
} }
/**
* @returns {this is Binding & { initial: ArrowFunctionExpression | FunctionDeclaration | FunctionExpression }}
*/
is_function() { is_function() {
if (this.reassigned) { if (this.updated) {
// even if it's reassigned to another function, // even if it's reassigned to another function,
// we can't use it directly as e.g. an event handler // we can't use it directly as e.g. an event handler
return false; return false;
} }
if (this.declaration_kind === 'function') {
return true;
}
const type = this.initial?.type; const type = this.initial?.type;
return type === 'ArrowFunctionExpression' || type === 'FunctionExpression';
return (
type === 'ArrowFunctionExpression' ||
type === 'FunctionExpression' ||
type === 'FunctionDeclaration'
);
} }
} }

Loading…
Cancel
Save