Skip to content

Commit 5ca1901

Browse files
committed
Speed up parsing many nested brackets
1 parent 42b5337 commit 5ca1901

2 files changed

Lines changed: 6 additions & 1 deletion

File tree

lib/tokenize.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ module.exports = function tokenizer(input, options = {}) {
3636
let pos = 0
3737
let buffer = []
3838
let returned = []
39+
let lastBadParen = -1
3940

4041
function position() {
4142
return pos
@@ -127,11 +128,14 @@ module.exports = function tokenizer(input, options = {}) {
127128
currentToken = ['brackets', css.slice(pos, next + 1), pos, next]
128129

129130
pos = next
131+
} else if (pos <= lastBadParen) {
132+
currentToken = ['(', '(', pos]
130133
} else {
131134
next = css.indexOf(')', pos + 1)
132135
content = css.slice(pos, next + 1)
133136

134137
if (next === -1 || RE_BAD_BRACKET.test(content)) {
138+
lastBadParen = next === -1 ? length : next
135139
currentToken = ['(', '(', pos]
136140
} else {
137141
currentToken = ['brackets', content, pos, next]

test/tokenize.test.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,8 @@ test('tokenizes square brackets', () => {
8787
test('tokenizes complicated brackets', () => {
8888
run('(())("")(/**/)(\\\\)(\n)(', [
8989
['(', '(', 0],
90-
['brackets', '()', 1, 2],
90+
['(', '(', 1],
91+
[')', ')', 2],
9192
[')', ')', 3],
9293
['(', '(', 4],
9394
['string', '""', 5, 6],

0 commit comments

Comments
 (0)