canonical
Version:
Canonical code style linter and formatter for JavaScript, SCSS, CSS and JSON.
1 lines • 1.33 kB
JavaScript
;var TokenType=require('../token-types');module.exports = (function(){function markSC(tokens){var tokensLength=tokens.length, ws=-1, sc=-1, t;for(var i=0; i < tokensLength; i++) {t = tokens[i];switch(t.type){case TokenType.Space:case TokenType.Tab:case TokenType.Newline:t.ws = true;t.sc = true;if(ws === -1)ws = i;if(sc === -1)sc = i;break;case TokenType.CommentML:case TokenType.CommentSL:if(ws !== -1){tokens[ws].ws_last = i - 1;ws = -1;}t.sc = true;break;default:if(ws !== -1){tokens[ws].ws_last = i - 1;ws = -1;}if(sc !== -1){tokens[sc].sc_last = i - 1;sc = -1;}}}if(ws !== -1)tokens[ws].ws_last = i - 1;if(sc !== -1)tokens[sc].sc_last = i - 1;}function markBrackets(tokens){var tokensLength=tokens.length;var ps=[], sbs=[], cbs=[], t;for(var i=0; i < tokensLength; i++) {t = tokens[i];switch(t.type){case TokenType.LeftParenthesis:ps.push(i);break;case TokenType.RightParenthesis:if(ps.length){t.left = ps.pop();tokens[t.left].right = i;}break;case TokenType.LeftSquareBracket:sbs.push(i);break;case TokenType.RightSquareBracket:if(sbs.length){t.left = sbs.pop();tokens[t.left].right = i;}break;case TokenType.LeftCurlyBracket:cbs.push(i);break;case TokenType.RightCurlyBracket:if(cbs.length){t.left = cbs.pop();tokens[t.left].right = i;}break;}}}return function(tokens){markBrackets(tokens);markSC(tokens);};})();