Skip to content

Commit 5695fd8

Browse files
Akos Kittakittaakos
Akos Kitta
authored andcommitted
fix: filtered undesired contributions: RTOS view
Signed-off-by: Akos Kitta <[email protected]>
1 parent d0e3838 commit 5695fd8

File tree

2 files changed

+88
-0
lines changed

2 files changed

+88
-0
lines changed

Diff for: arduino-ide-extension/src/node/arduino-ide-backend-module.ts

+8
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,8 @@ import { IsTempSketch } from './is-temp-sketch';
111111
import { rebindNsfwFileSystemWatcher } from './theia/filesystem/nsfw-watcher/nsfw-bindings';
112112
import { MessagingContribution } from './theia/core/messaging-contribution';
113113
import { MessagingService } from '@theia/core/lib/node/messaging/messaging-service';
114+
import { HostedPluginReader } from './theia/plugin-ext/plugin-reader';
115+
import { HostedPluginReader as TheiaHostedPluginReader } from '@theia/plugin-ext/lib/hosted/node/plugin-reader';
114116

115117
export default new ContainerModule((bind, unbind, isBound, rebind) => {
116118
bind(BackendApplication).toSelf().inSingletonScope();
@@ -384,6 +386,12 @@ export default new ContainerModule((bind, unbind, isBound, rebind) => {
384386
rebind(MessagingService.Identifier)
385387
.to(MessagingContribution)
386388
.inSingletonScope();
389+
390+
// Removed undesired contributions from VS Code extensions
391+
// Such as the RTOS view from the `cortex-debug` extension
392+
// https://github.com/arduino/arduino-ide/pull/1706#pullrequestreview-1195595080
393+
bind(HostedPluginReader).toSelf().inSingletonScope();
394+
rebind(TheiaHostedPluginReader).toService(HostedPluginReader);
387395
});
388396

389397
function bindChildLogger(bind: interfaces.Bind, name: string): void {
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
import { injectable } from '@theia/core/shared/inversify';
2+
import type {
3+
PluginContribution,
4+
PluginPackage,
5+
} from '@theia/plugin-ext/lib/common/plugin-protocol';
6+
import { HostedPluginReader as TheiaHostedPluginReader } from '@theia/plugin-ext/lib/hosted/node/plugin-reader';
7+
8+
@injectable()
9+
export class HostedPluginReader extends TheiaHostedPluginReader {
10+
override readContribution(
11+
plugin: PluginPackage
12+
): PluginContribution | undefined {
13+
const scanner = this.scanner.getScanner(plugin);
14+
const contributions = scanner.getContribution(plugin);
15+
return this.filterContribution(plugin.name, contributions);
16+
}
17+
private filterContribution(
18+
pluginName: string,
19+
contributions: PluginContribution | undefined
20+
): PluginContribution | undefined {
21+
if (!contributions) {
22+
return contributions;
23+
}
24+
const filter = pluginFilters.get(pluginName);
25+
return filter ? filter(contributions) : contributions;
26+
}
27+
}
28+
29+
type PluginContributionFilter = (
30+
contribution: PluginContribution
31+
) => PluginContribution | undefined;
32+
const cortexDebugFilter: PluginContributionFilter = (
33+
contribution: PluginContribution
34+
) => {
35+
if (contribution.viewsContainers) {
36+
for (const location of Object.keys(contribution.viewsContainers)) {
37+
const viewContainers = contribution.viewsContainers[location];
38+
for (let i = 0; i < viewContainers.length; i++) {
39+
const viewContainer = viewContainers[i];
40+
if (
41+
viewContainer.id === 'cortex-debug' &&
42+
viewContainer.title === 'RTOS'
43+
) {
44+
viewContainers.splice(i, 1);
45+
}
46+
}
47+
}
48+
}
49+
if (contribution.views) {
50+
for (const location of Object.keys(contribution.views)) {
51+
if (location === 'cortex-debug') {
52+
const views = contribution.views[location];
53+
for (let i = 0; i < views.length; i++) {
54+
const view = views[i];
55+
if (view.id === 'cortex-debug.rtos') {
56+
views.splice(i, 1);
57+
}
58+
}
59+
}
60+
}
61+
}
62+
if (contribution.menus) {
63+
for (const location of Object.keys(contribution.menus)) {
64+
if (location === 'commandPalette') {
65+
const menus = contribution.menus[location];
66+
for (let i = 0; i < menus.length; i++) {
67+
const menu = menus[i];
68+
if (menu.command === 'cortex-debug.rtos.toggleRTOSPanel') {
69+
menu.when = 'false';
70+
}
71+
}
72+
}
73+
}
74+
}
75+
return contribution;
76+
};
77+
78+
const pluginFilters = new Map<string, PluginContributionFilter>([
79+
['cortex-debug', cortexDebugFilter],
80+
]);

0 commit comments

Comments
 (0)