From e974fdc40b22615bec41223c3c7651cd00b1e1ee Mon Sep 17 00:00:00 2001 From: Rich Harris Date: Sat, 9 Dec 2017 17:59:35 -0500 Subject: [PATCH] more tidying up --- src/generators/Generator.ts | 2 +- src/generators/nodes/Component.ts | 6 +----- src/generators/nodes/EachBlock.ts | 7 +++---- src/generators/nodes/Element.ts | 6 +++--- src/generators/nodes/shared/Node.ts | 10 ---------- .../server-side-rendering/visitors/Element.ts | 2 +- .../server-side-rendering/visitors/Slot.ts | 1 - .../shared/utils/isChildOfComponent.ts | 10 ---------- src/generators/shared/utils/walkHtml.ts | 20 ------------------- .../{shared/utils => }/wrapModule.ts | 6 +++--- 10 files changed, 12 insertions(+), 58 deletions(-) delete mode 100644 src/generators/shared/utils/isChildOfComponent.ts delete mode 100644 src/generators/shared/utils/walkHtml.ts rename src/generators/{shared/utils => }/wrapModule.ts (97%) diff --git a/src/generators/Generator.ts b/src/generators/Generator.ts index e5467d1f45..f5fc212979 100644 --- a/src/generators/Generator.ts +++ b/src/generators/Generator.ts @@ -9,7 +9,7 @@ import flattenReference from '../utils/flattenReference'; import reservedNames from '../utils/reservedNames'; import namespaces from '../utils/namespaces'; import { removeNode, removeObjectKey } from '../utils/removeNode'; -import wrapModule from './shared/utils/wrapModule'; +import wrapModule from './wrapModule'; import annotateWithScopes, { Scope } from '../utils/annotateWithScopes'; import getName from '../utils/getName'; import clone from '../utils/clone'; diff --git a/src/generators/nodes/Component.ts b/src/generators/nodes/Component.ts index 20aff8f705..551f54b8ec 100644 --- a/src/generators/nodes/Component.ts +++ b/src/generators/nodes/Component.ts @@ -10,7 +10,7 @@ import Block from '../dom/Block'; import Attribute from './Attribute'; export default class Component extends Node { - type: 'Component'; // TODO fix this? + type: 'Component'; name: string; attributes: Attribute[]; children: Node[]; @@ -408,10 +408,6 @@ export default class Component extends Node { block.builders.update.addBlock(updates); } } - - nearestComponent() { - return this; - } } function mungeAttribute(attribute: Node, block: Block): Attribute { diff --git a/src/generators/nodes/EachBlock.ts b/src/generators/nodes/EachBlock.ts index 574c9bb9cf..809eaf9397 100644 --- a/src/generators/nodes/EachBlock.ts +++ b/src/generators/nodes/EachBlock.ts @@ -87,7 +87,7 @@ export default class EachBlock extends Node { if (this.else) { this.else.block = block.child({ - comment: '// TODO', // createDebuggingComment(this.else, generator), + comment: createDebuggingComment(this.else, this.generator), name: this.generator.getUniqueName(`${this.block.name}_else`), }); @@ -256,9 +256,8 @@ export default class EachBlock extends Node { block.addVariable(head); block.addVariable(last); - if (this.children[0] && this.children[0].type === 'Element') { - // TODO or text/tag/raw - this.block.first = this.children[0].var; // TODO this is highly confusing + if (this.children[0].isDomNode()) { + this.block.first = this.children[0].var; } else { this.block.first = this.block.getUniqueName('first'); this.block.addElement( diff --git a/src/generators/nodes/Element.ts b/src/generators/nodes/Element.ts index 2298ff8466..62b76eb6ed 100644 --- a/src/generators/nodes/Element.ts +++ b/src/generators/nodes/Element.ts @@ -129,11 +129,11 @@ export default class Element extends Node { } const slot = this.getStaticAttributeValue('slot'); - if (slot && this.isChildOfComponent()) { + if (slot && this.hasAncestor('Component')) { this.cannotUseInnerHTML(); this.slotted = true; // TODO validate slots — no nesting, no dynamic names... - const component = this.nearestComponent(); + const component = this.findNearest('Component'); component._slots.add(slot); } @@ -171,7 +171,7 @@ export default class Element extends Node { const slot = this.attributes.find((attribute: Node) => attribute.name === 'slot'); const initialMountNode = this.slotted ? - `${this.nearestComponent().var}._slotted.${slot.value[0].data}` : // TODO this looks bonkers + `${this.findNearest('Component').var}._slotted.${slot.value[0].data}` : // TODO this looks bonkers parentNode; block.addVariable(name); diff --git a/src/generators/nodes/shared/Node.ts b/src/generators/nodes/shared/Node.ts index 521b213080..e19e83819f 100644 --- a/src/generators/nodes/shared/Node.ts +++ b/src/generators/nodes/shared/Node.ts @@ -123,11 +123,6 @@ export default class Node { // implemented by subclasses } - isChildOfComponent() { - // TODO remove this method - return this.hasAncestor('Component'); - } - isDomNode() { return this.type === 'Element' || this.type === 'Text' || this.type === 'MustacheTag'; } @@ -138,11 +133,6 @@ export default class Node { false; } - nearestComponent() { // TODO remove this method - return this.findNearest('Component'); - // if (this.parent) return this.parent.nearestComponent(); - } - findNearest(type: string) { if (this.type === type) return this; if (this.parent) return this.parent.findNearest(type); diff --git a/src/generators/server-side-rendering/visitors/Element.ts b/src/generators/server-side-rendering/visitors/Element.ts index 5e5fcdaf02..731f73b5fa 100644 --- a/src/generators/server-side-rendering/visitors/Element.ts +++ b/src/generators/server-side-rendering/visitors/Element.ts @@ -36,7 +36,7 @@ export default function visitElement( let textareaContents; // awkward special case const slot = node.getStaticAttributeValue('slot'); - if (slot && node.isChildOfComponent()) { + if (slot && node.hasAncestor('Component')) { const slot = node.attributes.find((attribute: Node) => attribute.name === 'slot'); const slotName = slot.value[0].data; const appendTarget = generator.appendTargets[generator.appendTargets.length - 1]; diff --git a/src/generators/server-side-rendering/visitors/Slot.ts b/src/generators/server-side-rendering/visitors/Slot.ts index ad8aaecd7b..7af3b05588 100644 --- a/src/generators/server-side-rendering/visitors/Slot.ts +++ b/src/generators/server-side-rendering/visitors/Slot.ts @@ -8,7 +8,6 @@ export default function visitSlot( block: Block, node: Node ) { - // TODO named slots const name = node.attributes.find((attribute: Node) => attribute.name); const slotName = name && name.value[0].data || 'default'; diff --git a/src/generators/shared/utils/isChildOfComponent.ts b/src/generators/shared/utils/isChildOfComponent.ts deleted file mode 100644 index 77275f3d8c..0000000000 --- a/src/generators/shared/utils/isChildOfComponent.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { Node } from '../../../interfaces'; -import Generator from '../../Generator'; - -export default function isChildOfComponent(node: Node, generator: Generator) { - while (node = node.parent) { - if (node.type !== 'Element') continue; - if (node.name === ':Self' || node.name === ':Component' || generator.components.has(node.name)) return true; // TODO extract this out into a helper - if (/-/.test(node.name)) return false; - } -} \ No newline at end of file diff --git a/src/generators/shared/utils/walkHtml.ts b/src/generators/shared/utils/walkHtml.ts deleted file mode 100644 index fb9251b7b4..0000000000 --- a/src/generators/shared/utils/walkHtml.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { Node, Visitor } from '../../../interfaces'; - -export default function walkHtml(html: Node, visitors: Record) { - function visit(node: Node) { - const visitor = visitors[node.type]; - if (!visitor) throw new Error(`Not implemented: ${node.type}`); - - if (visitor.enter) visitor.enter(node); - - if (node.children) { - node.children.forEach((child: Node) => { - visit(child); - }); - } - - if (visitor.leave) visitor.leave(node); - } - - visit(html); -} diff --git a/src/generators/shared/utils/wrapModule.ts b/src/generators/wrapModule.ts similarity index 97% rename from src/generators/shared/utils/wrapModule.ts rename to src/generators/wrapModule.ts index 7e55996aa4..cdc9db2513 100644 --- a/src/generators/shared/utils/wrapModule.ts +++ b/src/generators/wrapModule.ts @@ -1,6 +1,6 @@ -import deindent from '../../../utils/deindent'; -import list from '../../../utils/list'; -import { CompileOptions, ModuleFormat, Node } from '../../../interfaces'; +import deindent from '../utils/deindent'; +import list from '../utils/list'; +import { CompileOptions, ModuleFormat, Node } from '../interfaces'; interface Dependency { name: string;