@@ -18,7 +18,7 @@ import { QueryMetadata } from "./pure/interface-types";
1818import { telemetryListener } from "./telemetry" ;
1919import { RedactableError } from "./pure/errors" ;
2020import { getQlPackPath } from "./pure/ql" ;
21- import { dbSchemeToLanguage } from "./common/query-language" ;
21+ import { dbSchemeToLanguage , QueryLanguage } from "./common/query-language" ;
2222import { isCodespacesTemplate } from "./config" ;
2323import { AppCommandManager } from "./common/commands" ;
2424
@@ -548,14 +548,18 @@ export async function isLikelyDbLanguageFolder(dbPath: string) {
548548 ) ;
549549}
550550
551+ export function isQueryLanguage ( language : string ) : language is QueryLanguage {
552+ return Object . values ( QueryLanguage ) . includes ( language as QueryLanguage ) ;
553+ }
554+
551555/**
552556 * Finds the language that a query targets.
553557 * If it can't be autodetected, prompt the user to specify the language manually.
554558 */
555559export async function findLanguage (
556560 cliServer : CodeQLCliServer ,
557561 queryUri : Uri | undefined ,
558- ) : Promise < string | undefined > {
562+ ) : Promise < QueryLanguage | undefined > {
559563 const uri = queryUri || Window . activeTextEditor ?. document . uri ;
560564 if ( uri !== undefined ) {
561565 try {
@@ -565,7 +569,14 @@ export async function findLanguage(
565569 ) ;
566570 const language = Object . keys ( queryInfo . byLanguage ) [ 0 ] ;
567571 void extLogger . log ( `Detected query language: ${ language } ` ) ;
568- return language ;
572+
573+ if ( isQueryLanguage ( language ) ) {
574+ return language ;
575+ }
576+
577+ void extLogger . log (
578+ "Query language is unsupported. Select language manually." ,
579+ ) ;
569580 } catch ( e ) {
570581 void extLogger . log (
571582 "Could not autodetect query language. Select language manually." ,
@@ -580,7 +591,7 @@ export async function findLanguage(
580591export async function askForLanguage (
581592 cliServer : CodeQLCliServer ,
582593 throwOnEmpty = true ,
583- ) : Promise < string | undefined > {
594+ ) : Promise < QueryLanguage | undefined > {
584595 const language = await Window . showQuickPick (
585596 await cliServer . getSupportedLanguages ( ) ,
586597 {
@@ -597,7 +608,18 @@ export async function askForLanguage(
597608 "Language not found. Language must be specified manually." ,
598609 ) ;
599610 }
611+ return undefined ;
600612 }
613+
614+ if ( ! isQueryLanguage ( language ) ) {
615+ void showAndLogErrorMessage (
616+ `Language '${ language } ' is not supported. Only languages ${ Object . values (
617+ QueryLanguage ,
618+ ) . join ( ", " ) } are supported.`,
619+ ) ;
620+ return undefined ;
621+ }
622+
601623 return language ;
602624}
603625
0 commit comments