From 651e204f5dcbf67b31c3af2bac60d9aed53a1fc7 Mon Sep 17 00:00:00 2001 From: "Nicholas C. Zakas" Date: Tue, 20 Apr 2021 17:41:36 -0700 Subject: [PATCH] Chore: Fix/remove tools (fixes #471) (#476) * Chore: Fix/remove tools (fixes #471) * Update tests tools --- package.json | 1 - tools/convert.js | 15 -- tools/create-test.js | 23 +- tools/generate-identifier-regex.js | 52 ----- tools/generate-test-fixture.js | 335 ----------------------------- tools/list-complexity.js | 18 -- sync-docs.js => tools/sync-docs.js | 0 tools/update-coverage.sh | 14 -- tools/update-tests-esprima.js | 72 ------- tools/update-tests.js | 26 ++- 10 files changed, 30 insertions(+), 526 deletions(-) delete mode 100644 tools/convert.js delete mode 100644 tools/generate-identifier-regex.js delete mode 100644 tools/generate-test-fixture.js delete mode 100644 tools/list-complexity.js rename sync-docs.js => tools/sync-docs.js (100%) delete mode 100644 tools/update-coverage.sh delete mode 100644 tools/update-tests-esprima.js diff --git a/package.json b/package.json index cf6efbdc..198147fb 100644 --- a/package.json +++ b/package.json @@ -70,7 +70,6 @@ "unit": "npm-run-all -s unit:*", "unit:esm": "nyc mocha --color --reporter progress --timeout 30000 'tests/lib/**/*.js'", "unit:cjs": "mocha --color --reporter progress --timeout 30000 tests/lib/commonjs.cjs", - "generate-regex": "node tools/generate-identifier-regex.js", "test": "npm-run-all -p unit lint", "lint": "eslint \"*.?(c)js\" lib/ tests/lib/", "fixlint": "npm run lint -- --fix", diff --git a/tools/convert.js b/tools/convert.js deleted file mode 100644 index 07589b9d..00000000 --- a/tools/convert.js +++ /dev/null @@ -1,15 +0,0 @@ -// simple script to convert the old Esprima giant file tests into small ones - -import tests from "../test/test"; - -Object.keys(tests).forEach(function(key) { - var value = tests[key]; - - JSON.stringify(value, function(key, value) { - if (value === undefined) { - return "espree@undefined"; - } else { - return value; - } - }, " ").to('./tests/fixtures/ast/' + key.replace(/[^a-z0-9]/gi, "-") + ".json"); -}); diff --git a/tools/create-test.js b/tools/create-test.js index 0e25b9be..30971c3c 100644 --- a/tools/create-test.js +++ b/tools/create-test.js @@ -3,8 +3,6 @@ * @author Nicholas C. Zakas */ -"use strict"; - /* * Usage: * node tools/create-test.js ecma-features/binaryLiterals/ file_with_code.js @@ -16,14 +14,16 @@ // Requirements //------------------------------------------------------------------------------ -var shelljs = require("shelljs"), - espree = require("../espree"), - path = require("path"); +import shelljs from "shelljs"; +import { parse } from "../espree.js" +import path from "path"; +import { fileURLToPath } from "url"; //------------------------------------------------------------------------------ // Initialization //------------------------------------------------------------------------------ +const __dirname = path.dirname(fileURLToPath(import.meta.url)); var PATTERN = /\/\*!espree\-section:\s*[a-z\d\-]+\*\//gi; var filename = process.argv[2], @@ -56,8 +56,8 @@ if (!sections || sections.length !== code.length) { code.forEach(function(source, index) { var fullFilename = filename + "/" + (sections[index].substring(18, sections[index].length - 2).trim()), - testSourceFilename = path.resolve("__dirname", "../tests/fixtures/" + fullFilename + ".src.js"), - testResultFilename = path.resolve("__dirname", "../tests/fixtures/" + fullFilename + ".result.js"); + testSourceFilename = path.resolve(__dirname, "../tests/fixtures/" + fullFilename + ".src.js"), + testResultFilename = path.resolve(__dirname, "../tests/fixtures/" + fullFilename + ".result.js"); var result, sourceCode = source.trim(); @@ -72,7 +72,7 @@ code.forEach(function(source, index) { //------------------------------------------------------------------------------ try { - result = espree.parse(sourceCode, { + result = parse(sourceCode, { ecmaVersion: 8, // change as needed ecmaFeatures: { experimentalObjectRestSpread: true @@ -94,7 +94,12 @@ code.forEach(function(source, index) { recursivelyRemoveStartAndEnd(result) sourceCode.to(testSourceFilename); - ("module.exports = " + JSON.stringify(result, null, " ")).to(testResultFilename); + + let resultCode = `export default ${JSON.stringify(result, (key, value) => { + return (typeof value === "bigint") ? `bigint<${value}n>` : value; + }, 4)};`; + resultCode = resultCode.replace(/"bigint<(\d+n)>"/g, "$1"); + resultCode.to(testResultFilename); }); // acorn adds these "start" and "end" properties diff --git a/tools/generate-identifier-regex.js b/tools/generate-identifier-regex.js deleted file mode 100644 index 8fc654a2..00000000 --- a/tools/generate-identifier-regex.js +++ /dev/null @@ -1,52 +0,0 @@ -// Based on https://gist.github.com/mathiasbynens/6334847 by @mathias - -import regenerate from 'regenerate'; - -// Which Unicode version should be used? -var version = '6.3.0'; // note: also update `package.json` when this changes - -// Shorthand function -var get = function(what) { - return require('unicode-' + version + '/' + what + '/code-points'); -}; - -// Unicode categories needed to construct the ES5 regex -var Lu = get('categories/Lu'); -var Ll = get('categories/Ll'); -var Lt = get('categories/Lt'); -var Lm = get('categories/Lm'); -var Lo = get('categories/Lo'); -var Nl = get('categories/Nl'); -var Mn = get('categories/Mn'); -var Mc = get('categories/Mc'); -var Nd = get('categories/Nd'); -var Pc = get('categories/Pc'); - -var generateES5Regex = function() { // ES 5.1 - // http://mathiasbynens.be/notes/javascript-identifiers#valid-identifier-names - var identifierStart = regenerate('$', '_') - .add(Lu, Ll, Lt, Lm, Lo, Nl) - .removeRange(0x010000, 0x10FFFF) // remove astral symbols - .removeRange(0x0, 0x7F); // remove ASCII symbols (espree-specific) - var identifierStartCodePoints = identifierStart.toArray(); - var identifierPart = regenerate(identifierStartCodePoints) - .add('\u200C', '\u200D', Mn, Mc, Nd, Pc) - .removeRange(0x010000, 0x10FFFF) // remove astral symbols - .removeRange(0x0, 0x7F); // remove ASCII symbols (espree-specific) - return { - 'NonAsciiIdentifierStart': identifierStart.toString(), - 'NonAsciiIdentifierPart': identifierPart.toString() - }; -}; - -var result = generateES5Regex(); -console.log( - '// ECMAScript 5.1/Unicode v%s NonAsciiIdentifierStart:\n\n%s\n', - version, - result.NonAsciiIdentifierStart -); -console.log( - '// ECMAScript 5.1/Unicode v%s NonAsciiIdentifierPart:\n\n%s', - version, - result.NonAsciiIdentifierPart -); diff --git a/tools/generate-test-fixture.js b/tools/generate-test-fixture.js deleted file mode 100644 index c8b9de8e..00000000 --- a/tools/generate-test-fixture.js +++ /dev/null @@ -1,335 +0,0 @@ -// #!/usr/bin/env node -/* - Copyright (C) 2012 Yusuke Suzuki - Copyright (C) 2012 Ariya Hidayat - Copyright (C) 2011 Ariya Hidayat - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - ARE DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY - DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -/*jslint node:true */ -/*global str:true */ -(function () { - 'use strict'; - var fs = require('fs'), - path = require('path'), - root = path.join(path.dirname(fs.realpathSync(__filename)), '..'), - espree = require(path.join(root, 'espree')), - code = process.argv.splice(2), - content, - options; - - if (code.length === 0) { - console.log('Usage:'); - console.log(' generate-test-fixture.js code'); - process.exit(1); - } - - // This function is based on ECMA262 section 15.12.3JSON.stringify algorithm with modification - function stringify(given, printStrictJSON) { - - var Regex, gap, top, indent; - - Regex = { - NonAsciiIdentifierStart: new RegExp('[\xaa\xb5\xba\xc0-\xd6\xd8-\xf6\xf8-\u02c1\u02c6-\u02d1\u02e0-\u02e4\u02ec\u02ee\u0370-\u0374\u0376\u0377\u037a-\u037d\u0386\u0388-\u038a\u038c\u038e-\u03a1\u03a3-\u03f5\u03f7-\u0481\u048a-\u0527\u0531-\u0556\u0559\u0561-\u0587\u05d0-\u05ea\u05f0-\u05f2\u0620-\u064a\u066e\u066f\u0671-\u06d3\u06d5\u06e5\u06e6\u06ee\u06ef\u06fa-\u06fc\u06ff\u0710\u0712-\u072f\u074d-\u07a5\u07b1\u07ca-\u07ea\u07f4\u07f5\u07fa\u0800-\u0815\u081a\u0824\u0828\u0840-\u0858\u08a0\u08a2-\u08ac\u0904-\u0939\u093d\u0950\u0958-\u0961\u0971-\u0977\u0979-\u097f\u0985-\u098c\u098f\u0990\u0993-\u09a8\u09aa-\u09b0\u09b2\u09b6-\u09b9\u09bd\u09ce\u09dc\u09dd\u09df-\u09e1\u09f0\u09f1\u0a05-\u0a0a\u0a0f\u0a10\u0a13-\u0a28\u0a2a-\u0a30\u0a32\u0a33\u0a35\u0a36\u0a38\u0a39\u0a59-\u0a5c\u0a5e\u0a72-\u0a74\u0a85-\u0a8d\u0a8f-\u0a91\u0a93-\u0aa8\u0aaa-\u0ab0\u0ab2\u0ab3\u0ab5-\u0ab9\u0abd\u0ad0\u0ae0\u0ae1\u0b05-\u0b0c\u0b0f\u0b10\u0b13-\u0b28\u0b2a-\u0b30\u0b32\u0b33\u0b35-\u0b39\u0b3d\u0b5c\u0b5d\u0b5f-\u0b61\u0b71\u0b83\u0b85-\u0b8a\u0b8e-\u0b90\u0b92-\u0b95\u0b99\u0b9a\u0b9c\u0b9e\u0b9f\u0ba3\u0ba4\u0ba8-\u0baa\u0bae-\u0bb9\u0bd0\u0c05-\u0c0c\u0c0e-\u0c10\u0c12-\u0c28\u0c2a-\u0c33\u0c35-\u0c39\u0c3d\u0c58\u0c59\u0c60\u0c61\u0c85-\u0c8c\u0c8e-\u0c90\u0c92-\u0ca8\u0caa-\u0cb3\u0cb5-\u0cb9\u0cbd\u0cde\u0ce0\u0ce1\u0cf1\u0cf2\u0d05-\u0d0c\u0d0e-\u0d10\u0d12-\u0d3a\u0d3d\u0d4e\u0d60\u0d61\u0d7a-\u0d7f\u0d85-\u0d96\u0d9a-\u0db1\u0db3-\u0dbb\u0dbd\u0dc0-\u0dc6\u0e01-\u0e30\u0e32\u0e33\u0e40-\u0e46\u0e81\u0e82\u0e84\u0e87\u0e88\u0e8a\u0e8d\u0e94-\u0e97\u0e99-\u0e9f\u0ea1-\u0ea3\u0ea5\u0ea7\u0eaa\u0eab\u0ead-\u0eb0\u0eb2\u0eb3\u0ebd\u0ec0-\u0ec4\u0ec6\u0edc-\u0edf\u0f00\u0f40-\u0f47\u0f49-\u0f6c\u0f88-\u0f8c\u1000-\u102a\u103f\u1050-\u1055\u105a-\u105d\u1061\u1065\u1066\u106e-\u1070\u1075-\u1081\u108e\u10a0-\u10c5\u10c7\u10cd\u10d0-\u10fa\u10fc-\u1248\u124a-\u124d\u1250-\u1256\u1258\u125a-\u125d\u1260-\u1288\u128a-\u128d\u1290-\u12b0\u12b2-\u12b5\u12b8-\u12be\u12c0\u12c2-\u12c5\u12c8-\u12d6\u12d8-\u1310\u1312-\u1315\u1318-\u135a\u1380-\u138f\u13a0-\u13f4\u1401-\u166c\u166f-\u167f\u1681-\u169a\u16a0-\u16ea\u16ee-\u16f0\u1700-\u170c\u170e-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176c\u176e-\u1770\u1780-\u17b3\u17d7\u17dc\u1820-\u1877\u1880-\u18a8\u18aa\u18b0-\u18f5\u1900-\u191c\u1950-\u196d\u1970-\u1974\u1980-\u19ab\u19c1-\u19c7\u1a00-\u1a16\u1a20-\u1a54\u1aa7\u1b05-\u1b33\u1b45-\u1b4b\u1b83-\u1ba0\u1bae\u1baf\u1bba-\u1be5\u1c00-\u1c23\u1c4d-\u1c4f\u1c5a-\u1c7d\u1ce9-\u1cec\u1cee-\u1cf1\u1cf5\u1cf6\u1d00-\u1dbf\u1e00-\u1f15\u1f18-\u1f1d\u1f20-\u1f45\u1f48-\u1f4d\u1f50-\u1f57\u1f59\u1f5b\u1f5d\u1f5f-\u1f7d\u1f80-\u1fb4\u1fb6-\u1fbc\u1fbe\u1fc2-\u1fc4\u1fc6-\u1fcc\u1fd0-\u1fd3\u1fd6-\u1fdb\u1fe0-\u1fec\u1ff2-\u1ff4\u1ff6-\u1ffc\u2071\u207f\u2090-\u209c\u2102\u2107\u210a-\u2113\u2115\u2119-\u211d\u2124\u2126\u2128\u212a-\u212d\u212f-\u2139\u213c-\u213f\u2145-\u2149\u214e\u2160-\u2188\u2c00-\u2c2e\u2c30-\u2c5e\u2c60-\u2ce4\u2ceb-\u2cee\u2cf2\u2cf3\u2d00-\u2d25\u2d27\u2d2d\u2d30-\u2d67\u2d6f\u2d80-\u2d96\u2da0-\u2da6\u2da8-\u2dae\u2db0-\u2db6\u2db8-\u2dbe\u2dc0-\u2dc6\u2dc8-\u2dce\u2dd0-\u2dd6\u2dd8-\u2dde\u2e2f\u3005-\u3007\u3021-\u3029\u3031-\u3035\u3038-\u303c\u3041-\u3096\u309d-\u309f\u30a1-\u30fa\u30fc-\u30ff\u3105-\u312d\u3131-\u318e\u31a0-\u31ba\u31f0-\u31ff\u3400-\u4db5\u4e00-\u9fcc\ua000-\ua48c\ua4d0-\ua4fd\ua500-\ua60c\ua610-\ua61f\ua62a\ua62b\ua640-\ua66e\ua67f-\ua697\ua6a0-\ua6ef\ua717-\ua71f\ua722-\ua788\ua78b-\ua78e\ua790-\ua793\ua7a0-\ua7aa\ua7f8-\ua801\ua803-\ua805\ua807-\ua80a\ua80c-\ua822\ua840-\ua873\ua882-\ua8b3\ua8f2-\ua8f7\ua8fb\ua90a-\ua925\ua930-\ua946\ua960-\ua97c\ua984-\ua9b2\ua9cf\uaa00-\uaa28\uaa40-\uaa42\uaa44-\uaa4b\uaa60-\uaa76\uaa7a\uaa80-\uaaaf\uaab1\uaab5\uaab6\uaab9-\uaabd\uaac0\uaac2\uaadb-\uaadd\uaae0-\uaaea\uaaf2-\uaaf4\uab01-\uab06\uab09-\uab0e\uab11-\uab16\uab20-\uab26\uab28-\uab2e\uabc0-\uabe2\uac00-\ud7a3\ud7b0-\ud7c6\ud7cb-\ud7fb\uf900-\ufa6d\ufa70-\ufad9\ufb00-\ufb06\ufb13-\ufb17\ufb1d\ufb1f-\ufb28\ufb2a-\ufb36\ufb38-\ufb3c\ufb3e\ufb40\ufb41\ufb43\ufb44\ufb46-\ufbb1\ufbd3-\ufd3d\ufd50-\ufd8f\ufd92-\ufdc7\ufdf0-\ufdfb\ufe70-\ufe74\ufe76-\ufefc\uff21-\uff3a\uff41-\uff5a\uff66-\uffbe\uffc2-\uffc7\uffca-\uffcf\uffd2-\uffd7\uffda-\uffdc]'), - NonAsciiIdentifierPart: new RegExp('[\xaa\xb5\xba\xc0-\xd6\xd8-\xf6\xf8-\u02c1\u02c6-\u02d1\u02e0-\u02e4\u02ec\u02ee\u0300-\u0374\u0376\u0377\u037a-\u037d\u0386\u0388-\u038a\u038c\u038e-\u03a1\u03a3-\u03f5\u03f7-\u0481\u0483-\u0487\u048a-\u0527\u0531-\u0556\u0559\u0561-\u0587\u0591-\u05bd\u05bf\u05c1\u05c2\u05c4\u05c5\u05c7\u05d0-\u05ea\u05f0-\u05f2\u0610-\u061a\u0620-\u0669\u066e-\u06d3\u06d5-\u06dc\u06df-\u06e8\u06ea-\u06fc\u06ff\u0710-\u074a\u074d-\u07b1\u07c0-\u07f5\u07fa\u0800-\u082d\u0840-\u085b\u08a0\u08a2-\u08ac\u08e4-\u08fe\u0900-\u0963\u0966-\u096f\u0971-\u0977\u0979-\u097f\u0981-\u0983\u0985-\u098c\u098f\u0990\u0993-\u09a8\u09aa-\u09b0\u09b2\u09b6-\u09b9\u09bc-\u09c4\u09c7\u09c8\u09cb-\u09ce\u09d7\u09dc\u09dd\u09df-\u09e3\u09e6-\u09f1\u0a01-\u0a03\u0a05-\u0a0a\u0a0f\u0a10\u0a13-\u0a28\u0a2a-\u0a30\u0a32\u0a33\u0a35\u0a36\u0a38\u0a39\u0a3c\u0a3e-\u0a42\u0a47\u0a48\u0a4b-\u0a4d\u0a51\u0a59-\u0a5c\u0a5e\u0a66-\u0a75\u0a81-\u0a83\u0a85-\u0a8d\u0a8f-\u0a91\u0a93-\u0aa8\u0aaa-\u0ab0\u0ab2\u0ab3\u0ab5-\u0ab9\u0abc-\u0ac5\u0ac7-\u0ac9\u0acb-\u0acd\u0ad0\u0ae0-\u0ae3\u0ae6-\u0aef\u0b01-\u0b03\u0b05-\u0b0c\u0b0f\u0b10\u0b13-\u0b28\u0b2a-\u0b30\u0b32\u0b33\u0b35-\u0b39\u0b3c-\u0b44\u0b47\u0b48\u0b4b-\u0b4d\u0b56\u0b57\u0b5c\u0b5d\u0b5f-\u0b63\u0b66-\u0b6f\u0b71\u0b82\u0b83\u0b85-\u0b8a\u0b8e-\u0b90\u0b92-\u0b95\u0b99\u0b9a\u0b9c\u0b9e\u0b9f\u0ba3\u0ba4\u0ba8-\u0baa\u0bae-\u0bb9\u0bbe-\u0bc2\u0bc6-\u0bc8\u0bca-\u0bcd\u0bd0\u0bd7\u0be6-\u0bef\u0c01-\u0c03\u0c05-\u0c0c\u0c0e-\u0c10\u0c12-\u0c28\u0c2a-\u0c33\u0c35-\u0c39\u0c3d-\u0c44\u0c46-\u0c48\u0c4a-\u0c4d\u0c55\u0c56\u0c58\u0c59\u0c60-\u0c63\u0c66-\u0c6f\u0c82\u0c83\u0c85-\u0c8c\u0c8e-\u0c90\u0c92-\u0ca8\u0caa-\u0cb3\u0cb5-\u0cb9\u0cbc-\u0cc4\u0cc6-\u0cc8\u0cca-\u0ccd\u0cd5\u0cd6\u0cde\u0ce0-\u0ce3\u0ce6-\u0cef\u0cf1\u0cf2\u0d02\u0d03\u0d05-\u0d0c\u0d0e-\u0d10\u0d12-\u0d3a\u0d3d-\u0d44\u0d46-\u0d48\u0d4a-\u0d4e\u0d57\u0d60-\u0d63\u0d66-\u0d6f\u0d7a-\u0d7f\u0d82\u0d83\u0d85-\u0d96\u0d9a-\u0db1\u0db3-\u0dbb\u0dbd\u0dc0-\u0dc6\u0dca\u0dcf-\u0dd4\u0dd6\u0dd8-\u0ddf\u0df2\u0df3\u0e01-\u0e3a\u0e40-\u0e4e\u0e50-\u0e59\u0e81\u0e82\u0e84\u0e87\u0e88\u0e8a\u0e8d\u0e94-\u0e97\u0e99-\u0e9f\u0ea1-\u0ea3\u0ea5\u0ea7\u0eaa\u0eab\u0ead-\u0eb9\u0ebb-\u0ebd\u0ec0-\u0ec4\u0ec6\u0ec8-\u0ecd\u0ed0-\u0ed9\u0edc-\u0edf\u0f00\u0f18\u0f19\u0f20-\u0f29\u0f35\u0f37\u0f39\u0f3e-\u0f47\u0f49-\u0f6c\u0f71-\u0f84\u0f86-\u0f97\u0f99-\u0fbc\u0fc6\u1000-\u1049\u1050-\u109d\u10a0-\u10c5\u10c7\u10cd\u10d0-\u10fa\u10fc-\u1248\u124a-\u124d\u1250-\u1256\u1258\u125a-\u125d\u1260-\u1288\u128a-\u128d\u1290-\u12b0\u12b2-\u12b5\u12b8-\u12be\u12c0\u12c2-\u12c5\u12c8-\u12d6\u12d8-\u1310\u1312-\u1315\u1318-\u135a\u135d-\u135f\u1380-\u138f\u13a0-\u13f4\u1401-\u166c\u166f-\u167f\u1681-\u169a\u16a0-\u16ea\u16ee-\u16f0\u1700-\u170c\u170e-\u1714\u1720-\u1734\u1740-\u1753\u1760-\u176c\u176e-\u1770\u1772\u1773\u1780-\u17d3\u17d7\u17dc\u17dd\u17e0-\u17e9\u180b-\u180d\u1810-\u1819\u1820-\u1877\u1880-\u18aa\u18b0-\u18f5\u1900-\u191c\u1920-\u192b\u1930-\u193b\u1946-\u196d\u1970-\u1974\u1980-\u19ab\u19b0-\u19c9\u19d0-\u19d9\u1a00-\u1a1b\u1a20-\u1a5e\u1a60-\u1a7c\u1a7f-\u1a89\u1a90-\u1a99\u1aa7\u1b00-\u1b4b\u1b50-\u1b59\u1b6b-\u1b73\u1b80-\u1bf3\u1c00-\u1c37\u1c40-\u1c49\u1c4d-\u1c7d\u1cd0-\u1cd2\u1cd4-\u1cf6\u1d00-\u1de6\u1dfc-\u1f15\u1f18-\u1f1d\u1f20-\u1f45\u1f48-\u1f4d\u1f50-\u1f57\u1f59\u1f5b\u1f5d\u1f5f-\u1f7d\u1f80-\u1fb4\u1fb6-\u1fbc\u1fbe\u1fc2-\u1fc4\u1fc6-\u1fcc\u1fd0-\u1fd3\u1fd6-\u1fdb\u1fe0-\u1fec\u1ff2-\u1ff4\u1ff6-\u1ffc\u200c\u200d\u203f\u2040\u2054\u2071\u207f\u2090-\u209c\u20d0-\u20dc\u20e1\u20e5-\u20f0\u2102\u2107\u210a-\u2113\u2115\u2119-\u211d\u2124\u2126\u2128\u212a-\u212d\u212f-\u2139\u213c-\u213f\u2145-\u2149\u214e\u2160-\u2188\u2c00-\u2c2e\u2c30-\u2c5e\u2c60-\u2ce4\u2ceb-\u2cf3\u2d00-\u2d25\u2d27\u2d2d\u2d30-\u2d67\u2d6f\u2d7f-\u2d96\u2da0-\u2da6\u2da8-\u2dae\u2db0-\u2db6\u2db8-\u2dbe\u2dc0-\u2dc6\u2dc8-\u2dce\u2dd0-\u2dd6\u2dd8-\u2dde\u2de0-\u2dff\u2e2f\u3005-\u3007\u3021-\u302f\u3031-\u3035\u3038-\u303c\u3041-\u3096\u3099\u309a\u309d-\u309f\u30a1-\u30fa\u30fc-\u30ff\u3105-\u312d\u3131-\u318e\u31a0-\u31ba\u31f0-\u31ff\u3400-\u4db5\u4e00-\u9fcc\ua000-\ua48c\ua4d0-\ua4fd\ua500-\ua60c\ua610-\ua62b\ua640-\ua66f\ua674-\ua67d\ua67f-\ua697\ua69f-\ua6f1\ua717-\ua71f\ua722-\ua788\ua78b-\ua78e\ua790-\ua793\ua7a0-\ua7aa\ua7f8-\ua827\ua840-\ua873\ua880-\ua8c4\ua8d0-\ua8d9\ua8e0-\ua8f7\ua8fb\ua900-\ua92d\ua930-\ua953\ua960-\ua97c\ua980-\ua9c0\ua9cf-\ua9d9\uaa00-\uaa36\uaa40-\uaa4d\uaa50-\uaa59\uaa60-\uaa76\uaa7a\uaa7b\uaa80-\uaac2\uaadb-\uaadd\uaae0-\uaaef\uaaf2-\uaaf6\uab01-\uab06\uab09-\uab0e\uab11-\uab16\uab20-\uab26\uab28-\uab2e\uabc0-\uabea\uabec\uabed\uabf0-\uabf9\uac00-\ud7a3\ud7b0-\ud7c6\ud7cb-\ud7fb\uf900-\ufa6d\ufa70-\ufad9\ufb00-\ufb06\ufb13-\ufb17\ufb1d-\ufb28\ufb2a-\ufb36\ufb38-\ufb3c\ufb3e\ufb40\ufb41\ufb43\ufb44\ufb46-\ufbb1\ufbd3-\ufd3d\ufd50-\ufd8f\ufd92-\ufdc7\ufdf0-\ufdfb\ufe00-\ufe0f\ufe20-\ufe26\ufe33\ufe34\ufe4d-\ufe4f\ufe70-\ufe74\ufe76-\ufefc\uff10-\uff19\uff21-\uff3a\uff3f\uff41-\uff5a\uff66-\uffbe\uffc2-\uffc7\uffca-\uffcf\uffd2-\uffd7\uffda-\uffdc]') - }; - - function isIdentifierStart(ch) { - return (ch === '$') || (ch === '_') || (ch === '\\') || - (ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z') || - ((ch.charCodeAt(0) >= 0x80) && Regex.NonAsciiIdentifierStart.test(ch)); - } - - function isIdentifierPart(ch) { - return (ch === '$') || (ch === '_') || (ch === '\\') || - (ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z') || - ((ch >= '0') && (ch <= '9')) || - ((ch.charCodeAt(0) >= 0x80) && Regex.NonAsciiIdentifierPart.test(ch)); - } - - // 7.6.1.2 Future Reserved Words - - function isFutureReservedWord(id) { - switch (id) { - - // Future reserved words. - case 'class': - case 'enum': - case 'export': - case 'extends': - case 'import': - case 'super': - return true; - } - - return false; - } - - function isStrictModeReservedWord(id) { - switch (id) { - - // Strict Mode reserved words. - case 'implements': - case 'interface': - case 'package': - case 'private': - case 'protected': - case 'public': - case 'static': - case 'yield': - case 'let': - return true; - } - - return false; - } - - function isRestrictedWord(id) { - return id === 'eval' || id === 'arguments'; - } - - // 7.6.1.1 Keywords - - function isKeyword(id) { - var keyword = false; - switch (id.length) { - case 2: - keyword = (id === 'if') || (id === 'in') || (id === 'do'); - break; - case 3: - keyword = (id === 'var') || (id === 'for') || (id === 'new') || (id === 'try'); - break; - case 4: - keyword = (id === 'this') || (id === 'else') || (id === 'case') || (id === 'void') || (id === 'with'); - break; - case 5: - keyword = (id === 'while') || (id === 'break') || (id === 'catch') || (id === 'throw'); - break; - case 6: - keyword = (id === 'return') || (id === 'typeof') || (id === 'delete') || (id === 'switch'); - break; - case 7: - keyword = (id === 'default') || (id === 'finally'); - break; - case 8: - keyword = (id === 'function') || (id === 'continue') || (id === 'debugger'); - break; - case 10: - keyword = (id === 'instanceof'); - break; - } - - if (keyword) { - return true; - } - - switch (id) { - // Future reserved words. - // 'const' is specialized as Keyword in V8. - case 'const': - return true; - - // For compatiblity to SpiderMonkey and ES.next - case 'yield': - case 'let': - return true; - } - - if (isStrictModeReservedWord(id)) { - return true; - } - - return isFutureReservedWord(id); - } - - function isIdentifier(name) { - var i, iz; - // fallback for ES3 - if (isKeyword(name) || isRestrictedWord(name)) { - return false; - } - if (name.length === 0) { - return false; - } - if (!isIdentifierStart(name.charAt(0))) { - return false; - } - for (i = 1, iz = name.length; i < iz; i += 1) { - if (!isIdentifierPart(name.charAt(i))) { - return false; - } - } - return true; - } - - function quote(string) { - var i, iz, ch, product, hex; - product = '"'; - for (i = 0, iz = string.length; i < iz; i += 1) { - ch = string[i]; - if (ch === '"' || ch === '\\') { - product += '\\'; - product += ch; - } else { - switch (ch) { - case '\b': - product += '\\b'; - break; - case '\f': - product += '\\f'; - break; - case '\n': - product += '\\n'; - break; - case '\r': - product += '\\r'; - break; - case '\t': - product += '\\t'; - break; - case '\u2028': - product += '\u2028'; - break; - case '\u2029': - product += '\u2028'; - break; - default: - if (ch < ' ') { - hex = ch.toString(16); - product += '\\u' + '0000'.slice(hex.length) + hex; - } else { - product += ch; - } - } - } - } - return product + '"'; - } - - function ja(array) { - return '[' + array.map(function (elm, key) { - return str(key, array); - }).join(', ') + ']'; - } - - function jo(object, key) { - var stepback, partial, fin, - startStr = 'start', endStr = 'end', lineStr = 'line', colStr = 'column'; - - if (printStrictJSON) { - startStr = '"' + startStr + '"'; - endStr = '"' + endStr + '"'; - lineStr = '"' + lineStr + '"'; - colStr = '"' + colStr + '"'; - } - - stepback = indent; - indent += gap; - - if (key === 'loc') { - // specialized for loc - fin = '{\n' + - indent + startStr + ': { ' + lineStr + ': ' + stringify(object.start.line) + ', ' + colStr + ': ' + stringify(object.start.column) + ' },\n' + - indent + endStr + ': { ' + lineStr + ': ' + stringify(object.end.line) + ', ' + colStr + ': ' + stringify(object.end.column) + ' }\n' + - stepback + '}'; - } else { - partial = Object.keys(object).reduce(function (partial, name) { - var res; - res = str(name, object); - if (res !== undefined) { - if (printStrictJSON || !isIdentifier(name)) { - name = quote(name); - } - partial.push(name + ': ' + res); - } - return partial; - }, []); - - if (!partial.length) { - fin = '{}'; - } else { - fin = '{\n' + indent + partial.join(',\n' + indent) + '\n' + stepback + '}'; - } - } - - indent = stepback; - return fin; - } - - function str(key, holder) { - var value; - value = holder[key]; - if (typeof value === 'object' && value !== null) { - if (value instanceof Number) { - value = Number(value); - } - if (value instanceof String) { - value = String(value); - } - if (value instanceof Boolean) { - value = Boolean(value); - } - } - switch (typeof value) { - case 'object': - if (value === null) { - return 'null'; - } - if (Array.isArray(value)) { - return ja(value); - } - return jo(value, key); - - case 'boolean': - return String(value); - case 'string': - return quote(value); - case 'number': - return JSON.stringify(value); - } - } - - gap = ' '; - indent = ''; - top = {}; - top[''] = given; - - return str('', top); - } - - content = code[0]; - - options = { - comment: false, - range: true, - loc: true, - tokens: false, - raw: true, - tolerant: false - }; - - console.log(stringify( - espree.parse(content, options), - process.argv.indexOf('strict-json') !== -1 - )); -}()); -/* vim: set sw=4 ts=4 et tw=80 : */ diff --git a/tools/list-complexity.js b/tools/list-complexity.js deleted file mode 100644 index c1f99be7..00000000 --- a/tools/list-complexity.js +++ /dev/null @@ -1,18 +0,0 @@ -var cr = require('complexity-report'), - content = require('fs').readFileSync('espree.js', 'utf-8'), - opt = { logicalor: false, switchcase: false }, - list = []; - -cr.run(content, opt).functions.forEach(function (entry) { - var name = (entry.name === '') ? (':' + entry.line) : entry.name; - list.push({ name: name, value: entry.complexity.cyclomatic }); -}); - -list.sort(function (x, y) { - return y.value - x.value; -}); - -console.log('Most cyclomatic-complex functions:'); -list.slice(0, 6).forEach(function (entry) { - console.log(' ', entry.name, entry.value); -}); diff --git a/sync-docs.js b/tools/sync-docs.js similarity index 100% rename from sync-docs.js rename to tools/sync-docs.js diff --git a/tools/update-coverage.sh b/tools/update-coverage.sh deleted file mode 100644 index 05d36b43..00000000 --- a/tools/update-coverage.sh +++ /dev/null @@ -1,14 +0,0 @@ -#!/bin/bash - -if [ `command -v istanbul` ]; then - - REVISION=`git log -1 --pretty=%h` - DATE=`git log -1 --pretty=%cD | cut -c 6-16` - - echo "Running coverage analysis..." - istanbul cover test/runner.js - grep -v 'class="path' coverage/lcov-report/espree/espree.js.html | grep -v "class='meta" > test/espree.js.html - -else - echo "Please install Istanbul first!" -fi diff --git a/tools/update-tests-esprima.js b/tools/update-tests-esprima.js deleted file mode 100644 index c349f009..00000000 --- a/tools/update-tests-esprima.js +++ /dev/null @@ -1,72 +0,0 @@ -/** - * @fileoverview A simple script to update existing tests to reflect new - * parser changes. - * @author Nicholas C. Zakas - -"use strict"; - -/* - * Usage: - * node tools/update-tests-esprima.js [directory] - * - */ - -//------------------------------------------------------------------------------ -// Requirements -//------------------------------------------------------------------------------ - -var shelljs = require("shelljs"), - esprima = require("esprima"), - path = require("path"); - -//------------------------------------------------------------------------------ -// Helpers -//------------------------------------------------------------------------------ - -var directory = process.argv[2]; - -function getExpectedResult(code, config) { - try { - return esprima.parse(code, config); - } catch (ex) { - return ex; // if an error is thrown, match the error - } -} - -function getTestFilenames(directory) { - return shelljs.find(directory).filter(function(filename) { - return filename.indexOf(".src.js") > -1; - }).map(function(filename) { - return filename.substring(directory.length - 1, filename.length - 7); // strip off ".src.js" - }); -} - -function outputResult(result, testResultFilename) { - ("module.exports = " + JSON.stringify(result, null, " ") + ";").to(testResultFilename); -} - -//------------------------------------------------------------------------------ -// Setup -//------------------------------------------------------------------------------ - -var FIXTURES_DIR = "./tests/fixtures/" + directory; - -var testFiles = getTestFilenames(FIXTURES_DIR); - -// update all tests in ecma-features -testFiles.forEach(function(filename) { - - var feature = path.dirname(filename), - code = shelljs.cat(path.resolve(FIXTURES_DIR, filename) + ".src.js"), - config = { - loc: true, - range: true, - ecmaFeatures: {} - }; - - config.ecmaFeatures[feature] = true; - var testResultFilename = path.resolve(__dirname, "..", FIXTURES_DIR, filename) + ".result.js"; - var result = getExpectedResult(code, config); - result.sourceType = "script"; - outputResult(result, testResultFilename); -}); diff --git a/tools/update-tests.js b/tools/update-tests.js index 38a8e2da..62e8a782 100644 --- a/tools/update-tests.js +++ b/tools/update-tests.js @@ -2,28 +2,28 @@ * @fileoverview A simple script to update existing tests to reflect new * parser changes. * @author Nicholas C. Zakas - -"use strict"; - -/* + * * Usage: * node tools/update-tests.js * */ //------------------------------------------------------------------------------ -// Requirements +// Imports //------------------------------------------------------------------------------ -var shelljs = require("shelljs"), - espree = require("../espree"), - tester = require("../tests/lib/tester"), - path = require("path"); +import shelljs from "shelljs"; +import * as espree from "../espree.js"; +import tester from "../tests/lib/tester.js"; +import path from "path"; +import { fileURLToPath } from "url"; //------------------------------------------------------------------------------ // Helpers //------------------------------------------------------------------------------ +const __dirname = path.dirname(fileURLToPath(import.meta.url)); + function getExpectedResult(code, config) { try { return tester.getRaw(espree.parse(code, config)); @@ -51,7 +51,13 @@ function getLibraryFilenames(directory) { } function outputResult(result, testResultFilename) { - ("module.exports = " + JSON.stringify(result, null, " ") + ";").to(testResultFilename); + let code = `export default ${JSON.stringify(result, (key, value) => { + return (typeof value === "bigint") ? `bigint<${value}n>` : value; + }, 4)};`; + + code = code.replace(/"bigint<(\d+n)>"/g, "$1"); + + code.to(testResultFilename); } //------------------------------------------------------------------------------