From 4eb9affda1e7fd1a6ed6e4105b93e98dab44ff62 Mon Sep 17 00:00:00 2001 From: Tan Li Hau Date: Sun, 13 Oct 2019 14:15:25 +0800 Subject: [PATCH] fix debugging with no dependencies --- .../compile/render_dom/wrappers/DebugTag.ts | 26 ++-- .../samples/debug-no-dependencies/_config.js | 5 + .../samples/debug-no-dependencies/expected.js | 144 ++++++++++++++++++ .../debug-no-dependencies/input.svelte | 7 + 4 files changed, 168 insertions(+), 14 deletions(-) create mode 100644 test/js/samples/debug-no-dependencies/_config.js create mode 100644 test/js/samples/debug-no-dependencies/expected.js create mode 100644 test/js/samples/debug-no-dependencies/input.svelte diff --git a/src/compiler/compile/render_dom/wrappers/DebugTag.ts b/src/compiler/compile/render_dom/wrappers/DebugTag.ts index 6705b51cc5..b78b7c8ab9 100644 --- a/src/compiler/compile/render_dom/wrappers/DebugTag.ts +++ b/src/compiler/compile/render_dom/wrappers/DebugTag.ts @@ -59,21 +59,19 @@ export default class DebugTagWrapper extends Wrapper { .join(', '); const logged_identifiers = this.node.expressions.map(e => e.node.name).join(', '); - block.builders.update.add_block(deindent` - if (${condition}) { - const { ${ctx_identifiers} } = ctx; - @_console.${log}({ ${logged_identifiers} }); - debugger; - } - `); + const debugStatements = deindent` + { + const { ${ctx_identifiers} } = ctx; + @_console.${log}({ ${logged_identifiers} }); + debugger; + } + `; - block.builders.create.add_block(deindent` - { - const { ${ctx_identifiers} } = ctx; - @_console.${log}({ ${logged_identifiers} }); - debugger; - } - `); + block.builders.update.add_block(condition ? deindent` + if (${condition}) ${debugStatements} + ` : debugStatements); + + block.builders.create.add_block(debugStatements); } } } diff --git a/test/js/samples/debug-no-dependencies/_config.js b/test/js/samples/debug-no-dependencies/_config.js new file mode 100644 index 0000000000..b1f2518e8a --- /dev/null +++ b/test/js/samples/debug-no-dependencies/_config.js @@ -0,0 +1,5 @@ +export default { + options: { + dev: true + } +}; \ No newline at end of file diff --git a/test/js/samples/debug-no-dependencies/expected.js b/test/js/samples/debug-no-dependencies/expected.js new file mode 100644 index 0000000000..4c168f23ce --- /dev/null +++ b/test/js/samples/debug-no-dependencies/expected.js @@ -0,0 +1,144 @@ +/* generated by Svelte vX.Y.Z */ +import { + SvelteComponentDev, + destroy_each, + detach_dev, + dispatch_dev, + empty, + init, + insert_dev, + noop, + safe_not_equal, + space, + text +} from "svelte/internal"; + +const file = undefined; + +function get_each_context(ctx, list, i) { + const child_ctx = Object.create(ctx); + child_ctx.thing = list[i]; + child_ctx.index = i; + return child_ctx; +} + +// (4:0) {#each things as thing, index} +function create_each_block(ctx) { + var t0, t1_value = ctx.thing + "", t1; + + const block = { + c: function create() { + { + const { index } = ctx; + console.log({ index }); + debugger; + } + + t0 = space(); + t1 = text(t1_value); + }, + + m: function mount(target, anchor) { + insert_dev(target, t0, anchor); + insert_dev(target, t1, anchor); + }, + + p: function update(changed, ctx) { + { + const { index } = ctx; + console.log({ index }); + debugger; + } + }, + + d: function destroy(detaching) { + if (detaching) { + detach_dev(t0); + detach_dev(t1); + } + } + }; + dispatch_dev("SvelteRegisterBlock", { block, id: create_each_block.name, type: "each", source: "(4:0) {#each things as thing, index}", ctx }); + return block; +} + +function create_fragment(ctx) { + var each_1_anchor; + + let each_value = things; + + let each_blocks = []; + + for (let i = 0; i < each_value.length; i += 1) { + each_blocks[i] = create_each_block(get_each_context(ctx, each_value, i)); + } + + const block = { + c: function create() { + for (let i = 0; i < each_blocks.length; i += 1) { + each_blocks[i].c(); + } + + each_1_anchor = empty(); + }, + + l: function claim(nodes) { + throw new Error("options.hydrate only works if the component was compiled with the `hydratable: true` option"); + }, + + m: function mount(target, anchor) { + for (let i = 0; i < each_blocks.length; i += 1) { + each_blocks[i].m(target, anchor); + } + + insert_dev(target, each_1_anchor, anchor); + }, + + p: function update(changed, ctx) { + if (changed.things) { + each_value = things; + + let i; + for (i = 0; i < each_value.length; i += 1) { + const child_ctx = get_each_context(ctx, each_value, i); + + if (each_blocks[i]) { + each_blocks[i].p(changed, child_ctx); + } else { + each_blocks[i] = create_each_block(child_ctx); + each_blocks[i].c(); + each_blocks[i].m(each_1_anchor.parentNode, each_1_anchor); + } + } + + for (; i < each_blocks.length; i += 1) { + each_blocks[i].d(1); + } + each_blocks.length = each_value.length; + } + }, + + i: noop, + o: noop, + + d: function destroy(detaching) { + destroy_each(each_blocks, detaching); + + if (detaching) { + detach_dev(each_1_anchor); + } + } + }; + dispatch_dev("SvelteRegisterBlock", { block, id: create_fragment.name, type: "component", source: "", ctx }); + return block; +} + +class Component extends SvelteComponentDev { + constructor(options) { + super(options); + init(this, options, null, create_fragment, safe_not_equal, []); + dispatch_dev("SvelteRegisterComponent", { component: this, tagName: "Component", options, id: create_fragment.name }); + } +} + +export default Component; \ No newline at end of file diff --git a/test/js/samples/debug-no-dependencies/input.svelte b/test/js/samples/debug-no-dependencies/input.svelte new file mode 100644 index 0000000000..b2f0200be0 --- /dev/null +++ b/test/js/samples/debug-no-dependencies/input.svelte @@ -0,0 +1,7 @@ + + +{#each things as thing, index} + {@debug index} + {thing} +{/each} \ No newline at end of file