diff --git a/API.md b/API.md index 64459e3..c8e55ee 100644 --- a/API.md +++ b/API.md @@ -786,7 +786,7 @@ has a method `error(message, options)` that returns an error object. This method should always be used to raise errors relating to the syntax of selectors. The options to this method are passed to postcss's error constructor -([documentation](http://api.postcss.org/Container.html#error)). +([documentation](http://postcss.org/api/#container-error)). #### Async Error Example diff --git a/CHANGELOG.md b/CHANGELOG.md index b9dbb1b..14ffadc 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,7 @@ +# 6.1.2 + +- Fixed: erroneous trailing combinators in pseudos + # 6.1.1 - Fixed: improve typings of constructor helpers (#292) diff --git a/package-lock.json b/package-lock.json index 2e85d49..d86df35 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "postcss-selector-parser", - "version": "6.1.1", + "version": "6.1.2", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index c5f89e5..0b074d0 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "postcss-selector-parser", - "version": "6.1.1", + "version": "6.1.2", "devDependencies": { "@babel/cli": "^7.11.6", "@babel/core": "^7.11.6", diff --git a/src/__tests__/comments.mjs b/src/__tests__/comments.mjs index 4365458..1b1dffe 100644 --- a/src/__tests__/comments.mjs +++ b/src/__tests__/comments.mjs @@ -33,12 +33,37 @@ test('multiple comments and other things', 'h1/*test*/h2/*test*/.test/*test*/', }); test('ending in comment', ".bar /* comment 3 */", (t, tree) => { + t.is(tree.nodes[0].nodes.length, 1); let classname = tree.nodes[0].nodes[0]; t.deepEqual(classname.type, 'class', 'should have a tag'); t.deepEqual(classname.spaces.after, ' '); t.deepEqual(classname.raws.spaces.after, ' /* comment 3 */'); }); +test('ending in comment and whitespace', ".bar /* comment 3 */ ", (t, tree) => { + t.is(tree.nodes[0].nodes.length, 1); + let classname = tree.nodes[0].nodes[0]; + t.deepEqual(classname.type, 'class', 'should have a tag'); + t.deepEqual(classname.spaces.after, ' '); + t.deepEqual(classname.raws.spaces.after, ' /* comment 3 */ '); +}); + +test('ending in comment in a pseudo', ":is(.bar /* comment 3 */)", (t, tree) => { + t.is(tree.nodes[0].nodes[0].nodes[0].nodes.length, 1); + let classname = tree.nodes[0].nodes[0].nodes[0].nodes[0]; + t.deepEqual(classname.type, 'class', 'should have a tag'); + t.deepEqual(classname.spaces.after, ' '); + t.deepEqual(classname.raws.spaces.after, ' /* comment 3 */'); +}); + +test('ending in comment and whitespace in a pseudo', ":is(.bar /* comment 3 */ )", (t, tree) => { + t.is(tree.nodes[0].nodes[0].nodes[0].nodes.length, 1); + let classname = tree.nodes[0].nodes[0].nodes[0].nodes[0]; + t.deepEqual(classname.type, 'class', 'should have a tag'); + t.deepEqual(classname.spaces.after, ' '); + t.deepEqual(classname.raws.spaces.after, ' /* comment 3 */ '); +}); + test('comments in selector list', 'h2, /*test*/ h4', (t, tree) => { t.deepEqual(tree.nodes[0].nodes[0].type, 'tag'); t.deepEqual(tree.nodes[0].nodes[0].value, 'h2'); diff --git a/src/parser.js b/src/parser.js index 4815c6e..e50ea08 100644 --- a/src/parser.js +++ b/src/parser.js @@ -525,7 +525,7 @@ export default class Parser { // We need to decide between a space that's a descendant combinator and meaningless whitespace at the end of a selector. let nextSigTokenPos = this.locateNextMeaningfulToken(this.position); - if (nextSigTokenPos < 0 || this.tokens[nextSigTokenPos][TOKEN.TYPE] === tokens.comma) { + if (nextSigTokenPos < 0 || this.tokens[nextSigTokenPos][TOKEN.TYPE] === tokens.comma || this.tokens[nextSigTokenPos][TOKEN.TYPE] === tokens.closeParenthesis) { let nodes = this.parseWhitespaceEquivalentTokens(nextSigTokenPos); if (nodes.length > 0) { let last = this.current.last;