From 58a4034adeafc261d864e3e63064dff99d5e2104 Mon Sep 17 00:00:00 2001 From: Simon Holthausen Date: Fri, 12 May 2023 17:23:44 +0200 Subject: [PATCH] Lint and format src/compiler/compile/nodes/shared/get_const_tags.js --- .../compile/nodes/shared/get_const_tags.js | 167 ++++++++++-------- 1 file changed, 91 insertions(+), 76 deletions(-) diff --git a/src/compiler/compile/nodes/shared/get_const_tags.js b/src/compiler/compile/nodes/shared/get_const_tags.js index 17ffc82a64..75cdee099b 100644 --- a/src/compiler/compile/nodes/shared/get_const_tags.js +++ b/src/compiler/compile/nodes/shared/get_const_tags.js @@ -11,25 +11,30 @@ import compiler_errors from '../../compiler_errors.js'; * @returns {[import('../../../interfaces.js').ConstTag[], never[]]} */ export default function get_const_tags(children, component, node, parent) { + /** @type {ConstTagType[]} */ + const const_tags = []; - /** @type {ConstTagType[]} */ - const const_tags = []; - - /** @type {Array>} */ - const others = []; - for (const child of children) { - if (child.type === 'ConstTag') { - const_tags.push(/** @type {ConstTagType} */ (child)); - } - else { - others.push(child); - } - } - const consts_nodes = const_tags.map(/** @param {any} tag */ (tag) => new ConstTag(component, node, node.scope, tag)); - const sorted_consts_nodes = sort_consts_nodes(consts_nodes, component); - sorted_consts_nodes.forEach(/** @param {any} node */ (node) => node.parse_expression()); - const children_nodes = map_children(component, parent, node.scope, others); - return [sorted_consts_nodes, /** @type {Array>} */ (children_nodes)]; + /** @type {Array>} */ + const others = []; + for (const child of children) { + if (child.type === 'ConstTag') { + const_tags.push(/** @type {ConstTagType} */ (child)); + } else { + others.push(child); + } + } + const consts_nodes = const_tags.map( + /** @param {any} tag */ (tag) => new ConstTag(component, node, node.scope, tag) + ); + const sorted_consts_nodes = sort_consts_nodes(consts_nodes, component); + sorted_consts_nodes.forEach(/** @param {any} node */ (node) => node.parse_expression()); + const children_nodes = map_children(component, parent, node.scope, others); + return [ + sorted_consts_nodes, + /** @type {Array>} */ ( + children_nodes + ) + ]; } /** @@ -37,64 +42,74 @@ export default function get_const_tags(children, component, node, parent) { * @param {import('../../Component.js').default} component */ function sort_consts_nodes(consts_nodes, component) { + /** @type {ConstNode[]} */ + const sorted_consts_nodes = []; - /** @type {ConstNode[]} */ - const sorted_consts_nodes = []; - - /** @type {ConstNode[]} */ - const unsorted_consts_nodes = consts_nodes.map(/** @param {any} node */ (node) => { - return { - assignees: node.assignees, - dependencies: node.dependencies, - node - }; - }); - const lookup = new Map(); - unsorted_consts_nodes.forEach(/** @param {any} node */ (node) => { - node.assignees.forEach(/** @param {any} name */ (name) => { - if (!lookup.has(name)) { - lookup.set(name, []); - } - lookup.get(name).push(node); - }); - }); - const cycle = check_graph_for_cycles(unsorted_consts_nodes.reduce(/** - * @param {any} acc - * @param {any} node - */ (acc, node) => { - node.assignees.forEach(/** @param {any} v */ (v) => { - node.dependencies.forEach(/** @param {any} w */ (w) => { - if (!node.assignees.has(w)) { - acc.push([v, w]); - } - }); - }); - return acc; - }, [])); - if (cycle && cycle.length) { - const nodeList = lookup.get(cycle[0]); - const node = nodeList[0]; - component.error(node.node, compiler_errors.cyclical_const_tags(cycle)); - } + /** @type {ConstNode[]} */ + const unsorted_consts_nodes = consts_nodes.map( + /** @param {any} node */ (node) => { + return { + assignees: node.assignees, + dependencies: node.dependencies, + node + }; + } + ); + const lookup = new Map(); + unsorted_consts_nodes.forEach( + /** @param {any} node */ (node) => { + node.assignees.forEach( + /** @param {any} name */ (name) => { + if (!lookup.has(name)) { + lookup.set(name, []); + } + lookup.get(name).push(node); + } + ); + } + ); + const cycle = check_graph_for_cycles( + unsorted_consts_nodes.reduce( + /** + * @param {any} acc + * @param {any} node + */ (acc, node) => { + node.assignees.forEach( + /** @param {any} v */ (v) => { + node.dependencies.forEach( + /** @param {any} w */ (w) => { + if (!node.assignees.has(w)) { + acc.push([v, w]); + } + } + ); + } + ); + return acc; + }, + [] + ) + ); + if (cycle && cycle.length) { + const nodeList = lookup.get(cycle[0]); + const node = nodeList[0]; + component.error(node.node, compiler_errors.cyclical_const_tags(cycle)); + } - /** @param {ConstNode} node */ - const add_node = (node) => { - if (sorted_consts_nodes.includes(node)) - return; - node.dependencies.forEach(/** @param {any} name */ (name) => { - if (node.assignees.has(name)) - return; - const earlier_nodes = lookup.get(name); - if (earlier_nodes) { - earlier_nodes.forEach(add_node); - } - }); - sorted_consts_nodes.push(node); - }; - unsorted_consts_nodes.forEach(add_node); - return sorted_consts_nodes.map(/** @param {any} node */ (node) => node.node); + /** @param {ConstNode} node */ + const add_node = (node) => { + if (sorted_consts_nodes.includes(node)) return; + node.dependencies.forEach( + /** @param {any} name */ (name) => { + if (node.assignees.has(name)) return; + const earlier_nodes = lookup.get(name); + if (earlier_nodes) { + earlier_nodes.forEach(add_node); + } + } + ); + sorted_consts_nodes.push(node); + }; + unsorted_consts_nodes.forEach(add_node); + return sorted_consts_nodes.map(/** @param {any} node */ (node) => node.node); } - - - -