@@ -38,6 +38,8 @@ export class DebugConfigurationProvider implements vscode.DebugConfigurationProv
3838 private assetProvider : IConfigurationAssetProvider ;
3939 // Keep a list of tasks detected by cppBuildTaskProvider.
4040 private static detectedBuildTasks : CppBuildTask [ ] = [ ] ;
41+ private static detectedCppBuildTasks : CppBuildTask [ ] = [ ] ;
42+ private static detectedCBuildTasks : CppBuildTask [ ] = [ ] ;
4143 protected static recentBuildTaskLabel : string ;
4244
4345 public constructor ( assetProvider : IConfigurationAssetProvider , type : DebuggerType ) {
@@ -449,8 +451,44 @@ export class DebugConfigurationProvider implements vscode.DebugConfigurationProv
449451 }
450452
451453 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 ;
454492 }
455493 }
456494
0 commit comments