pugjs/pug

Identifiers starting with 'of' in the 'each' value variable break the lexer

dmfay opened this issue · 0 comments

dmfay commented

Originally pugjs/pug-lexer#85 but I'm copying over here since pug-lexer is now part of this monorepo:

This was reported against my eslint pug plugin:
valpackett/eslint-plugin-pug#10

in the value variable position, an identifier like offers and in fact anything that matches of.+ (i.e. not of itself) seems to explode:

> const lex = require('pug-lexer')
> lex('each x in of')
[{"type":"each","loc":{"start":{"line":1,"column":1},"end":{"line":1,"column":13}},"val":"x","key":null,"code":"of"},{"type":"eos","loc":{"start":{"line":1,"column":13},"end":{"line":1,"column":13}}}]
> lex('each x in ofX')
Uncaught Error: Pug:1:14
  > 1| each x in ofX
--------------------^

The value variable for each must either be a valid identifier (e.g. `item`) or a pair of identifiers in square brackets (e.g. `[key, value]`).

I encountered this with each officer in officers.

Pug Version: 3.0.2

Node Version: any