Cache the output of codeql resolve languages

Repeated calls to `resolveLanguages()` will only pay the performance penalty of executing `codeql resolve languages` once.
This commit is contained in:
Mario Campos
2026-06-03 16:39:55 -05:00
parent ee70cd5210
commit 311292c28f
3 changed files with 99 additions and 19 deletions

View File

@@ -731,26 +731,31 @@ async function getCodeQLForCmd(
filterToLanguagesWithQueries: boolean;
} = { filterToLanguagesWithQueries: false },
) {
const codeqlArgs = [
"resolve",
"languages",
"--format=betterjson",
"--extractor-options-verbosity=4",
"--extractor-include-aliases",
...(filterToLanguagesWithQueries
? ["--filter-to-languages-with-queries"]
: []),
...getExtraOptionsFromEnv(["resolve", "languages"]),
];
const output = await runCli(cmd, codeqlArgs);
let result = util.getCachedCodeQlResolveLanguages(cmd);
if (result === undefined) {
const codeqlArgs = [
"resolve",
"languages",
"--format=betterjson",
"--extractor-options-verbosity=4",
"--extractor-include-aliases",
...(filterToLanguagesWithQueries
? ["--filter-to-languages-with-queries"]
: []),
...getExtraOptionsFromEnv(["resolve", "languages"]),
];
const output = await runCli(cmd, codeqlArgs);
try {
return JSON.parse(output) as ResolveLanguagesOutput;
} catch (e) {
throw new Error(
`Unexpected output from codeql resolve languages with --format=betterjson: ${e}`,
);
try {
result = JSON.parse(output) as ResolveLanguagesOutput;
} catch (e) {
throw new Error(
`Unexpected output from codeql resolve languages with --format=betterjson: ${e}`,
);
}
util.cacheCodeQlResolveLanguages(cmd, result);
}
return result;
},
async resolveBuildEnvironment(
workingDir: string | undefined,