From afcf2aa3f221cbdb70c2943721666c3b24d7872f Mon Sep 17 00:00:00 2001 From: Rich Harris Date: Tue, 12 Dec 2017 20:32:53 -0500 Subject: [PATCH 1/2] deconflict computed properties with arguments to _recompute - fixes #1012 --- src/generators/Generator.ts | 13 ++++++++++--- .../computed-values-deconflicted/_config.js | 12 ++++++++++++ .../samples/computed-values-deconflicted/main.html | 14 ++++++++++++++ 3 files changed, 36 insertions(+), 3 deletions(-) create mode 100644 test/runtime/samples/computed-values-deconflicted/_config.js create mode 100644 test/runtime/samples/computed-values-deconflicted/main.html diff --git a/src/generators/Generator.ts b/src/generators/Generator.ts index 5ecb021d73..a11a8d962a 100644 --- a/src/generators/Generator.ts +++ b/src/generators/Generator.ts @@ -485,7 +485,7 @@ export default class Generator { `); }; - const addDeclaration = (key: string, node: Node, disambiguator?: string) => { + const addDeclaration = (key: string, node: Node, disambiguator?: string, conflicts?: Record) => { const qualified = disambiguator ? `${disambiguator}-${key}` : key; if (node.type === 'Identifier' && node.name === key) { @@ -493,7 +493,10 @@ export default class Generator { return; } - let name = this.getUniqueName(key); + let deconflicted = key; + if (conflicts) while (deconflicted in conflicts) deconflicted += '_' + + let name = this.getUniqueName(deconflicted); this.templateVars.set(qualified, name); // deindent @@ -548,7 +551,11 @@ export default class Generator { computations.push({ key, deps }); const prop = templateProperties.computed.value.properties.find((prop: Node) => getName(prop.key) === key); - addDeclaration(key, prop.value, 'computed'); + + addDeclaration(key, prop.value, 'computed', { + state: true, + changed: true + }); }; templateProperties.computed.value.properties.forEach((prop: Node) => diff --git a/test/runtime/samples/computed-values-deconflicted/_config.js b/test/runtime/samples/computed-values-deconflicted/_config.js new file mode 100644 index 0000000000..5493254880 --- /dev/null +++ b/test/runtime/samples/computed-values-deconflicted/_config.js @@ -0,0 +1,12 @@ +export default { + solo: true, + + html: 'waiting', + + test(assert, component, target) { + component.set({ x: 'ready' }); + assert.htmlEqual(target.innerHTML, ` + ready + `); + } +}; diff --git a/test/runtime/samples/computed-values-deconflicted/main.html b/test/runtime/samples/computed-values-deconflicted/main.html new file mode 100644 index 0000000000..d32fde6167 --- /dev/null +++ b/test/runtime/samples/computed-values-deconflicted/main.html @@ -0,0 +1,14 @@ +{{state}} + + \ No newline at end of file From 48dc90d9f79302158754a711da359bf983f3f382 Mon Sep 17 00:00:00 2001 From: Rich Harris Date: Tue, 12 Dec 2017 20:34:49 -0500 Subject: [PATCH 2/2] remove solo --- test/runtime/samples/computed-values-deconflicted/_config.js | 2 -- 1 file changed, 2 deletions(-) diff --git a/test/runtime/samples/computed-values-deconflicted/_config.js b/test/runtime/samples/computed-values-deconflicted/_config.js index 5493254880..180aad8fe1 100644 --- a/test/runtime/samples/computed-values-deconflicted/_config.js +++ b/test/runtime/samples/computed-values-deconflicted/_config.js @@ -1,6 +1,4 @@ export default { - solo: true, - html: 'waiting', test(assert, component, target) {