@@ -75,11 +75,6 @@ export interface IWorkspaceContextService {
7575 * Returns if the provided resource is inside the workspace or not.
7676 */
7777 isInsideWorkspace ( resource : URI ) : boolean ;
78-
79- /**
80- * Given a workspace relative path and workspace folder, returns the resource with the absolute path.
81- */
82- toResource : ( workspaceRelativePath : string , workspaceFolder : IWorkspaceFolder ) => URI ;
8378}
8479
8580export interface IWorkspace {
@@ -105,8 +100,7 @@ export interface IWorkspace {
105100 readonly configuration ?: URI ;
106101}
107102
108- export interface IWorkspaceFolder {
109-
103+ export interface IWorkspaceFolderData {
110104 /**
111105 * The associated URI for this workspace folder.
112106 */
@@ -122,22 +116,25 @@ export interface IWorkspaceFolder {
122116 * The ordinal number of this workspace folder.
123117 */
124118 readonly index : number ;
119+ }
120+
121+ export interface IWorkspaceFolder extends IWorkspaceFolderData {
125122
126123 /**
127- * The raw path of this workspace folder
124+ * Given workspace folder relative path, returns the resource with the absolute path.
128125 */
129- readonly raw : IStoredWorkspaceFolder ;
126+ toResource : ( relativePath : string ) => URI ;
130127}
131128
132129export class Workspace implements IWorkspace {
133130
134- private _foldersMap : TrieMap < IWorkspaceFolder > = new TrieMap < IWorkspaceFolder > ( ) ;
135- private _folders : IWorkspaceFolder [ ] ;
131+ private _foldersMap : TrieMap < WorkspaceFolder > = new TrieMap < WorkspaceFolder > ( ) ;
132+ private _folders : WorkspaceFolder [ ] ;
136133
137134 constructor (
138135 private _id : string ,
139136 private _name : string = '' ,
140- folders : IWorkspaceFolder [ ] = [ ] ,
137+ folders : WorkspaceFolder [ ] = [ ] ,
141138 private _configuration : URI = null ,
142139 private _ctime ?: number
143140 ) {
@@ -152,11 +149,11 @@ export class Workspace implements IWorkspace {
152149 this . folders = workspace . folders ;
153150 }
154151
155- public get folders ( ) : IWorkspaceFolder [ ] {
152+ public get folders ( ) : WorkspaceFolder [ ] {
156153 return this . _folders ;
157154 }
158155
159- public set folders ( folders : IWorkspaceFolder [ ] ) {
156+ public set folders ( folders : WorkspaceFolder [ ] ) {
160157 this . _folders = folders ;
161158 this . updateFoldersMap ( ) ;
162159 }
@@ -194,7 +191,7 @@ export class Workspace implements IWorkspace {
194191 }
195192
196193 private updateFoldersMap ( ) : void {
197- this . _foldersMap = new TrieMap < IWorkspaceFolder > ( ) ;
194+ this . _foldersMap = new TrieMap < WorkspaceFolder > ( ) ;
198195 for ( const folder of this . folders ) {
199196 this . _foldersMap . insert ( folder . uri . toString ( ) , folder ) ;
200197 }
@@ -205,19 +202,41 @@ export class Workspace implements IWorkspace {
205202 }
206203}
207204
208- export function toWorkspaceFolders ( configuredFolders : IStoredWorkspaceFolder [ ] , relativeTo ?: URI ) : IWorkspaceFolder [ ] {
205+ export class WorkspaceFolder implements IWorkspaceFolder {
206+
207+ readonly uri : URI ;
208+ readonly name : string ;
209+ readonly index : number ;
210+
211+ constructor ( data : IWorkspaceFolderData ,
212+ readonly raw ?: IStoredWorkspaceFolder ) {
213+ this . uri = data . uri ;
214+ this . index = data . index ;
215+ this . name = data . name ;
216+ }
217+
218+ toResource ( relativePath : string ) : URI {
219+ return URI . file ( paths . join ( this . uri . fsPath , relativePath ) ) ;
220+ }
221+
222+ public toJSON ( ) : IWorkspaceFolderData {
223+ return { uri : this . uri , name : this . name , index : this . index } ;
224+ }
225+ }
226+
227+ export function toWorkspaceFolders ( configuredFolders : IStoredWorkspaceFolder [ ] , relativeTo ?: URI ) : WorkspaceFolder [ ] {
209228 let workspaceFolders = parseWorkspaceFolders ( configuredFolders , relativeTo ) ;
210229 return ensureUnique ( coalesce ( workspaceFolders ) )
211- . map ( ( { uri, raw, name } , index ) => ( { uri, raw , name : name || paths . basename ( uri . fsPath ) , index } ) ) ;
230+ . map ( ( { uri, raw, name } , index ) => new WorkspaceFolder ( { uri, name : name || paths . basename ( uri . fsPath ) , index } , raw ) ) ;
212231}
213232
214- function parseWorkspaceFolders ( configuredFolders : IStoredWorkspaceFolder [ ] , relativeTo : URI ) : IWorkspaceFolder [ ] {
233+ function parseWorkspaceFolders ( configuredFolders : IStoredWorkspaceFolder [ ] , relativeTo : URI ) : WorkspaceFolder [ ] {
215234 return configuredFolders . map ( ( configuredFolder , index ) => {
216235 const uri = toUri ( configuredFolder . path , relativeTo ) ;
217236 if ( ! uri ) {
218237 return void 0 ;
219238 }
220- return { uri, raw : configuredFolder , index, name : configuredFolder . name } ;
239+ return new WorkspaceFolder ( { uri, name : configuredFolder . name , index } , configuredFolder ) ;
221240 } ) ;
222241}
223242
@@ -233,6 +252,6 @@ function toUri(path: string, relativeTo: URI): URI {
233252 return null ;
234253}
235254
236- function ensureUnique ( folders : IWorkspaceFolder [ ] ) : IWorkspaceFolder [ ] {
255+ function ensureUnique ( folders : WorkspaceFolder [ ] ) : WorkspaceFolder [ ] {
237256 return distinct ( folders , folder => isLinux ? folder . uri . fsPath : folder . uri . fsPath . toLowerCase ( ) ) ;
238257}
0 commit comments