Skip to content

Commit d799ff5

Browse files
committed
Overlay: check per-language features
1 parent 9f70a5f commit d799ff5

File tree

2 files changed

+89
-9
lines changed

2 files changed

+89
-9
lines changed

src/config-utils.test.ts

Lines changed: 61 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1345,7 +1345,8 @@ test(
13451345
getOverlayDatabaseModeMacro,
13461346
"Ignore feature flag when analyzing non-default branch",
13471347
{
1348-
features: [Feature.OverlayAnalysis],
1348+
languages: [Language.javascript],
1349+
features: [Feature.OverlayAnalysis, Feature.OverlayAnalysisJavascript],
13491350
},
13501351
{
13511352
overlayDatabaseMode: OverlayDatabaseMode.None,
@@ -1357,7 +1358,8 @@ test(
13571358
getOverlayDatabaseModeMacro,
13581359
"Overlay-base database on default branch when feature enabled",
13591360
{
1360-
features: [Feature.OverlayAnalysis],
1361+
languages: [Language.javascript],
1362+
features: [Feature.OverlayAnalysis, Feature.OverlayAnalysisJavascript],
13611363
isDefaultBranch: true,
13621364
},
13631365
{
@@ -1368,8 +1370,10 @@ test(
13681370

13691371
test(
13701372
getOverlayDatabaseModeMacro,
1371-
"No overlay-base database on default branch when feature disabled",
1373+
"No overlay-base database on default branch when overall feature disabled",
13721374
{
1375+
languages: [Language.javascript],
1376+
features: [Feature.OverlayAnalysisJavascript],
13731377
isDefaultBranch: true,
13741378
},
13751379
{
@@ -1380,9 +1384,24 @@ test(
13801384

13811385
test(
13821386
getOverlayDatabaseModeMacro,
1383-
"Overlay analysis on PR when feature enabled",
1387+
"No overlay-base database on default branch when language-specific feature disabled",
13841388
{
1389+
languages: [Language.javascript],
13851390
features: [Feature.OverlayAnalysis],
1391+
isDefaultBranch: true,
1392+
},
1393+
{
1394+
overlayDatabaseMode: OverlayDatabaseMode.None,
1395+
useOverlayDatabaseCaching: false,
1396+
},
1397+
);
1398+
1399+
test(
1400+
getOverlayDatabaseModeMacro,
1401+
"Overlay analysis on PR when feature enabled",
1402+
{
1403+
languages: [Language.javascript],
1404+
features: [Feature.OverlayAnalysis, Feature.OverlayAnalysisJavascript],
13861405
isPullRequest: true,
13871406
},
13881407
{
@@ -1393,8 +1412,24 @@ test(
13931412

13941413
test(
13951414
getOverlayDatabaseModeMacro,
1396-
"No overlay analysis on PR when feature disabled",
1415+
"No overlay analysis on PR when overall feature disabled",
1416+
{
1417+
languages: [Language.javascript],
1418+
features: [Feature.OverlayAnalysisJavascript],
1419+
isPullRequest: true,
1420+
},
1421+
{
1422+
overlayDatabaseMode: OverlayDatabaseMode.None,
1423+
useOverlayDatabaseCaching: false,
1424+
},
1425+
);
1426+
1427+
test(
1428+
getOverlayDatabaseModeMacro,
1429+
"No overlay analysis on PR when language-specific feature disabled",
13971430
{
1431+
languages: [Language.javascript],
1432+
features: [Feature.OverlayAnalysis],
13981433
isPullRequest: true,
13991434
},
14001435
{
@@ -1433,7 +1468,8 @@ test(
14331468
getOverlayDatabaseModeMacro,
14341469
"Overlay PR analysis by feature flag for dsp-testing",
14351470
{
1436-
features: [Feature.OverlayAnalysis],
1471+
languages: [Language.javascript],
1472+
features: [Feature.OverlayAnalysis, Feature.OverlayAnalysisJavascript],
14371473
isPullRequest: true,
14381474
repositoryOwner: "dsp-testing",
14391475
},
@@ -1447,7 +1483,8 @@ test(
14471483
getOverlayDatabaseModeMacro,
14481484
"No overlay PR analysis by feature flag for other-org",
14491485
{
1450-
features: [Feature.OverlayAnalysis],
1486+
languages: [Language.javascript],
1487+
features: [Feature.OverlayAnalysis, Feature.OverlayAnalysisJavascript],
14511488
isPullRequest: true,
14521489
repositoryOwner: "other-org",
14531490
},
@@ -1510,3 +1547,20 @@ test(
15101547
useOverlayDatabaseCaching: false,
15111548
},
15121549
);
1550+
1551+
// Exercise language-specific overlay analysis features code paths
1552+
for (const language in Language) {
1553+
test(
1554+
getOverlayDatabaseModeMacro,
1555+
`Check default overlay analysis feature for ${language}`,
1556+
{
1557+
languages: [language as Language],
1558+
features: [Feature.OverlayAnalysis],
1559+
isPullRequest: true,
1560+
},
1561+
{
1562+
overlayDatabaseMode: OverlayDatabaseMode.None,
1563+
useOverlayDatabaseCaching: false,
1564+
},
1565+
);
1566+
}

src/config-utils.ts

Lines changed: 28 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -646,10 +646,24 @@ function parseQueriesFromInput(
646646
return trimmedInput.split(",").map((query) => ({ uses: query.trim() }));
647647
}
648648

649+
const OVERLAY_ANALYSIS_FEATURES: Record<Language, Feature> = {
650+
actions: Feature.OverlayAnalysisActions,
651+
cpp: Feature.OverlayAnalysisCpp,
652+
csharp: Feature.OverlayAnalysisCsharp,
653+
go: Feature.OverlayAnalysisGo,
654+
java: Feature.OverlayAnalysisJava,
655+
javascript: Feature.OverlayAnalysisJavascript,
656+
python: Feature.OverlayAnalysisPython,
657+
ruby: Feature.OverlayAnalysisRuby,
658+
rust: Feature.OverlayAnalysisRust,
659+
swift: Feature.OverlayAnalysisSwift,
660+
};
661+
649662
async function isOverlayAnalysisFeatureEnabled(
650663
repository: RepositoryNwo,
651664
features: FeatureEnablement,
652665
codeql: CodeQL,
666+
languages: Language[],
653667
): Promise<boolean> {
654668
// TODO: Remove the repository owner check once support for overlay analysis
655669
// stabilizes, and no more backward-incompatible changes are expected.
@@ -659,7 +673,14 @@ async function isOverlayAnalysisFeatureEnabled(
659673
if (!(await features.getValue(Feature.OverlayAnalysis, codeql))) {
660674
return false;
661675
}
662-
// TODO: Add per-language feature checks here
676+
for (const language of languages) {
677+
const feature = OVERLAY_ANALYSIS_FEATURES[language];
678+
if (feature && (await features.getValue(feature, codeql))) {
679+
continue;
680+
}
681+
// TODO: Add code-scanning feature checks here
682+
return false;
683+
}
663684
return true;
664685
}
665686

@@ -713,7 +734,12 @@ export async function getOverlayDatabaseMode(
713734
"from the CODEQL_OVERLAY_DATABASE_MODE environment variable.",
714735
);
715736
} else if (
716-
await isOverlayAnalysisFeatureEnabled(repository, features, codeql)
737+
await isOverlayAnalysisFeatureEnabled(
738+
repository,
739+
features,
740+
codeql,
741+
languages,
742+
)
717743
) {
718744
if (isAnalyzingPullRequest()) {
719745
overlayDatabaseMode = OverlayDatabaseMode.Overlay;

0 commit comments

Comments
 (0)