diff --git a/packages/htmlbars-syntax/lib/builders.js b/packages/htmlbars-syntax/lib/builders.js index e2373b98..116611e4 100644 --- a/packages/htmlbars-syntax/lib/builders.js +++ b/packages/htmlbars-syntax/lib/builders.js @@ -69,12 +69,13 @@ export function buildElement(tag, attributes, modifiers, children) { }; } -export function buildComponent(tag, attributes, program) { +export function buildComponent(tag, attributes, program, loc) { return { type: "ComponentNode", tag: tag, attributes: attributes, - program: program + program: program, + loc: buildLoc(loc) }; } diff --git a/packages/htmlbars-syntax/lib/token-handlers.js b/packages/htmlbars-syntax/lib/token-handlers.js index abe08b50..846f481e 100644 --- a/packages/htmlbars-syntax/lib/token-handlers.js +++ b/packages/htmlbars-syntax/lib/token-handlers.js @@ -99,7 +99,7 @@ var tokenHandlers = { } else { var program = buildProgram(element.children); parseComponentBlockParams(element, program); - var component = buildComponent(element.tag, element.attributes, program); + var component = buildComponent(element.tag, element.attributes, program, element.loc); appendChild(parent, component); } diff --git a/packages/htmlbars-syntax/tests/loc-node-test.js b/packages/htmlbars-syntax/tests/loc-node-test.js index dd2b0816..97392f39 100644 --- a/packages/htmlbars-syntax/tests/loc-node-test.js +++ b/packages/htmlbars-syntax/tests/loc-node-test.js @@ -85,3 +85,22 @@ test("html elements", function() { locEqual(div, 4, 6, 6, 12, 'div element'); locEqual(hr, 5, 8, 5, 14, 'hr element'); }); + +test("components", function() { + var ast = parse(` + + + + + + + `); + + let [,page] = ast.body; + let [,header,,input,,footer] = page.program.body; + + locEqual(page, 2, 4, 7, 14, 'page component'); + locEqual(header, 3, 6, 3, 29, 'header component'); + locEqual(input, 4, 6, 4, 18, 'input component'); + locEqual(footer, 5, 6, 6, 22, 'footer component'); +});