From 5d3e9da52f5e5b41b56c0c0b5a78ce75111acbd1 Mon Sep 17 00:00:00 2001 From: goodchip Date: Fri, 10 Jan 2025 13:57:21 +0100 Subject: [PATCH] Added option to use a local arduino-cli.yaml config file to add e.g. custom library paths. --- package.json | 5 +++++ src/arduino/arduino.ts | 4 ++++ src/arduino/arduinoSettings.ts | 8 ++++++++ src/arduino/vscodeSettings.ts | 10 ++++++++++ 4 files changed, 27 insertions(+) diff --git a/package.json b/package.json index 943d4392..48682931 100644 --- a/package.json +++ b/package.json @@ -212,6 +212,11 @@ "default": false, "markdownDescription": "Use Arduino CLI installed instead of the legacy Arduino IDE. If `#arduino.path#` and `#arduino.commandPath#` are not set, the extension will use a version of Arduino CLI bundled with the extension. (Requires a restart after change)" }, + "arduino.useLocalArduinoCliConfigFile": { + "type": "boolean", + "default": false, + "markdownDescription": "Use a local arduino-cli.yaml file instead the default .../Arduino15/arduino-cli.yaml. (Requires a restart after change)" + }, "arduino.path": { "type": "string", "default": "", diff --git a/src/arduino/arduino.ts b/src/arduino/arduino.ts index 6d6f27b6..34894808 100644 --- a/src/arduino/arduino.ts +++ b/src/arduino/arduino.ts @@ -668,6 +668,10 @@ export class ArduinoApp { } } + if (this.useArduinoCli() && this._settings.useLocalArduinoCliConfigFile) { + args.push("--config-file", path.join(ArduinoWorkspace.rootPath, "arduino-cli.yaml")); + } + if (dc.buildPreferences) { for (const pref of dc.buildPreferences) { // Note: BuildPrefSetting makes sure that each preference diff --git a/src/arduino/arduinoSettings.ts b/src/arduino/arduinoSettings.ts index 80825995..256893d3 100644 --- a/src/arduino/arduinoSettings.ts +++ b/src/arduino/arduinoSettings.ts @@ -25,6 +25,7 @@ export interface IArduinoSettings { preferencePath: string; preferences: Map; useArduinoCli: boolean; + useLocalArduinoCliConfigFile: boolean; usingBundledArduinoCli: boolean; analyzeOnSettingChange: boolean; reloadPreferences(): void; @@ -43,6 +44,8 @@ export class ArduinoSettings implements IArduinoSettings { private _useArduinoCli: boolean; + private _useLocalArduinoCliConfigFile: boolean; + private _usingBundledArduinoCli: boolean = false; private readonly bundledArduinoCliName: { [platform: string]: string } = { @@ -62,6 +65,7 @@ export class ArduinoSettings implements IArduinoSettings { const platform = os.platform(); this._commandPath = VscodeSettings.getInstance().commandPath; this._useArduinoCli = VscodeSettings.getInstance().useArduinoCli; + this._useLocalArduinoCliConfigFile = VscodeSettings.getInstance().useLocalArduinoCliConfigFile; await this.tryResolveArduinoPath(); if (platform === "win32") { await this.updateWindowsPath(); @@ -171,6 +175,10 @@ export class ArduinoSettings implements IArduinoSettings { return this._useArduinoCli; } + get useLocalArduinoCliConfigFile() { + return this._useLocalArduinoCliConfigFile; + } + public get usingBundledArduinoCli() { return this._usingBundledArduinoCli; } diff --git a/src/arduino/vscodeSettings.ts b/src/arduino/vscodeSettings.ts index 09e3a180..b1874abb 100644 --- a/src/arduino/vscodeSettings.ts +++ b/src/arduino/vscodeSettings.ts @@ -17,6 +17,7 @@ const configKeys = { IGNORE_BOARDS: "arduino.ignoreBoards", SKIP_HEADER_PROVIDER: "arduino.skipHeaderProvider", USE_ARDUINO_CLI: "arduino.useArduinoCli", + USE_LOCAL_ARDUINO_CLI_CONFIG_FILE: "arduino.useLocalArduinoCliConfigFile", DISABLE_INTELLISENSE_AUTO_GEN: "arduino.disableIntelliSenseAutoGen", ANALYZE_ON_OPEN: "arduino.analyzeOnOpen", ANALYZE_ON_SETTING_CHANGE: "arduino.analyzeOnSettingChange", @@ -34,6 +35,7 @@ export interface IVscodeSettings { ignoreBoards: string[]; skipHeaderProvider: boolean; useArduinoCli: boolean; + useLocalArduinoCliConfigFile: boolean; disableIntelliSenseAutoGen: boolean; analyzeOnOpen: boolean; analyzeOnSettingChange: boolean; @@ -123,6 +125,14 @@ export class VscodeSettings implements IVscodeSettings { return this.setConfigValue(configKeys.USE_ARDUINO_CLI, value, true); } + public get useLocalArduinoCliConfigFile(): boolean { + return this.getConfigValue(configKeys.USE_LOCAL_ARDUINO_CLI_CONFIG_FILE); + } + + public setUseLocalArduinoCliConfigFile(value: boolean): Promise { + return this.setConfigValue(configKeys.USE_LOCAL_ARDUINO_CLI_CONFIG_FILE, value, true); + } + public get skipHeaderProvider(): boolean { return this.getConfigValue(configKeys.SKIP_HEADER_PROVIDER); }