mirror of
https://github.com/Microsoft/vscode
synced 2024-08-27 04:49:35 +00:00
Reverting changes in TypeScript language features extension (#198858)
Revert "Merge pull request #198775 from microsoft/aiday/typeScriptChanges" This reverts commit5d9d06611b
, reversing changes made to823d54f86e
.
This commit is contained in:
parent
7bf9c23e3d
commit
9524207999
|
@ -21,7 +21,6 @@ import { nulToken } from '../utils/cancellation';
|
|||
import FormattingOptionsManager from './fileConfigurationManager';
|
||||
import { conditionalRegistration, requireSomeCapability } from './util/dependentRegistration';
|
||||
import { EditorChatFollowUp, EditorChatFollowUp_Args, CompositeCommand } from './util/copilot';
|
||||
import * as PConst from '../tsServer/protocol/protocol.const';
|
||||
|
||||
function toWorkspaceEdit(client: ITypeScriptServiceClient, edits: readonly Proto.FileCodeEdits[]): vscode.WorkspaceEdit {
|
||||
const workspaceEdit = new vscode.WorkspaceEdit();
|
||||
|
@ -436,30 +435,6 @@ class MoveToFileCodeAction extends vscode.CodeAction {
|
|||
arguments: [<MoveToFileRefactorCommand.Args>{ action, document, range }]
|
||||
};
|
||||
}
|
||||
|
||||
private static readonly _declarationKinds = new Set([
|
||||
PConst.Kind.module,
|
||||
PConst.Kind.class,
|
||||
PConst.Kind.interface
|
||||
]);
|
||||
|
||||
static isOnDeclarationName(node: Proto.NavigationTree | undefined, range: vscode.Range) {
|
||||
if (!node) {
|
||||
return false;
|
||||
}
|
||||
const isRangeInSpan = (span: Proto.TextSpan) => typeConverters.Range.fromTextSpan(span).contains(range);
|
||||
if (MoveToFileCodeAction._declarationKinds.has(node.kind) && node.nameSpan && isRangeInSpan(node.nameSpan)) {
|
||||
return true;
|
||||
}
|
||||
if (node.childItems && node.spans.some(isRangeInSpan)) {
|
||||
for (const child of node.childItems) {
|
||||
if (MoveToFileCodeAction.isOnDeclarationName(child, range)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
class SelectCodeAction extends vscode.CodeAction {
|
||||
|
@ -541,8 +516,7 @@ class TypeScriptRefactorProvider implements vscode.CodeActionProvider<TsCodeActi
|
|||
return undefined;
|
||||
}
|
||||
|
||||
const applicableRefactors = await this.convertApplicableRefactors(document, response.body, rangeOrSelection);
|
||||
const actions = await Promise.all(applicableRefactors.map(async (action) => {
|
||||
const actions = Array.from(this.convertApplicableRefactors(document, response.body, rangeOrSelection)).filter(action => {
|
||||
if (this.client.apiVersion.lt(API.v430)) {
|
||||
// Don't show 'infer return type' refactoring unless it has been explicitly requested
|
||||
// https://github.com/microsoft/TypeScript/issues/42993
|
||||
|
@ -550,15 +524,8 @@ class TypeScriptRefactorProvider implements vscode.CodeActionProvider<TsCodeActi
|
|||
return false;
|
||||
}
|
||||
}
|
||||
if (action.kind?.value === Move_NewFile.kind.value) {
|
||||
const navigationTree = await this.client.execute('navtree', { file: document.uri.path }, nulToken);
|
||||
if (navigationTree.type !== 'response') {
|
||||
return;
|
||||
}
|
||||
return MoveToFileCodeAction.isOnDeclarationName(navigationTree.body, rangeOrSelection);
|
||||
}
|
||||
return true;
|
||||
})).then((mappedRefactors) => applicableRefactors.filter((_, index) => mappedRefactors[index]));
|
||||
});
|
||||
|
||||
if (!context.only) {
|
||||
return actions;
|
||||
|
@ -580,44 +547,31 @@ class TypeScriptRefactorProvider implements vscode.CodeActionProvider<TsCodeActi
|
|||
return context.triggerKind === vscode.CodeActionTriggerKind.Invoke ? 'invoked' : 'implicit';
|
||||
}
|
||||
|
||||
private async convertApplicableRefactors(
|
||||
private *convertApplicableRefactors(
|
||||
document: vscode.TextDocument,
|
||||
refactors: readonly Proto.ApplicableRefactorInfo[],
|
||||
rangeOrSelection: vscode.Range | vscode.Selection
|
||||
): Promise<Array<TsCodeAction>> {
|
||||
const actions: Array<TsCodeAction> = [];
|
||||
): Iterable<TsCodeAction> {
|
||||
for (const refactor of refactors) {
|
||||
if (refactor.inlineable === false) {
|
||||
actions.push(new SelectCodeAction(refactor, document, rangeOrSelection));
|
||||
yield new SelectCodeAction(refactor, document, rangeOrSelection);
|
||||
} else {
|
||||
for (const action of refactor.actions) {
|
||||
const refactorAction = await this.refactorActionToCodeAction(document, refactor, action, rangeOrSelection, refactor.actions);
|
||||
if (refactorAction) {
|
||||
actions.push(refactorAction);
|
||||
}
|
||||
yield this.refactorActionToCodeAction(document, refactor, action, rangeOrSelection, refactor.actions);
|
||||
}
|
||||
}
|
||||
}
|
||||
return actions;
|
||||
}
|
||||
|
||||
private async refactorActionToCodeAction(
|
||||
private refactorActionToCodeAction(
|
||||
document: vscode.TextDocument,
|
||||
refactor: Proto.ApplicableRefactorInfo,
|
||||
action: Proto.RefactorActionInfo,
|
||||
rangeOrSelection: vscode.Range | vscode.Selection,
|
||||
allActions: readonly Proto.RefactorActionInfo[],
|
||||
): Promise<TsCodeAction | undefined> {
|
||||
): TsCodeAction {
|
||||
let codeAction: TsCodeAction;
|
||||
if (action.name === 'Move to file') {
|
||||
const navigationTree = await this.client.execute('navtree', { file: document.uri.path }, nulToken);
|
||||
if (navigationTree.type !== 'response') {
|
||||
return;
|
||||
}
|
||||
const shouldIncludeMoveToAction = MoveToFileCodeAction.isOnDeclarationName(navigationTree.body, rangeOrSelection);
|
||||
if (!shouldIncludeMoveToAction) {
|
||||
return;
|
||||
}
|
||||
codeAction = new MoveToFileCodeAction(document, action, rangeOrSelection);
|
||||
} else {
|
||||
let copilotRename: ((info: Proto.RefactorEditInfo) => vscode.Command) | undefined;
|
||||
|
|
Loading…
Reference in a new issue