From 98673c1dd1e28ab89db850125269c29cfa23074b Mon Sep 17 00:00:00 2001 From: Simon Holthausen Date: Fri, 12 May 2023 17:27:23 +0200 Subject: [PATCH] Convert src/compiler/compile/nodes/shared/is_contextual.ts to JavaScript --- .../compile/nodes/shared/get_const_tags.js | 16 +++++----- .../compile/nodes/shared/is_contextual.ts | 32 +++++++++++-------- 2 files changed, 27 insertions(+), 21 deletions(-) diff --git a/src/compiler/compile/nodes/shared/get_const_tags.js b/src/compiler/compile/nodes/shared/get_const_tags.js index 75cdee099b..cc47b7af0a 100644 --- a/src/compiler/compile/nodes/shared/get_const_tags.js +++ b/src/compiler/compile/nodes/shared/get_const_tags.js @@ -8,17 +8,17 @@ import compiler_errors from '../../compiler_errors.js'; * @param {import('../../Component.js').default} component * @param {import('../interfaces.js').INodeAllowConstTag} node * @param {import('../interfaces.js').INode} parent - * @returns {[import('../../../interfaces.js').ConstTag[], never[]]} + * @returns {[ConstTag[], Array>]} */ export default function get_const_tags(children, component, node, parent) { - /** @type {ConstTagType[]} */ + /** @type {import('../../../interfaces.js').ConstTag[]} */ const const_tags = []; - /** @type {Array>} */ + /** @type {Array>} */ const others = []; for (const child of children) { if (child.type === 'ConstTag') { - const_tags.push(/** @type {ConstTagType} */ (child)); + const_tags.push(/** @type {import('../../../interfaces.js').ConstTag} */ (child)); } else { others.push(child); } @@ -31,17 +31,17 @@ export default function get_const_tags(children, component, node, parent) { const children_nodes = map_children(component, parent, node.scope, others); return [ sorted_consts_nodes, - /** @type {Array>} */ ( - children_nodes - ) + /** @type {Array>} */ (children_nodes) ]; } /** - * @param {import('../../../interfaces.js').ConstTag[]} consts_nodes + * @param {ConstTag[]} consts_nodes * @param {import('../../Component.js').default} component */ function sort_consts_nodes(consts_nodes, component) { + /** @typedef {{ assignees: Set; dependencies: Set; node: ConstTag; }} ConstNode */ + /** @type {ConstNode[]} */ const sorted_consts_nodes = []; diff --git a/src/compiler/compile/nodes/shared/is_contextual.ts b/src/compiler/compile/nodes/shared/is_contextual.ts index b1ef398237..9188414ab7 100644 --- a/src/compiler/compile/nodes/shared/is_contextual.ts +++ b/src/compiler/compile/nodes/shared/is_contextual.ts @@ -1,18 +1,24 @@ -import Component from '../../Component'; -import TemplateScope from './TemplateScope'; -import { is_reserved_keyword } from '../../utils/reserved_keywords'; +import { is_reserved_keyword } from '../../utils/reserved_keywords.js'; -export default function is_contextual(component: Component, scope: TemplateScope, name: string) { - if (is_reserved_keyword(name)) return true; +/** + * @param {import('../../Component.js').default} component + * @param {import('./TemplateScope.js').default} scope + * @param {string} name + */ +export default function is_contextual(component, scope, name) { + if (is_reserved_keyword(name)) + return true; + // if it's a name below root scope, it's contextual + if (!scope.is_top_level(name)) + return true; + const variable = component.var_lookup.get(name); + // hoistables, module declarations, and imports are non-contextual + if (!variable || variable.hoistable) + return false; + // assume contextual + return true; +} - // if it's a name below root scope, it's contextual - if (!scope.is_top_level(name)) return true; - const variable = component.var_lookup.get(name); - // hoistables, module declarations, and imports are non-contextual - if (!variable || variable.hoistable) return false; - // assume contextual - return true; -}