mirror of
https://github.com/ckaczor/azuredatastudio.git
synced 2026-03-21 04:20:11 -04:00
Merge from vscode a5cf1da01d5db3d2557132be8d30f89c38019f6c (#8525)
* Merge from vscode a5cf1da01d5db3d2557132be8d30f89c38019f6c * remove files we don't want * fix hygiene * update distro * update distro * fix hygiene * fix strict nulls * distro * distro * fix tests * fix tests * add another edit * fix viewlet icon * fix azure dialog * fix some padding * fix more padding issues
This commit is contained in:
@@ -4,6 +4,7 @@
|
||||
*--------------------------------------------------------------------------------------------*/
|
||||
|
||||
import { IAnchor } from 'vs/base/browser/ui/contextview/contextview';
|
||||
import { IJSONSchema } from 'vs/base/common/jsonSchema';
|
||||
import { KeyCode, KeyMod } from 'vs/base/common/keyCodes';
|
||||
import { Lazy } from 'vs/base/common/lazy';
|
||||
import { Disposable } from 'vs/base/common/lifecycle';
|
||||
@@ -15,7 +16,7 @@ import { IPosition } from 'vs/editor/common/core/position';
|
||||
import { IEditorContribution } from 'vs/editor/common/editorCommon';
|
||||
import { EditorContextKeys } from 'vs/editor/common/editorContextKeys';
|
||||
import { CodeAction } from 'vs/editor/common/modes';
|
||||
import { CodeActionSet } from 'vs/editor/contrib/codeAction/codeAction';
|
||||
import { CodeActionSet, refactorCommandId, sourceActionCommandId, codeActionCommandId, organizeImportsCommandId, fixAllCommandId } from 'vs/editor/contrib/codeAction/codeAction';
|
||||
import { CodeActionUi } from 'vs/editor/contrib/codeAction/codeActionUi';
|
||||
import { MessageController } from 'vs/editor/contrib/message/messageController';
|
||||
import * as nls from 'vs/nls';
|
||||
@@ -29,7 +30,7 @@ import { IMarkerService } from 'vs/platform/markers/common/markers';
|
||||
import { INotificationService } from 'vs/platform/notification/common/notification';
|
||||
import { IEditorProgressService } from 'vs/platform/progress/common/progress';
|
||||
import { CodeActionModel, CodeActionsState, SUPPORTED_CODE_ACTIONS } from './codeActionModel';
|
||||
import { CodeActionAutoApply, CodeActionFilter, CodeActionKind, CodeActionTrigger } from './codeActionTrigger';
|
||||
import { CodeActionAutoApply, CodeActionFilter, CodeActionKind, CodeActionTrigger, CodeActionCommandArgs } from './types';
|
||||
|
||||
function contextKeyForSupportedActions(kind: CodeActionKind) {
|
||||
return ContextKeyExpr.regex(
|
||||
@@ -37,6 +38,33 @@ function contextKeyForSupportedActions(kind: CodeActionKind) {
|
||||
new RegExp('(\\s|^)' + escapeRegExpCharacters(kind.value) + '\\b'));
|
||||
}
|
||||
|
||||
const argsSchema: IJSONSchema = {
|
||||
type: 'object',
|
||||
required: ['kind'],
|
||||
defaultSnippets: [{ body: { kind: '' } }],
|
||||
properties: {
|
||||
'kind': {
|
||||
type: 'string',
|
||||
description: nls.localize('args.schema.kind', "Kind of the code action to run."),
|
||||
},
|
||||
'apply': {
|
||||
type: 'string',
|
||||
description: nls.localize('args.schema.apply', "Controls when the returned actions are applied."),
|
||||
default: CodeActionAutoApply.IfSingle,
|
||||
enum: [CodeActionAutoApply.First, CodeActionAutoApply.IfSingle, CodeActionAutoApply.Never],
|
||||
enumDescriptions: [
|
||||
nls.localize('args.schema.apply.first', "Always apply the first returned code action."),
|
||||
nls.localize('args.schema.apply.ifSingle', "Apply the first returned code action if it is the only one."),
|
||||
nls.localize('args.schema.apply.never', "Do not apply the returned code actions."),
|
||||
]
|
||||
},
|
||||
'preferred': {
|
||||
type: 'boolean',
|
||||
default: false,
|
||||
description: nls.localize('args.schema.preferred', "Controls if only preferred code actions should be returned."),
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
export class QuickFixController extends Disposable implements IEditorContribution {
|
||||
|
||||
@@ -78,7 +106,7 @@ export class QuickFixController extends Disposable implements IEditorContributio
|
||||
}
|
||||
}
|
||||
}
|
||||
}, contextMenuService, keybindingService))
|
||||
}, this._instantiationService))
|
||||
);
|
||||
}
|
||||
|
||||
@@ -87,7 +115,7 @@ export class QuickFixController extends Disposable implements IEditorContributio
|
||||
}
|
||||
|
||||
public showCodeActions(actions: CodeActionSet, at: IAnchor | IPosition) {
|
||||
return this._ui.getValue().showCodeActionList(actions, at);
|
||||
return this._ui.getValue().showCodeActionList(actions, at, { includeDisabledActions: false });
|
||||
}
|
||||
|
||||
public manualTriggerAtCurrentPosition(
|
||||
@@ -185,85 +213,34 @@ export class QuickFixAction extends EditorAction {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
class CodeActionCommandArgs {
|
||||
public static fromUser(arg: any, defaults: { kind: CodeActionKind, apply: CodeActionAutoApply }): CodeActionCommandArgs {
|
||||
if (!arg || typeof arg !== 'object') {
|
||||
return new CodeActionCommandArgs(defaults.kind, defaults.apply, false);
|
||||
}
|
||||
return new CodeActionCommandArgs(
|
||||
CodeActionCommandArgs.getKindFromUser(arg, defaults.kind),
|
||||
CodeActionCommandArgs.getApplyFromUser(arg, defaults.apply),
|
||||
CodeActionCommandArgs.getPreferredUser(arg));
|
||||
}
|
||||
|
||||
private static getApplyFromUser(arg: any, defaultAutoApply: CodeActionAutoApply) {
|
||||
switch (typeof arg.apply === 'string' ? arg.apply.toLowerCase() : '') {
|
||||
case 'first': return CodeActionAutoApply.First;
|
||||
case 'never': return CodeActionAutoApply.Never;
|
||||
case 'ifsingle': return CodeActionAutoApply.IfSingle;
|
||||
default: return defaultAutoApply;
|
||||
}
|
||||
}
|
||||
|
||||
private static getKindFromUser(arg: any, defaultKind: CodeActionKind) {
|
||||
return typeof arg.kind === 'string'
|
||||
? new CodeActionKind(arg.kind)
|
||||
: defaultKind;
|
||||
}
|
||||
|
||||
private static getPreferredUser(arg: any): boolean {
|
||||
return typeof arg.preferred === 'boolean'
|
||||
? arg.preferred
|
||||
: false;
|
||||
}
|
||||
|
||||
private constructor(
|
||||
public readonly kind: CodeActionKind,
|
||||
public readonly apply: CodeActionAutoApply,
|
||||
public readonly preferred: boolean,
|
||||
) { }
|
||||
}
|
||||
|
||||
export class CodeActionCommand extends EditorCommand {
|
||||
|
||||
static readonly Id = 'editor.action.codeAction';
|
||||
|
||||
constructor() {
|
||||
super({
|
||||
id: CodeActionCommand.Id,
|
||||
id: codeActionCommandId,
|
||||
precondition: ContextKeyExpr.and(EditorContextKeys.writable, EditorContextKeys.hasCodeActionsProvider),
|
||||
description: {
|
||||
description: `Trigger a code action`,
|
||||
args: [{
|
||||
name: 'args',
|
||||
schema: {
|
||||
'type': 'object',
|
||||
'required': ['kind'],
|
||||
'properties': {
|
||||
'kind': {
|
||||
'type': 'string'
|
||||
},
|
||||
'apply': {
|
||||
'type': 'string',
|
||||
'default': 'ifSingle',
|
||||
'enum': ['first', 'ifSingle', 'never']
|
||||
}
|
||||
}
|
||||
}
|
||||
}]
|
||||
description: 'Trigger a code action',
|
||||
args: [{ name: 'args', schema: argsSchema, }]
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public runEditorCommand(_accessor: ServicesAccessor, editor: ICodeEditor, userArg: any) {
|
||||
const args = CodeActionCommandArgs.fromUser(userArg, {
|
||||
public runEditorCommand(_accessor: ServicesAccessor, editor: ICodeEditor, userArgs: any) {
|
||||
const args = CodeActionCommandArgs.fromUser(userArgs, {
|
||||
kind: CodeActionKind.Empty,
|
||||
apply: CodeActionAutoApply.IfSingle,
|
||||
});
|
||||
return triggerCodeActionsForEditorSelection(editor, nls.localize('editor.action.quickFix.noneMessage', "No code actions available"),
|
||||
return triggerCodeActionsForEditorSelection(editor,
|
||||
typeof userArgs?.kind === 'string'
|
||||
? args.preferred
|
||||
? nls.localize('editor.action.codeAction.noneMessage.preferred.kind', "No preferred code actions for '{0}' available", userArgs.kind)
|
||||
: nls.localize('editor.action.codeAction.noneMessage.kind', "No code actions for '{0}' available", userArgs.kind)
|
||||
: args.preferred
|
||||
? nls.localize('editor.action.codeAction.noneMessage.preferred', "No preferred code actions available")
|
||||
: nls.localize('editor.action.codeAction.noneMessage', "No code actions available"),
|
||||
{
|
||||
kind: args.kind,
|
||||
include: args.kind,
|
||||
includeSourceActions: true,
|
||||
onlyIncludePreferredActions: args.preferred,
|
||||
},
|
||||
@@ -274,11 +251,9 @@ export class CodeActionCommand extends EditorCommand {
|
||||
|
||||
export class RefactorAction extends EditorAction {
|
||||
|
||||
static readonly Id = 'editor.action.refactor';
|
||||
|
||||
constructor() {
|
||||
super({
|
||||
id: RefactorAction.Id,
|
||||
id: refactorCommandId,
|
||||
label: nls.localize('refactor.label', "Refactor..."),
|
||||
alias: 'Refactor...',
|
||||
precondition: ContextKeyExpr.and(EditorContextKeys.writable, EditorContextKeys.hasCodeActionsProvider),
|
||||
@@ -290,7 +265,7 @@ export class RefactorAction extends EditorAction {
|
||||
},
|
||||
weight: KeybindingWeight.EditorContrib
|
||||
},
|
||||
menuOpts: {
|
||||
contextMenuOpts: {
|
||||
group: '1_modification',
|
||||
order: 2,
|
||||
when: ContextKeyExpr.and(
|
||||
@@ -299,53 +274,41 @@ export class RefactorAction extends EditorAction {
|
||||
},
|
||||
description: {
|
||||
description: 'Refactor...',
|
||||
args: [{
|
||||
name: 'args',
|
||||
schema: {
|
||||
'type': 'object',
|
||||
'properties': {
|
||||
'kind': {
|
||||
'type': 'string'
|
||||
},
|
||||
'apply': {
|
||||
'type': 'string',
|
||||
'default': 'never',
|
||||
'enum': ['first', 'ifSingle', 'never']
|
||||
}
|
||||
}
|
||||
}
|
||||
}]
|
||||
args: [{ name: 'args', schema: argsSchema }]
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public run(_accessor: ServicesAccessor, editor: ICodeEditor, userArg: any): void {
|
||||
const args = CodeActionCommandArgs.fromUser(userArg, {
|
||||
public run(_accessor: ServicesAccessor, editor: ICodeEditor, userArgs: any): void {
|
||||
const args = CodeActionCommandArgs.fromUser(userArgs, {
|
||||
kind: CodeActionKind.Refactor,
|
||||
apply: CodeActionAutoApply.Never
|
||||
});
|
||||
return triggerCodeActionsForEditorSelection(editor,
|
||||
nls.localize('editor.action.refactor.noneMessage', "No refactorings available"),
|
||||
typeof userArgs?.kind === 'string'
|
||||
? args.preferred
|
||||
? nls.localize('editor.action.refactor.noneMessage.preferred.kind', "No preferred refactorings for '{0}' available", userArgs.kind)
|
||||
: nls.localize('editor.action.refactor.noneMessage.kind', "No refactorings for '{0}' available", userArgs.kind)
|
||||
: args.preferred
|
||||
? nls.localize('editor.action.refactor.noneMessage.preferred', "No preferred refactorings available")
|
||||
: nls.localize('editor.action.refactor.noneMessage', "No refactorings available"),
|
||||
{
|
||||
kind: CodeActionKind.Refactor.contains(args.kind) ? args.kind : CodeActionKind.Empty,
|
||||
include: CodeActionKind.Refactor.contains(args.kind) ? args.kind : CodeActionKind.None,
|
||||
onlyIncludePreferredActions: args.preferred,
|
||||
},
|
||||
args.apply);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
export class SourceAction extends EditorAction {
|
||||
|
||||
static readonly Id = 'editor.action.sourceAction';
|
||||
|
||||
constructor() {
|
||||
super({
|
||||
id: SourceAction.Id,
|
||||
id: sourceActionCommandId,
|
||||
label: nls.localize('source.label', "Source Action..."),
|
||||
alias: 'Source Action...',
|
||||
precondition: ContextKeyExpr.and(EditorContextKeys.writable, EditorContextKeys.hasCodeActionsProvider),
|
||||
menuOpts: {
|
||||
contextMenuOpts: {
|
||||
group: '1_modification',
|
||||
order: 2.1,
|
||||
when: ContextKeyExpr.and(
|
||||
@@ -354,35 +317,26 @@ export class SourceAction extends EditorAction {
|
||||
},
|
||||
description: {
|
||||
description: 'Source Action...',
|
||||
args: [{
|
||||
name: 'args',
|
||||
schema: {
|
||||
'type': 'object',
|
||||
'properties': {
|
||||
'kind': {
|
||||
'type': 'string'
|
||||
},
|
||||
'apply': {
|
||||
'type': 'string',
|
||||
'default': 'never',
|
||||
'enum': ['first', 'ifSingle', 'never']
|
||||
}
|
||||
}
|
||||
}
|
||||
}]
|
||||
args: [{ name: 'args', schema: argsSchema }]
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public run(_accessor: ServicesAccessor, editor: ICodeEditor, userArg: any): void {
|
||||
const args = CodeActionCommandArgs.fromUser(userArg, {
|
||||
public run(_accessor: ServicesAccessor, editor: ICodeEditor, userArgs: any): void {
|
||||
const args = CodeActionCommandArgs.fromUser(userArgs, {
|
||||
kind: CodeActionKind.Source,
|
||||
apply: CodeActionAutoApply.Never
|
||||
});
|
||||
return triggerCodeActionsForEditorSelection(editor,
|
||||
nls.localize('editor.action.source.noneMessage', "No source actions available"),
|
||||
typeof userArgs?.kind === 'string'
|
||||
? args.preferred
|
||||
? nls.localize('editor.action.source.noneMessage.preferred.kind', "No preferred source actions for '{0}' available", userArgs.kind)
|
||||
: nls.localize('editor.action.source.noneMessage.kind', "No source actions for '{0}' available", userArgs.kind)
|
||||
: args.preferred
|
||||
? nls.localize('editor.action.source.noneMessage.preferred', "No preferred source actions available")
|
||||
: nls.localize('editor.action.source.noneMessage', "No source actions available"),
|
||||
{
|
||||
kind: CodeActionKind.Source.contains(args.kind) ? args.kind : CodeActionKind.Empty,
|
||||
include: CodeActionKind.Source.contains(args.kind) ? args.kind : CodeActionKind.None,
|
||||
includeSourceActions: true,
|
||||
onlyIncludePreferredActions: args.preferred,
|
||||
},
|
||||
@@ -392,11 +346,9 @@ export class SourceAction extends EditorAction {
|
||||
|
||||
export class OrganizeImportsAction extends EditorAction {
|
||||
|
||||
static readonly Id = 'editor.action.organizeImports';
|
||||
|
||||
constructor() {
|
||||
super({
|
||||
id: OrganizeImportsAction.Id,
|
||||
id: organizeImportsCommandId,
|
||||
label: nls.localize('organizeImports.label', "Organize Imports"),
|
||||
alias: 'Organize Imports',
|
||||
precondition: ContextKeyExpr.and(
|
||||
@@ -406,25 +358,23 @@ export class OrganizeImportsAction extends EditorAction {
|
||||
kbExpr: EditorContextKeys.editorTextFocus,
|
||||
primary: KeyMod.Shift | KeyMod.Alt | KeyCode.KEY_O,
|
||||
weight: KeybindingWeight.EditorContrib
|
||||
}
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
public run(_accessor: ServicesAccessor, editor: ICodeEditor): void {
|
||||
return triggerCodeActionsForEditorSelection(editor,
|
||||
nls.localize('editor.action.organize.noneMessage', "No organize imports action available"),
|
||||
{ kind: CodeActionKind.SourceOrganizeImports, includeSourceActions: true },
|
||||
{ include: CodeActionKind.SourceOrganizeImports, includeSourceActions: true },
|
||||
CodeActionAutoApply.IfSingle);
|
||||
}
|
||||
}
|
||||
|
||||
export class FixAllAction extends EditorAction {
|
||||
|
||||
static readonly Id = 'editor.action.fixAll';
|
||||
|
||||
constructor() {
|
||||
super({
|
||||
id: FixAllAction.Id,
|
||||
id: fixAllCommandId,
|
||||
label: nls.localize('fixAll.label', "Fix All"),
|
||||
alias: 'Fix All',
|
||||
precondition: ContextKeyExpr.and(
|
||||
@@ -436,7 +386,7 @@ export class FixAllAction extends EditorAction {
|
||||
public run(_accessor: ServicesAccessor, editor: ICodeEditor): void {
|
||||
return triggerCodeActionsForEditorSelection(editor,
|
||||
nls.localize('fixAll.noneMessage', "No fix all action available"),
|
||||
{ kind: CodeActionKind.SourceFixAll, includeSourceActions: true },
|
||||
{ include: CodeActionKind.SourceFixAll, includeSourceActions: true },
|
||||
CodeActionAutoApply.IfSingle);
|
||||
}
|
||||
}
|
||||
@@ -468,7 +418,7 @@ export class AutoFixAction extends EditorAction {
|
||||
return triggerCodeActionsForEditorSelection(editor,
|
||||
nls.localize('editor.action.autoFix.noneMessage', "No auto fixes available"),
|
||||
{
|
||||
kind: CodeActionKind.QuickFix,
|
||||
include: CodeActionKind.QuickFix,
|
||||
onlyIncludePreferredActions: true
|
||||
},
|
||||
CodeActionAutoApply.IfSingle);
|
||||
|
||||
Reference in New Issue
Block a user