From bd9db332d2887d884ec7ab3ca68488314b8618da Mon Sep 17 00:00:00 2001 From: Martin von Gagern Date: Sat, 7 Jan 2017 02:25:50 +0100 Subject: [PATCH] Turn var into const or let --- .eslintrc | 4 +- cli.js | 10 +- contrib/auto-render/auto-render-spec.js | 24 +- contrib/auto-render/auto-render.js | 45 +- contrib/auto-render/splitAtDelimiters.js | 24 +- dockers/Screenshotter/screenshotter.js | 126 ++--- dockers/texcmp/texcmp.js | 137 +++--- katex.js | 28 +- server.js | 28 +- src/Lexer.js | 18 +- src/MacroExpander.js | 14 +- src/Options.js | 6 +- src/ParseError.js | 16 +- src/Parser.js | 198 ++++---- src/Style.js | 43 +- src/buildCommon.js | 102 ++-- src/buildHTML.js | 448 +++++++++--------- src/buildMathML.js | 166 +++---- src/buildTree.js | 26 +- src/delimiter.js | 143 +++--- src/domTree.js | 56 +-- src/environments.js | 53 ++- src/fontMetrics.js | 48 +- src/functions.js | 98 ++-- src/mathMLTree.js | 14 +- src/parseTree.js | 6 +- src/symbols.js | 66 ++- src/unicodeRegexes.js | 4 +- src/utils.js | 25 +- test/errors-spec.js | 12 +- test/katex-spec.js | 572 +++++++++++------------ test/symgroups.js | 48 +- test/unicode-spec.js | 18 +- 33 files changed, 1308 insertions(+), 1318 deletions(-) diff --git a/.eslintrc b/.eslintrc index fc13162..96821cc 100644 --- a/.eslintrc +++ b/.eslintrc @@ -35,6 +35,7 @@ "no-unreachable": 2, "no-unused-vars": [2, {"args": "none", "varsIgnorePattern": "^_*$"}], "no-useless-call": 2, + "no-var": 2, "no-with": 2, "one-var": [2, "never"], "prefer-const": 2, @@ -52,9 +53,6 @@ // We've decided explicitly not to care about this. "arrow-parens": 0, // --------------------------------------- - // Stuff that's disabled for now, but maybe shouldn't be. - // disabled because KaTeX doesn't use ES6 - "no-var": 0, // TODO(csilvers): enable these if/when community agrees on it. "prefer-arrow-callback": 0, "object-curly-spacing": [0, "always"], diff --git a/cli.js b/cli.js index b64de37..b75c955 100755 --- a/cli.js +++ b/cli.js @@ -3,11 +3,11 @@ // Reads TeX from stdin, outputs HTML to stdout. /* eslint no-console:0 */ -var katex = require("./"); -var input = ""; +const katex = require("./"); +let input = ""; // Skip the first two args, which are just "node" and "cli.js" -var args = process.argv.slice(2); +const args = process.argv.slice(2); if (args.indexOf("--help") !== -1) { console.log(process.argv[0] + " " + process.argv[1] + @@ -26,7 +26,7 @@ process.stdin.on("data", function(chunk) { }); process.stdin.on("end", function() { - var options = { displayMode: args.indexOf("--display-mode") !== -1 }; - var output = katex.renderToString(input, options); + const options = { displayMode: args.indexOf("--display-mode") !== -1 }; + const output = katex.renderToString(input, options); console.log(output); }); diff --git a/contrib/auto-render/auto-render-spec.js b/contrib/auto-render/auto-render-spec.js index 6b526a4..6fc589b 100644 --- a/contrib/auto-render/auto-render-spec.js +++ b/contrib/auto-render/auto-render-spec.js @@ -4,21 +4,21 @@ /* global it: false */ /* global describe: false */ -var splitAtDelimiters = require("./splitAtDelimiters"); +const splitAtDelimiters = require("./splitAtDelimiters"); beforeEach(function() { jasmine.addMatchers({ toSplitInto: function() { return { compare: function(actual, left, right, result) { - var message = { + const message = { pass: true, message: "'" + actual + "' split correctly", }; - var startData = [{type: "text", data: actual}]; + const startData = [{type: "text", data: actual}]; - var split = + const split = splitAtDelimiters(startData, left, right, false); if (split.length !== result.length) { @@ -30,12 +30,12 @@ beforeEach(function() { return message; } - for (var i = 0; i < split.length; i++) { - var real = split[i]; - var correct = result[i]; + for (let i = 0; i < split.length; i++) { + const real = split[i]; + const correct = result[i]; - var good = true; - var diff; + let good = true; + let diff; if (real.type !== correct.type) { good = false; @@ -189,7 +189,7 @@ describe("A delimiter splitter", function() { }); it("remembers which delimiters are display-mode", function() { - var startData = [{type: "text", data: "hello ( world ) boo"}]; + const startData = [{type: "text", data: "hello ( world ) boo"}]; expect(splitAtDelimiters(startData, "(", ")", true)).toEqual( [ @@ -201,7 +201,7 @@ describe("A delimiter splitter", function() { }); it("works with more than one start datum", function() { - var startData = [ + const startData = [ {type: "text", data: "hello ( world ) boo"}, {type: "math", data: "math", rawData: "(math)", display: true}, {type: "text", data: "hello ( world ) boo"}, @@ -222,7 +222,7 @@ describe("A delimiter splitter", function() { }); it("doesn't do splitting inside of math nodes", function() { - var startData = [ + const startData = [ {type: "text", data: "hello ( world ) boo"}, {type: "math", data: "hello ( world ) boo", rawData: "(hello ( world ) boo)", display: true}, diff --git a/contrib/auto-render/auto-render.js b/contrib/auto-render/auto-render.js index 62449ed..1133867 100644 --- a/contrib/auto-render/auto-render.js +++ b/contrib/auto-render/auto-render.js @@ -1,12 +1,12 @@ /* eslint no-console:0 */ /* global katex */ -var splitAtDelimiters = require("./splitAtDelimiters"); +const splitAtDelimiters = require("./splitAtDelimiters"); -var splitWithDelimiters = function(text, delimiters) { - var data = [{type: "text", data: text}]; - for (var i = 0; i < delimiters.length; i++) { - var delimiter = delimiters[i]; +const splitWithDelimiters = function(text, delimiters) { + let data = [{type: "text", data: text}]; + for (let i = 0; i < delimiters.length; i++) { + const delimiter = delimiters[i]; data = splitAtDelimiters( data, delimiter.left, delimiter.right, delimiter.display || false); @@ -14,17 +14,17 @@ var splitWithDelimiters = function(text, delimiters) { return data; }; -var renderMathInText = function(text, delimiters) { - var data = splitWithDelimiters(text, delimiters); +const renderMathInText = function(text, delimiters) { + const data = splitWithDelimiters(text, delimiters); - var fragment = document.createDocumentFragment(); + const fragment = document.createDocumentFragment(); - for (var i = 0; i < data.length; i++) { + for (let i = 0; i < data.length; i++) { if (data[i].type === "text") { fragment.appendChild(document.createTextNode(data[i].data)); } else { - var span = document.createElement("span"); - var math = data[i].data; + const span = document.createElement("span"); + const math = data[i].data; try { katex.render(math, span, { displayMode: data[i].display, @@ -48,17 +48,17 @@ var renderMathInText = function(text, delimiters) { return fragment; }; -var renderElem = function(elem, delimiters, ignoredTags) { - for (var i = 0; i < elem.childNodes.length; i++) { - var childNode = elem.childNodes[i]; +const renderElem = function(elem, delimiters, ignoredTags) { + for (let i = 0; i < elem.childNodes.length; i++) { + const childNode = elem.childNodes[i]; if (childNode.nodeType === 3) { // Text node - var frag = renderMathInText(childNode.textContent, delimiters); + const frag = renderMathInText(childNode.textContent, delimiters); i += frag.childNodes.length - 1; elem.replaceChild(frag, childNode); } else if (childNode.nodeType === 1) { // Element node - var shouldRender = ignoredTags.indexOf( + const shouldRender = ignoredTags.indexOf( childNode.nodeName.toLowerCase()) === -1; if (shouldRender) { @@ -69,7 +69,7 @@ var renderElem = function(elem, delimiters, ignoredTags) { } }; -var defaultOptions = { +const defaultOptions = { delimiters: [ {left: "$$", right: "$$", display: true}, {left: "\\[", right: "\\]", display: true}, @@ -83,11 +83,12 @@ var defaultOptions = { ], }; -var extend = function(obj) { +const extend = function(obj) { // Adapted from underscore.js' `_.extend`. See LICENSE.txt for license. - var source; - var prop; - for (var i = 1, length = arguments.length; i < length; i++) { + let source; + let prop; + const length = arguments.length; + for (let i = 1; i < length; i++) { source = arguments[i]; for (prop in source) { if (Object.prototype.hasOwnProperty.call(source, prop)) { @@ -98,7 +99,7 @@ var extend = function(obj) { return obj; }; -var renderMathInElement = function(elem, options) { +const renderMathInElement = function(elem, options) { if (!elem) { throw new Error("No element provided to render"); } diff --git a/contrib/auto-render/splitAtDelimiters.js b/contrib/auto-render/splitAtDelimiters.js index 13b3af7..8c9cde3 100644 --- a/contrib/auto-render/splitAtDelimiters.js +++ b/contrib/auto-render/splitAtDelimiters.js @@ -1,14 +1,14 @@ /* eslint no-constant-condition:0 */ -var findEndOfMath = function(delimiter, text, startIndex) { +const findEndOfMath = function(delimiter, text, startIndex) { // Adapted from // https://github.com/Khan/perseus/blob/master/src/perseus-markdown.jsx - var index = startIndex; - var braceLevel = 0; + let index = startIndex; + let braceLevel = 0; - var delimLength = delimiter.length; + const delimLength = delimiter.length; while (index < text.length) { - var character = text[index]; + const character = text[index]; if (braceLevel <= 0 && text.slice(index, index + delimLength) === delimiter) { @@ -27,16 +27,16 @@ var findEndOfMath = function(delimiter, text, startIndex) { return -1; }; -var splitAtDelimiters = function(startData, leftDelim, rightDelim, display) { - var finalData = []; +const splitAtDelimiters = function(startData, leftDelim, rightDelim, display) { + const finalData = []; - for (var i = 0; i < startData.length; i++) { + for (let i = 0; i < startData.length; i++) { if (startData[i].type === "text") { - var text = startData[i].data; + const text = startData[i].data; - var lookingForLeft = true; - var currIndex = 0; - var nextIndex; + let lookingForLeft = true; + let currIndex = 0; + let nextIndex; nextIndex = text.indexOf(leftDelim); if (nextIndex !== -1) { diff --git a/dockers/Screenshotter/screenshotter.js b/dockers/Screenshotter/screenshotter.js index dc31cb5..968a717 100644 --- a/dockers/Screenshotter/screenshotter.js +++ b/dockers/Screenshotter/screenshotter.js @@ -1,27 +1,27 @@ /* eslint no-console:0, prefer-spread:0 */ "use strict"; -var childProcess = require("child_process"); -var fs = require("fs"); -var http = require("http"); -var jspngopt = require("jspngopt"); -var net = require("net"); -var os = require("os"); -var pako = require("pako"); -var path = require("path"); -var selenium = require("selenium-webdriver"); -var firefox = require("selenium-webdriver/firefox"); +const childProcess = require("child_process"); +const fs = require("fs"); +const http = require("http"); +const jspngopt = require("jspngopt"); +const net = require("net"); +const os = require("os"); +const pako = require("pako"); +const path = require("path"); +const selenium = require("selenium-webdriver"); +const firefox = require("selenium-webdriver/firefox"); -var app = require("../../server"); -var data = require("../../test/screenshotter/ss_data"); +const app = require("../../server"); +const data = require("../../test/screenshotter/ss_data"); -var dstDir = path.normalize( +const dstDir = path.normalize( path.join(__dirname, "..", "..", "test", "screenshotter", "images")); ////////////////////////////////////////////////////////////////////// // Process command line arguments -var opts = require("nomnom") +const opts = require("nomnom") .option("browser", { abbr: "b", "default": "firefox", @@ -74,25 +74,25 @@ var opts = require("nomnom") }) .parse(); -var listOfCases; +let listOfCases; if (opts.include) { listOfCases = opts.include.split(","); } else { listOfCases = Object.keys(data); } if (opts.exclude) { - var exclude = opts.exclude.split(","); + const exclude = opts.exclude.split(","); listOfCases = listOfCases.filter(function(key) { return exclude.indexOf(key) === -1; }); } -var seleniumURL = opts.seleniumURL; -var seleniumIP = opts.seleniumIP; -var seleniumPort = opts.seleniumPort; -var katexURL = opts.katexURL; -var katexIP = opts.katexIP; -var katexPort = opts.katexPort; +let seleniumURL = opts.seleniumURL; +let seleniumIP = opts.seleniumIP; +let seleniumPort = opts.seleniumPort; +let katexURL = opts.katexURL; +let katexIP = opts.katexIP; +let katexPort = opts.katexPort; ////////////////////////////////////////////////////////////////////// // Work out connection to selenium docker container @@ -107,15 +107,15 @@ function check(err) { } function cmd() { - var args = Array.prototype.slice.call(arguments); - var cmd = args.shift(); + const args = Array.prototype.slice.call(arguments); + const cmd = args.shift(); return childProcess.execFileSync( cmd, args, { encoding: "utf-8" }).replace(/\n$/, ""); } function guessDockerIPs() { if (process.env.DOCKER_MACHINE_NAME) { - var machine = process.env.DOCKER_MACHINE_NAME; + const machine = process.env.DOCKER_MACHINE_NAME; seleniumIP = seleniumIP || cmd("docker-machine", "ip", machine); katexIP = katexIP || cmd("docker-machine", "ssh", machine, "echo ${SSH_CONNECTION%% *}"); @@ -124,7 +124,7 @@ function guessDockerIPs() { try { // When using boot2docker, seleniumIP and katexIP are distinct. seleniumIP = seleniumIP || cmd("boot2docker", "ip"); - var config = cmd("boot2docker", "config"); + let config = cmd("boot2docker", "config"); config = (/^HostIP = "(.*)"$/m).exec(config); if (!config) { console.error("Failed to find HostIP"); @@ -142,7 +142,7 @@ function guessDockerIPs() { return; } // Native Docker on Linux or remote Docker daemon or similar - var gatewayIP = cmd("docker", "inspect", + const gatewayIP = cmd("docker", "inspect", "-f", "{{.NetworkSettings.Gateway}}", opts.container); seleniumIP = seleniumIP || gatewayIP; katexIP = katexIP || gatewayIP; @@ -165,22 +165,22 @@ if (seleniumURL) { } process.nextTick(startServer); -var attempts = 0; +let attempts = 0; ////////////////////////////////////////////////////////////////////// // Start up development server -var devServer = null; -var minPort = 32768; -var maxPort = 61000; +let devServer = null; +const minPort = 32768; +const maxPort = 61000; function startServer() { if (katexURL || katexPort) { process.nextTick(tryConnect); return; } - var port = Math.floor(Math.random() * (maxPort - minPort)) + minPort; - var server = http.createServer(app).listen(port); + const port = Math.floor(Math.random() * (maxPort - minPort)) + minPort; + const server = http.createServer(app).listen(port); server.once("listening", function() { devServer = server; katexPort = port; @@ -206,7 +206,7 @@ function tryConnect() { process.nextTick(buildDriver); return; } - var sock = net.connect({ + const sock = net.connect({ host: seleniumIP, port: +seleniumPort, }); @@ -225,21 +225,21 @@ function tryConnect() { ////////////////////////////////////////////////////////////////////// // Build the web driver -var driver; +let driver; function buildDriver() { - var builder = new selenium.Builder().forBrowser(opts.browser); - var ffProfile = new firefox.Profile(); + const builder = new selenium.Builder().forBrowser(opts.browser); + const ffProfile = new firefox.Profile(); ffProfile.setPreference( "browser.startup.homepage_override.mstone", "ignore"); ffProfile.setPreference("browser.startup.page", 0); - var ffOptions = new firefox.Options().setProfile(ffProfile); + const ffOptions = new firefox.Options().setProfile(ffProfile); builder.setFirefoxOptions(ffOptions); if (seleniumURL) { builder.usingServer(seleniumURL); } driver = builder.build(); driver.manage().timeouts().setScriptTimeout(3000).then(function() { - var html = '' + + let html = '' + '

