11import { ensureDir , ensureDirSync , writeFile } from "fs-extra" ;
22import { join } from "path" ;
33import { dirSync } from "tmp-promise" ;
4- import { Uri , window as Window } from "vscode" ;
5- import { CodeQLCliServer } from "./codeql-cli/cli" ;
6- import { UserCancellationException } from "./common/vscode/progress" ;
74import { extLogger } from "./common" ;
8- import { isQueryLanguage , QueryLanguage } from "./common/query-language" ;
9- import { getOnDiskWorkspaceFolders } from "./common/vscode/workspace-folders" ;
10- import { showAndLogErrorMessage } from "./common/vscode/log" ;
115
126// Shared temporary folder for the extension.
137export const tmpDir = dirSync ( {
@@ -30,77 +24,6 @@ export const tmpDirDisposal = {
3024 } ,
3125} ;
3226
33- /**
34- * Finds the language that a query targets.
35- * If it can't be autodetected, prompt the user to specify the language manually.
36- */
37- export async function findLanguage (
38- cliServer : CodeQLCliServer ,
39- queryUri : Uri | undefined ,
40- ) : Promise < QueryLanguage | undefined > {
41- const uri = queryUri || Window . activeTextEditor ?. document . uri ;
42- if ( uri !== undefined ) {
43- try {
44- const queryInfo = await cliServer . resolveQueryByLanguage (
45- getOnDiskWorkspaceFolders ( ) ,
46- uri ,
47- ) ;
48- const language = Object . keys ( queryInfo . byLanguage ) [ 0 ] ;
49- void extLogger . log ( `Detected query language: ${ language } ` ) ;
50-
51- if ( isQueryLanguage ( language ) ) {
52- return language ;
53- }
54-
55- void extLogger . log (
56- "Query language is unsupported. Select language manually." ,
57- ) ;
58- } catch ( e ) {
59- void extLogger . log (
60- "Could not autodetect query language. Select language manually." ,
61- ) ;
62- }
63- }
64-
65- // will be undefined if user cancels the quick pick.
66- return await askForLanguage ( cliServer , false ) ;
67- }
68-
69- export async function askForLanguage (
70- cliServer : CodeQLCliServer ,
71- throwOnEmpty = true ,
72- ) : Promise < QueryLanguage | undefined > {
73- const language = await Window . showQuickPick (
74- await cliServer . getSupportedLanguages ( ) ,
75- {
76- placeHolder : "Select target language for your query" ,
77- ignoreFocusOut : true ,
78- } ,
79- ) ;
80- if ( ! language ) {
81- // This only happens if the user cancels the quick pick.
82- if ( throwOnEmpty ) {
83- throw new UserCancellationException ( "Cancelled." ) ;
84- } else {
85- void showAndLogErrorMessage (
86- "Language not found. Language must be specified manually." ,
87- ) ;
88- }
89- return undefined ;
90- }
91-
92- if ( ! isQueryLanguage ( language ) ) {
93- void showAndLogErrorMessage (
94- `Language '${ language } ' is not supported. Only languages ${ Object . values (
95- QueryLanguage ,
96- ) . join ( ", " ) } are supported.`,
97- ) ;
98- return undefined ;
99- }
100-
101- return language ;
102- }
103-
10427/**
10528 * Creates a file in the query directory that indicates when this query was created.
10629 * This is important for keeping track of when queries should be removed.
0 commit comments