@@ -8,7 +8,7 @@ import { URI } from 'vs/base/common/uri';
88import * as nls from 'vs/nls' ;
99import { IWorkspaceContextService , WorkbenchState } from 'vs/platform/workspace/common/workspace' ;
1010import { IJSONEditingService , JSONEditingError , JSONEditingErrorCode } from 'vs/workbench/services/configuration/common/jsonEditing' ;
11- import { IWorkspaceIdentifier , IWorkspaceFolderCreationData , IWorkspacesService , rewriteWorkspaceFileForNewLocation , WORKSPACE_FILTER , IEnterWorkspaceResult } from 'vs/platform/workspaces/common/workspaces' ;
11+ import { IWorkspaceIdentifier , IWorkspaceFolderCreationData , IWorkspacesService , rewriteWorkspaceFileForNewLocation , WORKSPACE_FILTER , IEnterWorkspaceResult , hasWorkspaceFileExtension , WORKSPACE_EXTENSION } from 'vs/platform/workspaces/common/workspaces' ;
1212import { WorkspaceService } from 'vs/workbench/services/configuration/browser/configurationService' ;
1313import { ConfigurationScope , IConfigurationRegistry , Extensions as ConfigurationExtensions , IConfigurationPropertySchema } from 'vs/platform/configuration/common/configurationRegistry' ;
1414import { Registry } from 'vs/platform/registry/common/platform' ;
@@ -43,13 +43,25 @@ export abstract class AbstractWorkspaceEditingService implements IWorkspaceEditi
4343 @IHostService protected readonly hostService : IHostService
4444 ) { }
4545
46- pickNewWorkspacePath ( ) : Promise < URI | undefined > {
47- return this . fileDialogService . showSaveDialog ( {
46+ async pickNewWorkspacePath ( ) : Promise < URI | undefined > {
47+ let workspacePath = await this . fileDialogService . showSaveDialog ( {
4848 saveLabel : mnemonicButtonLabel ( nls . localize ( 'save' , "Save" ) ) ,
4949 title : nls . localize ( 'saveWorkspace' , "Save Workspace" ) ,
5050 filters : WORKSPACE_FILTER ,
5151 defaultUri : this . fileDialogService . defaultWorkspacePath ( )
5252 } ) ;
53+
54+ if ( ! workspacePath ) {
55+ return ; // canceled
56+ }
57+
58+ if ( ! hasWorkspaceFileExtension ( workspacePath ) ) {
59+ // Always ensure we have workspace file extension
60+ // (see https://github.com/microsoft/vscode/issues/84818)
61+ workspacePath = workspacePath . with ( { path : `${ workspacePath . path } .${ WORKSPACE_EXTENSION } ` } ) ;
62+ }
63+
64+ return workspacePath ;
5365 }
5466
5567 updateFolders ( index : number , deleteCount ?: number , foldersToAdd ?: IWorkspaceFolderCreationData [ ] , donotNotifyError ?: boolean ) : Promise < void > {
0 commit comments