From 09243ff74d36658bc555e78bf92ba5de0b23a244 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miro=20Sp=C3=B6nemann?= Date: Wed, 18 Sep 2019 09:46:07 +0200 Subject: [PATCH] Added JSON-RPC message to send the board configuration to the language server --- .../arduino-language-client-contribution.ts | 37 ++++++++++++++++--- 1 file changed, 32 insertions(+), 5 deletions(-) diff --git a/arduino-ide-extension/src/browser/language/arduino-language-client-contribution.ts b/arduino-ide-extension/src/browser/language/arduino-language-client-contribution.ts index e3c1cecc..774665b8 100644 --- a/arduino-ide-extension/src/browser/language/arduino-language-client-contribution.ts +++ b/arduino-ide-extension/src/browser/language/arduino-language-client-contribution.ts @@ -1,18 +1,45 @@ -import { injectable } from 'inversify'; -import { BaseLanguageClientContribution } from '@theia/languages/lib/browser'; +import { injectable, inject, postConstruct } from 'inversify'; +import { BaseLanguageClientContribution, NotificationType } from '@theia/languages/lib/browser'; +import { BoardsServiceClientImpl } from '../boards/boards-service-client-impl'; +import { BoardsConfig } from '../boards/boards-config'; + +const SELECTED_BOARD = new NotificationType('arduino/selectedBoard'); @injectable() export class ArduinoLanguageClientContribution extends BaseLanguageClientContribution { - readonly id = 'ino' - readonly name = 'Arduino' + readonly id = 'ino'; + readonly name = 'Arduino'; protected get documentSelector(): string[] { return ['ino']; } protected get globPatterns() { - return ['**/*.ino'] + return ['**/*.ino']; + } + + private cancelationToken?: CancelationToken; + + @inject(BoardsServiceClientImpl) + protected readonly boardsServiceClient: BoardsServiceClientImpl; + + @postConstruct() + protected init() { + this.boardsServiceClient.onBoardsConfigChanged(this.selectBoard.bind(this)); + } + + async selectBoard(config: BoardsConfig.Config): Promise { + // The board configuration may change multiple times before the language client is activated. + const token: CancelationToken = {}; + this.cancelationToken = token; + const lc = await this.languageClient; + if (this.cancelationToken === token) { + lc.sendNotification(SELECTED_BOARD, config); + this.cancelationToken = undefined; + } } } + +type CancelationToken = {}