Skip to content

Commit 8b2a9b0

Browse files
author
Mikhail Arkhipov
authored
Move rename functionality to the language server (#2612)
* LS symbol providers * Different ready wait * Upgrade dependencies to latest LS * Make open files only default * Turn off hash checks * Fix double progress display * Update packages * Anchor dependencies * Add setting for diag throttling * Add MacOS version check * News * Correct MacOS check and lay infra for Linux checks * Linux version check * Linux check * Simplify * Test prep * Platform tests * Mac compat tests * Ubuntu tests * Revert "Ubuntu tests" This reverts commit c63c904. * Revert "Mac compat tests" This reverts commit cd970be. * Revert "Platform tests" This reverts commit 07dc2fa. * Revert "Test prep" This reverts commit 2c7243c. * Revert "Simplify" This reverts commit fef0e92. * Revert "Linux check" This reverts commit 925f663. * Revert "Linux version check" This reverts commit 0d3c066. * Revert "Correct MacOS check and lay infra for Linux checks" This reverts commit 4e12b3c. * Revert "News" This reverts commit 462ff7c. * Revert "Add MacOS version check" This reverts commit 70b13f7. * News * Format * Undo * Pass async startup option to LS * News for LS fixes * News for LS fixes * Remove issue that is not fixed * Add news * News * News * News * News * Drop typeshed submodule * Add settings to control LS output * News * Fix case * Switch to 1.26 and LSP 4.4 for outline * News * News * Add package lock * Update mock to 1.26 * Tweak news entry wording * Move rope rename off common to Jedi * Move Rename to LS * Ref fix * Update LS contrib * Merge issue * Make sure progress is cleared * Revert "Make sure progress is cleared" This reverts commit 1187d7e. * Line breaks and remove duplication * Add news
1 parent 8ea7bd4 commit 8b2a9b0

File tree

5 files changed

+20
-17
lines changed

5 files changed

+20
-17
lines changed

news/1 Enhancements/2650.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Language server now provides rename functionality.

src/client/activation/downloader.ts

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,7 @@ export class LanguageServerDownloader implements ILanguageServerDownloader {
112112
deferred.reject(err);
113113
})
114114
.on('end', () => {
115-
this.output.append('complete.');
115+
this.output.appendLine('complete.');
116116
deferred.resolve();
117117
})
118118
.pipe(fileStream);
@@ -130,8 +130,7 @@ export class LanguageServerDownloader implements ILanguageServerDownloader {
130130

131131
const title = 'Extracting files... ';
132132
await window.withProgress({
133-
location: ProgressLocation.Window,
134-
title
133+
location: ProgressLocation.Window
135134
}, (progress) => {
136135
const zip = new StreamZip({
137136
file: tempFilePath,

src/client/activation/jedi.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,8 @@ export class JediExtensionActivator implements IExtensionActivator {
5858
context.subscriptions.push(languages.registerSignatureHelpProvider(this.documentSelector, new PythonSignatureProvider(jediFactory), '(', ','));
5959
}
6060

61+
context.subscriptions.push(languages.registerRenameProvider(PYTHON, new PythonRenameProvider(serviceContainer)));
62+
6163
const testManagementService = this.serviceManager.get<IUnitTestManagementService>(IUnitTestManagementService);
6264
testManagementService.activate()
6365
.then(() => testManagementService.activateCodeLenses(symbolProvider))

src/client/extension.ts

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,6 @@ import { ILintingEngine } from './linters/types';
4848
import { PythonCodeActionProvider } from './providers/codeActionsProvider';
4949
import { PythonFormattingEditProvider } from './providers/formatProvider';
5050
import { LinterProvider } from './providers/linterProvider';
51-
import { PythonRenameProvider } from './providers/renameProvider';
5251
import { ReplProvider } from './providers/replProvider';
5352
import { registerTypes as providersRegisterTypes } from './providers/serviceRegistry';
5453
import { activateSimplePythonRefactorProvider } from './providers/simpleRefactorProvider';
@@ -87,9 +86,8 @@ export async function activate(context: ExtensionContext): Promise<IExtensionApi
8786
const configuration = serviceManager.get<IConfigurationService>(IConfigurationService);
8887
const pythonSettings = configuration.getSettings();
8988

90-
const standardOutputChannel = serviceManager.get<OutputChannel>(IOutputChannel, STANDARD_OUTPUT_CHANNEL);
91-
context.subscriptions.push(languages.registerRenameProvider(PYTHON, new PythonRenameProvider(serviceManager)));
92-
activateSimplePythonRefactorProvider(context, standardOutputChannel, serviceManager);
89+
const standardOutputChannel = serviceContainer.get<OutputChannel>(IOutputChannel, STANDARD_OUTPUT_CHANNEL);
90+
activateSimplePythonRefactorProvider(context, standardOutputChannel, serviceContainer);
9391

9492
const activationService = serviceContainer.get<IExtensionActivationService>(IExtensionActivationService);
9593
await activationService.activate();

src/client/providers/renameProvider.ts

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
import * as path from 'path';
2-
import * as vscode from 'vscode';
3-
import { OutputChannel, ProviderResult } from 'vscode';
2+
import {
3+
CancellationToken, OutputChannel,
4+
Position, ProviderResult, RenameProvider,
5+
TextDocument, window, workspace, WorkspaceEdit
6+
} from 'vscode';
47
import { PythonSettings } from '../common/configSettings';
58
import { STANDARD_OUTPUT_CHANNEL } from '../common/constants';
69
import { getWorkspaceEditsFromPatch } from '../common/editor';
@@ -15,19 +18,19 @@ type RenameResponse = {
1518
results: [{ diff: string }];
1619
};
1720

18-
export class PythonRenameProvider implements vscode.RenameProvider {
21+
export class PythonRenameProvider implements RenameProvider {
1922
private readonly outputChannel: OutputChannel;
2023
constructor(private serviceContainer: IServiceContainer) {
2124
this.outputChannel = serviceContainer.get<OutputChannel>(IOutputChannel, STANDARD_OUTPUT_CHANNEL);
2225
}
2326
@captureTelemetry(REFACTOR_RENAME)
24-
public provideRenameEdits(document: vscode.TextDocument, position: vscode.Position, newName: string, token: vscode.CancellationToken): ProviderResult<vscode.WorkspaceEdit> {
25-
return vscode.workspace.saveAll(false).then(() => {
27+
public provideRenameEdits(document: TextDocument, position: Position, newName: string, token: CancellationToken): ProviderResult<WorkspaceEdit> {
28+
return workspace.saveAll(false).then(() => {
2629
return this.doRename(document, position, newName, token);
2730
});
2831
}
2932

30-
private doRename(document: vscode.TextDocument, position: vscode.Position, newName: string, token: vscode.CancellationToken): ProviderResult<vscode.WorkspaceEdit> {
33+
private doRename(document: TextDocument, position: Position, newName: string, token: CancellationToken): ProviderResult<WorkspaceEdit> {
3134
if (document.lineAt(position.line).text.match(/^\s*\/\//)) {
3235
return;
3336
}
@@ -44,9 +47,9 @@ export class PythonRenameProvider implements vscode.RenameProvider {
4447
return;
4548
}
4649

47-
let workspaceFolder = vscode.workspace.getWorkspaceFolder(document.uri);
48-
if (!workspaceFolder && Array.isArray(vscode.workspace.workspaceFolders) && vscode.workspace.workspaceFolders.length > 0) {
49-
workspaceFolder = vscode.workspace.workspaceFolders[0];
50+
let workspaceFolder = workspace.getWorkspaceFolder(document.uri);
51+
if (!workspaceFolder && Array.isArray(workspace.workspaceFolders) && workspace.workspaceFolders.length > 0) {
52+
workspaceFolder = workspace.workspaceFolders[0];
5053
}
5154
const workspaceRoot = workspaceFolder ? workspaceFolder.uri.fsPath : __dirname;
5255
const pythonSettings = PythonSettings.getInstance(workspaceFolder ? workspaceFolder.uri : undefined);
@@ -62,7 +65,7 @@ export class PythonRenameProvider implements vscode.RenameProvider {
6265
.catch(ex => console.error('Python Extension: promptToInstall', ex));
6366
return Promise.reject('');
6467
} else {
65-
vscode.window.showErrorMessage(reason);
68+
window.showErrorMessage(reason);
6669
this.outputChannel.appendLine(reason);
6770
}
6871
return Promise.reject(reason);

0 commit comments

Comments
 (0)