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 505x 505x 505x 505x 505x 23x 23x 23x 23x 23x 23x 23x 23x 23x 23x 23x 23x 23x 482x 482x 482x  
/** @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);
}