@@ -38,6 +38,8 @@ export class DebugConfigurationProvider implements vscode.DebugConfigurationProv
38
38
private assetProvider : IConfigurationAssetProvider ;
39
39
// Keep a list of tasks detected by cppBuildTaskProvider.
40
40
private static detectedBuildTasks : CppBuildTask [ ] = [ ] ;
41
+ private static detectedCppBuildTasks : CppBuildTask [ ] = [ ] ;
42
+ private static detectedCBuildTasks : CppBuildTask [ ] = [ ] ;
41
43
protected static recentBuildTaskLabel : string ;
42
44
43
45
public constructor ( assetProvider : IConfigurationAssetProvider , type : DebuggerType ) {
@@ -449,8 +451,44 @@ export class DebugConfigurationProvider implements vscode.DebugConfigurationProv
449
451
}
450
452
451
453
private async loadDetectedTasks ( ) : Promise < void > {
452
- if ( ! DebugConfigurationProvider . detectedBuildTasks || DebugConfigurationProvider . detectedBuildTasks . length === 0 ) {
453
- DebugConfigurationProvider . detectedBuildTasks = await cppBuildTaskProvider . getTasks ( true ) ;
454
+ const editor : vscode . TextEditor | undefined = vscode . window . activeTextEditor ;
455
+ const emptyTasks : CppBuildTask [ ] = [ ] ;
456
+ if ( ! editor ) {
457
+ DebugConfigurationProvider . detectedBuildTasks = emptyTasks ;
458
+ return ;
459
+ }
460
+
461
+ const fileExt : string = path . extname ( editor . document . fileName ) ;
462
+ if ( ! fileExt ) {
463
+ DebugConfigurationProvider . detectedBuildTasks = emptyTasks ;
464
+ return ;
465
+ }
466
+
467
+ // Don't offer tasks for header files.
468
+ const isHeader : boolean = util . isHeaderFile ( editor . document . uri ) ;
469
+ if ( isHeader ) {
470
+ DebugConfigurationProvider . detectedBuildTasks = emptyTasks ;
471
+ return ;
472
+ }
473
+
474
+ // Don't offer tasks if the active file's extension is not a recognized C/C++ extension.
475
+ const fileIsCpp : boolean = util . isCppFile ( editor . document . uri ) ;
476
+ const fileIsC : boolean = util . isCFile ( editor . document . uri ) ;
477
+ if ( ! ( fileIsCpp || fileIsC ) ) {
478
+ DebugConfigurationProvider . detectedBuildTasks = emptyTasks ;
479
+ return ;
480
+ }
481
+
482
+ if ( fileIsCpp ) {
483
+ if ( ! DebugConfigurationProvider . detectedCppBuildTasks || DebugConfigurationProvider . detectedCppBuildTasks . length === 0 ) {
484
+ DebugConfigurationProvider . detectedCppBuildTasks = await cppBuildTaskProvider . getTasks ( true ) ;
485
+ }
486
+ DebugConfigurationProvider . detectedBuildTasks = DebugConfigurationProvider . detectedCppBuildTasks ;
487
+ } else {
488
+ if ( ! DebugConfigurationProvider . detectedCBuildTasks || DebugConfigurationProvider . detectedCBuildTasks . length === 0 ) {
489
+ DebugConfigurationProvider . detectedCBuildTasks = await cppBuildTaskProvider . getTasks ( true ) ;
490
+ }
491
+ DebugConfigurationProvider . detectedBuildTasks = DebugConfigurationProvider . detectedCBuildTasks ;
454
492
}
455
493
}
456
494
0 commit comments