From 8f8702a81bc71ebf6ae5599e3650b12efeab7d93 Mon Sep 17 00:00:00 2001 From: Nguyen Tran Date: Tue, 28 Feb 2023 08:51:02 -0500 Subject: [PATCH] Fix issue where svelte-ignore reactive-component does not work --- .../wrappers/InlineComponent/index.ts | 4 ++++ src/compiler/utils/extract_svelte_ignore.ts | 20 +++++++++++++++++++ 2 files changed, 24 insertions(+) diff --git a/src/compiler/compile/render_dom/wrappers/InlineComponent/index.ts b/src/compiler/compile/render_dom/wrappers/InlineComponent/index.ts index bca01fdb4c..5053e8c5d2 100644 --- a/src/compiler/compile/render_dom/wrappers/InlineComponent/index.ts +++ b/src/compiler/compile/render_dom/wrappers/InlineComponent/index.ts @@ -21,6 +21,7 @@ import SlotTemplate from '../../../nodes/SlotTemplate'; import { is_head } from '../shared/is_head'; import compiler_warnings from '../../../compiler_warnings'; import { namespaces } from '../../../../utils/namespaces'; +import { extract_ignores_above_node } from '../../../../utils/extract_svelte_ignore'; type SlotDefinition = { block: Block; scope: TemplateScope; get_context?: Node; get_changes?: Node }; @@ -111,9 +112,12 @@ export default class InlineComponentWrapper extends Wrapper { return; } + const ignores = extract_ignores_above_node(this.node); + this.renderer.component.push_ignores(ignores); if (variable.reassigned || variable.export_name || variable.is_reactive_dependency) { this.renderer.component.warn(this.node, compiler_warnings.reactive_component(name)); } + this.renderer.component.pop_ignores(); } render( diff --git a/src/compiler/utils/extract_svelte_ignore.ts b/src/compiler/utils/extract_svelte_ignore.ts index 30be2893a4..3e98c51771 100644 --- a/src/compiler/utils/extract_svelte_ignore.ts +++ b/src/compiler/utils/extract_svelte_ignore.ts @@ -1,6 +1,8 @@ import { TemplateNode } from '../interfaces'; import { flatten } from './flatten'; import { regex_whitespace } from './patterns'; +import Node from '../compile/nodes/shared/Node'; +import { INode } from '../compile/nodes/interfaces'; const regex_svelte_ignore = /^\s*svelte-ignore\s+([\s\S]+)\s*$/m; @@ -33,3 +35,21 @@ export function extract_ignores_above_position(position: number, template_nodes: return []; } + +export function extract_ignores_above_node(node: Node): string[] { + // We traverse along nodes on the same array as the node we pass in + let cur_node: INode | undefined = node.prev; + while (cur_node) { + if (cur_node.type !== 'Comment' && cur_node.type !== 'Text') { + return []; + } + + if (cur_node.type === 'Comment' && cur_node.ignores.length) { + return cur_node.ignores; + } + + cur_node = cur_node.prev; + } + + return []; +}