wip allow lightbulb menu to specify different icons depending on the code actions

This commit is contained in:
Aiday Marlen Kyzy 2023-11-17 17:02:34 +01:00
parent 40648dd8c9
commit 4d4bcb9b34
No known key found for this signature in database
GPG key ID: 24A8B53DBD26FF4E
2 changed files with 37 additions and 4 deletions

View file

@ -22,7 +22,7 @@ import { ILanguageFeaturesService } from 'vs/editor/common/services/languageFeat
import { ApplyCodeActionReason, applyCodeAction } from 'vs/editor/contrib/codeAction/browser/codeAction';
import { CodeActionKeybindingResolver } from 'vs/editor/contrib/codeAction/browser/codeActionKeybindingResolver';
import { toMenuItems } from 'vs/editor/contrib/codeAction/browser/codeActionMenu';
import { LightBulbWidget } from 'vs/editor/contrib/codeAction/browser/lightBulbWidget';
import { LightBulbMenuIconMode, LightBulbWidget } from 'vs/editor/contrib/codeAction/browser/lightBulbWidget';
import { MessageController } from 'vs/editor/contrib/message/browser/messageController';
import { localize } from 'vs/nls';
import { IActionListDelegate } from 'vs/platform/actionWidget/browser/actionList';
@ -260,6 +260,19 @@ export class CodeActionController extends Disposable implements IEditorContribut
return;
}
console.log('actionsToShow : ', actionsToShow);
let lightbulbMode = LightBulbMenuIconMode.Standard;
actionsToShow.forEach(action => {
if (action.action.isAI && lightbulbMode === LightBulbMenuIconMode.Standard) {
lightbulbMode = LightBulbMenuIconMode.AI;
}
if (action.action.isAI && lightbulbMode === LightBulbMenuIconMode.AI) {
lightbulbMode = LightBulbMenuIconMode.StandardAI;
}
});
console.log('lightbulbMode : ', lightbulbMode);
this._lightBulbWidget.rawValue?.updateLightBulbTitleAndIcon(lightbulbMode);
const anchor = Position.isIPosition(at) ? this.toCoords(at) : at;
const delegate: IActionListDelegate<CodeActionItem> = {

View file

@ -42,6 +42,12 @@ namespace LightBulbState {
export type State = typeof Hidden | Showing;
}
export enum LightBulbMenuIconMode {
Standard,
StandardAI,
AI
}
export class LightBulbWidget extends Disposable implements IContentWidget {
public static readonly ID = 'editor.contrib.lightbulbWidget';
@ -124,7 +130,7 @@ export class LightBulbWidget extends Disposable implements IContentWidget {
this._preferredKbLabel = keybindingService.lookupKeybinding(autoFixCommandId)?.getLabel() ?? undefined;
this._quickFixKbLabel = keybindingService.lookupKeybinding(quickFixCommandId)?.getLabel() ?? undefined;
this._updateLightBulbTitleAndIcon();
this.updateLightBulbTitleAndIcon();
}));
}
@ -204,10 +210,24 @@ export class LightBulbWidget extends Disposable implements IContentWidget {
private set state(value) {
this._state = value;
this._updateLightBulbTitleAndIcon();
this.updateLightBulbTitleAndIcon();
}
private _updateLightBulbTitleAndIcon(): void {
public updateLightBulbTitleAndIcon(iconMode: LightBulbMenuIconMode = LightBulbMenuIconMode.Standard): void {
if (iconMode !== LightBulbMenuIconMode.Standard) {
this._domNode.classList.remove(...ThemeIcon.asClassNameArray(Codicon.lightbulbAutofix));
this._domNode.classList.remove(...ThemeIcon.asClassNameArray(Codicon.lightBulb));
if (iconMode === LightBulbMenuIconMode.StandardAI) {
this._domNode.classList.add(...ThemeIcon.asClassNameArray(Codicon.alert));
}
if (iconMode === LightBulbMenuIconMode.AI) {
this._domNode.classList.add(...ThemeIcon.asClassNameArray(Codicon.sparkle));
}
return;
}
if (this.state.type === LightBulbState.Type.Showing && this.state.actions.hasAutoFix) {
// update icon
this._domNode.classList.remove(...ThemeIcon.asClassNameArray(Codicon.lightBulb));