From 3d461a17d30689b5692da35fe1bd8727224a3274 Mon Sep 17 00:00:00 2001 From: Jon Schlinkert Date: Wed, 10 Apr 2019 07:29:47 -0400 Subject: [PATCH] ensure brackets are matched --- lib/parse.js | 19 +++++++++++++------ test/regression.js | 2 +- 2 files changed, 14 insertions(+), 7 deletions(-) diff --git a/lib/parse.js b/lib/parse.js index d7d135e..145ea26 100644 --- a/lib/parse.js +++ b/lib/parse.js @@ -43,6 +43,7 @@ const parse = (input, options = {}) => { let stack = [ast]; let block = ast; let prev = ast; + let brackets = 0; let length = input.length; let index = 0; let depth = 0; @@ -108,25 +109,31 @@ const parse = (input, options = {}) => { */ if (value === CHAR_LEFT_SQUARE_BRACKET) { + brackets++; + let closed = true; let next; while (index < length && (next = advance())) { value += next; + if (next === CHAR_LEFT_SQUARE_BRACKET) { + brackets++; + continue; + } + if (next === CHAR_BACKSLASH) { value += advance(); continue; } if (next === CHAR_RIGHT_SQUARE_BRACKET) { - closed = true; - break; - } - } + brackets--; - if (closed !== true) { - value = '\\' + value; + if (brackets === 0) { + break; + } + } } push({ type: 'text', value }); diff --git a/test/regression.js b/test/regression.js index c9529a9..18bcb27 100644 --- a/test/regression.js +++ b/test/regression.js @@ -289,7 +289,7 @@ describe('bash tests', () => { equal('a/**/c/{d,e}/f*.{md,txt}', ['a/**/c/d/f*.md', 'a/**/c/d/f*.txt', 'a/**/c/e/f*.md', 'a/**/c/e/f*.txt']); }); - it('should expand with extglobs.', () => { + it('should expand with brackets.', () => { equal('a/b/{d,e,[1-5]}/*.js', ['a/b/d/*.js', 'a/b/e/*.js', 'a/b/[1-5]/*.js']); }); });