Skip to content
This repository was archived by the owner on Oct 1, 2024. It is now read-only.

Commit 9dd6824

Browse files
committed
Adds a ts api for third party extensions
1 parent 9544a5f commit 9dd6824

File tree

4 files changed

+56
-6
lines changed

4 files changed

+56
-6
lines changed

src/arduino/arduino.ts

+5-2
Original file line numberDiff line numberDiff line change
@@ -105,8 +105,11 @@ export class ArduinoApp {
105105
if (this._settings.analyzeOnSettingChange) {
106106
// set up event handling for IntelliSense analysis
107107
const requestAnalysis = async () => {
108-
if (isCompilerParserEnabled()) {
109-
await this._analysisManager.requestAnalysis();
108+
// Check again in case the setting was disabled after initialization
109+
if (this._settings.analyzeOnSettingChange) {
110+
if (isCompilerParserEnabled()) {
111+
await this._analysisManager.requestAnalysis();
112+
}
110113
}
111114
};
112115
const dc = DeviceContext.getInstance();

src/arduino/boardManager.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -508,7 +508,7 @@ export class BoardManager {
508508
}
509509
}
510510

511-
private listBoards(): IBoard[] {
511+
public listBoards(): IBoard[] {
512512
const result = [];
513513
this._boards.forEach((b) => {
514514
result.push(b);

src/arduino/programmerManager.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ export class ProgrammerManager {
5757
DeviceContext.getInstance().programmer = this._programmerValue;
5858
}
5959

60-
private setProgrammerValue(programmerName: string | null) {
60+
public setProgrammerValue(programmerName: string | null) {
6161
const programmer = this._arduinoApp.boardManager.installedProgrammers.get(programmerName);
6262
this._programmerValue = this._settings.useArduinoCli ? programmerName : programmer ? programmer.key : programmerName;
6363
this._programmerDisplayName = this._programmerValue
@@ -71,7 +71,7 @@ export class ProgrammerManager {
7171
return programmer ? programmer.displayName : programmerName;
7272
}
7373

74-
private getAvailableProgrammers(currentBoard: IBoard): IProgrammer[] {
74+
public getAvailableProgrammers(currentBoard: IBoard): IProgrammer[] {
7575
if (!currentBoard || !currentBoard.platform) {
7676
return [];
7777
}

src/extension.ts

+48-1
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ import * as vscode from "vscode";
1010
import * as constants from "./common/constants";
1111
const arduinoContentProviderModule =
1212
impor("./arduino/arduinoContentProvider") as typeof import ("./arduino/arduinoContentProvider");
13-
import { IBoard } from "./arduino/package";
13+
import { IBoard, IProgrammer } from "./arduino/package";
1414
import { VscodeSettings } from "./arduino/vscodeSettings";
1515
const arduinoActivatorModule = impor("./arduinoActivator") as typeof import ("./arduinoActivator");
1616
const arduinoContextModule = impor("./arduinoContext") as typeof import ("./arduinoContext");
@@ -26,6 +26,7 @@ const completionProviderModule = impor("./langService/completionProvider") as ty
2626
import { BuildMode } from "./arduino/arduino";
2727
import * as Logger from "./logger/logger";
2828
import { SerialMonitor } from "./serialmonitor/serialMonitor";
29+
import { ArduinoContentProvider } from "./arduino/arduinoContentProvider";
2930
const usbDetectorModule = impor("./serialmonitor/usbDetector") as typeof import ("./serialmonitor/usbDetector");
3031

3132
export async function activate(context: vscode.ExtensionContext) {
@@ -383,10 +384,17 @@ export async function activate(context: vscode.ExtensionContext) {
383384
}
384385
Logger.traceUserData("end-activate-extension", { correlationId: activeGuid });
385386

387+
// Makes the provider available to the programmatic api
388+
const provider: {
389+
arduinoManagerProvider?: ArduinoContentProvider,
390+
} = {};
391+
386392
setTimeout(async () => {
387393
const arduinoManagerProvider = new arduinoContentProviderModule.ArduinoContentProvider(context.extensionPath);
388394
await arduinoManagerProvider.initialize();
389395

396+
provider.arduinoManagerProvider = arduinoManagerProvider;
397+
390398
context.subscriptions.push(vscode.workspace.registerTextDocumentContentProvider(ARDUINO_MANAGER_PROTOCOL, arduinoManagerProvider));
391399
registerArduinoCommand("arduino.showBoardManager", async () => {
392400
const panel = vscode.window.createWebviewPanel("arduinoBoardManager", "Arduino Board Manager", vscode.ViewColumn.Two, {
@@ -447,6 +455,45 @@ export async function activate(context: vscode.ExtensionContext) {
447455
usbDetectorModule.UsbDetector.getInstance().initialize(context);
448456
usbDetectorModule.UsbDetector.getInstance().startListening();
449457
}, 200);
458+
459+
return {
460+
getCurrentBoard() {
461+
return arduinoContextModule.default.boardManager.currentBoard;
462+
},
463+
getBoardTypes() {
464+
arduinoContextModule.default.boardManager.listBoards();
465+
},
466+
changeBoardType(board: IBoard) {
467+
arduinoContextModule.default.boardManager.doChangeBoardType(board);
468+
provider.arduinoManagerProvider.update(LIBRARY_MANAGER_URI);
469+
provider.arduinoManagerProvider.update(EXAMPLES_URI);
470+
return { board: arduinoContextModule.default.boardManager.currentBoard };
471+
},
472+
installBoard: async (packageName: string, arch: string = "", version: string = "", showOutput: boolean = true) => {
473+
await arduinoContextModule.default.arduinoApp.installBoard(packageName, arch, version, showOutput)
474+
},
475+
getCurrentProgrammer() {
476+
return DeviceContext.getInstance().programmer;
477+
},
478+
getAvailableProgrammers(board: IBoard) {
479+
return arduinoContextModule.default.arduinoApp.programmerManager.getAvailableProgrammers(board)
480+
},
481+
selectProgrammer(programmer: IProgrammer) {
482+
if (!arduinoContextModule.default.arduinoApp.building) {
483+
try {
484+
arduinoContextModule.default.arduinoApp.programmerManager.setProgrammerValue(programmer.name);
485+
DeviceContext.getInstance().programmer = arduinoContextModule.default.arduinoApp.programmerManager.currentProgrammer;
486+
return true;
487+
} catch (ex) {
488+
return false;
489+
}
490+
}
491+
},
492+
selectSketch(relativeSketchPath: string) {
493+
deviceContext.sketch = relativeSketchPath;
494+
deviceContext.showStatusBar();
495+
},
496+
}
450497
}
451498

452499
export async function deactivate() {

0 commit comments

Comments
 (0)