From 7ec7032d77096fbcf2868857ee93de9be9275cc3 Mon Sep 17 00:00:00 2001 From: Ryan Hendrickson Date: Fri, 9 Oct 2020 16:20:19 -0400 Subject: [PATCH] fix: keep lexer plugins inside tag interpolation --- packages/pug-lexer/index.js | 1 + packages/pug/test/plugins.test.js | 18 ++++++++++++++++++ 2 files changed, 19 insertions(+) create mode 100644 packages/pug/test/plugins.test.js diff --git a/packages/pug-lexer/index.js b/packages/pug-lexer/index.js index 07afac50e..abf987a06 100644 --- a/packages/pug-lexer/index.js +++ b/packages/pug-lexer/index.js @@ -545,6 +545,7 @@ Lexer.prototype = { interpolated: true, startingLine: this.lineno, startingColumn: this.colno, + plugins: this.plugins, }); var interpolated; try { diff --git a/packages/pug/test/plugins.test.js b/packages/pug/test/plugins.test.js new file mode 100644 index 000000000..21447bc90 --- /dev/null +++ b/packages/pug/test/plugins.test.js @@ -0,0 +1,18 @@ +const pug = require('../'); + +test('#3295 - lexer plugins should be used in tag interpolation', () => { + const lex = { + advance(lexer) { + if ('~' === lexer.input.charAt(0)) { + lexer.tokens.push(lexer.tok('text', 'twiddle-dee-dee')); + lexer.consume(1); + lexer.incrementColumn(1); + return true; + } + }, + }; + const input = 'p Look at #[~]'; + const expected = '

Look at twiddle-dee-dee

'; + const output = pug.render(input, {plugins: [{lex}]}); + expect(output).toEqual(expected); +});