From 9e9b89f06f0cee0d9f56b629ecd32c7f30a3dab0 Mon Sep 17 00:00:00 2001 From: Ben Griffith Date: Sat, 28 May 2016 23:15:56 +0100 Subject: [PATCH] [scss] Fix namespace attribute selector --- src/scss/parse.js | 8 ++- test/scss/selector/15.json | 95 ++++++++++++++++++++++++++++++++++ test/scss/selector/15.scss | 1 + test/scss/selector/16.json | 95 ++++++++++++++++++++++++++++++++++ test/scss/selector/16.scss | 1 + test/scss/selector/17.json | 95 ++++++++++++++++++++++++++++++++++ test/scss/selector/17.scss | 1 + test/scss/selector/test.coffee | 3 ++ 8 files changed, 297 insertions(+), 2 deletions(-) create mode 100644 test/scss/selector/15.json create mode 100644 test/scss/selector/15.scss create mode 100644 test/scss/selector/16.json create mode 100644 test/scss/selector/16.scss create mode 100644 test/scss/selector/17.json create mode 100644 test/scss/selector/17.scss diff --git a/src/scss/parse.js b/src/scss/parse.js index 6a5b403d..da195a75 100644 --- a/src/scss/parse.js +++ b/src/scss/parse.js @@ -4548,8 +4548,12 @@ function getNamespacePrefix() { function checkNamespaceSeparator(i) { if (i >= tokensLength) return 0; - if (tokens[i].type === TokenType.VerticalLine) return 1; - else return 0; + if (tokens[i].type !== TokenType.VerticalLine) return 0; + + // Return false if `|=` - [attr|=value] + if (tokens[i + 1] && tokens[i + 1].type === TokenType.EqualsSign) return 0; + + return 1; } function getNamespaceSeparator() { diff --git a/test/scss/selector/15.json b/test/scss/selector/15.json new file mode 100644 index 00000000..c907e58f --- /dev/null +++ b/test/scss/selector/15.json @@ -0,0 +1,95 @@ +{ + "type": "selector", + "content": [ + { + "type": "attributeSelector", + "content": [ + { + "type": "attributeName", + "content": [ + { + "type": "ident", + "content": "a", + "syntax": "scss", + "start": { + "line": 1, + "column": 2 + }, + "end": { + "line": 1, + "column": 2 + } + } + ], + "syntax": "scss", + "start": { + "line": 1, + "column": 2 + }, + "end": { + "line": 1, + "column": 2 + } + }, + { + "type": "attributeMatch", + "content": "|=", + "syntax": "scss", + "start": { + "line": 1, + "column": 3 + }, + "end": { + "line": 1, + "column": 4 + } + }, + { + "type": "attributeValue", + "content": [ + { + "type": "ident", + "content": "b", + "syntax": "scss", + "start": { + "line": 1, + "column": 5 + }, + "end": { + "line": 1, + "column": 5 + } + } + ], + "syntax": "scss", + "start": { + "line": 1, + "column": 5 + }, + "end": { + "line": 1, + "column": 5 + } + } + ], + "syntax": "scss", + "start": { + "line": 1, + "column": 1 + }, + "end": { + "line": 1, + "column": 6 + } + } + ], + "syntax": "scss", + "start": { + "line": 1, + "column": 1 + }, + "end": { + "line": 1, + "column": 6 + } +} diff --git a/test/scss/selector/15.scss b/test/scss/selector/15.scss new file mode 100644 index 00000000..e15a53f6 --- /dev/null +++ b/test/scss/selector/15.scss @@ -0,0 +1 @@ +[a|=b] diff --git a/test/scss/selector/16.json b/test/scss/selector/16.json new file mode 100644 index 00000000..b13f765d --- /dev/null +++ b/test/scss/selector/16.json @@ -0,0 +1,95 @@ +{ + "type": "selector", + "content": [ + { + "type": "attributeSelector", + "content": [ + { + "type": "attributeName", + "content": [ + { + "type": "ident", + "content": "a", + "syntax": "scss", + "start": { + "line": 1, + "column": 2 + }, + "end": { + "line": 1, + "column": 2 + } + } + ], + "syntax": "scss", + "start": { + "line": 1, + "column": 2 + }, + "end": { + "line": 1, + "column": 2 + } + }, + { + "type": "attributeMatch", + "content": "^=", + "syntax": "scss", + "start": { + "line": 1, + "column": 3 + }, + "end": { + "line": 1, + "column": 4 + } + }, + { + "type": "attributeValue", + "content": [ + { + "type": "ident", + "content": "b", + "syntax": "scss", + "start": { + "line": 1, + "column": 5 + }, + "end": { + "line": 1, + "column": 5 + } + } + ], + "syntax": "scss", + "start": { + "line": 1, + "column": 5 + }, + "end": { + "line": 1, + "column": 5 + } + } + ], + "syntax": "scss", + "start": { + "line": 1, + "column": 1 + }, + "end": { + "line": 1, + "column": 6 + } + } + ], + "syntax": "scss", + "start": { + "line": 1, + "column": 1 + }, + "end": { + "line": 1, + "column": 6 + } +} diff --git a/test/scss/selector/16.scss b/test/scss/selector/16.scss new file mode 100644 index 00000000..a16c5217 --- /dev/null +++ b/test/scss/selector/16.scss @@ -0,0 +1 @@ +[a^=b] diff --git a/test/scss/selector/17.json b/test/scss/selector/17.json new file mode 100644 index 00000000..4abcdad4 --- /dev/null +++ b/test/scss/selector/17.json @@ -0,0 +1,95 @@ +{ + "type": "selector", + "content": [ + { + "type": "attributeSelector", + "content": [ + { + "type": "attributeName", + "content": [ + { + "type": "ident", + "content": "a", + "syntax": "scss", + "start": { + "line": 1, + "column": 2 + }, + "end": { + "line": 1, + "column": 2 + } + } + ], + "syntax": "scss", + "start": { + "line": 1, + "column": 2 + }, + "end": { + "line": 1, + "column": 2 + } + }, + { + "type": "attributeMatch", + "content": "~=", + "syntax": "scss", + "start": { + "line": 1, + "column": 3 + }, + "end": { + "line": 1, + "column": 4 + } + }, + { + "type": "attributeValue", + "content": [ + { + "type": "ident", + "content": "b", + "syntax": "scss", + "start": { + "line": 1, + "column": 5 + }, + "end": { + "line": 1, + "column": 5 + } + } + ], + "syntax": "scss", + "start": { + "line": 1, + "column": 5 + }, + "end": { + "line": 1, + "column": 5 + } + } + ], + "syntax": "scss", + "start": { + "line": 1, + "column": 1 + }, + "end": { + "line": 1, + "column": 6 + } + } + ], + "syntax": "scss", + "start": { + "line": 1, + "column": 1 + }, + "end": { + "line": 1, + "column": 6 + } +} diff --git a/test/scss/selector/17.scss b/test/scss/selector/17.scss new file mode 100644 index 00000000..97451472 --- /dev/null +++ b/test/scss/selector/17.scss @@ -0,0 +1 @@ +[a~=b] diff --git a/test/scss/selector/test.coffee b/test/scss/selector/test.coffee index dbf34ed7..87c226ee 100644 --- a/test/scss/selector/test.coffee +++ b/test/scss/selector/test.coffee @@ -15,6 +15,9 @@ describe 'scss/selector >>', -> it '12', -> this.shouldBeOk() it '13', -> this.shouldBeOk() it '14', -> this.shouldBeOk() + it '15', -> this.shouldBeOk() + it '16', -> this.shouldBeOk() + it '17', -> this.shouldBeOk() it 'c.0', -> this.shouldBeOk() it 'c.1', -> this.shouldBeOk()