diff --git a/lib/entry-points.js b/lib/entry-points.js index 7f095b9ca..f385af4a9 100644 --- a/lib/entry-points.js +++ b/lib/entry-points.js @@ -151415,9 +151415,7 @@ async function getSupportedLanguageMap(codeql, logger) { const resolveSupportedLanguagesUsingCli = await codeql.supportsFeature( "builtinExtractorsSpecifyDefaultQueries" /* BuiltinExtractorsSpecifyDefaultQueries */ ); - const resolveResult = await codeql.resolveLanguages({ - filterToLanguagesWithQueries: resolveSupportedLanguagesUsingCli - }); + const resolveResult = await codeql.resolveLanguages(); if (resolveSupportedLanguagesUsingCli) { logger.debug( `The CodeQL CLI supports the following languages: ${Object.keys(resolveResult.extractors).join(", ")}` @@ -153931,21 +153929,27 @@ async function getCodeQLForCmd(cmd, checkVersion) { ]; await runCli(cmd, args); }, - async resolveLanguages({ - filterToLanguagesWithQueries - } = { filterToLanguagesWithQueries: false }) { + async resolveLanguages() { return getCachedOrRun( "resolveLanguages" /* ResolveLanguages */, cmd, - () => runCliJson(cmd, [ - "resolve", - "languages", - "--format=betterjson", - "--extractor-options-verbosity=4", - "--extractor-include-aliases", - ...filterToLanguagesWithQueries ? ["--filter-to-languages-with-queries"] : [], - ...getExtraOptionsFromEnv(["resolve", "languages"]) - ]), + async () => { + const isFilterToLanguagesWithQueriesSupported = await this.supportsFeature( + "builtinExtractorsSpecifyDefaultQueries" /* BuiltinExtractorsSpecifyDefaultQueries */ + ); + return runCliJson(cmd, [ + "resolve", + "languages", + "--format=betterjson", + "--extractor-options-verbosity=4", + "--extractor-include-aliases", + // TODO: Unconditionally include `--filter-to-languages-with-queries` + // once CODEQL_MINIMUM_VERSION is at least v2.23.0 + // — the first version to support this flag. + ...isFilterToLanguagesWithQueriesSupported ? ["--filter-to-languages-with-queries"] : [], + ...getExtraOptionsFromEnv(["resolve", "languages"]) + ]); + }, isResolveLanguagesOutput ); }, diff --git a/src/codeql.ts b/src/codeql.ts index 36bd4e598..f960ce023 100644 --- a/src/codeql.ts +++ b/src/codeql.ts @@ -126,9 +126,7 @@ export interface CodeQL { /** * Run 'codeql resolve languages' with '--format=betterjson'. */ - resolveLanguages(options?: { - filterToLanguagesWithQueries: boolean; - }): Promise; + resolveLanguages(): Promise; /** * Run 'codeql resolve build-environment' */ @@ -784,28 +782,30 @@ async function getCodeQLForCmd( ]; await runCli(cmd, args); }, - async resolveLanguages( - { - filterToLanguagesWithQueries, - }: { - filterToLanguagesWithQueries: boolean; - } = { filterToLanguagesWithQueries: false }, - ) { + async resolveLanguages() { return getCachedOrRun( CommandCacheKey.ResolveLanguages, cmd, - () => - runCliJson(cmd, [ + async () => { + const isFilterToLanguagesWithQueriesSupported = + await this.supportsFeature( + ToolsFeature.BuiltinExtractorsSpecifyDefaultQueries, + ); + return runCliJson(cmd, [ "resolve", "languages", "--format=betterjson", "--extractor-options-verbosity=4", "--extractor-include-aliases", - ...(filterToLanguagesWithQueries + // TODO: Unconditionally include `--filter-to-languages-with-queries` + // once CODEQL_MINIMUM_VERSION is at least v2.23.0 + // — the first version to support this flag. + ...(isFilterToLanguagesWithQueriesSupported ? ["--filter-to-languages-with-queries"] : []), ...getExtraOptionsFromEnv(["resolve", "languages"]), - ]), + ]); + }, isResolveLanguagesOutput, ); }, diff --git a/src/config-utils.test.ts b/src/config-utils.test.ts index 27de780ad..73d5320fc 100644 --- a/src/config-utils.test.ts +++ b/src/config-utils.test.ts @@ -891,7 +891,7 @@ const mockRepositoryNwo = parseRepositoryNwo("owner/repo"); extractor_root: "", }; const codeQL = createStubCodeQL({ - resolveLanguages: (options) => + resolveLanguages: () => Promise.resolve({ aliases: { "c#": BuiltInLanguage.csharp, @@ -905,11 +905,9 @@ const mockRepositoryNwo = parseRepositoryNwo("owner/repo"); java: [stubExtractorEntry], javascript: [stubExtractorEntry], python: [stubExtractorEntry], - ...(options?.filterToLanguagesWithQueries - ? {} - : { - html: [stubExtractorEntry], - }), + // `html` is an extractor without default queries. It should be + // excluded from the supported language map. + html: [stubExtractorEntry], }, }), }); diff --git a/src/config-utils.ts b/src/config-utils.ts index 972734877..73532d837 100644 --- a/src/config-utils.ts +++ b/src/config-utils.ts @@ -266,9 +266,7 @@ async function getSupportedLanguageMap( const resolveSupportedLanguagesUsingCli = await codeql.supportsFeature( ToolsFeature.BuiltinExtractorsSpecifyDefaultQueries, ); - const resolveResult = await codeql.resolveLanguages({ - filterToLanguagesWithQueries: resolveSupportedLanguagesUsingCli, - }); + const resolveResult = await codeql.resolveLanguages(); if (resolveSupportedLanguagesUsingCli) { logger.debug( `The CodeQL CLI supports the following languages: ${Object.keys(resolveResult.extractors).join(", ")}`, @@ -277,9 +275,9 @@ async function getSupportedLanguageMap( const supportedLanguages: Record = {}; // Populate canonical language names for (const extractor of Object.keys(resolveResult.extractors)) { - // If the CLI supports resolving languages with default queries, use these - // as the set of supported languages. Otherwise, require the language to be - // a built-in language. + // TODO: Delete this `if` condition once CODEQL_MINIMUM_VERSION + // is at least v2.23.0 — the first version to support the + // BuiltinExtractorsSpecifyDefaultQueries feature. if ( resolveSupportedLanguagesUsingCli || BuiltInLanguage[extractor] !== undefined