visitors can just be functions now

pull/453/head
Rich-Harris 9 years ago
parent 2d4f9eac00
commit e7d324f305

@ -168,13 +168,13 @@ export default {
key: null key: null
}); });
this.elementDepth += 1; generator.elementDepth += 1;
node.children.forEach( child => { node.children.forEach( child => {
visit( child, generator ); visit( child, generator );
}); });
this.elementDepth -= 1; generator.elementDepth -= 1;
generator.pop(); generator.pop();
} }

@ -110,13 +110,13 @@ export default {
key: null key: null
}); });
this.elementDepth += 1; generator.elementDepth += 1;
node.children.forEach( child => { node.children.forEach( child => {
visit( child, generator ); visit( child, generator );
}); });
this.elementDepth -= 1; generator.elementDepth -= 1;
if ( node.name in meta ) { if ( node.name in meta ) {
if ( meta[ node.name ].leave ) meta[ node.name ].leave( generator, node ); if ( meta[ node.name ].leave ) meta[ node.name ].leave( generator, node );

@ -2,7 +2,5 @@ import visitors from './visitors/index.js';
export default function visit ( node, generator ) { export default function visit ( node, generator ) {
const visitor = visitors[ node.type ]; const visitor = visitors[ node.type ];
visitor( generator, node );
if ( visitor.enter ) visitor.enter( generator, node );
if ( visitor.leave ) visitor.leave( generator, node );
} }

@ -1,3 +1,3 @@
export default { export default function visitComment () {
// do nothing // do nothing
}; }

@ -1,8 +1,7 @@
import flattenReference from '../../../utils/flattenReference.js'; import flattenReference from '../../../utils/flattenReference.js';
import visit from '../visit.js'; import visit from '../visit.js';
export default { export default function visitComponent ( generator, node ) {
enter ( generator, node ) {
function stringify ( chunk ) { function stringify ( chunk ) {
if ( chunk.type === 'Text' ) return chunk.data; if ( chunk.type === 'Text' ) return chunk.data;
if ( chunk.type === 'MustacheTag' ) { if ( chunk.type === 'MustacheTag' ) {
@ -65,15 +64,14 @@ export default {
generator.append( open ); generator.append( open );
this.elementDepth += 1; generator.elementDepth += 1;
node.children.forEach( child => { node.children.forEach( child => {
visit( child, generator ); visit( child, generator );
}); });
this.elementDepth -= 1; generator.elementDepth -= 1;
const close = node.children.length ? `\` })}` : ')}'; const close = node.children.length ? `\` })}` : ')}';
generator.append( close ); generator.append( close );
} }
};

@ -1,7 +1,6 @@
import visit from '../visit.js'; import visit from '../visit.js';
export default { export default function visitEachBlock ( generator, node ) {
enter ( generator, node ) {
const { dependencies, snippet } = generator.contextualise( node.expression ); const { dependencies, snippet } = generator.contextualise( node.expression );
const open = `\${ ${snippet}.map( ${ node.index ? `( ${node.context}, ${node.index} )` : node.context} => \``; const open = `\${ ${snippet}.map( ${ node.index ? `( ${node.context}, ${node.index} )` : node.context} => \``;
@ -32,5 +31,4 @@ export default {
generator.append( close ); generator.append( close );
generator.pop(); generator.pop();
} }
};

@ -1,20 +1,19 @@
import Component from './Component.js'; import visitComponent from './Component.js';
import isVoidElementName from '../../../utils/isVoidElementName.js'; import isVoidElementName from '../../../utils/isVoidElementName.js';
import visit from '../visit.js'; import visit from '../visit.js';
import Window from './meta/Window.js'; import visitWindow from './meta/Window.js';
const meta = { const meta = {
':Window': Window ':Window': visitWindow
}; };
export default { export default function visitElement ( generator, node ) {
enter ( generator, node ) {
if ( node.name in meta ) { if ( node.name in meta ) {
return meta[ node.name ].enter( generator, node ); return meta[ node.name ]( generator, node );
} }
if ( generator.components.has( node.name ) || node.name === ':Self' ) { if ( generator.components.has( node.name ) || node.name === ':Self' ) {
Component.enter( generator, node ); visitComponent( generator, node );
return; return;
} }
@ -47,26 +46,15 @@ export default {
generator.append( openingTag ); generator.append( openingTag );
this.elementDepth += 1; generator.elementDepth += 1;
node.children.forEach( child => { node.children.forEach( child => {
visit( child, generator ); visit( child, generator );
}); });
this.elementDepth -= 1; generator.elementDepth -= 1;
if ( node.name in meta ) {
if ( meta[ node.name ].leave ) meta[ node.name ].leave( generator, node );
return;
}
if ( generator.components.has( node.name ) || node.name === ':Self' ) {
Component.leave( generator, node );
return;
}
if ( !isVoidElementName( node.name ) ) { if ( !isVoidElementName( node.name ) ) {
generator.append( `</${node.name}>` ); generator.append( `</${node.name}>` );
} }
} }
};

@ -1,7 +1,6 @@
import visit from '../visit.js'; import visit from '../visit.js';
export default { export default function visitIfBlock ( generator, node ) {
enter ( generator, node ) {
const { snippet } = generator.contextualise( node.expression ); const { snippet } = generator.contextualise( node.expression );
generator.append( '${ ' + snippet + ' ? `' ); generator.append( '${ ' + snippet + ' ? `' );
@ -25,5 +24,4 @@ export default {
generator.append( '` }' ); generator.append( '` }' );
generator.pop(); generator.pop();
} }
};

@ -1,6 +1,4 @@
export default { export default function visitMustacheTag ( generator, node ) {
enter ( generator, node ) {
const { snippet } = generator.contextualise( node.expression ); const { snippet } = generator.contextualise( node.expression );
generator.append( '${__escape( ' + snippet + ' )}' ); generator.append( '${__escape( ' + snippet + ' )}' );
} }
};

@ -1,6 +1,4 @@
export default { export default function visitRawMustacheTag ( generator, node ) {
enter ( generator, node ) {
const { snippet } = generator.contextualise( node.expression ); const { snippet } = generator.contextualise( node.expression );
generator.append( '${' + snippet + '}' ); generator.append( '${' + snippet + '}' );
} }
};

@ -1,5 +1,3 @@
export default { export default function visitText ( generator, node ) {
enter ( generator, node ) {
generator.append( node.data.replace( /\${/g, '\\${' ) ); generator.append( node.data.replace( /\${/g, '\\${' ) );
} }
};

@ -1,5 +1,3 @@
export default { export default function visitYieldTag ( generator ) {
enter ( generator ) {
generator.append( `\${options && options.yield ? options.yield() : ''}` ); generator.append( `\${options && options.yield ? options.yield() : ''}` );
} }
};

@ -1,9 +1,3 @@
export default { export default function visitWindow () {
enter () {
// noop // noop
}, }
leave () {
// noop
}
};
Loading…
Cancel
Save