mirror of
https://github.com/microsoft/vscode.git
synced 2026-04-30 21:41:46 +01:00
Make sure we sync file config before generating paste edits
This could explain why we occasionally see the wrong style of import being generated
This commit is contained in:
@@ -5,12 +5,13 @@
|
||||
|
||||
import * as vscode from 'vscode';
|
||||
import { DocumentSelector } from '../configuration/documentSelector';
|
||||
import { LanguageDescription } from '../configuration/languageDescription';
|
||||
import { API } from '../tsServer/api';
|
||||
import protocol from '../tsServer/protocol/protocol';
|
||||
import * as typeConverters from '../typeConverters';
|
||||
import { ClientCapability, ITypeScriptServiceClient } from '../typescriptService';
|
||||
import FileConfigurationManager from './fileConfigurationManager';
|
||||
import { conditionalRegistration, requireGlobalConfiguration, requireMinVersion, requireSomeCapability } from './util/dependentRegistration';
|
||||
import protocol from '../tsServer/protocol/protocol';
|
||||
import { API } from '../tsServer/api';
|
||||
import { LanguageDescription } from '../configuration/languageDescription';
|
||||
|
||||
class CopyMetadata {
|
||||
constructor(
|
||||
@@ -48,6 +49,7 @@ class DocumentPasteProvider implements vscode.DocumentPasteEditProvider {
|
||||
constructor(
|
||||
private readonly _modeId: string,
|
||||
private readonly _client: ITypeScriptServiceClient,
|
||||
private readonly fileConfigurationManager: FileConfigurationManager,
|
||||
) { }
|
||||
|
||||
async prepareDocumentPaste(document: vscode.TextDocument, ranges: readonly vscode.Range[], dataTransfer: vscode.DataTransfer, token: vscode.CancellationToken) {
|
||||
@@ -115,13 +117,17 @@ class DocumentPasteProvider implements vscode.DocumentPasteEditProvider {
|
||||
return;
|
||||
}
|
||||
|
||||
const response = await this._client.interruptGetErr(() => this._client.execute('getPasteEdits', {
|
||||
file,
|
||||
// TODO: only supports a single paste for now
|
||||
pastedText: [text],
|
||||
pasteLocations: ranges.map(typeConverters.Range.toTextSpan),
|
||||
copiedFrom
|
||||
}, token));
|
||||
const response = await this._client.interruptGetErr(() => {
|
||||
this.fileConfigurationManager.ensureConfigurationForDocument(document, token);
|
||||
|
||||
return this._client.execute('getPasteEdits', {
|
||||
file,
|
||||
// TODO: only supports a single paste for now
|
||||
pastedText: [text],
|
||||
pasteLocations: ranges.map(typeConverters.Range.toTextSpan),
|
||||
copiedFrom
|
||||
}, token);
|
||||
});
|
||||
if (response.type !== 'response' || !response.body?.edits.length || token.isCancellationRequested) {
|
||||
return;
|
||||
}
|
||||
@@ -152,13 +158,13 @@ class DocumentPasteProvider implements vscode.DocumentPasteEditProvider {
|
||||
}
|
||||
}
|
||||
|
||||
export function register(selector: DocumentSelector, language: LanguageDescription, client: ITypeScriptServiceClient) {
|
||||
export function register(selector: DocumentSelector, language: LanguageDescription, client: ITypeScriptServiceClient, fileConfigurationManager: FileConfigurationManager) {
|
||||
return conditionalRegistration([
|
||||
requireSomeCapability(client, ClientCapability.Semantic),
|
||||
requireMinVersion(client, API.v570),
|
||||
requireGlobalConfiguration(language.id, enabledSettingId),
|
||||
], () => {
|
||||
return vscode.languages.registerDocumentPasteEditProvider(selector.semantic, new DocumentPasteProvider(language.id, client), {
|
||||
return vscode.languages.registerDocumentPasteEditProvider(selector.semantic, new DocumentPasteProvider(language.id, client, fileConfigurationManager), {
|
||||
providedPasteEditKinds: [DocumentPasteProvider.kind],
|
||||
copyMimeTypes: [DocumentPasteProvider.metadataMimeType],
|
||||
pasteMimeTypes: [DocumentPasteProvider.metadataMimeType],
|
||||
|
||||
@@ -15,7 +15,7 @@ import { conditionalRegistration, requireGlobalConfiguration } from './util/depe
|
||||
class TypeScriptFormattingProvider implements vscode.DocumentRangeFormattingEditProvider, vscode.OnTypeFormattingEditProvider {
|
||||
public constructor(
|
||||
private readonly client: ITypeScriptServiceClient,
|
||||
private readonly formattingOptionsManager: FileConfigurationManager
|
||||
private readonly fileConfigurationManager: FileConfigurationManager
|
||||
) { }
|
||||
|
||||
public async provideDocumentRangeFormattingEdits(
|
||||
@@ -29,7 +29,7 @@ class TypeScriptFormattingProvider implements vscode.DocumentRangeFormattingEdit
|
||||
return undefined;
|
||||
}
|
||||
|
||||
await this.formattingOptionsManager.ensureConfigurationOptions(document, options, token);
|
||||
await this.fileConfigurationManager.ensureConfigurationOptions(document, options, token);
|
||||
|
||||
const args = typeConverters.Range.toFormattingRequestArgs(file, range);
|
||||
const response = await this.client.execute('format', args, token);
|
||||
@@ -52,7 +52,7 @@ class TypeScriptFormattingProvider implements vscode.DocumentRangeFormattingEdit
|
||||
return [];
|
||||
}
|
||||
|
||||
await this.formattingOptionsManager.ensureConfigurationOptions(document, options, token);
|
||||
await this.fileConfigurationManager.ensureConfigurationOptions(document, options, token);
|
||||
|
||||
const args: Proto.FormatOnKeyRequestArgs = {
|
||||
...typeConverters.Position.toFileLocationRequestArgs(file, position),
|
||||
|
||||
@@ -65,7 +65,7 @@ export default class LanguageProvider extends Disposable {
|
||||
import('./languageFeatures/codeLens/implementationsCodeLens').then(provider => this._register(provider.register(selector, this.description, this.client, cachedNavTreeResponse))),
|
||||
import('./languageFeatures/codeLens/referencesCodeLens').then(provider => this._register(provider.register(selector, this.description, this.client, cachedNavTreeResponse))),
|
||||
import('./languageFeatures/completions').then(provider => this._register(provider.register(selector, this.description, this.client, this.typingsStatus, this.fileConfigurationManager, this.commandManager, this.telemetryReporter, this.onCompletionAccepted))),
|
||||
import('./languageFeatures/copyPaste').then(provider => this._register(provider.register(selector, this.description, this.client))),
|
||||
import('./languageFeatures/copyPaste').then(provider => this._register(provider.register(selector, this.description, this.client, this.fileConfigurationManager))),
|
||||
import('./languageFeatures/definitions').then(provider => this._register(provider.register(selector, this.client))),
|
||||
import('./languageFeatures/directiveCommentCompletions').then(provider => this._register(provider.register(selector, this.client))),
|
||||
import('./languageFeatures/documentHighlight').then(provider => this._register(provider.register(selector, this.client))),
|
||||
|
||||
Reference in New Issue
Block a user