prevent estree-walker confusion over node shapes

pull/924/head
Rich Harris 8 years ago
parent 30345ea0db
commit ed070f407e

@ -1,5 +1,5 @@
import MagicString, { Bundle } from 'magic-string'; import MagicString, { Bundle } from 'magic-string';
import { walk } from 'estree-walker'; import { walk, childKeys } from 'estree-walker';
import { getLocator } from 'locate-character'; import { getLocator } from 'locate-character';
import deindent from '../utils/deindent'; import deindent from '../utils/deindent';
import CodeBuilder from '../utils/CodeBuilder'; import CodeBuilder from '../utils/CodeBuilder';
@ -70,6 +70,19 @@ function removeIndentation(
} }
} }
// We need to tell estree-walker that it should always
// look for an `else` block, otherwise it might get
// the wrong idea about the shape of each/if blocks
childKeys.EachBlock = [
'children',
'else'
];
childKeys.IfBlock = [
'children',
'else'
];
export default class Generator { export default class Generator {
ast: Parsed; ast: Parsed;
parsed: Parsed; parsed: Parsed;
@ -693,7 +706,8 @@ export default class Generator {
walkTemplate() { walkTemplate() {
const { const {
expectedProperties, expectedProperties,
helpers helpers,
indirectDependencies
} = this; } = this;
const { html } = this.parsed; const { html } = this.parsed;
@ -732,6 +746,13 @@ export default class Generator {
dependencies.forEach(dependency => { dependencies.forEach(dependency => {
expectedProperties.add(dependency); expectedProperties.add(dependency);
// TODO looks like this needs to happen in a subsequent pass?
if (indirectDependencies.has(dependency)) {
indirectDependencies.get(dependency).forEach(indirectDependency => {
dependencies.add(indirectDependency);
});
}
}); });
return Array.from(dependencies); return Array.from(dependencies);

Loading…
Cancel
Save