1818import * as vscode from 'vscode' ;
1919import { LanguageClient } from 'vscode-languageclient/node' ;
2020import { getMains , getExecutables , getProjectFile } from './helpers' ;
21- import { DEFAULT_PROBLEM_MATCHER } from './taskProviders' ;
21+ import { DEFAULT_PROBLEM_MATCHER , WarningMessageExecution } from './taskProviders' ;
2222
2323/**
2424 *
@@ -27,7 +27,7 @@ import { DEFAULT_PROBLEM_MATCHER } from './taskProviders';
2727 * workspaces.
2828 */
2929
30- export default class GprTaskProvider implements vscode . TaskProvider < vscode . Task > {
30+ export class GprTaskProvider implements vscode . TaskProvider < vscode . Task > {
3131 /**
3232 * This flag is used to restore the proposal of 'gpr' tasks for debugging
3333 * purposes.
@@ -37,6 +37,11 @@ export default class GprTaskProvider implements vscode.TaskProvider<vscode.Task>
3737 public static gprTaskType = 'gpr' ;
3838 glsTasks : vscode . Task [ ] | undefined ;
3939
40+ private readonly obsoletionMsg =
41+ "The 'gpr' task type is obsolete. Please use 'ada' tasks instead." ;
42+
43+ private readonly obsoleteWarningExecution = new WarningMessageExecution ( this . obsoletionMsg ) ;
44+
4045 constructor ( client : LanguageClient ) {
4146 this . glsTasks = undefined ;
4247 this . client = client ;
@@ -46,7 +51,7 @@ export default class GprTaskProvider implements vscode.TaskProvider<vscode.Task>
4651 async provideTasks ( ) : Promise < vscode . Task [ ] | undefined > {
4752 if ( GprTaskProvider . DEPRECATED ) {
4853 // We return a single dummy task to convey an obsoletion message to Users.
49- const msg = 'The "gpr" task type is obsolete. Use "ada" tasks instead.' ;
54+ const msg = this . obsoletionMsg ;
5055 return [
5156 new vscode . Task (
5257 {
@@ -57,7 +62,7 @@ export default class GprTaskProvider implements vscode.TaskProvider<vscode.Task>
5762 vscode . TaskScope . Workspace ,
5863 msg ,
5964 GprTaskProvider . gprTaskType ,
60- new vscode . ShellExecution ( `echo ${ msg } ` ) ,
65+ this . obsoleteWarningExecution ,
6166 DEFAULT_PROBLEM_MATCHER
6267 ) ,
6368 ] ;
@@ -75,42 +80,20 @@ export default class GprTaskProvider implements vscode.TaskProvider<vscode.Task>
7580 return this . glsTasks ;
7681 }
7782
78- async resolveTask ( task : vscode . Task ) : Promise < vscode . Task | undefined > {
79- const definition = task . definition ;
80- // Make sure that this looks like a execute task by checking that there is a projectFile.
81- if ( definition . type == GprTaskProvider . gprTaskType ) {
82- // Refresh gprbuild command line
83- // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
84- const projectFile : string =
85- definition . projectFile != undefined
86- ? definition . projectFile
87- : await getProjectFile ( this . client ) ;
88- // eslint-disable-next-line @typescript-eslint/no-unsafe-argument
89- const args = getMainBuildArgs ( projectFile , definition . main ) ;
90- let shell : vscode . ShellExecution ;
91- let title : string ;
92- if ( definition . executable != undefined ) {
93- // eslint-disable-next-line @typescript-eslint/no-unsafe-argument
94- args . push ( '&&' , 'clear' , '&&' , definition . executable ) ;
95- shell = new vscode . ShellExecution ( fullCommand ( 'gprbuild' , args ) ) ;
96- // eslint-disable-next-line @typescript-eslint/restrict-template-expressions
97- title = `Build And Run Main: ${ definition . main } ` ;
98- } else {
99- shell = new vscode . ShellExecution ( fullCommand ( 'gprbuild' , args ) ) ;
100- // eslint-disable-next-line @typescript-eslint/restrict-template-expressions
101- title = `Build Main: ${ definition . main } ` ;
102- }
103- // resolveTask requires that the same definition object be used.
104- return new vscode . Task (
105- definition ,
106- vscode . TaskScope . Workspace ,
107- title ,
108- 'gpr' ,
109- shell ,
110- '$gpr'
111- ) ;
112- }
113- return undefined ;
83+ resolveTask ( task : vscode . Task ) {
84+ /**
85+ * Here we resolve 'gpr' tasks still defined in User workspaces. We
86+ * handle them by displaying an obsoletion warning if the task gets
87+ * executed.
88+ */
89+ return new vscode . Task (
90+ task . definition ,
91+ task . scope ?? vscode . TaskScope . Workspace ,
92+ task . name ,
93+ GprTaskProvider . gprTaskType ,
94+ this . obsoleteWarningExecution ,
95+ DEFAULT_PROBLEM_MATCHER
96+ ) ;
11497 }
11598}
11699
0 commit comments