From 1b33248eaded4e9c6daa42021918efa4b0962ab7 Mon Sep 17 00:00:00 2001 From: Mohammed Al-Qurafi Date: Mon, 28 Jun 2021 13:13:02 +0300 Subject: [PATCH] #6299 - Throw a compile error when passing an empty directive name (#6300) * Compile error when passing empty directive names * Revert "Compile error when passing empty directive names" This reverts commit ac8718b3a4c514683d5683f5382ee9da4e33ec1f. * Compile error when passing empty directive names * Adjust empty-directive-name error offset --- src/compiler/parse/state/tag.ts | 14 +++++++------- .../error-empty-classname-binding/error.json | 4 ++-- .../samples/error-empty-directive-name/error.json | 10 ++++++++++ .../error-empty-directive-name/input.svelte | 1 + 4 files changed, 20 insertions(+), 9 deletions(-) create mode 100644 test/parser/samples/error-empty-directive-name/error.json create mode 100644 test/parser/samples/error-empty-directive-name/input.svelte diff --git a/src/compiler/parse/state/tag.ts b/src/compiler/parse/state/tag.ts index c44db90488..5aacc3e8b2 100644 --- a/src/compiler/parse/state/tag.ts +++ b/src/compiler/parse/state/tag.ts @@ -385,6 +385,13 @@ function read_attribute(parser: Parser, unique_names: Set) { if (type) { const [directive_name, ...modifiers] = name.slice(colon_index + 1).split('|'); + if (directive_name === '') { + parser.error({ + code: 'empty-directive-name', + message: `${type} name cannot be empty` + }, start + colon_index + 1); + } + if (type === 'Binding' && directive_name !== 'this') { check_unique(directive_name); } else if (type !== 'EventHandler' && type !== 'Action') { @@ -398,13 +405,6 @@ function read_attribute(parser: Parser, unique_names: Set) { }, start); } - if (type === 'Class' && directive_name === '') { - parser.error({ - code: 'invalid-class-directive', - message: 'Class binding name cannot be empty' - }, start + colon_index + 1); - } - if (value[0]) { if ((value as any[]).length > 1 || value[0].type === 'Text') { parser.error({ diff --git a/test/parser/samples/error-empty-classname-binding/error.json b/test/parser/samples/error-empty-classname-binding/error.json index edc09ff8e1..6ece5ff373 100644 --- a/test/parser/samples/error-empty-classname-binding/error.json +++ b/test/parser/samples/error-empty-classname-binding/error.json @@ -1,6 +1,6 @@ { - "code": "invalid-class-directive", - "message": "Class binding name cannot be empty", + "code": "empty-directive-name", + "message": "Class name cannot be empty", "start": { "line": 1, "column": 10, diff --git a/test/parser/samples/error-empty-directive-name/error.json b/test/parser/samples/error-empty-directive-name/error.json new file mode 100644 index 0000000000..4fed0d8606 --- /dev/null +++ b/test/parser/samples/error-empty-directive-name/error.json @@ -0,0 +1,10 @@ +{ + "code": "empty-directive-name", + "message": "Action name cannot be empty", + "start": { + "line": 1, + "column": 8, + "character": 8 + }, + "pos": 8 +} diff --git a/test/parser/samples/error-empty-directive-name/input.svelte b/test/parser/samples/error-empty-directive-name/input.svelte new file mode 100644 index 0000000000..b07875f398 --- /dev/null +++ b/test/parser/samples/error-empty-directive-name/input.svelte @@ -0,0 +1 @@ +

Hello