Skip to content

Commit

Permalink
fix: filtered undesired contributions: RTOS view
Browse files Browse the repository at this point in the history
Signed-off-by: Akos Kitta <a.kitta@arduino.cc>
  • Loading branch information
Akos Kitta committed Nov 29, 2022
1 parent c217bed commit e58d3a7
Show file tree
Hide file tree
Showing 2 changed files with 88 additions and 0 deletions.
8 changes: 8 additions & 0 deletions arduino-ide-extension/src/node/arduino-ide-backend-module.ts
Original file line number Diff line number Diff line change
Expand Up @@ -111,6 +111,8 @@ import { IsTempSketch } from './is-temp-sketch';
import { rebindNsfwFileSystemWatcher } from './theia/filesystem/nsfw-watcher/nsfw-bindings';
import { MessagingContribution } from './theia/core/messaging-contribution';
import { MessagingService } from '@theia/core/lib/node/messaging/messaging-service';
import { HostedPluginReader } from './theia/plugin-ext/plugin-reader';
import { HostedPluginReader as TheiaHostedPluginReader } from '@theia/plugin-ext/lib/hosted/node/plugin-reader';

export default new ContainerModule((bind, unbind, isBound, rebind) => {
bind(BackendApplication).toSelf().inSingletonScope();
Expand Down Expand Up @@ -384,6 +386,12 @@ export default new ContainerModule((bind, unbind, isBound, rebind) => {
rebind(MessagingService.Identifier)
.to(MessagingContribution)
.inSingletonScope();

// Removed undesired contributions from VS Code extensions
// Such as the RTOS view from the `cortex-debug` extension
// https://github.com/arduino/arduino-ide/pull/1706#pullrequestreview-1195595080
bind(HostedPluginReader).toSelf().inSingletonScope();
rebind(TheiaHostedPluginReader).toService(HostedPluginReader);
});

function bindChildLogger(bind: interfaces.Bind, name: string): void {
Expand Down
80 changes: 80 additions & 0 deletions arduino-ide-extension/src/node/theia/plugin-ext/plugin-reader.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,80 @@
import { injectable } from '@theia/core/shared/inversify';
import type {
PluginContribution,
PluginPackage,
} from '@theia/plugin-ext/lib/common/plugin-protocol';
import { HostedPluginReader as TheiaHostedPluginReader } from '@theia/plugin-ext/lib/hosted/node/plugin-reader';

@injectable()
export class HostedPluginReader extends TheiaHostedPluginReader {
override readContribution(
plugin: PluginPackage
): PluginContribution | undefined {
const scanner = this.scanner.getScanner(plugin);
const contributions = scanner.getContribution(plugin);
return this.filterContribution(plugin.name, contributions);
}
private filterContribution(
pluginName: string,
contributions: PluginContribution | undefined
): PluginContribution | undefined {
if (!contributions) {
return contributions;
}
const filter = pluginFilters.get(pluginName);
return filter ? filter(contributions) : contributions;
}
}

type PluginContributionFilter = (
contribution: PluginContribution
) => PluginContribution | undefined;
const cortexDebugFilter: PluginContributionFilter = (
contribution: PluginContribution
) => {
if (contribution.viewsContainers) {
for (const location of Object.keys(contribution.viewsContainers)) {
const viewContainers = contribution.viewsContainers[location];
for (let i = 0; i < viewContainers.length; i++) {
const viewContainer = viewContainers[i];
if (
viewContainer.id === 'cortex-debug' &&
viewContainer.title === 'RTOS'
) {
viewContainers.splice(i, 1);
}
}
}
}
if (contribution.views) {
for (const location of Object.keys(contribution.views)) {
if (location === 'cortex-debug') {
const views = contribution.views[location];
for (let i = 0; i < views.length; i++) {
const view = views[i];
if (view.id === 'cortex-debug.rtos') {
views.splice(i, 1);
}
}
}
}
}
if (contribution.menus) {
for (const location of Object.keys(contribution.menus)) {
if (location === 'commandPalette') {
const menus = contribution.menus[location];
for (let i = 0; i < menus.length; i++) {
const menu = menus[i];
if (menu.command === 'cortex-debug.rtos.toggleRTOSPanel') {
menu.when = 'false';
}
}
}
}
}
return contribution;
};

const pluginFilters = new Map<string, PluginContributionFilter>([
['cortex-debug', cortexDebugFilter],
]);

0 comments on commit e58d3a7

Please sign in to comment.