From ac8718b3a4c514683d5683f5382ee9da4e33ec1f Mon Sep 17 00:00:00 2001 From: mhmd-22 Date: Tue, 4 May 2021 22:55:29 +0300 Subject: [PATCH 1/4] Compile error when passing empty directive names --- src/compiler/parse/state/tag.ts | 14 +++++++------- .../error-empty-classname-binding/error.json | 10 ---------- .../error-empty-classname-binding/input.svelte | 1 - .../samples/error-empty-directive-name/error.json | 10 ++++++++++ .../error-empty-directive-name/input.svelte | 1 + 5 files changed, 18 insertions(+), 18 deletions(-) delete mode 100644 test/parser/samples/error-empty-classname-binding/error.json delete mode 100644 test/parser/samples/error-empty-classname-binding/input.svelte 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 799124b2bdf7..80ba6b102b52 100644 --- a/src/compiler/parse/state/tag.ts +++ b/src/compiler/parse/state/tag.ts @@ -378,6 +378,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); + } + if (type === 'Binding' && directive_name !== 'this') { check_unique(directive_name); } else if (type !== 'EventHandler' && type !== 'Action') { @@ -391,13 +398,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 deleted file mode 100644 index edc09ff8e120..000000000000 --- a/test/parser/samples/error-empty-classname-binding/error.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "code": "invalid-class-directive", - "message": "Class binding name cannot be empty", - "start": { - "line": 1, - "column": 10, - "character": 10 - }, - "pos": 10 -} diff --git a/test/parser/samples/error-empty-classname-binding/input.svelte b/test/parser/samples/error-empty-classname-binding/input.svelte deleted file mode 100644 index 3a4e5980eea3..000000000000 --- a/test/parser/samples/error-empty-classname-binding/input.svelte +++ /dev/null @@ -1 +0,0 @@ -

Hello

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 000000000000..49e5a891a1f0 --- /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": 7, + "character": 7 + }, + "pos": 7 +} 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 000000000000..b07875f398b6 --- /dev/null +++ b/test/parser/samples/error-empty-directive-name/input.svelte @@ -0,0 +1 @@ +

Hello

From 9bb387f518ed0465fc27000a50d29249cadc8cb8 Mon Sep 17 00:00:00 2001 From: mhmd-22 Date: Wed, 5 May 2021 04:35:14 +0300 Subject: [PATCH 2/4] Revert "Compile error when passing empty directive names" This reverts commit ac8718b3a4c514683d5683f5382ee9da4e33ec1f. --- src/compiler/parse/state/tag.ts | 14 +++++++------- .../error-empty-classname-binding/error.json | 10 ++++++++++ .../error-empty-classname-binding/input.svelte | 1 + .../samples/error-empty-directive-name/error.json | 10 ---------- .../error-empty-directive-name/input.svelte | 1 - 5 files changed, 18 insertions(+), 18 deletions(-) create mode 100644 test/parser/samples/error-empty-classname-binding/error.json create mode 100644 test/parser/samples/error-empty-classname-binding/input.svelte delete mode 100644 test/parser/samples/error-empty-directive-name/error.json delete 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 80ba6b102b52..799124b2bdf7 100644 --- a/src/compiler/parse/state/tag.ts +++ b/src/compiler/parse/state/tag.ts @@ -378,13 +378,6 @@ 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); - } - if (type === 'Binding' && directive_name !== 'this') { check_unique(directive_name); } else if (type !== 'EventHandler' && type !== 'Action') { @@ -398,6 +391,13 @@ 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 new file mode 100644 index 000000000000..edc09ff8e120 --- /dev/null +++ b/test/parser/samples/error-empty-classname-binding/error.json @@ -0,0 +1,10 @@ +{ + "code": "invalid-class-directive", + "message": "Class binding name cannot be empty", + "start": { + "line": 1, + "column": 10, + "character": 10 + }, + "pos": 10 +} diff --git a/test/parser/samples/error-empty-classname-binding/input.svelte b/test/parser/samples/error-empty-classname-binding/input.svelte new file mode 100644 index 000000000000..3a4e5980eea3 --- /dev/null +++ b/test/parser/samples/error-empty-classname-binding/input.svelte @@ -0,0 +1 @@ +

Hello

diff --git a/test/parser/samples/error-empty-directive-name/error.json b/test/parser/samples/error-empty-directive-name/error.json deleted file mode 100644 index 49e5a891a1f0..000000000000 --- a/test/parser/samples/error-empty-directive-name/error.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "code": "empty-directive-name", - "message": "Action name cannot be empty", - "start": { - "line": 1, - "column": 7, - "character": 7 - }, - "pos": 7 -} diff --git a/test/parser/samples/error-empty-directive-name/input.svelte b/test/parser/samples/error-empty-directive-name/input.svelte deleted file mode 100644 index b07875f398b6..000000000000 --- a/test/parser/samples/error-empty-directive-name/input.svelte +++ /dev/null @@ -1 +0,0 @@ -

