diff --git a/README.md b/README.md
index e8a59b65..7270066b 100644
--- a/README.md
+++ b/README.md
@@ -82,6 +82,8 @@ This extension provides several commands in the Command Palette (F1 o
| `arduino.defaultBaudRate` | Default baud rate for the serial port monitor. The default value is 115200. Supported values are 300, 1200, 2400, 4800, 9600, 19200, 38400, 57600, 74880, 115200, 230400 and 250000 |
| `arduino.defaultTimestampFormat` | Format of timestamp printed before each line of Serial Monitor output. You can find list of all available placeholders [here](https://github.com/samsonjs/strftime#supported-specifiers). |
| `arduino.disableIntelliSenseAutoGen` | When `true` vscode-arduino will not auto-generate an IntelliSense configuration (i.e. `.vscode/c_cpp_properties.json`) by analyzing Arduino's compiler output. |
+| `arduino.analyzeOnOpen` | When true, automatically run analysis when the project is opened. Only works when `arduino.analyzeOnSettingChange` is true. |
+| `arduino.analyzeOnSettingChange` | When true, automatically run analysis when board, configuration, or sketch settings are changed. |
The following Visual Studio Code settings are available for the Arduino extension. These can be set in global user preferences Ctrl + , *or* Cmd + , or workspace settings (`.vscode/settings.json`). The latter overrides the former.
diff --git a/package.json b/package.json
index db3b29d5..0d214316 100644
--- a/package.json
+++ b/package.json
@@ -541,6 +541,16 @@
"type": "string",
"default": "",
"markdownDescription": "Format of timestamp printed before each line of Serial Monitor output. You can find list of all available placeholders [here](https://github.com/samsonjs/strftime#supported-specifiers)."
+ },
+ "arduino.analyzeOnOpen": {
+ "type": "boolean",
+ "default": true,
+ "markdownDescription": "When true, automatically run analysis when the project is opened. Only works when `arduino.analyzeOnSettingChange` is true."
+ },
+ "arduino.analyzeOnSettingChange": {
+ "type": "boolean",
+ "default": true,
+ "markdownDescription": "When true, automatically run analysis when board, configuration, or sketch settings are changed."
}
}
},
diff --git a/src/arduino/arduino.ts b/src/arduino/arduino.ts
index 9f7dabfe..3de74779 100644
--- a/src/arduino/arduino.ts
+++ b/src/arduino/arduino.ts
@@ -101,16 +101,18 @@ export class ArduinoApp {
}
}
- // set up event handling for IntelliSense analysis
- const requestAnalysis = async () => {
- if (isCompilerParserEnabled()) {
- await this._analysisManager.requestAnalysis();
- }
- };
- const dc = DeviceContext.getInstance();
- dc.onChangeBoard(requestAnalysis);
- dc.onChangeConfiguration(requestAnalysis);
- dc.onChangeSketch(requestAnalysis);
+ if (this._settings.analyzeOnSettingChange) {
+ // set up event handling for IntelliSense analysis
+ const requestAnalysis = async () => {
+ if (isCompilerParserEnabled()) {
+ await this._analysisManager.requestAnalysis();
+ }
+ };
+ const dc = DeviceContext.getInstance();
+ dc.onChangeBoard(requestAnalysis);
+ dc.onChangeConfiguration(requestAnalysis);
+ dc.onChangeSketch(requestAnalysis);
+ }
}
/**
diff --git a/src/arduino/arduinoSettings.ts b/src/arduino/arduinoSettings.ts
index 7b82b8d8..e8f9bbba 100644
--- a/src/arduino/arduinoSettings.ts
+++ b/src/arduino/arduinoSettings.ts
@@ -23,6 +23,7 @@ export interface IArduinoSettings {
preferences: Map;
useArduinoCli: boolean;
defaultTimestampFormat: string;
+ analyzeOnSettingChange: boolean;
reloadPreferences(): void;
}
@@ -169,6 +170,10 @@ export class ArduinoSettings implements IArduinoSettings {
return this._defaultTimestampFormat;
}
+ public get analyzeOnSettingChange(): boolean {
+ return VscodeSettings.getInstance().analyzeOnSettingChange;
+ }
+
public reloadPreferences() {
this._preferences = util.parseConfigFile(this.preferencePath);
if (this.preferences.get("sketchbook.path")) {
diff --git a/src/arduino/vscodeSettings.ts b/src/arduino/vscodeSettings.ts
index 6a68fd02..ae2617d4 100644
--- a/src/arduino/vscodeSettings.ts
+++ b/src/arduino/vscodeSettings.ts
@@ -20,6 +20,8 @@ const configKeys = {
USE_ARDUINO_CLI: "arduino.useArduinoCli",
DISABLE_INTELLISENSE_AUTO_GEN: "arduino.disableIntelliSenseAutoGen",
DEFAULT_TIMESTAMP_FORMAT: "arduino.defaultTimestampFormat",
+ ANALYZE_ON_OPEN: "arduino.analyzeOnOpen",
+ ANALYZE_ON_SETTING_CHANGE: "arduino.analyzeOnSettingChange",
};
export interface IVscodeSettings {
@@ -37,6 +39,8 @@ export interface IVscodeSettings {
useArduinoCli: boolean;
disableIntelliSenseAutoGen: boolean;
defaultTimestampFormat: string;
+ analyzeOnOpen: boolean;
+ analyzeOnSettingChange: boolean;
updateAdditionalUrls(urls: string[]): void;
}
@@ -124,6 +128,14 @@ export class VscodeSettings implements IVscodeSettings {
return this.getConfigValue(configKeys.DEFAULT_TIMESTAMP_FORMAT);
}
+ public get analyzeOnOpen(): boolean {
+ return this.getConfigValue(configKeys.ANALYZE_ON_OPEN);
+ }
+
+ public get analyzeOnSettingChange(): boolean {
+ return this.getConfigValue(configKeys.ANALYZE_ON_SETTING_CHANGE);
+ }
+
public async updateAdditionalUrls(value) {
await this.setConfigValue(configKeys.ADDITIONAL_URLS, value, true);
}
diff --git a/src/arduinoActivator.ts b/src/arduinoActivator.ts
index cfcc8233..a593a311 100644
--- a/src/arduinoActivator.ts
+++ b/src/arduinoActivator.ts
@@ -10,6 +10,7 @@ import { ExampleManager } from "./arduino/exampleManager";
import { ExampleProvider } from "./arduino/exampleProvider";
import { LibraryManager } from "./arduino/libraryManager";
import { ProgrammerManager } from "./arduino/programmerManager";
+import { VscodeSettings } from "./arduino/vscodeSettings";
import ArduinoContext from "./arduinoContext";
import { DeviceContext } from "./deviceContext";
@@ -25,11 +26,22 @@ class ArduinoActivator {
const arduinoSettings = new ArduinoSettings();
await arduinoSettings.initialize();
const arduinoApp = new ArduinoApp(arduinoSettings);
- await arduinoApp.initialize();
+
+ // Initializing the app before the device context will cause a
+ // setting changed event that triggers analysis.
+ const analyzeOnOpen = VscodeSettings.getInstance().analyzeOnOpen;
+ if (analyzeOnOpen) {
+ await arduinoApp.initialize();
+ }
// TODO: After use the device.json config, should remove the dependency on the ArduinoApp object.
const deviceContext = DeviceContext.getInstance();
await deviceContext.loadContext();
+
+ if (!analyzeOnOpen) {
+ await arduinoApp.initialize();
+ }
+
// Show sketch status bar, and allow user to change sketch in config file
deviceContext.showStatusBar();
// Arduino board manager & library manager