diff --git a/src/generators/Generator.ts b/src/generators/Generator.ts
index 641baf81a1..1fed4dbeb4 100644
--- a/src/generators/Generator.ts
+++ b/src/generators/Generator.ts
@@ -398,7 +398,7 @@ export default class Generator {
return alias;
}
- getUniqueNameMaker() {
+ getUniqueNameMaker(names: string[]) {
const localUsedNames = new Set();
function add(name: string) {
@@ -407,6 +407,7 @@ export default class Generator {
reservedNames.forEach(add);
this.userVars.forEach(add);
+ names.forEach(add);
return (name: string) => {
if (test) name = `${name}$`;
diff --git a/src/generators/dom/Block.ts b/src/generators/dom/Block.ts
index 2e03c45e75..edf505c7b3 100644
--- a/src/generators/dom/Block.ts
+++ b/src/generators/dom/Block.ts
@@ -105,7 +105,7 @@ export default class Block {
this.hasOutroMethod = false;
this.outros = 0;
- this.getUniqueName = this.generator.getUniqueNameMaker();
+ this.getUniqueName = this.generator.getUniqueNameMaker([...this.contexts.values()]);
this.variables = new Map();
this.aliases = new Map()
diff --git a/src/generators/dom/index.ts b/src/generators/dom/index.ts
index c3358f31d3..b01117a055 100644
--- a/src/generators/dom/index.ts
+++ b/src/generators/dom/index.ts
@@ -48,33 +48,6 @@ export class DomGenerator extends Generator {
// initial values for e.g. window.innerWidth, if there's a <:Window> meta tag
this.metaBindings = [];
}
-
- getUniqueNameMaker() {
- const localUsedNames = new Set();
-
- function add(name: string) {
- localUsedNames.add(name);
- }
-
- reservedNames.forEach(add);
- this.userVars.forEach(add);
- for (const name in shared) {
- localUsedNames.add(test ? `${name}$` : name);
- }
-
- return (name: string) => {
- if (test) name = `${name}$`;
- let alias = name;
- for (
- let i = 1;
- this.usedNames.has(alias) ||
- localUsedNames.has(alias);
- alias = `${name}_${i++}`
- );
- localUsedNames.add(alias);
- return alias;
- };
- }
}
export default function dom(
diff --git a/test/runtime/samples/component-name-deconflicted/Nested.html b/test/runtime/samples/component-name-deconflicted/Nested.html
new file mode 100644
index 0000000000..c39d49c248
--- /dev/null
+++ b/test/runtime/samples/component-name-deconflicted/Nested.html
@@ -0,0 +1 @@
+{{nested}}
\ No newline at end of file
diff --git a/test/runtime/samples/component-name-deconflicted/_config.js b/test/runtime/samples/component-name-deconflicted/_config.js
new file mode 100644
index 0000000000..853bbdd87c
--- /dev/null
+++ b/test/runtime/samples/component-name-deconflicted/_config.js
@@ -0,0 +1,17 @@
+export default {
+ html: `
+ 1
+ 2
+ `,
+
+ test(assert, component, target) {
+ component.set({
+ list: [3, 4]
+ });
+
+ assert.htmlEqual(target.innerHTML, `
+ 3
+ 4
+ `);
+ }
+};
\ No newline at end of file
diff --git a/test/runtime/samples/component-name-deconflicted/main.html b/test/runtime/samples/component-name-deconflicted/main.html
new file mode 100644
index 0000000000..6018c378f0
--- /dev/null
+++ b/test/runtime/samples/component-name-deconflicted/main.html
@@ -0,0 +1,18 @@
+{{#each list as nested}}
+ {{#if true}}
+
+ {{/if}}
+{{/each}}
+
+
\ No newline at end of file