Skip to content

Commit 0363041

Browse files
authored
Merge pull request #130 from bcmi-labs/cli-0.11.0-rc1-62-g72c9655f
0.0.7 RC build
2 parents fc0fe21 + 4c4043b commit 0363041

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

53 files changed

+1654
-905
lines changed

README.md

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,17 @@ This project is built on [GitHub Actions](https://github.com/bcmi-labs/arduino-e
8383
git push origin 1.2.3
8484
```
8585

86+
### FAQ
87+
88+
- Q: Can I manually change the version of the [`arduino-cli`](https://github.com/arduino/arduino-cli/) used by the IDE?
89+
- A: Yes. It is possible but not recommended. The CLI exposes a set of functionality via [gRPC](https://github.com/arduino/arduino-cli/tree/master/rpc) and the IDE uses this API to communicate with the CLI. Before we build a new version of IDE, we pin a specific version of CLI and use the corresponding `proto` files to generate TypeScript modules for gRPC. This means, a particular version of IDE is compliant only with the pinned version of CLI. Mismatching IDE and CLI versions might not be able to communicate with each other. This could cause unpredictable IDE behavior.
90+
91+
- Q: I have understood that not all versions of the CLI is compatible with my version of IDE but how can I manually update the `arduino-cli` inside the IDE?
92+
- A: [Get](https://arduino.github.io/arduino-cli/installation) the desired version of `arduino-cli` for your platform and manually replace the one inside the IDE. The CLI can be found inside the IDE at:
93+
- Windows: `C:\path\to\Arduino Pro IDE\resources\app\node_modules\arduino-ide-extension\build\arduino-cli.exe`,
94+
- macOS: `/path/to/Arduino Pro IDE.app/Contents/Resources/app/node_modules/arduino-ide-extension/build/arduino-cli`, and
95+
- Linux: `/path/to/Arduino Pro IDE/resources/app/node_modules/arduino-ide-extension/build/arduino-cli`.
96+
8697
### Architecture overview
8798

8899
The Pro IDE consists of three major parts:

arduino-ide-extension/scripts/download-cli.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010

1111
(() => {
1212

13-
const DEFAULT_VERSION = '0.11.0'; // require('moment')().format('YYYYMMDD');
13+
const DEFAULT_VERSION = '0.12.0-rc2'; // require('moment')().format('YYYYMMDD');
1414

1515
const path = require('path');
1616
const shell = require('shelljs');

arduino-ide-extension/src/browser/arduino-frontend-contribution.tsx

Lines changed: 66 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -1,49 +1,50 @@
1-
import * as React from 'react';
2-
import { injectable, inject, postConstruct } from 'inversify';
3-
import URI from '@theia/core/lib/common/uri';
4-
import { MessageService } from '@theia/core/lib/common/message-service';
5-
import { CommandContribution, CommandRegistry } from '@theia/core/lib/common/command';
6-
import { TabBarToolbarContribution, TabBarToolbarRegistry } from '@theia/core/lib/browser/shell/tab-bar-toolbar';
7-
import { BoardsService, BoardsServiceClient, CoreService, SketchesService, ToolOutputServiceClient, Port } from '../common/protocol';
8-
import { ArduinoCommands } from './arduino-commands';
9-
import { BoardsServiceClientImpl } from './boards/boards-service-client-impl';
10-
import { SelectionService, MenuContribution, MenuModelRegistry, MAIN_MENU_BAR } from '@theia/core';
11-
import { ArduinoToolbar } from './toolbar/arduino-toolbar';
12-
import { EditorManager, EditorMainMenu } from '@theia/editor/lib/browser';
1+
import { MAIN_MENU_BAR, MenuContribution, MenuModelRegistry, SelectionService } from '@theia/core';
132
import {
14-
ContextMenuRenderer, StatusBar, StatusBarAlignment, FrontendApplicationContribution,
15-
FrontendApplication, KeybindingContribution, KeybindingRegistry, OpenerService
3+
ContextMenuRenderer,
4+
FrontendApplication, FrontendApplicationContribution,
5+
OpenerService, StatusBar, StatusBarAlignment
166
} from '@theia/core/lib/browser';
7+
import { ColorContribution } from '@theia/core/lib/browser/color-application-contribution';
8+
import { ColorRegistry } from '@theia/core/lib/browser/color-registry';
9+
import { CommonMenus } from '@theia/core/lib/browser/common-frontend-contribution';
10+
import { TabBarToolbarContribution, TabBarToolbarRegistry } from '@theia/core/lib/browser/shell/tab-bar-toolbar';
11+
import { CommandContribution, CommandRegistry } from '@theia/core/lib/common/command';
12+
import { MessageService } from '@theia/core/lib/common/message-service';
13+
import URI from '@theia/core/lib/common/uri';
14+
import { EditorMainMenu, EditorManager } from '@theia/editor/lib/browser';
1715
import { FileDialogService } from '@theia/filesystem/lib/browser/file-dialog';
1816
import { FileSystem } from '@theia/filesystem/lib/common';
19-
import { CommonMenus } from '@theia/core/lib/browser/common-frontend-contribution';
17+
import { ProblemContribution } from '@theia/markers/lib/browser/problem/problem-contribution';
2018
import { MonacoMenus } from '@theia/monaco/lib/browser/monaco-menu';
21-
import { TerminalMenus } from '@theia/terminal/lib/browser/terminal-frontend-contribution';
22-
import { BoardsConfigDialog } from './boards/boards-config-dialog';
23-
import { BoardsToolBarItem } from './boards/boards-toolbar-item';
24-
import { BoardsConfig } from './boards/boards-config';
25-
import { MonitorConnection } from './monitor/monitor-connection';
26-
import { MonitorViewContribution } from './monitor/monitor-view-contribution';
27-
import { WorkspaceService } from './theia/workspace/workspace-service';
2819
import { FileNavigatorContribution } from '@theia/navigator/lib/browser/navigator-contribution';
29-
import { OutputContribution } from '@theia/output/lib/browser/output-contribution';
3020
import { OutlineViewContribution } from '@theia/outline-view/lib/browser/outline-view-contribution';
31-
import { ProblemContribution } from '@theia/markers/lib/browser/problem/problem-contribution';
21+
import { OutputContribution } from '@theia/output/lib/browser/output-contribution';
3222
import { ScmContribution } from '@theia/scm/lib/browser/scm-contribution';
3323
import { SearchInWorkspaceFrontendContribution } from '@theia/search-in-workspace/lib/browser/search-in-workspace-frontend-contribution';
34-
import { EditorMode } from './editor-mode';
35-
import { ColorContribution } from '@theia/core/lib/browser/color-application-contribution';
36-
import { ColorRegistry } from '@theia/core/lib/browser/color-registry';
24+
import { TerminalMenus } from '@theia/terminal/lib/browser/terminal-frontend-contribution';
25+
import { inject, injectable, postConstruct } from 'inversify';
26+
import * as React from 'react';
27+
import { MainMenuManager } from '../common/main-menu-manager';
28+
import { BoardsService, BoardsServiceClient, CoreService, Port, SketchesService, ToolOutputServiceClient } from '../common/protocol';
3729
import { ArduinoDaemon } from '../common/protocol/arduino-daemon';
3830
import { ConfigService } from '../common/protocol/config-service';
39-
import { BoardsDataStore } from './boards/boards-data-store';
40-
import { MainMenuManager } from '../common/main-menu-manager';
4131
import { FileSystemExt } from '../common/protocol/filesystem-ext';
32+
import { ArduinoCommands } from './arduino-commands';
33+
import { BoardsConfig } from './boards/boards-config';
34+
import { BoardsConfigDialog } from './boards/boards-config-dialog';
35+
import { BoardsDataStore } from './boards/boards-data-store';
36+
import { BoardsServiceClientImpl } from './boards/boards-service-client-impl';
37+
import { BoardsToolBarItem } from './boards/boards-toolbar-item';
38+
import { EditorMode } from './editor-mode';
4239
import { ArduinoMenus } from './menu/arduino-menus';
40+
import { MonitorConnection } from './monitor/monitor-connection';
41+
import { MonitorViewContribution } from './monitor/monitor-view-contribution';
42+
import { WorkspaceService } from './theia/workspace/workspace-service';
43+
import { ArduinoToolbar } from './toolbar/arduino-toolbar';
4344

4445
@injectable()
4546
export class ArduinoFrontendContribution implements FrontendApplicationContribution,
46-
TabBarToolbarContribution, CommandContribution, MenuContribution, KeybindingContribution, ColorContribution {
47+
TabBarToolbarContribution, CommandContribution, MenuContribution, ColorContribution {
4748

4849
@inject(MessageService)
4950
protected readonly messageService: MessageService;
@@ -255,17 +256,25 @@ export class ArduinoFrontendContribution implements FrontendApplicationContribut
255256
});
256257
}
257258

258-
registerKeybindings(keybindings: KeybindingRegistry): void {
259-
keybindings.unregisterKeybinding('ctrlcmd+n'); // Unregister the keybinding for `New File`, will be used by `New Sketch`. (eclipse-theia/theia#8170)
260-
}
261-
262259
protected async openSketchFiles(uri: string): Promise<void> {
263-
const uris = await this.sketchService.getSketchFiles(uri);
264-
for (const uri of uris) {
265-
await this.editorManager.open(new URI(uri));
260+
try {
261+
const sketch = await this.sketchService.loadSketch(uri);
262+
const { mainFileUri, otherSketchFileUris, additionalFileUris } = sketch;
263+
for (const uri of [mainFileUri, ...otherSketchFileUris, ...additionalFileUris]) {
264+
await this.ensureOpened(uri);
265+
}
266+
await this.ensureOpened(mainFileUri, true);
267+
} catch (e) {
268+
console.error(e);
269+
const message = e instanceof Error ? e.message : JSON.stringify(e);
270+
this.messageService.error(message);
266271
}
267-
if (uris.length) {
268-
await this.editorManager.open(new URI(uris[0])); // Make sure the sketch file has the focus.
272+
}
273+
274+
protected async ensureOpened(uri: string, forceOpen: boolean = false): Promise<any> {
275+
const widget = this.editorManager.all.find(widget => widget.editor.uri.toString() === uri);
276+
if (!widget || forceOpen) {
277+
return this.editorManager.open(new URI(uri));
269278
}
270279
}
271280

@@ -313,6 +322,24 @@ export class ArduinoFrontendContribution implements FrontendApplicationContribut
313322
hc: 'activityBar.inactiveForeground'
314323
},
315324
description: 'Background color of the toolbar items when hovering over them. Such as Upload, Verify, etc.'
325+
},
326+
{
327+
id: 'arduino.output.foreground',
328+
defaults: {
329+
dark: 'editor.foreground',
330+
light: 'editor.foreground',
331+
hc: 'editor.foreground'
332+
},
333+
description: 'Color of the text in the Output view.'
334+
},
335+
{
336+
id: 'arduino.output.background',
337+
defaults: {
338+
dark: 'editor.background',
339+
light: 'editor.background',
340+
hc: 'editor.background'
341+
},
342+
description: 'Background color of the Output view.'
316343
}
317344
);
318345
}

arduino-ide-extension/src/browser/arduino-ide-frontend-module.ts

Lines changed: 28 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import { ContainerModule } from 'inversify';
33
import { WidgetFactory } from '@theia/core/lib/browser/widget-manager';
44
import { CommandContribution } from '@theia/core/lib/common/command';
55
import { bindViewContribution } from '@theia/core/lib/browser/shell/view-contribution';
6-
import { TabBarToolbarContribution } from '@theia/core/lib/browser/shell/tab-bar-toolbar';
6+
import { TabBarToolbarContribution, TabBarToolbarFactory } from '@theia/core/lib/browser/shell/tab-bar-toolbar';
77
import { WebSocketConnectionProvider } from '@theia/core/lib/browser/messaging/ws-connection-provider';
88
import { FrontendApplicationContribution, FrontendApplication as TheiaFrontendApplication } from '@theia/core/lib/browser/frontend-application'
99
import { LanguageGrammarDefinitionContribution } from '@theia/monaco/lib/browser/textmate';
@@ -15,6 +15,7 @@ import { ArduinoLanguageGrammarContribution } from './language/arduino-language-
1515
import { LibraryService, LibraryServicePath } from '../common/protocol/library-service';
1616
import { BoardsService, BoardsServicePath, BoardsServiceClient } from '../common/protocol/boards-service';
1717
import { SketchesService, SketchesServicePath } from '../common/protocol/sketches-service';
18+
import { SketchesServiceClientImpl } from '../common/protocol/sketches-service-client-impl';
1819
import { CoreService, CoreServicePath, CoreServiceClient } from '../common/protocol/core-service';
1920
import { BoardsListWidget } from './boards/boards-list-widget';
2021
import { BoardsListWidgetFrontendContribution } from './boards/boards-widget-frontend-contribution';
@@ -38,7 +39,6 @@ import { MonacoStatusBarContribution } from './theia/monaco/monaco-status-bar-co
3839
import {
3940
ApplicationShell as TheiaApplicationShell,
4041
ShellLayoutRestorer as TheiaShellLayoutRestorer,
41-
KeybindingContribution,
4242
CommonFrontendContribution as TheiaCommonFrontendContribution,
4343
KeybindingRegistry as TheiaKeybindingRegistry
4444
} from '@theia/core/lib/browser';
@@ -86,7 +86,11 @@ import { BoardsDataMenuUpdater } from './boards/boards-data-menu-updater';
8686
import { BoardsDataStore } from './boards/boards-data-store';
8787
import { ILogger } from '@theia/core';
8888
import { FileSystemExt, FileSystemExtPath } from '../common/protocol/filesystem-ext';
89-
import { WorkspaceFrontendContribution as TheiaWorkspaceFrontendContribution, FileMenuContribution as TheiaFileMenuContribution } from '@theia/workspace/lib/browser';
89+
import {
90+
WorkspaceFrontendContribution as TheiaWorkspaceFrontendContribution,
91+
FileMenuContribution as TheiaFileMenuContribution,
92+
WorkspaceCommandContribution as TheiaWorkspaceCommandContribution
93+
} from '@theia/workspace/lib/browser';
9094
import { WorkspaceFrontendContribution, ArduinoFileMenuContribution } from './theia/workspace/workspace-frontend-contribution';
9195
import { Contribution } from './contributions/contribution';
9296
import { NewSketch } from './contributions/new-sketch';
@@ -99,12 +103,20 @@ import { UploadSketch } from './contributions/upload-sketch';
99103
import { CommonFrontendContribution } from './theia/core/common-frontend-contribution';
100104
import { EditContributions } from './contributions/edit-contributions';
101105
import { OpenSketchExternal } from './contributions/open-sketch-external';
102-
import { PreferencesContribution as TheiaPreferencesContribution } from '@theia/preferences/lib/browser/preference-contribution';
103-
import { PreferencesContribution } from './theia/preferences/preference-contribution';
106+
import { PreferencesContribution as TheiaPreferencesContribution } from '@theia/preferences/lib/browser/preferences-contribution';
107+
import { PreferencesContribution } from './theia/preferences/preferences-contribution';
104108
import { QuitApp } from './contributions/quit-app';
105109
import { SketchControl } from './contributions/sketch-control';
106110
import { Settings } from './contributions/settings';
107111
import { KeybindingRegistry } from './theia/core/keybindings';
112+
import { WorkspaceCommandContribution } from './theia/workspace/workspace-commands';
113+
import { WorkspaceDeleteHandler as TheiaWorkspaceDeleteHandler } from '@theia/workspace/lib/browser/workspace-delete-handler';
114+
import { WorkspaceDeleteHandler } from './theia/workspace/workspace-delete-handler';
115+
import { TabBarToolbar } from './theia/core/tab-bar-toolbar';
116+
import { EditorWidgetFactory as TheiaEditorWidgetFactory } from '@theia/editor/lib/browser/editor-widget-factory';
117+
import { EditorWidgetFactory } from './theia/editor/editor-widget-factory';
118+
import { OutputWidget as TheiaOutputWidget } from '@theia/output/lib/browser/output-widget';
119+
import { OutputWidget } from './theia/output/output-widget';
108120

109121
const ElementQueries = require('css-element-queries/src/ElementQueries');
110122

@@ -124,7 +136,6 @@ export default new ContainerModule((bind, unbind, isBound, rebind) => {
124136
bind(CommandContribution).toService(ArduinoFrontendContribution);
125137
bind(MenuContribution).toService(ArduinoFrontendContribution);
126138
bind(TabBarToolbarContribution).toService(ArduinoFrontendContribution);
127-
bind(KeybindingContribution).toService(ArduinoFrontendContribution);
128139
bind(FrontendApplicationContribution).toService(ArduinoFrontendContribution);
129140
bind(ColorContribution).toService(ArduinoFrontendContribution);
130141

@@ -151,6 +162,7 @@ export default new ContainerModule((bind, unbind, isBound, rebind) => {
151162

152163
// Sketch list service
153164
bind(SketchesService).toDynamicValue(context => WebSocketConnectionProvider.createProxy(context.container, SketchesServicePath)).inSingletonScope();
165+
bind(SketchesServiceClientImpl).toSelf().inSingletonScope();
154166

155167
// Config service
156168
bind(ConfigService).toDynamicValue(context => {
@@ -281,6 +293,16 @@ export default new ContainerModule((bind, unbind, isBound, rebind) => {
281293
rebind(TheiaCommonFrontendContribution).to(CommonFrontendContribution).inSingletonScope();
282294
rebind(TheiaPreferencesContribution).to(PreferencesContribution).inSingletonScope();
283295
rebind(TheiaKeybindingRegistry).to(KeybindingRegistry).inSingletonScope();
296+
rebind(TheiaWorkspaceCommandContribution).to(WorkspaceCommandContribution).inSingletonScope();
297+
rebind(TheiaWorkspaceDeleteHandler).to(WorkspaceDeleteHandler).inSingletonScope();
298+
rebind(TheiaEditorWidgetFactory).to(EditorWidgetFactory).inSingletonScope();
299+
rebind(TabBarToolbarFactory).toFactory(({ container: parentContainer }) => () => {
300+
const container = parentContainer.createChild();
301+
container.bind(TabBarToolbar).toSelf().inSingletonScope();
302+
return container.get(TabBarToolbar);
303+
});
304+
bind(OutputWidget).toSelf().inSingletonScope();
305+
rebind(TheiaOutputWidget).toService(OutputWidget);
284306

285307
// Show a disconnected status bar, when the daemon is not available
286308
bind(ApplicationConnectionStatusContribution).toSelf().inSingletonScope();

0 commit comments

Comments
 (0)