mirror of
https://github.com/Microsoft/vscode
synced 2024-08-27 04:49:35 +00:00
wip allow lightbulb menu to specify different icons depending on the code actions
This commit is contained in:
parent
40648dd8c9
commit
4d4bcb9b34
|
@ -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> = {
|
||||
|
|
|
@ -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));
|
||||
|
|
Loading…
Reference in a new issue