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

100% Statements 33/33
80% Branches 4/5
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 506x 506x 506x 506x 506x 23x 23x 23x 23x 23x 23x 23x 23x 23x 23x 23x 23x 23x 483x 483x 483x  
/** @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);
}