From ad57726f9181d7b80d217d7bf1b6cdca282d0982 Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Mon, 3 Feb 2020 16:37:12 +0100 Subject: Use simple prng instead of a dependency closes #2999 --- editors/code/package-lock.json | 11 ----------- editors/code/package.json | 2 -- editors/code/src/highlighting.ts | 25 ++++++++++++++++++++++--- editors/code/tsconfig.json | 3 +-- 4 files changed, 23 insertions(+), 18 deletions(-) diff --git a/editors/code/package-lock.json b/editors/code/package-lock.json index 712153c34..0760f870c 100644 --- a/editors/code/package-lock.json +++ b/editors/code/package-lock.json @@ -98,12 +98,6 @@ "@types/node": "*" } }, - "@types/seedrandom": { - "version": "2.4.28", - "resolved": "https://registry.npmjs.org/@types/seedrandom/-/seedrandom-2.4.28.tgz", - "integrity": "sha512-SMA+fUwULwK7sd/ZJicUztiPs8F1yCPwF3O23Z9uQ32ME5Ha0NmDK9+QTsYE4O2tHXChzXomSWWeIhCnoN1LqA==", - "dev": true - }, "@types/vscode": { "version": "1.41.0", "resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.41.0.tgz", @@ -691,11 +685,6 @@ "integrity": "sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg==", "dev": true }, - "seedrandom": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/seedrandom/-/seedrandom-3.0.5.tgz", - "integrity": "sha512-8OwmbklUNzwezjGInmZ+2clQmExQPvomqjL7LFqOYqtmuxRgQYqOD3mHaU+MvZn5FLUeVxVfQjwLZW/n/JFuqg==" - }, "semver": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", diff --git a/editors/code/package.json b/editors/code/package.json index 06aa747fe..a46b0a82b 100644 --- a/editors/code/package.json +++ b/editors/code/package.json @@ -25,7 +25,6 @@ }, "dependencies": { "jsonc-parser": "^2.1.0", - "seedrandom": "^3.0.5", "vscode-languageclient": "^6.1.0" }, "devDependencies": { @@ -33,7 +32,6 @@ "@rollup/plugin-node-resolve": "^6.1.0", "@rollup/plugin-typescript": "^2.0.0", "@types/node": "^12.12.25", - "@types/seedrandom": "^2.4.28", "@types/vscode": "^1.41.0", "rollup": "^1.30.1", "tslib": "^1.10.0", diff --git a/editors/code/src/highlighting.ts b/editors/code/src/highlighting.ts index 3d190c3ad..66216e0fc 100644 --- a/editors/code/src/highlighting.ts +++ b/editors/code/src/highlighting.ts @@ -1,6 +1,5 @@ import * as vscode from 'vscode'; import * as lc from 'vscode-languageclient'; -import seedrandom from 'seedrandom'; import { ColorTheme, TextMateRuleSettings } from './color_theme'; @@ -70,9 +69,9 @@ interface Decoration { // Based on this HSL-based color generator: https://gist.github.com/bendc/76c48ce53299e6078a76 function fancify(seed: string, shade: 'light' | 'dark') { - const random = seedrandom(seed); + const random = randomU32Numbers(hashString(seed)) const randomInt = (min: number, max: number) => { - return Math.floor(random() * (max - min + 1)) + min; + return Math.abs(random()) % (max - min + 1) + min; }; const h = randomInt(0, 360); @@ -246,3 +245,23 @@ const TAG_TO_SCOPES = new Map([ ["keyword.unsafe", ["keyword.other.unsafe"]], ["keyword.control", ["keyword.control"]], ]); + +function randomU32Numbers(seed: number) { + let random = seed | 0; + return () => { + random ^= random << 13; + random ^= random >> 17; + random ^= random << 5; + random |= 0; + return random + } +} + +function hashString(str: string): number { + let res = 0; + for (let i = 0; i < str.length; ++i) { + const c = str.codePointAt(i)!!; + res = (res * 31 + c) & ~0; + } + return res; +} diff --git a/editors/code/tsconfig.json b/editors/code/tsconfig.json index d74169c29..e60eb8e5e 100644 --- a/editors/code/tsconfig.json +++ b/editors/code/tsconfig.json @@ -13,8 +13,7 @@ "noUnusedParameters": true, "noImplicitReturns": true, "noFallthroughCasesInSwitch": true, - "newLine": "LF", - "esModuleInterop": true + "newLine": "LF" }, "exclude": [ "node_modules" -- cgit v1.2.3