16
16
----------------------------------------------------------------------------*/
17
17
18
18
import assert from 'assert' ;
19
- import { basename } from 'path' ;
19
+ import path , { basename } from 'path' ;
20
20
import * as vscode from 'vscode' ;
21
21
import { CMD_GPR_PROJECT_ARGS } from './commands' ;
22
22
import { adaExtState , logger } from './extension' ;
@@ -366,7 +366,10 @@ const predefinedTasks: PredefinedTask[] = [
366
366
* both 'ada' and 'spark' tasks.
367
367
*/
368
368
export class SimpleTaskProvider implements vscode . TaskProvider {
369
- constructor ( public taskType : string , private taskDecls : PredefinedTask [ ] ) { }
369
+ constructor (
370
+ public taskType : string ,
371
+ private taskDecls : PredefinedTask [ ] ,
372
+ ) { }
370
373
371
374
async provideTasks ( token ?: vscode . CancellationToken ) : Promise < vscode . Task [ ] > {
372
375
if ( token ?. isCancellationRequested ) {
@@ -406,11 +409,19 @@ export class SimpleTaskProvider implements vscode.TaskProvider {
406
409
taskGroup : vscode . TaskGroup . Build ,
407
410
} ;
408
411
412
+ let execPath = main . execRelPath ( ) ;
413
+ /**
414
+ * If the exec is directly at the root of the workspace,
415
+ * prepend ./ to make it possible for shells to execute it.
416
+ */
417
+ if ( ! execPath . includes ( path . sep ) ) {
418
+ execPath = './' + execPath ;
419
+ }
409
420
const runTask : PredefinedTask = {
410
421
label : getRunTaskPlainName ( main ) ,
411
422
taskDef : {
412
423
type : this . taskType ,
413
- command : main . execRelPath ( ) ,
424
+ command : execPath ,
414
425
args : [ ] ,
415
426
} ,
416
427
} ;
@@ -425,7 +436,7 @@ export class SimpleTaskProvider implements vscode.TaskProvider {
425
436
} ;
426
437
427
438
return [ buildTask , runTask , buildAndRunTask ] ;
428
- } )
439
+ } ) ,
429
440
) ;
430
441
}
431
442
@@ -453,7 +464,7 @@ export class SimpleTaskProvider implements vscode.TaskProvider {
453
464
tDecl . label ,
454
465
tDecl . taskDef . type ,
455
466
undefined ,
456
- tDecl . problemMatchers
467
+ tDecl . problemMatchers ,
457
468
) ;
458
469
459
470
/**
@@ -483,7 +494,7 @@ export class SimpleTaskProvider implements vscode.TaskProvider {
483
494
484
495
async resolveTask (
485
496
task : vscode . Task ,
486
- token ?: vscode . CancellationToken
497
+ token ?: vscode . CancellationToken ,
487
498
) : Promise < vscode . Task | undefined > {
488
499
/**
489
500
* Note that this method is never called for tasks created by the
@@ -525,9 +536,8 @@ export class SimpleTaskProvider implements vscode.TaskProvider {
525
536
*/
526
537
const args = taskDef . args ?? [ ] ;
527
538
try {
528
- const evaluatedArgs : ( string | vscode . ShellQuotedString ) [ ] = await evaluateArgs (
529
- args
530
- ) ;
539
+ const evaluatedArgs : ( string | vscode . ShellQuotedString ) [ ] =
540
+ await evaluateArgs ( args ) ;
531
541
execution = new vscode . ShellExecution ( taskDef . command , evaluatedArgs ) ;
532
542
} catch ( err ) {
533
543
let msg = 'Error while evaluating task arguments.' ;
@@ -547,7 +557,7 @@ export class SimpleTaskProvider implements vscode.TaskProvider {
547
557
task . name ,
548
558
task . source ,
549
559
execution ,
550
- task . problemMatchers
560
+ task . problemMatchers ,
551
561
) ;
552
562
}
553
563
@@ -622,12 +632,12 @@ async function useAlire() {
622
632
*/
623
633
async function evaluateArgs ( args : ( string | vscode . ShellQuotedString ) [ ] ) {
624
634
const commandRegex = new RegExp (
625
- `^\\\${command:\\s*((${ TASK_TYPE_ADA } |${ TASK_TYPE_SPARK } )\\.[^}]*)\\s*}$`
635
+ `^\\\${command:\\s*((${ TASK_TYPE_ADA } |${ TASK_TYPE_SPARK } )\\.[^}]*)\\s*}$` ,
626
636
) ;
627
637
const evaluatedArgs : ( string | vscode . ShellQuotedString ) [ ] = (
628
638
await Promise . all (
629
639
args . flatMap ( async function (
630
- a : string | vscode . ShellQuotedString
640
+ a : string | vscode . ShellQuotedString ,
631
641
) : Promise < ( string | vscode . ShellQuotedString ) [ ] > {
632
642
if ( typeof a == 'string' ) {
633
643
/**
@@ -667,7 +677,7 @@ async function evaluateArgs(args: (string | vscode.ShellQuotedString)[]) {
667
677
}
668
678
669
679
return [ a ] ;
670
- } )
680
+ } ) ,
671
681
)
672
682
) . flat ( ) ;
673
683
return evaluatedArgs ;
@@ -742,14 +752,14 @@ export function getBuildAndRunTaskName(main?: AdaMain) {
742
752
export function createSparkTaskProvider ( ) : SimpleTaskProvider {
743
753
return new SimpleTaskProvider (
744
754
TASK_TYPE_SPARK ,
745
- predefinedTasks . filter ( ( v ) => v . taskDef . type == TASK_TYPE_SPARK )
755
+ predefinedTasks . filter ( ( v ) => v . taskDef . type == TASK_TYPE_SPARK ) ,
746
756
) ;
747
757
}
748
758
749
759
export function createAdaTaskProvider ( ) : SimpleTaskProvider {
750
760
return new SimpleTaskProvider (
751
761
TASK_TYPE_ADA ,
752
- predefinedTasks . filter ( ( v ) => v . taskDef . type == TASK_TYPE_ADA )
762
+ predefinedTasks . filter ( ( v ) => v . taskDef . type == TASK_TYPE_ADA ) ,
753
763
) ;
754
764
}
755
765
@@ -849,7 +859,7 @@ abstract class SequentialExecution extends vscode.CustomExecution {
849
859
} finally {
850
860
closeEmitter . fire ( 2 ) ;
851
861
}
852
- }
862
+ } ,
853
863
) ;
854
864
} ,
855
865
close ( ) {
@@ -883,7 +893,7 @@ abstract class SequentialExecution extends vscode.CustomExecution {
883
893
*/
884
894
export async function findTaskByName (
885
895
taskName : string ,
886
- tasks ?: vscode . Task [ ]
896
+ tasks ?: vscode . Task [ ] ,
887
897
) : Promise < vscode . Task > {
888
898
if ( ! tasks ) {
889
899
tasks = (
@@ -921,7 +931,10 @@ export async function findTaskByName(
921
931
* of the tasks to run are given at construction.
922
932
*/
923
933
class SequentialExecutionByName extends SequentialExecution {
924
- constructor ( private taskName : string , private taskNames : string [ ] ) {
934
+ constructor (
935
+ private taskName : string ,
936
+ private taskNames : string [ ] ,
937
+ ) {
925
938
super ( ) ;
926
939
}
927
940
@@ -941,7 +954,7 @@ class SequentialExecutionByName extends SequentialExecution {
941
954
*/
942
955
function runTaskSequence (
943
956
tasks : vscode . Task [ ] ,
944
- writeEmitter : vscode . EventEmitter < string >
957
+ writeEmitter : vscode . EventEmitter < string > ,
945
958
) : Promise < number > {
946
959
let p = new Promise < number > ( ( resolve ) => resolve ( 0 ) ) ;
947
960
for ( const t of tasks ) {
@@ -996,15 +1009,15 @@ export async function getBuildAndRunTasks(): Promise<vscode.Task[]> {
996
1009
. filter ( ( t ) => getConventionalTaskLabel ( t ) . startsWith ( getBuildAndRunTaskName ( ) ) )
997
1010
998
1011
// Return workspace-defined tasks first
999
- . sort ( workspaceTasksFirst )
1012
+ . sort ( workspaceTasksFirst ) ,
1000
1013
) ;
1001
1014
}
1002
1015
1003
1016
export async function findBuildAndRunTask ( adaMain : AdaMain ) : Promise < vscode . Task | undefined > {
1004
1017
return ( await getBuildAndRunTasks ( ) ) . find (
1005
1018
// Tasks defined in tasks.json will have a leading 'ada: ' while the
1006
1019
// ones auto-generated by the extension don't. We want to match both.
1007
- ( t ) => getConventionalTaskLabel ( t ) == getBuildAndRunTaskName ( adaMain )
1020
+ ( t ) => getConventionalTaskLabel ( t ) == getBuildAndRunTaskName ( adaMain ) ,
1008
1021
) ;
1009
1022
}
1010
1023
@@ -1039,15 +1052,15 @@ export async function getBuildMainTasks() {
1039
1052
tasks
1040
1053
. filter ( ( t ) => getConventionalTaskLabel ( t ) . startsWith ( getBuildTaskName ( ) ) )
1041
1054
// Return workspace-defined tasks first
1042
- . sort ( workspaceTasksFirst )
1055
+ . sort ( workspaceTasksFirst ) ,
1043
1056
) ;
1044
1057
}
1045
1058
1046
1059
export async function findBuildMainTask ( adaMain : AdaMain ) : Promise < vscode . Task | undefined > {
1047
1060
return ( await getBuildMainTasks ( ) ) . find (
1048
1061
// Tasks defined in tasks.json will have a leading 'ada: ' while the
1049
1062
// ones auto-generated by the extension don't. We want to match both.
1050
- ( t ) => getConventionalTaskLabel ( t ) == getBuildTaskName ( adaMain )
1063
+ ( t ) => getConventionalTaskLabel ( t ) == getBuildTaskName ( adaMain ) ,
1051
1064
) ;
1052
1065
}
1053
1066
0 commit comments