diff --git a/package.json b/package.json index 12eca30..6302859 100644 --- a/package.json +++ b/package.json @@ -233,15 +233,19 @@ ], "description": "Have VSCode download the language server automatically (MacOS/Windows only for Swift-MesonLSP)" }, - "mesonbuild.setupCppTools": { - "type": "boolean", - "default": true, - "markdownDescription": "Setup the [Microsoft C/C++ extension](https://marketplace.visualstudio.com/items?itemName=ms-vscode.cpptools) to work with Meson" - }, - "mesonbuild.setupRustAnalyzer": { - "type": "boolean", + "mesonbuild.modifySettings": { + "type": [ + "boolean", + "array" + ], + "items": { + "enum": [ + "ms-vscode.cpptools", + "rust-lang.rust-analyzer" + ] + }, "default": true, - "markdownDescription": "Setup the [rust-analyzer extension](https://marketplace.visualstudio.com/items?itemName=ms-vscode.cpptools) to work with Meson" + "markdownDescription": "Automatically setup other extensions to use files generated by Meson. Set it to `false` if for example `.vscode/settings.json` is committed into git and should not be modified. It can also be an array of extension IDs of the following:\n- [`ms-vscode.cpptools`](https://marketplace.visualstudio.com/items?itemName=ms-vscode.cpptools)\n- [`rust-lang.rust-analyzer`](https://marketplace.visualstudio.com/items?itemName=rust-lang.rust-analyzer)." }, "mesonbuild.Swift-MesonLSP.others.ignoreDiagnosticsFromSubprojects": { "type": [ diff --git a/src/extension.ts b/src/extension.ts index 8149fe2..e22807c 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -11,6 +11,7 @@ import { getBuildDirectory, whenFileExists, mesonRootDirs, + shouldModifySetting, } from "./utils"; import { DebugConfigurationProviderCppdbg } from "./debug/cppdbg"; import { DebugConfigurationProviderLldb } from "./debug/lldb"; @@ -134,7 +135,7 @@ export async function activate(ctx: vscode.ExtensionContext) { const compileCommandsFile = `${buildDir}/compile_commands.json`; whenFileExists(ctx, compileCommandsFile, async () => { - if (extensionConfiguration("setupCppTools")) { + if (shouldModifySetting("ms-vscode.cpptools")) { const conf = vscode.workspace.getConfiguration("C_Cpp"); conf.update("default.compileCommands", compileCommandsFile, vscode.ConfigurationTarget.Workspace); } @@ -142,7 +143,7 @@ export async function activate(ctx: vscode.ExtensionContext) { const rustProjectFile = `${buildDir}/rust-project.json`; whenFileExists(ctx, rustProjectFile, async () => { - if (extensionConfiguration("setupRustAnalyzer")) { + if (shouldModifySetting("rust-lang.rust-analyzer")) { const conf = vscode.workspace.getConfiguration("rust-analyzer"); conf.update("linkedProjects", [rustProjectFile], vscode.ConfigurationTarget.Workspace); } diff --git a/src/types.ts b/src/types.ts index f5972ca..06582bc 100644 --- a/src/types.ts +++ b/src/types.ts @@ -9,6 +9,7 @@ export type LinterConfiguration = { }; export type LanguageServer = "Swift-MesonLSP" | null; +export type ModifiableExtension = "ms-vscode.cpptools" | "rust-lang.rust-analyzer"; export interface ExtensionConfiguration { configureOnOpen: boolean | "ask"; @@ -33,8 +34,7 @@ export interface ExtensionConfiguration { languageServerPath: string; downloadLanguageServer: boolean | "ask"; selectRootDir: boolean; - setupCppTools: boolean; - setupRustAnalyzer: boolean; + modifySettings: boolean | ModifiableExtension[]; } export interface TaskQuickPickItem extends vscode.QuickPickItem { @@ -133,6 +133,5 @@ export enum SettingsKey { languageServer = "languageServer", configureOnOpen = "configureOnOpen", selectRootDir = "selectRootDir", - setupCppTools = "setupCppTools", - setupRustAnalyzer = "setupRustAnalyzer", + modifySettings = "modifySettings", } diff --git a/src/utils.ts b/src/utils.ts index e5dff85..e7ef8a1 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -5,7 +5,7 @@ import * as vscode from "vscode"; import * as which from "which"; import { createHash, BinaryLike } from "crypto"; -import { ExtensionConfiguration, Target } from "./types"; +import { ExtensionConfiguration, Target, SettingsKey, ModifiableExtension } from "./types"; import { getMesonBuildOptions } from "./introspection"; import { extensionPath, workspaceState } from "./extension"; @@ -123,6 +123,13 @@ export function extensionConfigurationSet(array: T[], value: T) { return array.indexOf(value) !== -1; }