From f76108fdfdc9ebd7ca496790e08a37e3fb1a2b2c Mon Sep 17 00:00:00 2001 From: Kevin Sawicki & Nathan Sobo Date: Mon, 19 Aug 2013 18:04:26 -0700 Subject: [PATCH] :racehorse: Cache tab whitespace regexes in Token --- src/app/token.coffee | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/app/token.coffee b/src/app/token.coffee index 0d011ffc4..3f7f3b835 100644 --- a/src/app/token.coffee +++ b/src/app/token.coffee @@ -1,6 +1,8 @@ _ = require 'underscore' textUtils = require 'text-utils' +whitespaceRegexesByTabLength = {} + module.exports = class Token value: null @@ -29,6 +31,9 @@ class Token value2 = @value.substring(splitIndex) [new Token(value: value1, scopes: @scopes), new Token(value: value2, scopes: @scopes)] + whitespaceRegexForTabLength: (tabLength) -> + whitespaceRegexesByTabLength[tabLength] ?= new RegExp("([ ]{#{tabLength}})|(\t)|([^\t]+)", "g") + breakOutAtomicTokens: (tabLength, breakOutLeadingWhitespace) -> if @hasSurrogatePair outputTokens = [] @@ -48,8 +53,7 @@ class Token return [this] unless /\t/.test(@value) outputTokens = [] - regex = new RegExp("([ ]{#{tabLength}})|(\t)|([^\t]+)", "g") - + regex = @whitespaceRegexForTabLength(tabLength) while match = regex.exec(@value) [fullMatch, softTab, hardTab] = match if softTab and breakOutLeadingWhitespace