99 showAndLogInformationMessage ,
1010 isLikelyDatabaseRoot ,
1111 showAndLogExceptionWithTelemetry ,
12+ isFolderAlreadyInWorkspace ,
13+ showBinaryChoiceDialog ,
1214} from "./helpers" ;
1315import { ProgressCallback , withProgress } from "./commandRunner" ;
1416import {
@@ -23,6 +25,7 @@ import { asError, getErrorMessage } from "./pure/helpers-pure";
2325import { QueryRunner } from "./queryRunner" ;
2426import { pathsEqual } from "./pure/files" ;
2527import { redactableError } from "./pure/errors" ;
28+ import { isCodespacesTemplate } from "./config" ;
2629
2730/**
2831 * databases.ts
@@ -621,9 +624,38 @@ export class DatabaseManager extends DisposableObject {
621624 await this . addDatabaseItem ( progress , token , databaseItem ) ;
622625 await this . addDatabaseSourceArchiveFolder ( databaseItem ) ;
623626
627+ if ( isCodespacesTemplate ( ) ) {
628+ await this . createSkeletonPacks ( databaseItem ) ;
629+ }
630+
624631 return databaseItem ;
625632 }
626633
634+ public async createSkeletonPacks ( databaseItem : DatabaseItem ) {
635+ if ( databaseItem === undefined ) {
636+ void this . logger . log (
637+ "Could not create QL pack because no database is selected. Please add a database." ,
638+ ) ;
639+ return ;
640+ }
641+
642+ if ( databaseItem . language === "" ) {
643+ void this . logger . log (
644+ "Could not create skeleton QL pack because the selected database's language is not set." ,
645+ ) ;
646+ return ;
647+ }
648+
649+ const folderName = `codeql-custom-queries-${ databaseItem . language } ` ;
650+ if ( isFolderAlreadyInWorkspace ( folderName ) ) {
651+ return ;
652+ }
653+
654+ await showBinaryChoiceDialog (
655+ `We've noticed you don't have a QL pack downloaded to analyze this database. Can we set up a ${ databaseItem . language } query pack for you` ,
656+ ) ;
657+ }
658+
627659 private async reregisterDatabases (
628660 progress : ProgressCallback ,
629661 token : vscode . CancellationToken ,
0 commit comments