diff --git a/package.json b/package.json index 932f730..b19b5aa 100644 --- a/package.json +++ b/package.json @@ -122,6 +122,11 @@ "title": "Restart Language Server", "category": "Arduino" }, + { + "command": "arduino.languageserver.notifyBuildDidComplete", + "title": "Notify Build Did Complete", + "category": "Arduino" + }, { "command": "arduino.debug.start", "title": "Start Debug", diff --git a/src/extension.ts b/src/extension.ts index d07fb03..5e435ce 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -7,6 +7,7 @@ import deepmerge from 'deepmerge'; import { Mutex } from 'async-mutex'; import vscode, { ExtensionContext } from 'vscode'; import { LanguageClient, CloseAction, ErrorAction, InitializeError, Message, RevealOutputChannelOn } from 'vscode-languageclient'; +import { DidCompleteBuildNotification, DidCompleteBuildParams } from './protocol'; interface LanguageServerConfig { readonly lsPath: string; @@ -72,10 +73,10 @@ export function activate(context: ExtensionContext) { const started = await startLanguageServer(context, config); languageServerIsRunning = started; return languageServerIsRunning ? config.board.fqbn : undefined; - } catch (e) { - console.log(e); + } catch (err) { + console.error('Failed to start the language server.', err); languageServerIsRunning = false; - throw e; + throw err; } finally { unlock(); } @@ -94,7 +95,14 @@ export function activate(context: ExtensionContext) { return vscode.commands.executeCommand('arduino.languageserver.start', latestConfig); } }), - vscode.commands.registerCommand('arduino.debug.start', (config: DebugConfig) => startDebug(context, config)) + vscode.commands.registerCommand('arduino.debug.start', (config: DebugConfig) => startDebug(context, config)), + vscode.commands.registerCommand('arduino.languageserver.notifyBuildDidComplete', (params: DidCompleteBuildParams) => { + if (languageClient) { + languageClient.sendNotification(DidCompleteBuildNotification.TYPE, params); + } else { + vscode.window.showWarningMessage('Language server is not running.'); + } + }) ); } @@ -108,8 +116,7 @@ async function startDebug(_: ExtensionContext, config: DebugConfig): Promise`); + showError(err); } if (!info) { return false; @@ -190,7 +198,7 @@ async function startLanguageServer(context: ExtensionContext, config: LanguageSe async function buildLanguageClient(config: LanguageServerConfig): Promise { const { lsPath: command, clangdPath, cliDaemonAddr, cliDaemonInstance, board, flags, env, log } = config; - const args = ['-clangd', clangdPath, '-cli-daemon-addr', cliDaemonAddr, '-cli-daemon-instance', cliDaemonInstance, '-fqbn', board.fqbn]; + const args = ['-clangd', clangdPath, '-cli-daemon-addr', cliDaemonAddr, '-cli-daemon-instance', cliDaemonInstance, '-fqbn', board.fqbn, '-skip-libraries-discovery-on-rebuild']; if (board.name) { args.push('-board-name', board.name); } @@ -252,6 +260,12 @@ async function buildLanguageClient(config: LanguageServerConfig): Promise('ino/didCompleteBuild'); +}