11import { CodeQLCliServer } from "./cli" ;
22import { Uri , window } from "vscode" ;
3- import { isQueryLanguage , QueryLanguage } from "../common/query-language" ;
3+ import {
4+ getLanguageDisplayName ,
5+ isQueryLanguage ,
6+ QueryLanguage ,
7+ } from "../common/query-language" ;
48import { getOnDiskWorkspaceFolders } from "../common/vscode/workspace-folders" ;
59import { extLogger } from "../common/logging/vscode" ;
610import { UserCancellationException } from "../common/vscode/progress" ;
@@ -46,14 +50,22 @@ export async function askForLanguage(
4650 cliServer : CodeQLCliServer ,
4751 throwOnEmpty = true ,
4852) : Promise < QueryLanguage | undefined > {
49- const language = await window . showQuickPick (
50- await cliServer . getSupportedLanguages ( ) ,
51- {
52- placeHolder : "Select target language for your query" ,
53- ignoreFocusOut : true ,
54- } ,
55- ) ;
56- if ( ! language ) {
53+ const supportedLanguages = await cliServer . getSupportedLanguages ( ) ;
54+
55+ const items = supportedLanguages
56+ . filter ( ( language ) => isQueryLanguage ( language ) )
57+ . map ( ( language ) => ( {
58+ label : getLanguageDisplayName ( language ) ,
59+ description : language ,
60+ language,
61+ } ) )
62+ . sort ( ( a , b ) => a . label . localeCompare ( b . label ) ) ;
63+
64+ const selectedItem = await window . showQuickPick ( items , {
65+ placeHolder : "Select target language for your query" ,
66+ ignoreFocusOut : true ,
67+ } ) ;
68+ if ( ! selectedItem ) {
5769 // This only happens if the user cancels the quick pick.
5870 if ( throwOnEmpty ) {
5971 throw new UserCancellationException ( "Cancelled." ) ;
@@ -66,6 +78,8 @@ export async function askForLanguage(
6678 return undefined ;
6779 }
6880
81+ const language = selectedItem . language ;
82+
6983 if ( ! isQueryLanguage ( language ) ) {
7084 void showAndLogErrorMessage (
7185 extLogger ,
0 commit comments