From 013d90ef4e6bd351990ebb499be4bba1b87589b5 Mon Sep 17 00:00:00 2001 From: "sheche@microsoft.com" Date: Sat, 2 Mar 2019 13:02:23 +0800 Subject: [PATCH] feat: add a new command to support switching the default language --- CHANGELOG.md | 4 ++++ README.md | 2 ++ docs/README_zh-CN.md | 2 ++ package.json | 6 ++++++ src/commands/language.ts | 38 ++++++++++++++++++++++++++++++++++++++ src/extension.ts | 2 ++ 6 files changed, 54 insertions(+) create mode 100644 src/commands/language.ts diff --git a/CHANGELOG.md b/CHANGELOG.md index 84d1ac9c..ef04d8cf 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to the "leetcode" extension will be documented in this file. Check [Keep a Changelog](http://keepachangelog.com/) for recommendations on how to structure this file. +## [0.12.0] +## Added +- Add new command `LeetCode: Switch Default Language` to support switching the default language [#115](https://github.com/jdneo/vscode-leetcode/issues/115) + ## [0.11.0] ## Added - Add new setting: `leetcode.outputFolder` to customize the sub-directory to save the files generated by 'Show Problem' [#119](https://github.com/jdneo/vscode-leetcode/issues/119) diff --git a/README.md b/README.md index 0cfae21e..f18fd631 100644 --- a/README.md +++ b/README.md @@ -71,6 +71,8 @@ > Note: If no folder is opened in VS Code, the extension will save the problem files in **$HOME/.leetcode/**. + > You can switch the default language by triggering the command: `LeetCode: Switch Default Language`. + --- ### Submit the Answer diff --git a/docs/README_zh-CN.md b/docs/README_zh-CN.md index ef1c6824..fa01450e 100644 --- a/docs/README_zh-CN.md +++ b/docs/README_zh-CN.md @@ -71,6 +71,8 @@ > 注意:若当前 VS Code 没有已打开的文件夹,则生成的题目文件会存储于 **$HOME/.leetcode/** 目录下。 + > 注意:你可以通过 `LeetCode: Switch Default Language` 命令变更答题时默认使用编程语言。 + --- ### 提交答案 diff --git a/package.json b/package.json index 9f2db0af..0d5451c1 100644 --- a/package.json +++ b/package.json @@ -36,6 +36,7 @@ "onCommand:leetcode.searchProblem", "onCommand:leetcode.testSolution", "onCommand:leetcode.submitSolution", + "onCommand:leetcode.switchDefaultLanguage", "onView:leetCodeExplorer" ], "main": "./out/src/extension", @@ -111,6 +112,11 @@ "command": "leetcode.submitSolution", "title": "Submit to LeetCode", "category": "LeetCode" + }, + { + "command": "leetcode.switchDefaultLanguage", + "title": "Switch Default Language", + "category": "LeetCode" } ], "viewsContainers": { diff --git a/src/commands/language.ts b/src/commands/language.ts new file mode 100644 index 00000000..5728e0a9 --- /dev/null +++ b/src/commands/language.ts @@ -0,0 +1,38 @@ +// Copyright (c) jdneo. All rights reserved. +// Licensed under the MIT license. + +import { QuickPickItem, window, workspace, WorkspaceConfiguration } from "vscode"; +import { languages } from "../shared"; + +export async function switchDefaultLanguage(): Promise { + const leetCodeConfig: WorkspaceConfiguration = workspace.getConfiguration("leetcode"); + const defaultLanguage: string | undefined = leetCodeConfig.get("defaultLanguage"); + const languageItems: QuickPickItem[] = []; + for (const language of languages) { + languageItems.push({ + label: language, + description: defaultLanguage === language ? "Currently used" : undefined, + }); + } + // Put the default language at the top of the list + languageItems.sort((a: QuickPickItem, b: QuickPickItem) => { + if (a.description) { + return Number.MIN_SAFE_INTEGER; + } else if (b.description) { + return Number.MAX_SAFE_INTEGER; + } + return a.label.localeCompare(b.label); + }); + + const selectedItem: QuickPickItem | undefined = await window.showQuickPick(languageItems, { + placeHolder: "Please the default language", + ignoreFocusOut: true, + }); + + if (!selectedItem) { + return; + } + + leetCodeConfig.update("defaultLanguage", selectedItem.label, true /* Global */); + window.showInformationMessage(`Successfully set the default language to ${selectedItem.label}`); +} diff --git a/src/extension.ts b/src/extension.ts index 9685b3f4..aaf2ee4f 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -4,6 +4,7 @@ import * as vscode from "vscode"; import { codeLensProvider } from "./codeLensProvider"; import * as cache from "./commands/cache"; +import { switchDefaultLanguage } from "./commands/language"; import * as plugin from "./commands/plugin"; import * as session from "./commands/session"; import * as show from "./commands/show"; @@ -47,6 +48,7 @@ export async function activate(context: vscode.ExtensionContext): Promise vscode.commands.registerCommand("leetcode.refreshExplorer", () => leetCodeTreeDataProvider.refresh()), vscode.commands.registerCommand("leetcode.testSolution", (uri?: vscode.Uri) => test.testSolution(uri)), vscode.commands.registerCommand("leetcode.submitSolution", (uri?: vscode.Uri) => submit.submitSolution(uri)), + vscode.commands.registerCommand("leetcode.switchDefaultLanguage", () => switchDefaultLanguage()), ); await leetCodeExecutor.switchEndpoint(plugin.getLeetCodeEndpoint());