From 14242774c4ac4bfc6feb35a8c0d1fe02dfe1f3d5 Mon Sep 17 00:00:00 2001 From: Vigilans Date: Tue, 16 Apr 2019 22:04:12 +0800 Subject: [PATCH 1/3] Resolve #261 --- src/commands/show.ts | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/commands/show.ts b/src/commands/show.ts index 8b9929d5..82b7922b 100644 --- a/src/commands/show.ts +++ b/src/commands/show.ts @@ -50,10 +50,11 @@ export async function showSolution(node?: LeetCodeNode): Promise { } try { let solution: string = await leetCodeExecutor.showSolution(node, language); - // remove backslash in espaced \'...\'(generated by leetcode's database) - solution = solution.replace(/\\'/g, "'"); + // tslint:disable-next-line: no-eval + solution = eval(`"${solution.replace(/\n/g, "\\n")}"`); // decode solution string with escaped characters await leetCodeSolutionProvider.show(solution, node); } catch (error) { + leetCodeChannel.appendLine(error.toString()); await promptForOpenOutputChannel("Failed to fetch the top voted solution. Please open the output channel for details.", DialogType.error); } } From c25bc62cc0bb305c8115d5d3c19892c84c83e519 Mon Sep 17 00:00:00 2001 From: Vigilans Date: Wed, 17 Apr 2019 18:08:14 +0800 Subject: [PATCH 2/3] Add double quote escaping --- src/commands/show.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/commands/show.ts b/src/commands/show.ts index 82b7922b..ae218e58 100644 --- a/src/commands/show.ts +++ b/src/commands/show.ts @@ -51,7 +51,7 @@ export async function showSolution(node?: LeetCodeNode): Promise { try { let solution: string = await leetCodeExecutor.showSolution(node, language); // tslint:disable-next-line: no-eval - solution = eval(`"${solution.replace(/\n/g, "\\n")}"`); // decode solution string with escaped characters + solution = eval(`"${solution.replace(/\n/g, "\\n").replace(/"/g, '\\"')}"`); // decode solution string with escaped characters await leetCodeSolutionProvider.show(solution, node); } catch (error) { leetCodeChannel.appendLine(error.toString()); From eb7c714760566ef2834b55cc8458486bdd3eb4a3 Mon Sep 17 00:00:00 2001 From: Vigilans Date: Thu, 18 Apr 2019 07:50:26 +0800 Subject: [PATCH 3/3] Use `unescape-js` package to unescape solution string --- package-lock.json | 19 ++++++++++++++++--- package.json | 1 + src/commands/show.ts | 7 +++---- 3 files changed, 20 insertions(+), 7 deletions(-) diff --git a/package-lock.json b/package-lock.json index 646da15d..92f93c1a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -829,9 +829,9 @@ "dev": true }, "js-yaml": { - "version": "3.13.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.0.tgz", - "integrity": "sha512-pZZoSxcCYco+DIKBTimr67J6Hy+EYGZDY/HCWC+iAEA9h1ByhMXAIVUXMcMFpOCxQ/xjXmPI2MkDL5HRm5eFrQ==", + "version": "3.13.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", + "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", "dev": true, "requires": { "argparse": "^1.0.7", @@ -1590,6 +1590,11 @@ "strip-ansi": "^3.0.0" } }, + "string.fromcodepoint": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/string.fromcodepoint/-/string.fromcodepoint-0.2.1.tgz", + "integrity": "sha1-jZeDM8C8klOPUPOD5IiPPlYZ1lM=" + }, "string_decoder": { "version": "0.10.31", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", @@ -1710,6 +1715,14 @@ "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.9.1.tgz", "integrity": "sha512-5/4etnCkd9c8gwgowi5/om/mYO5ajCaOgdzj/oW+0eQV9WxKBDZw5+ycmKmeaTXjInS/W0BzpGLo2xR2aBwZdg==" }, + "unescape-js": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/unescape-js/-/unescape-js-1.1.1.tgz", + "integrity": "sha512-2/6CdybfFt9fzYJhCD6SHfBnqCGNfjhMwPK9Pf+sJRloa/WmyAmxdBVOslOIYkvSIRKX+9xGePF5t1tugtZ63g==", + "requires": { + "string.fromcodepoint": "^0.2.1" + } + }, "universalify": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", diff --git a/package.json b/package.json index 41e73303..e1070011 100644 --- a/package.json +++ b/package.json @@ -331,6 +331,7 @@ "lodash": "^4.17.11", "markdown-it": "^8.4.2", "require-from-string": "^2.0.2", + "unescape-js": "^1.1.1", "vsc-leetcode-cli": "2.6.3" } } diff --git a/src/commands/show.ts b/src/commands/show.ts index ae218e58..a72c31bf 100644 --- a/src/commands/show.ts +++ b/src/commands/show.ts @@ -3,6 +3,7 @@ import * as fse from "fs-extra"; import * as path from "path"; +import * as unescapeJS from "unescape-js"; import * as vscode from "vscode"; import { LeetCodeNode } from "../explorer/LeetCodeNode"; import { leetCodeChannel } from "../leetCodeChannel"; @@ -49,10 +50,8 @@ export async function showSolution(node?: LeetCodeNode): Promise { return; } try { - let solution: string = await leetCodeExecutor.showSolution(node, language); - // tslint:disable-next-line: no-eval - solution = eval(`"${solution.replace(/\n/g, "\\n").replace(/"/g, '\\"')}"`); // decode solution string with escaped characters - await leetCodeSolutionProvider.show(solution, node); + const solution: string = await leetCodeExecutor.showSolution(node, language); + await leetCodeSolutionProvider.show(unescapeJS(solution), node); } catch (error) { leetCodeChannel.appendLine(error.toString()); await promptForOpenOutputChannel("Failed to fetch the top voted solution. Please open the output channel for details.", DialogType.error);