From e3e91d45eae39c82305cd4439a4a692f14c2c102 Mon Sep 17 00:00:00 2001 From: Rich-Harris Date: Sat, 19 Nov 2016 13:10:20 -0500 Subject: [PATCH] parse attributes --- compiler/generate/index.js | 4 +-- compiler/parse/read/directives.js | 12 ++++---- compiler/parse/read/style.js | 3 ++ compiler/parse/state/tag.js | 18 +++++++++--- test/parser/attribute-static/input.svelte | 1 + test/parser/attribute-static/output.json | 34 +++++++++++++++++++++++ test/parser/event-handler/output.json | 2 ++ 7 files changed, 62 insertions(+), 12 deletions(-) create mode 100644 test/parser/attribute-static/input.svelte create mode 100644 test/parser/attribute-static/output.json diff --git a/compiler/generate/index.js b/compiler/generate/index.js index 82658ff902..0efeb8183a 100644 --- a/compiler/generate/index.js +++ b/compiler/generate/index.js @@ -93,9 +93,7 @@ export default function generate ( parsed, template ) { return `root.${flattened.keypath}`; } - console.log( `node, contexts`, node, contexts ) - return 'TODO' - throw new Error( 'TODO expressions' ); + return 'TODO'; } parsed.html.children.forEach( child => { diff --git a/compiler/parse/read/directives.js b/compiler/parse/read/directives.js index 7de13842b9..55e5f2e7e0 100644 --- a/compiler/parse/read/directives.js +++ b/compiler/parse/read/directives.js @@ -1,13 +1,13 @@ import { tokenizer, tokTypes, parseExpressionAt } from 'acorn'; -export function readEventHandlerDirective ( parser, name ) { +export function readEventHandlerDirective ( parser, start, name ) { const quoteMark = ( parser.eat( `'` ) ? `'` : parser.eat( `"` ) ? `"` : null ); - const start = parser.index; + const expressionStart = parser.index; let end = null; let depth = 0; @@ -16,17 +16,17 @@ export function readEventHandlerDirective ( parser, name ) { if ( token.type === tokTypes.parenR ) { depth -= 1; if ( depth === 0 ) { - end = start + token.end; + end = expressionStart + token.end; break; } } } - const expression = parseExpressionAt( parser.template.slice( 0, end ), start ); + const expression = parseExpressionAt( parser.template.slice( 0, end ), expressionStart ); parser.index = expression.end; if ( expression.type !== 'CallExpression' ) { - parser.error( `Expected call expression`, start ); + parser.error( `Expected call expression`, expressionStart ); } if ( quoteMark ) { @@ -34,6 +34,8 @@ export function readEventHandlerDirective ( parser, name ) { } return { + start, + end: parser.index, type: 'EventHandler', name, expression diff --git a/compiler/parse/read/style.js b/compiler/parse/read/style.js index e69de29bb2..bab3d2e7b6 100644 --- a/compiler/parse/read/style.js +++ b/compiler/parse/read/style.js @@ -0,0 +1,3 @@ +export default function readStyle () { + throw new Error( 'TODO