@@ -40,7 +40,7 @@ import { IPanelService } from 'vs/workbench/services/panel/common/panelService';
40
40
import Constants from 'vs/workbench/contrib/markers/browser/constants' ;
41
41
import { IEditorService } from 'vs/workbench/services/editor/common/editorService' ;
42
42
import { IConfigurationResolverService } from 'vs/workbench/services/configurationResolver/common/configurationResolver' ;
43
- import { IWorkspaceContextService , WorkbenchState , IWorkspaceFolder , IWorkspace } from 'vs/platform/workspace/common/workspace' ;
43
+ import { IWorkspaceContextService , WorkbenchState , IWorkspaceFolder , IWorkspace , WorkspaceFolder } from 'vs/platform/workspace/common/workspace' ;
44
44
45
45
import { ITextFileService } from 'vs/workbench/services/textfile/common/textfiles' ;
46
46
import { IOutputService , IOutputChannel } from 'vs/workbench/contrib/output/common/output' ;
@@ -1702,7 +1702,7 @@ export abstract class AbstractTaskService extends Disposable implements ITaskSer
1702
1702
return ;
1703
1703
}
1704
1704
1705
- if ( ! contributed ) {
1705
+ if ( contributed . length === 0 ) {
1706
1706
result . add ( key , ...folderTasks . set . tasks ) ;
1707
1707
} else {
1708
1708
let configurations = folderTasks . configurations ;
@@ -1867,31 +1867,35 @@ export abstract class AbstractTaskService extends Disposable implements ITaskSer
1867
1867
protected abstract updateWorkspaceTasks ( runSource : TaskRunSource | void ) : void ;
1868
1868
1869
1869
protected computeWorkspaceTasks ( runSource : TaskRunSource = TaskRunSource . User ) : Promise < Map < string , WorkspaceFolderTaskResult > > {
1870
- if ( this . workspaceFolders . length === 0 ) {
1871
- return Promise . resolve ( new Map < string , WorkspaceFolderTaskResult > ( ) ) ;
1872
- } else {
1873
- let promises : Promise < WorkspaceFolderTaskResult | undefined > [ ] = [ ] ;
1874
- for ( let folder of this . workspaceFolders ) {
1875
- promises . push ( this . computeWorkspaceFolderTasks ( folder , runSource ) . then ( ( value ) => value , ( ) => undefined ) ) ;
1876
- }
1877
- return Promise . all ( promises ) . then ( async ( values ) => {
1878
- let result = new Map < string , WorkspaceFolderTaskResult > ( ) ;
1879
- for ( let value of values ) {
1880
- if ( value ) {
1881
- result . set ( value . workspaceFolder . uri . toString ( ) , value ) ;
1882
- }
1883
- }
1884
- const userTasks = await this . computeUserTasks ( this . workspaceFolders [ 0 ] , runSource ) . then ( ( value ) => value , ( ) => undefined ) ;
1885
- if ( userTasks ) {
1886
- result . set ( USER_TASKS_GROUP_KEY , userTasks ) ;
1870
+ let promises : Promise < WorkspaceFolderTaskResult | undefined > [ ] = [ ] ;
1871
+ for ( let folder of this . workspaceFolders ) {
1872
+ promises . push ( this . computeWorkspaceFolderTasks ( folder , runSource ) . then ( ( value ) => value , ( ) => undefined ) ) ;
1873
+ }
1874
+ return Promise . all ( promises ) . then ( async ( values ) => {
1875
+ let result = new Map < string , WorkspaceFolderTaskResult > ( ) ;
1876
+ for ( let value of values ) {
1877
+ if ( value ) {
1878
+ result . set ( value . workspaceFolder . uri . toString ( ) , value ) ;
1887
1879
}
1888
- const workspaceFileTasks = await this . computeWorkspaceFileTasks ( this . workspaceFolders [ 0 ] , runSource ) . then ( ( value ) => value , ( ) => undefined ) ;
1880
+ }
1881
+ let folder = this . workspaceFolders . length > 0 ? this . workspaceFolders [ 0 ] : undefined ;
1882
+ if ( ! folder ) {
1883
+ const userhome = await this . pathService . userHome ( ) ;
1884
+ folder = new WorkspaceFolder ( { uri : userhome , name : resources . basename ( userhome ) , index : 0 } ) ;
1885
+ }
1886
+ const userTasks = await this . computeUserTasks ( folder , runSource ) . then ( ( value ) => value , ( ) => undefined ) ;
1887
+ if ( userTasks ) {
1888
+ result . set ( USER_TASKS_GROUP_KEY , userTasks ) ;
1889
+ }
1890
+
1891
+ if ( this . contextService . getWorkbenchState ( ) !== WorkbenchState . EMPTY ) {
1892
+ const workspaceFileTasks = await this . computeWorkspaceFileTasks ( folder , runSource ) . then ( ( value ) => value , ( ) => undefined ) ;
1889
1893
if ( workspaceFileTasks && this . _workspace && this . _workspace . configuration ) {
1890
1894
result . set ( this . _workspace . configuration . toString ( ) , workspaceFileTasks ) ;
1891
1895
}
1892
- return result ;
1893
- } ) ;
1894
- }
1896
+ }
1897
+ return result ;
1898
+ } ) ;
1895
1899
}
1896
1900
1897
1901
private get jsonTasksSupported ( ) : boolean {
@@ -2167,17 +2171,6 @@ export abstract class AbstractTaskService extends Disposable implements ITaskSer
2167
2171
}
2168
2172
2169
2173
private canRunCommand ( ) : boolean {
2170
- if ( this . contextService . getWorkbenchState ( ) === WorkbenchState . EMPTY ) {
2171
- this . notificationService . prompt (
2172
- Severity . Info ,
2173
- nls . localize ( 'TaskService.noWorkspace' , "Tasks are only available on a workspace folder." ) ,
2174
- [ {
2175
- label : nls . localize ( 'TaskService.learnMore' , "Learn More" ) ,
2176
- run : ( ) => this . openerService . open ( URI . parse ( 'https://code.visualstudio.com/docs/editor/tasks' ) )
2177
- } ]
2178
- ) ;
2179
- return false ;
2180
- }
2181
2174
return true ;
2182
2175
}
2183
2176
@@ -2871,8 +2864,13 @@ export abstract class AbstractTaskService extends Disposable implements ITaskSer
2871
2864
}
2872
2865
if ( this . isTaskEntry ( selection ) ) {
2873
2866
this . configureTask ( selection . task ) ;
2874
- } else {
2867
+ } else if ( this . contextService . getWorkbenchState ( ) !== WorkbenchState . EMPTY ) {
2875
2868
this . openTaskFile ( selection . folder . toResource ( '.vscode/tasks.json' ) , TaskSourceKind . Workspace ) ;
2869
+ } else {
2870
+ const resource = this . getResourceForKind ( TaskSourceKind . User ) ;
2871
+ if ( resource ) {
2872
+ this . openTaskFile ( resource , TaskSourceKind . User ) ;
2873
+ }
2876
2874
}
2877
2875
}
2878
2876
@@ -2914,46 +2912,22 @@ export abstract class AbstractTaskService extends Disposable implements ITaskSer
2914
2912
return taskPromise . then ( ( taskMap ) => {
2915
2913
let entries : QuickPickInput < TaskQuickPickEntryType > [ ] = [ ] ;
2916
2914
let needsCreateOrOpen : boolean = true ;
2917
- if ( this . contextService . getWorkbenchState ( ) !== WorkbenchState . EMPTY ) {
2918
- let tasks = taskMap . all ( ) ;
2919
- if ( tasks . length > 0 ) {
2920
- tasks = tasks . sort ( ( a , b ) => a . _label . localeCompare ( b . _label ) ) ;
2921
- for ( let task of tasks ) {
2922
- entries . push ( { label : task . _label , task, description : this . getTaskDescription ( task ) , detail : this . showDetail ( ) ? task . configurationProperties . detail : undefined } ) ;
2923
- if ( ! ContributedTask . is ( task ) ) {
2924
- needsCreateOrOpen = false ;
2925
- }
2926
- }
2927
- }
2928
- if ( needsCreateOrOpen ) {
2929
- let label = stats [ 0 ] !== undefined ? openLabel : createLabel ;
2930
- if ( entries . length ) {
2931
- entries . push ( { type : 'separator' } ) ;
2915
+ let tasks = taskMap . all ( ) ;
2916
+ if ( tasks . length > 0 ) {
2917
+ tasks = tasks . sort ( ( a , b ) => a . _label . localeCompare ( b . _label ) ) ;
2918
+ for ( let task of tasks ) {
2919
+ entries . push ( { label : task . _label , task, description : this . getTaskDescription ( task ) , detail : this . showDetail ( ) ? task . configurationProperties . detail : undefined } ) ;
2920
+ if ( ! ContributedTask . is ( task ) ) {
2921
+ needsCreateOrOpen = false ;
2932
2922
}
2933
- entries . push ( { label, folder : this . contextService . getWorkspace ( ) . folders [ 0 ] } ) ;
2934
2923
}
2935
- } else {
2936
- let folders = this . contextService . getWorkspace ( ) . folders ;
2937
- let index = 0 ;
2938
- for ( let folder of folders ) {
2939
- let tasks = taskMap . get ( folder ) ;
2940
- if ( tasks . length > 0 ) {
2941
- tasks = tasks . slice ( ) . sort ( ( a , b ) => a . _label . localeCompare ( b . _label ) ) ;
2942
- for ( let i = 0 ; i < tasks . length ; i ++ ) {
2943
- let entry : TaskQuickPickEntryType = { label : tasks [ i ] . _label , task : tasks [ i ] , description : this . getTaskDescription ( tasks [ i ] ) } ;
2944
- if ( i === 0 ) {
2945
- entries . push ( { type : 'separator' , label : folder . name } ) ;
2946
- }
2947
- entries . push ( entry ) ;
2948
- }
2949
- } else {
2950
- let label = stats [ index ] !== undefined ? openLabel : createLabel ;
2951
- let entry : TaskQuickPickEntryType = { label, folder : folder } ;
2952
- entries . push ( { type : 'separator' , label : folder . name } ) ;
2953
- entries . push ( entry ) ;
2954
- }
2955
- index ++ ;
2924
+ }
2925
+ if ( needsCreateOrOpen ) {
2926
+ let label = stats [ 0 ] !== undefined ? openLabel : createLabel ;
2927
+ if ( entries . length ) {
2928
+ entries . push ( { type : 'separator' } ) ;
2956
2929
}
2930
+ entries . push ( { label, folder : this . contextService . getWorkspace ( ) . folders [ 0 ] } ) ;
2957
2931
}
2958
2932
if ( ( entries . length === 1 ) && ! needsCreateOrOpen ) {
2959
2933
tokenSource . cancel ( ) ;
0 commit comments