From eba994a1385012ca47f36ac9d33e4044fb42d50d Mon Sep 17 00:00:00 2001 From: Marijn Haverbeke <marijn@haverbeke.nl> Date: Thu, 2 Feb 2017 14:26:03 +0100 Subject: [PATCH] Use an ES6 class for StringStream --- src/util/StringStream.js | 62 ++++++++++++++++++++-------------------- 1 file changed, 31 insertions(+), 31 deletions(-) diff --git a/src/util/StringStream.js b/src/util/StringStream.js index 92dbc6906..0f7af07ca 100644 --- a/src/util/StringStream.js +++ b/src/util/StringStream.js @@ -5,57 +5,57 @@ import { countColumn } from "./misc" // Fed to the mode parsers, provides helper functions to make // parsers more succinct. -let StringStream = function(string, tabSize) { - this.pos = this.start = 0 - this.string = string - this.tabSize = tabSize || 8 - this.lastColumnPos = this.lastColumnValue = 0 - this.lineStart = 0 -} +class StringStream { + constructor(string, tabSize) { + this.pos = this.start = 0 + this.string = string + this.tabSize = tabSize || 8 + this.lastColumnPos = this.lastColumnValue = 0 + this.lineStart = 0 + } -StringStream.prototype = { - eol: function() {return this.pos >= this.string.length}, - sol: function() {return this.pos == this.lineStart}, - peek: function() {return this.string.charAt(this.pos) || undefined}, - next: function() { + eol() {return this.pos >= this.string.length} + sol() {return this.pos == this.lineStart} + peek() {return this.string.charAt(this.pos) || undefined} + next() { if (this.pos < this.string.length) return this.string.charAt(this.pos++) - }, - eat: function(match) { + } + eat(match) { let ch = this.string.charAt(this.pos) let ok if (typeof match == "string") ok = ch == match else ok = ch && (match.test ? match.test(ch) : match(ch)) if (ok) {++this.pos; return ch} - }, - eatWhile: function(match) { + } + eatWhile(match) { let start = this.pos while (this.eat(match)){} return this.pos > start - }, - eatSpace: function() { + } + eatSpace() { let start = this.pos while (/[\s\u00a0]/.test(this.string.charAt(this.pos))) ++this.pos return this.pos > start - }, - skipToEnd: function() {this.pos = this.string.length}, - skipTo: function(ch) { + } + skipToEnd() {this.pos = this.string.length} + skipTo(ch) { let found = this.string.indexOf(ch, this.pos) if (found > -1) {this.pos = found; return true} - }, - backUp: function(n) {this.pos -= n}, - column: function() { + } + backUp(n) {this.pos -= n} + column() { if (this.lastColumnPos < this.start) { this.lastColumnValue = countColumn(this.string, this.start, this.tabSize, this.lastColumnPos, this.lastColumnValue) this.lastColumnPos = this.start } return this.lastColumnValue - (this.lineStart ? countColumn(this.string, this.lineStart, this.tabSize) : 0) - }, - indentation: function() { + } + indentation() { return countColumn(this.string, null, this.tabSize) - (this.lineStart ? countColumn(this.string, this.lineStart, this.tabSize) : 0) - }, - match: function(pattern, consume, caseInsensitive) { + } + match(pattern, consume, caseInsensitive) { if (typeof pattern == "string") { let cased = str => caseInsensitive ? str.toLowerCase() : str let substr = this.string.substr(this.pos, pattern.length) @@ -69,9 +69,9 @@ StringStream.prototype = { if (match && consume !== false) this.pos += match[0].length return match } - }, - current: function(){return this.string.slice(this.start, this.pos)}, - hideFirstChars: function(n, inner) { + } + current(){return this.string.slice(this.start, this.pos)} + hideFirstChars(n, inner) { this.lineStart += n try { return inner() } finally { this.lineStart -= n } -- GitLab