Hello

From 7d1338f27504ace7423d1245c6992db708d9f59a Mon Sep 17 00:00:00 2001 From: mhmd-22 Date: Wed, 5 May 2021 04:36:05 +0300 Subject: [PATCH 3/4] Compile error when passing empty directive names --- src/compiler/parse/state/tag.ts | 14 +++++++------- .../error-empty-classname-binding/error.json | 10 +++++----- .../samples/error-empty-directive-name/error.json | 10 ++++++++++ .../error-empty-directive-name/input.svelte | 1 + 4 files changed, 23 insertions(+), 12 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 799124b2bdf7..80ba6b102b52 100644 --- a/src/compiler/parse/state/tag.ts +++ b/src/compiler/parse/state/tag.ts @@ -378,6 +378,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); + } + if (type === 'Binding' && directive_name !== 'this') { check_unique(directive_name); } else if (type !== 'EventHandler' && type !== 'Action') { @@ -391,13 +398,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 edc09ff8e120..8283e92f7616 100644 --- a/test/parser/samples/error-empty-classname-binding/error.json +++ b/test/parser/samples/error-empty-classname-binding/error.json @@ -1,10 +1,10 @@ { - "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, - "character": 10 + "column": 9, + "character": 9 }, - "pos": 10 + "pos": 9 } 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 000000000000..49e5a891a1f0 --- /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": 7, + "character": 7 + }, + "pos": 7 +} 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 000000000000..b07875f398b6 --- /dev/null +++ b/test/parser/samples/error-empty-directive-name/input.svelte @@ -0,0 +1 @@ +

Hello

From 7864f010eee36404be68c8f1d370534227f854d1 Mon Sep 17 00:00:00 2001 From: mhmd-22 Date: Wed, 5 May 2021 20:28:13 +0300 Subject: [PATCH 4/4] Adjust empty-directive-name error offset --- src/compiler/parse/state/tag.ts | 2 +- .../parser/samples/error-empty-classname-binding/error.json | 6 +++--- test/parser/samples/error-empty-directive-name/error.json | 6 +++--- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/compiler/parse/state/tag.ts b/src/compiler/parse/state/tag.ts index 80ba6b102b52..11dd6ce95920 100644 --- a/src/compiler/parse/state/tag.ts +++ b/src/compiler/parse/state/tag.ts @@ -382,7 +382,7 @@ function read_attribute(parser: Parser, unique_names: Set) { parser.error({ code: 'empty-directive-name', message: `${type} name cannot be empty` - }, start+colon_index); + }, start + colon_index + 1); } if (type === 'Binding' && directive_name !== 'this') { diff --git a/test/parser/samples/error-empty-classname-binding/error.json b/test/parser/samples/error-empty-classname-binding/error.json index 8283e92f7616..6ece5ff37378 100644 --- a/test/parser/samples/error-empty-classname-binding/error.json +++ b/test/parser/samples/error-empty-classname-binding/error.json @@ -3,8 +3,8 @@ "message": "Class name cannot be empty", "start": { "line": 1, - "column": 9, - "character": 9 + "column": 10, + "character": 10 }, - "pos": 9 + "pos": 10 } diff --git a/test/parser/samples/error-empty-directive-name/error.json b/test/parser/samples/error-empty-directive-name/error.json index 49e5a891a1f0..4fed0d86069e 100644 --- a/test/parser/samples/error-empty-directive-name/error.json +++ b/test/parser/samples/error-empty-directive-name/error.json @@ -3,8 +3,8 @@ "message": "Action name cannot be empty", "start": { "line": 1, - "column": 7, - "character": 7 + "column": 8, + "character": 8 }, - "pos": 7 + "pos": 8 }