Tolerate minor edit session identity differences (#163804)

Also add basic support for partial edit session identity matches
This commit is contained in:
Joyce Er
2022-10-16 23:51:51 -07:00
committed by GitHub
parent a0a7cc4b5f
commit f9a0fdeff2
10 changed files with 152 additions and 8 deletions

View File

@@ -21,6 +21,7 @@ import { FileSystemProviderCapabilities } from 'vs/platform/files/common/files';
import { createDecorator } from 'vs/platform/instantiation/common/instantiation';
import { ILogService } from 'vs/platform/log/common/log';
import { Severity } from 'vs/platform/notification/common/notification';
import { EditSessionIdentityMatch } from 'vs/platform/workspace/common/editSessions';
import { Workspace, WorkspaceFolder } from 'vs/platform/workspace/common/workspace';
import { IExtHostFileSystemInfo } from 'vs/workbench/api/common/extHostFileSystemInfo';
import { IExtHostInitDataService } from 'vs/workbench/api/common/extHostInitDataService';
@@ -627,6 +628,31 @@ export class ExtHostWorkspace implements ExtHostWorkspaceShape, IExtHostWorkspac
return result;
}
async $provideEditSessionIdentityMatch(workspaceFolder: UriComponents, identity1: string, identity2: string, cancellationToken: CancellationToken): Promise<EditSessionIdentityMatch | undefined> {
this._logService.info('Getting edit session identifier for workspaceFolder', workspaceFolder);
const folder = await this.resolveWorkspaceFolder(URI.revive(workspaceFolder));
if (!folder) {
this._logService.warn('Unable to resolve workspace folder');
return undefined;
}
this._logService.info('Invoking #provideEditSessionIdentity for workspaceFolder', folder);
const provider = this._editSessionIdentityProviders.get(folder.uri.scheme);
this._logService.info(`Provider for scheme ${folder.uri.scheme} is defined: `, !!provider);
if (!provider) {
return undefined;
}
const result = await provider.provideEditSessionIdentityMatch?.(identity1, identity2, cancellationToken);
this._logService.info('Provider returned edit session identifier match result: ', result);
if (!result) {
return undefined;
}
return result;
}
}
export const IExtHostWorkspace = createDecorator<IExtHostWorkspace>('IExtHostWorkspace');