diff --git a/src/compile/nodes/Binding.ts b/src/compile/nodes/Binding.ts index 213314c3cb..050b7f131c 100644 --- a/src/compile/nodes/Binding.ts +++ b/src/compile/nodes/Binding.ts @@ -38,6 +38,12 @@ export default class Binding extends Node { }); } else { const variable = component.var_lookup.get(name); + + if (!variable) component.error(this.expression.node, { + code: 'binding-undeclared', + message: `${name} is not declared` + }); + variable[this.expression.node.type === 'MemberExpression' ? 'mutated' : 'reassigned'] = true; } diff --git a/test/validator/index.js b/test/validator/index.js index 9ca3fc57d1..517427e817 100644 --- a/test/validator/index.js +++ b/test/validator/index.js @@ -64,11 +64,16 @@ describe("validate", () => { throw new Error(`Expected an error: ${expected.message}`); } - assert.equal(error.code, expected.code); - assert.equal(error.message, expected.message); - assert.deepEqual(error.start, expected.start); - assert.deepEqual(error.end, expected.end); - assert.equal(error.pos, expected.pos); + try { + assert.equal(error.code, expected.code); + assert.equal(error.message, expected.message); + assert.deepEqual(error.start, expected.start); + assert.deepEqual(error.end, expected.end); + assert.equal(error.pos, expected.pos); + } catch (e) { + console.error(error) + throw e; + } } }); }); @@ -102,7 +107,7 @@ describe("validate", () => { name: "_", generate: false }); - + assert.deepEqual(stats.warnings, []); }); }); diff --git a/test/validator/samples/binding-invalid-value/errors.json b/test/validator/samples/binding-invalid-value/errors.json new file mode 100644 index 0000000000..07eb7b0f1c --- /dev/null +++ b/test/validator/samples/binding-invalid-value/errors.json @@ -0,0 +1,15 @@ +[{ + "code": "binding-undeclared", + "message": "foo is not declared", + "pos": 37, + "start": { + "line": 2, + "column": 19, + "character": 37 + }, + "end": { + "line": 2, + "column": 22, + "character": 40 + } +}] \ No newline at end of file diff --git a/test/validator/samples/binding-invalid-value/input.html b/test/validator/samples/binding-invalid-value/input.html new file mode 100644 index 0000000000..9eeeba5fed --- /dev/null +++ b/test/validator/samples/binding-invalid-value/input.html @@ -0,0 +1,2 @@ + + \ No newline at end of file