@@ -33,6 +33,7 @@ import {
3333 CODEQL_OVERLAY_MINIMUM_VERSION ,
3434 OverlayDatabaseMode ,
3535} from "./overlay-database-utils" ;
36+ import * as overlayLanguageAliases from "./overlay-language-aliases.json" ;
3637import { RepositoryNwo } from "./repository" ;
3738import { downloadTrapCaches } from "./trap-caching" ;
3839import {
@@ -331,6 +332,36 @@ export async function getLanguages(
331332 return languages ;
332333}
333334
335+ /**
336+ * Get the (unverified) languages for overlay analysis.
337+ *
338+ * This is a simplified version of `getLanguages` that only resolves language
339+ * aliases but does not check if the languages are actually supported by the
340+ * CodeQL CLI. It is intended to be used for overlay analysis preparations
341+ * before the CodeQL CLI is available.
342+ */
343+ async function getUnverifiedLanguagesForOverlay (
344+ languagesInput : string | undefined ,
345+ repository : RepositoryNwo ,
346+ sourceRoot : string ,
347+ logger : Logger ,
348+ ) : Promise < string [ ] > {
349+ // Obtain languages without filtering them.
350+ const { rawLanguages } = await getRawLanguages (
351+ languagesInput ,
352+ repository ,
353+ sourceRoot ,
354+ logger ,
355+ ) ;
356+ const languageAliases = overlayLanguageAliases as Record < string , string > ;
357+
358+ const languagesSet : string [ ] = [ ] ;
359+ for ( const language of rawLanguages ) {
360+ languagesSet . push ( languageAliases [ language ] || language ) ;
361+ }
362+ return languagesSet ;
363+ }
364+
334365export function getRawLanguagesNoAutodetect (
335366 languagesInput : string | undefined ,
336367) : string [ ] {
@@ -589,11 +620,12 @@ const OVERLAY_ANALYSIS_CODE_SCANNING_FEATURES: Record<Language, Feature> = {
589620} ;
590621
591622async function isOverlayAnalysisFeatureEnabled (
623+ codeScanningConfig : UserConfig ,
624+ languagesInput : string | undefined ,
592625 repository : RepositoryNwo ,
626+ sourceRoot : string ,
593627 features : FeatureEnablement ,
594- codeql : CodeQL ,
595- languages : Language [ ] ,
596- codeScanningConfig : UserConfig ,
628+ logger : Logger ,
597629) : Promise < boolean > {
598630 // TODO: Remove the repository owner check once support for overlay analysis
599631 // stabilizes, and no more backward-incompatible changes are expected.
@@ -603,6 +635,14 @@ async function isOverlayAnalysisFeatureEnabled(
603635 if ( ! ( await features . getValue ( Feature . OverlayAnalysis ) ) ) {
604636 return false ;
605637 }
638+
639+ const languages = await getUnverifiedLanguagesForOverlay (
640+ languagesInput ,
641+ repository ,
642+ sourceRoot ,
643+ logger ,
644+ ) ;
645+
606646 let enableForCodeScanningOnly = false ;
607647 for ( const language of languages ) {
608648 const feature = OVERLAY_ANALYSIS_FEATURES [ language ] ;
@@ -657,6 +697,7 @@ export async function getOverlayDatabaseMode(
657697 repository : RepositoryNwo ,
658698 features : FeatureEnablement ,
659699 languages : Language [ ] ,
700+ languagesInput : string | undefined ,
660701 sourceRoot : string ,
661702 buildMode : BuildMode | undefined ,
662703 codeScanningConfig : UserConfig ,
@@ -683,11 +724,12 @@ export async function getOverlayDatabaseMode(
683724 ) ;
684725 } else if (
685726 await isOverlayAnalysisFeatureEnabled (
727+ codeScanningConfig ,
728+ languagesInput ,
686729 repository ,
730+ sourceRoot ,
687731 features ,
688- codeql ,
689- languages ,
690- codeScanningConfig ,
732+ logger ,
691733 )
692734 ) {
693735 if ( isAnalyzingPullRequest ( ) ) {
@@ -843,6 +885,7 @@ export async function initConfig(inputs: InitConfigInputs): Promise<Config> {
843885 inputs . repository ,
844886 inputs . features ,
845887 config . languages ,
888+ inputs . languagesInput ,
846889 inputs . sourceRoot ,
847890 config . buildMode ,
848891 config . computedConfig ,
0 commit comments