@@ -22,15 +22,20 @@ export interface ILabelService {
2222 _serviceBrand : any ;
2323 getUriLabel ( resource : URI , relative ?: boolean , forceNoTildify ?: boolean ) : string ;
2424 getWorkspaceLabel ( workspace : ( IWorkspaceIdentifier | ISingleFolderWorkspaceIdentifier | IWorkspace ) , options ?: { verbose : boolean } ) : string ;
25- registerFormater ( schema : string , formater : UriLabelRules ) : IDisposable ;
26- onDidRegisterFormater : Event < { scheme : string , formater : UriLabelRules } > ;
25+ registerFormatter ( schema : string , formatter : LabelRules ) : IDisposable ;
26+ onDidRegisterFormatter : Event < { scheme : string , formatter : LabelRules } > ;
2727}
2828
29- export interface UriLabelRules {
30- label : string ; // myLabel:/${path}
31- separator : '/' | '\\' | '' ;
32- tildify ?: boolean ;
33- normalizeDriveLetter ?: boolean ;
29+ export interface LabelRules {
30+ uri : {
31+ label : string ; // myLabel:/${path}
32+ separator : '/' | '\\' | '' ;
33+ tildify ?: boolean ;
34+ normalizeDriveLetter ?: boolean ;
35+ } ;
36+ workspace ?: {
37+ suffix : string ;
38+ } ;
3439}
3540
3641const LABEL_SERVICE_ID = 'label' ;
@@ -44,24 +49,24 @@ function hasDriveLetter(path: string): boolean {
4449export class LabelService implements ILabelService {
4550 _serviceBrand : any ;
4651
47- private readonly formaters = new Map < string , UriLabelRules > ( ) ;
48- private readonly _onDidRegisterFormater = new Emitter < { scheme : string , formater : UriLabelRules } > ( ) ;
52+ private readonly formatters = new Map < string , LabelRules > ( ) ;
53+ private readonly _onDidRegisterFormatter = new Emitter < { scheme : string , formatter : LabelRules } > ( ) ;
4954
5055 constructor (
5156 @IEnvironmentService private environmentService : IEnvironmentService ,
5257 @IWorkspaceContextService private contextService : IWorkspaceContextService
5358 ) { }
5459
55- get onDidRegisterFormater ( ) : Event < { scheme : string , formater : UriLabelRules } > {
56- return this . _onDidRegisterFormater . event ;
60+ get onDidRegisterFormatter ( ) : Event < { scheme : string , formatter : LabelRules } > {
61+ return this . _onDidRegisterFormatter . event ;
5762 }
5863
5964 getUriLabel ( resource : URI , relative ?: boolean , forceNoTildify ?: boolean ) : string {
6065 if ( ! resource ) {
6166 return undefined ;
6267 }
63- const formater = this . formaters . get ( resource . scheme ) ;
64- if ( ! formater ) {
68+ const formatter = this . formatters . get ( resource . scheme ) ;
69+ if ( ! formatter ) {
6570 return getPathLabel ( resource . path , this . environmentService , relative ? this . contextService : undefined ) ;
6671 }
6772
@@ -72,8 +77,8 @@ export class LabelService implements ILabelService {
7277 if ( isEqual ( baseResource . uri , resource , ! isLinux ) ) {
7378 relativeLabel = '' ; // no label if resources are identical
7479 } else {
75- const baseResourceLabel = this . formatUri ( baseResource . uri , formater , forceNoTildify ) ;
76- relativeLabel = ltrim ( this . formatUri ( resource , formater , forceNoTildify ) . substring ( baseResourceLabel . length ) , formater . separator ) ;
80+ const baseResourceLabel = this . formatUri ( baseResource . uri , formatter , forceNoTildify ) ;
81+ relativeLabel = ltrim ( this . formatUri ( resource , formatter , forceNoTildify ) . substring ( baseResourceLabel . length ) , formatter . uri . separator ) ;
7782 }
7883
7984 const hasMultipleRoots = this . contextService . getWorkspace ( ) . folders . length > 1 ;
@@ -86,7 +91,7 @@ export class LabelService implements ILabelService {
8691 }
8792 }
8893
89- return this . formatUri ( resource , formater , forceNoTildify ) ;
94+ return this . formatUri ( resource , formatter , forceNoTildify ) ;
9095 }
9196
9297 getWorkspaceLabel ( workspace : ( IWorkspaceIdentifier | ISingleFolderWorkspaceIdentifier | IWorkspace ) , options ?: { verbose : boolean } ) : string {
@@ -100,7 +105,9 @@ export class LabelService implements ILabelService {
100105 // Workspace: Single Folder
101106 if ( isSingleFolderWorkspaceIdentifier ( workspace ) ) {
102107 // Folder on disk
103- return options && options . verbose ? this . getUriLabel ( workspace ) : basenameOrAuthority ( workspace ) ;
108+ const formatter = this . formatters . get ( workspace . scheme ) ;
109+ const label = options && options . verbose ? this . getUriLabel ( workspace ) : basenameOrAuthority ( workspace ) ;
110+ return formatter && formatter . workspace && formatter . workspace . suffix ? `${ label } (${ formatter . workspace . suffix } )` : label ;
104111 }
105112
106113 // Workspace: Untitled
@@ -118,17 +125,17 @@ export class LabelService implements ILabelService {
118125 return localize ( 'workspaceName' , "{0} (Workspace)" , workspaceName ) ;
119126 }
120127
121- registerFormater ( scheme : string , formater : UriLabelRules ) : IDisposable {
122- this . formaters . set ( scheme , formater ) ;
123- this . _onDidRegisterFormater . fire ( { scheme, formater } ) ;
128+ registerFormatter ( scheme : string , formatter : LabelRules ) : IDisposable {
129+ this . formatters . set ( scheme , formatter ) ;
130+ this . _onDidRegisterFormatter . fire ( { scheme, formatter } ) ;
124131
125132 return {
126- dispose : ( ) => this . formaters . delete ( scheme )
133+ dispose : ( ) => this . formatters . delete ( scheme )
127134 } ;
128135 }
129136
130- private formatUri ( resource : URI , formater : UriLabelRules , forceNoTildify : boolean ) : string {
131- let label = formater . label . replace ( labelMatchingRegexp , match => {
137+ private formatUri ( resource : URI , formatter : LabelRules , forceNoTildify : boolean ) : string {
138+ let label = formatter . uri . label . replace ( labelMatchingRegexp , match => {
132139 switch ( match ) {
133140 case '${scheme}' : return resource . scheme ;
134141 case '${authority}' : return resource . authority ;
@@ -138,15 +145,15 @@ export class LabelService implements ILabelService {
138145 } ) ;
139146
140147 // convert \c:\something => C:\something
141- if ( formater . normalizeDriveLetter && hasDriveLetter ( label ) ) {
148+ if ( formatter . uri . normalizeDriveLetter && hasDriveLetter ( label ) ) {
142149 label = label . charAt ( 1 ) . toUpperCase ( ) + label . substr ( 2 ) ;
143150 }
144151
145- if ( formater . tildify && ! forceNoTildify ) {
152+ if ( formatter . uri . tildify && ! forceNoTildify ) {
146153 label = tildify ( label , this . environmentService . userHome ) ;
147154 }
148155
149- return label . replace ( sepRegexp , formater . separator ) ;
156+ return label . replace ( sepRegexp , formatter . uri . separator ) ;
150157 }
151158}
152159
0 commit comments