Test

'; @@ -253,15 +253,15 @@ function buildDriver() { ////////////////////////////////////////////////////////////////////// // Set the screen size -var targetW = 1024; -var targetH = 768; +const targetW = 1024; +const targetH = 768; function setSize(reqW, reqH) { return driver.manage().window().setSize(reqW, reqH).then(function() { return driver.takeScreenshot(); }).then(function(img) { img = imageDimensions(img); - var actualW = img.width; - var actualH = img.height; + const actualW = img.width; + const actualH = img.height; if (actualW === targetW && actualH === targetH) { findHostIP(); return; @@ -274,7 +274,7 @@ function setSize(reqW, reqH) { } function imageDimensions(img) { - var buf = new Buffer(img, "base64"); + const buf = new Buffer(img, "base64"); return { buf: buf, width: buf.readUInt32BE(16), @@ -312,13 +312,13 @@ function findHostIP() { }); // Next, enumerate all network addresses - var ips = []; - var devs = os.networkInterfaces(); - for (var dev in devs) { + const ips = []; + const devs = os.networkInterfaces(); + for (const dev in devs) { if (devs.hasOwnProperty(dev)) { - var addrs = devs[dev]; - for (var i = 0; i < addrs.length; ++i) { - var addr = addrs[i].address; + const addrs = devs[dev]; + for (let i = 0; i < addrs.length; ++i) { + let addr = addrs[i].address; if (/:/.test(addr)) { addr = "[" + addr + "]"; } @@ -329,7 +329,7 @@ function findHostIP() { console.log("Looking for host IP among " + ips.join(", ")); // Load a data: URI document which attempts to contact each of these IPs - var html = "\n\n"; + let html = "\n\n"; html += ips.map(function(ip) { return '