diff --git a/package-lock.json b/package-lock.json index 632f6f87..e878d47a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5,9 +5,9 @@ "requires": true, "dependencies": { "@types/fs-extra": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-5.0.0.tgz", - "integrity": "sha512-qtxDULQKUenuaDLW003CgC+0T0eiAfH3BrH+vSt87GLzbz5EZ6Ox6mv9rMttvhDOatbb9nYh0E1m7ydoYwUrAg==", + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-5.0.5.tgz", + "integrity": "sha512-w7iqhDH9mN8eLClQOYTkhdYUOSpp25eXxfc6VbFOGtzxW34JcvctH2bKjj4jD4++z4R5iO5D+pg48W2e03I65A==", "dev": true, "requires": { "@types/node": "*" @@ -40,6 +40,12 @@ "integrity": "sha512-HeyK+csRk7Khhg9krpMGJeT9pLzjsmiJFHYRzYpPv/dQ5tPclQsbvceiX/HKynRt/9lMLorWUYTbBHC3hRI4sg==", "dev": true }, + "@types/pinyin": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/@types/pinyin/-/pinyin-2.8.1.tgz", + "integrity": "sha512-4VAEvWbO0LNDChfIXsg6mruwNLviH04smX+0AtXgxpcdBvYajcacl8f6IHLedrKKbfOt8lRBtUwCVK34uad+9g==", + "dev": true + }, "@types/require-from-string": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/@types/require-from-string/-/require-from-string-1.2.0.tgz", @@ -68,9 +74,9 @@ } }, "ajv": { - "version": "6.9.1", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.9.1.tgz", - "integrity": "sha512-XDN92U311aINL77ieWHmqCcNlwjoP5cHXDxIxbf2MaPYuCXOHS7gHH8jktxeK5omgd52XbSTX6a4Piwd1pQmzA==", + "version": "6.9.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.9.2.tgz", + "integrity": "sha512-4UFy0/LgDo7Oa/+wOAlj44tp9K78u38E5/359eSrqEp1Z5PdVfimCcs7SluXMP755RUQu6d2b4AvF0R1C9RZjg==", "requires": { "fast-deep-equal": "^2.0.1", "fast-json-stable-stringify": "^2.0.0", @@ -473,10 +479,12 @@ } }, "commander": { - "version": "2.19.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.19.0.tgz", - "integrity": "sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg==", - "dev": true + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-1.1.1.tgz", + "integrity": "sha1-UNFlGGiuYOzP8KLZ80WVN2vGsEE=", + "requires": { + "keypress": "0.1.x" + } }, "concat-map": { "version": "0.0.1", @@ -857,7 +865,7 @@ }, "readable-stream": { "version": "2.3.6", - "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", "dev": true, "requires": { @@ -872,7 +880,7 @@ }, "string_decoder": { "version": "1.1.1", - "resolved": "http://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, "requires": { @@ -1453,9 +1461,9 @@ "dev": true }, "js-yaml": { - "version": "3.12.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.12.1.tgz", - "integrity": "sha512-um46hB9wNOKlwkHgiuyEVAybXBjwFUV0Z/RaHJblRd9DXltue9FTYvzCr9ErQrK9Adz5MU4gHWVaNUfdmrC8qA==", + "version": "3.12.2", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.12.2.tgz", + "integrity": "sha512-QHn/Lh/7HhZ/Twc7vJYQTkjuCa0kaCcDcjK5Zlk2rvnUpy7DxMJ23+Jc2dcyvltwQVg1nygAVlB2oRDFHoRS5Q==", "dev": true, "requires": { "argparse": "^1.0.7", @@ -1538,6 +1546,11 @@ "verror": "1.10.0" } }, + "keypress": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/keypress/-/keypress-0.1.0.tgz", + "integrity": "sha1-SjGI1CkbZrT2XtuZ+AaqmuKTWSo=" + }, "kind-of": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-1.1.0.tgz", @@ -1817,6 +1830,12 @@ "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==" }, + "nan": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.10.0.tgz", + "integrity": "sha512-bAdJv7fBLhWC+/Bls0Oza+mvTaNQtP+1RyhhhvD95pgUJz6XM5IzgmxOkItJ9tkoCiplvAnXI1tNmmUD/eScyA==", + "optional": true + }, "nconf": { "version": "0.10.0", "resolved": "https://registry.npmjs.org/nconf/-/nconf-0.10.0.tgz", @@ -1864,6 +1883,15 @@ "is": "^3.2.1" } }, + "nodejieba": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/nodejieba/-/nodejieba-2.3.0.tgz", + "integrity": "sha512-ZzLsVuNDlrmcBQa/b8G/yegdXje2iFmktYmPksk6qLha1brKEANYqg4XPiBspF1D0y7Npho91KTmvKFcDr0UdA==", + "optional": true, + "requires": { + "nan": "~2.10.0" + } + }, "normalize-path": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", @@ -1914,6 +1942,11 @@ "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==" }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" + }, "object-keys": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.0.tgz", @@ -2128,6 +2161,16 @@ "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" }, + "pinyin": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/pinyin/-/pinyin-2.8.3.tgz", + "integrity": "sha1-MBzLQ1jM/oAlI8S9ZAphK+5NfEs=", + "requires": { + "commander": "~1.1.1", + "nodejieba": "^2.2.1", + "object-assign": "^4.0.1" + } + }, "pkginfo": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/pkginfo/-/pkginfo-0.4.1.tgz", @@ -2710,9 +2753,9 @@ "dev": true }, "tslint": { - "version": "5.12.1", - "resolved": "https://registry.npmjs.org/tslint/-/tslint-5.12.1.tgz", - "integrity": "sha512-sfodBHOucFg6egff8d1BvuofoOQ/nOeYNfbp7LDlKBcLNrL3lmS5zoiDGyOMdT7YsEXAwWpTdAHwOGOc8eRZAw==", + "version": "5.13.0", + "resolved": "https://registry.npmjs.org/tslint/-/tslint-5.13.0.tgz", + "integrity": "sha512-ECOOQRxXCYnUUePG5h/+Z1Zouobk3KFpIHA9aKBB/nnMxs97S1JJPDGt5J4cGm1y9U9VmVlfboOxA8n1kSNzGw==", "dev": true, "requires": { "babel-code-frame": "^6.22.0", @@ -2723,10 +2766,19 @@ "glob": "^7.1.1", "js-yaml": "^3.7.0", "minimatch": "^3.0.4", + "mkdirp": "^0.5.1", "resolve": "^1.3.2", "semver": "^5.3.0", "tslib": "^1.8.0", "tsutils": "^2.27.2" + }, + "dependencies": { + "commander": { + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.19.0.tgz", + "integrity": "sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg==", + "dev": true + } } }, "tsutils": { diff --git a/package.json b/package.json index 9f2db0af..eb7e55f6 100644 --- a/package.json +++ b/package.json @@ -266,10 +266,11 @@ "lint": "tslint --project tsconfig.json -e src/*.d.ts -t verbose" }, "devDependencies": { - "@types/fs-extra": "5.0.0", + "@types/fs-extra": "^5.0.5", "@types/lodash.kebabcase": "^4.1.5", "@types/mocha": "^2.2.42", "@types/node": "^7.0.43", + "@types/pinyin": "^2.8.1", "@types/require-from-string": "^1.2.0", "tslint": "^5.9.1", "typescript": "^2.6.1", @@ -279,6 +280,7 @@ "fs-extra": "^6.0.1", "leetcode-cli": "2.6.1", "lodash.kebabcase": "^4.1.1", + "pinyin": "^2.8.3", "require-from-string": "^2.0.2" } } diff --git a/src/commands/show.ts b/src/commands/show.ts index d1ce1cf4..f38255f8 100644 --- a/src/commands/show.ts +++ b/src/commands/show.ts @@ -66,7 +66,7 @@ async function showProblemInternal(node: IProblem): Promise { outDir = path.join(outDir, relativePath); await fse.ensureDir(outDir); - const originFilePath: string = await leetCodeExecutor.showProblem(node, language, outDir); + const originFilePath: string = await leetCodeExecutor.showProblem(node, language, leetCodeConfig.endpoint, outDir); const filePath: string = wsl.useWsl() ? await wsl.toWinPath(originFilePath) : originFilePath; await vscode.window.showTextDocument(vscode.Uri.file(filePath), { preview: false }); diff --git a/src/leetCodeExecutor.ts b/src/leetCodeExecutor.ts index 995c5ca3..891c6d62 100644 --- a/src/leetCodeExecutor.ts +++ b/src/leetCodeExecutor.ts @@ -75,8 +75,8 @@ class LeetCodeExecutor { ); } - public async showProblem(node: IProblem, language: string, outDir: string): Promise { - const fileName: string = genFileName(node, language); + public async showProblem(node: IProblem, language: string, endpoint: Endpoint, outDir: string): Promise { + const fileName: string = genFileName(node, language, endpoint); const filePath: string = path.join(outDir, fileName); if (!await fse.pathExists(filePath)) { diff --git a/src/utils/problemUtils.ts b/src/utils/problemUtils.ts index c7946bbc..0fd0660f 100644 --- a/src/utils/problemUtils.ts +++ b/src/utils/problemUtils.ts @@ -1,5 +1,6 @@ import kebabCase = require("lodash.kebabcase"); -import { IProblem, langExt } from "../shared"; +import * as pinyin from "pinyin"; +import { Endpoint, IProblem, langExt } from "../shared"; export function genFileExt(language: string): string { const ext: string | undefined = langExt.get(language); @@ -9,8 +10,18 @@ export function genFileExt(language: string): string { return ext; } -export function genFileName(node: IProblem, language: string): string { - const slug: string = kebabCase(node.name); +export function genFileSlug(node: IProblem, endpoint: Endpoint): string { + switch (endpoint) { + case Endpoint.LeetCodeCN: + return kebabCase(pinyin(node.name, { style: pinyin.STYLE_NORMAL }).join("")); + case Endpoint.LeetCode: + default: + return kebabCase(node.name); + } +} + +export function genFileName(node: IProblem, language: string, endpoint: Endpoint): string { + const slug: string = genFileSlug(node, endpoint); const ext: string = genFileExt(language); return `${node.id}.${slug}.${ext}`; }