Skip to content

Commit

Permalink
fix capture groups for "each" statements (#3274)
Browse files Browse the repository at this point in the history
  • Loading branch information
error418 committed Feb 28, 2021
1 parent 73ea7cf commit d6f0615
Show file tree
Hide file tree
Showing 3 changed files with 291 additions and 7 deletions.
2 changes: 1 addition & 1 deletion packages/pug-lexer/index.js
Expand Up @@ -1087,7 +1087,7 @@ Lexer.prototype = {

eachOf: function() {
var captures;
if ((captures = /^(?:each|for) (.*) of *([^\n]+)/.exec(this.input))) {
if ((captures = /^(?:each|for) (.*?) of *([^\n]+)/.exec(this.input))) {
this.consume(captures[0].length);
var tok = this.tok('eachOf', captures[1]);
tok.value = captures[1];
Expand Down
287 changes: 281 additions & 6 deletions packages/pug-lexer/test/__snapshots__/index.test.js.snap
Expand Up @@ -15468,12 +15468,12 @@ Array [
"loc": Object {
"end": Object {
"column": 1,
"line": 44,
"line": 45,
},
"filename": "<basedir>/packages/pug-lexer/test/cases/each.else.pug",
"start": Object {
"column": 1,
"line": 44,
"line": 45,
},
},
"type": "outdent",
Expand All @@ -15482,26 +15482,301 @@ Array [
"loc": Object {
"end": Object {
"column": 1,
"line": 44,
"line": 45,
},
"filename": "<basedir>/packages/pug-lexer/test/cases/each.else.pug",
"start": Object {
"column": 1,
"line": 44,
"line": 45,
},
},
"type": "outdent",
},
Object {
"buffer": false,
"loc": Object {
"end": Object {
"column": 74,
"line": 45,
},
"filename": "<basedir>/packages/pug-lexer/test/cases/each.else.pug",
"start": Object {
"column": 1,
"line": 44,
"line": 45,
},
},
"mustEscape": false,
"type": "code",
"val": "var ofKeyword = [{ name: 'tobi', friends: ['loki'] }, { name: 'loki' }]",
},
Object {
"loc": Object {
"end": Object {
"column": 1,
"line": 46,
},
"filename": "<basedir>/packages/pug-lexer/test/cases/each.else.pug",
"start": Object {
"column": 1,
"line": 44,
"line": 46,
},
},
"type": "newline",
},
Object {
"loc": Object {
"end": Object {
"column": 3,
"line": 46,
},
"filename": "<basedir>/packages/pug-lexer/test/cases/each.else.pug",
"start": Object {
"column": 1,
"line": 46,
},
},
"type": "tag",
"val": "ul",
},
Object {
"loc": Object {
"end": Object {
"column": 3,
"line": 47,
},
"filename": "<basedir>/packages/pug-lexer/test/cases/each.else.pug",
"start": Object {
"column": 1,
"line": 47,
},
},
"type": "indent",
"val": 2,
},
Object {
"code": "ofKeyword",
"loc": Object {
"end": Object {
"column": 24,
"line": 47,
},
"filename": "<basedir>/packages/pug-lexer/test/cases/each.else.pug",
"start": Object {
"column": 3,
"line": 47,
},
},
"type": "eachOf",
"val": "val",
"value": "val",
},
Object {
"loc": Object {
"end": Object {
"column": 5,
"line": 48,
},
"filename": "<basedir>/packages/pug-lexer/test/cases/each.else.pug",
"start": Object {
"column": 1,
"line": 48,
},
},
"type": "indent",
"val": 4,
},
Object {
"loc": Object {
"end": Object {
"column": 7,
"line": 48,
},
"filename": "<basedir>/packages/pug-lexer/test/cases/each.else.pug",
"start": Object {
"column": 5,
"line": 48,
},
},
"type": "tag",
"val": "li",
},
Object {
"buffer": true,
"loc": Object {
"end": Object {
"column": 18,
"line": 48,
},
"filename": "<basedir>/packages/pug-lexer/test/cases/each.else.pug",
"start": Object {
"column": 7,
"line": 48,
},
},
"mustEscape": true,
"type": "code",
"val": "user.name",
},
Object {
"loc": Object {
"end": Object {
"column": 1,
"line": 50,
},
"filename": "<basedir>/packages/pug-lexer/test/cases/each.else.pug",
"start": Object {
"column": 1,
"line": 50,
},
},
"type": "outdent",
},
Object {
"loc": Object {
"end": Object {
"column": 1,
"line": 50,
},
"filename": "<basedir>/packages/pug-lexer/test/cases/each.else.pug",
"start": Object {
"column": 1,
"line": 50,
},
},
"type": "outdent",
},
Object {
"loc": Object {
"end": Object {
"column": 3,
"line": 50,
},
"filename": "<basedir>/packages/pug-lexer/test/cases/each.else.pug",
"start": Object {
"column": 1,
"line": 50,
},
},
"type": "tag",
"val": "ul",
},
Object {
"loc": Object {
"end": Object {
"column": 3,
"line": 51,
},
"filename": "<basedir>/packages/pug-lexer/test/cases/each.else.pug",
"start": Object {
"column": 1,
"line": 51,
},
},
"type": "indent",
"val": 2,
},
Object {
"code": "[\\"variable with of keyword\\"]",
"loc": Object {
"end": Object {
"column": 43,
"line": 51,
},
"filename": "<basedir>/packages/pug-lexer/test/cases/each.else.pug",
"start": Object {
"column": 3,
"line": 51,
},
},
"type": "eachOf",
"val": "val",
"value": "val",
},
Object {
"loc": Object {
"end": Object {
"column": 5,
"line": 52,
},
"filename": "<basedir>/packages/pug-lexer/test/cases/each.else.pug",
"start": Object {
"column": 1,
"line": 52,
},
},
"type": "indent",
"val": 4,
},
Object {
"loc": Object {
"end": Object {
"column": 7,
"line": 52,
},
"filename": "<basedir>/packages/pug-lexer/test/cases/each.else.pug",
"start": Object {
"column": 5,
"line": 52,
},
},
"type": "tag",
"val": "li",
},
Object {
"buffer": true,
"loc": Object {
"end": Object {
"column": 12,
"line": 52,
},
"filename": "<basedir>/packages/pug-lexer/test/cases/each.else.pug",
"start": Object {
"column": 7,
"line": 52,
},
},
"mustEscape": true,
"type": "code",
"val": "val",
},
Object {
"loc": Object {
"end": Object {
"column": 12,
"line": 52,
},
"filename": "<basedir>/packages/pug-lexer/test/cases/each.else.pug",
"start": Object {
"column": 12,
"line": 52,
},
},
"type": "outdent",
},
Object {
"loc": Object {
"end": Object {
"column": 12,
"line": 52,
},
"filename": "<basedir>/packages/pug-lexer/test/cases/each.else.pug",
"start": Object {
"column": 12,
"line": 52,
},
},
"type": "outdent",
},
Object {
"loc": Object {
"end": Object {
"column": 12,
"line": 52,
},
"filename": "<basedir>/packages/pug-lexer/test/cases/each.else.pug",
"start": Object {
"column": 12,
"line": 52,
},
},
"type": "eos",
Expand Down
9 changes: 9 additions & 0 deletions packages/pug-lexer/test/cases/each.else.pug
Expand Up @@ -41,3 +41,12 @@ ul
li #{key}: #{val}
else
li user has no details!

- var ofKeyword = [{ name: 'tobi', friends: ['loki'] }, { name: 'loki' }]
ul
each val of ofKeyword
li= user.name

ul
each val of ["variable with of keyword"]
li= val

0 comments on commit d6f0615

Please sign in to comment.