All files / src/compiler/phases/3-transform/client/visitors FunctionDeclaration.js

100% Statements 33/33
75% Branches 3/4
100% Functions 1/1
100% Lines 31/31

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 322x 2x 2x 2x 2x 2x 2x 2x 2x 2x 507x 507x 507x 507x 507x 23x 23x 23x 23x 23x 23x 23x 23x 23x 23x 23x 23x 23x 484x 484x 484x  
/** @import { FunctionDeclaration } from 'estree' */
/** @import { ComponentContext } from '../types' */
import { build_hoistable_params } from '../utils.js';
import * as b from '../../../../utils/builders.js';
 
/**
 * @param {FunctionDeclaration} node
 * @param {ComponentContext} context
 */
export function FunctionDeclaration(node, context) {
	const metadata = node.metadata;
 
	const state = { ...context.state, in_constructor: false };
 
	if (metadata?.hoistable === true) {
		const params = build_hoistable_params(node, context);
 
		context.state.hoisted.push(
			/** @type {FunctionDeclaration} */ ({
				...node,
				id: node.id !== null ? context.visit(node.id, state) : null,
				params,
				body: context.visit(node.body, state)
			})
		);
 
		return b.empty;
	}
 
	context.next(state);
}