Skip to content

Commit a27c13b

Browse files
Change frontend to use code impacts for severity
1 parent dc3f77f commit a27c13b

File tree

4 files changed

+37
-8
lines changed

4 files changed

+37
-8
lines changed

frontend/src/deployment/metadata.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import fs from 'fs';
22
import path from 'path';
33

4+
import { maxSeverity } from '../types/Severities';
45
import { LanguageSupport } from '../types/RuleMetadata';
56
import { getRulesDirectories, listSupportedLanguages } from './utils';
67

@@ -135,5 +136,9 @@ function getRuleMetadata(srcDir: string, language?: string) {
135136
})();
136137
const genericFile = path.join(srcDir, 'metadata.json');
137138
const genericJson = fs.existsSync(genericFile) ? JSON.parse(fs.readFileSync(genericFile, 'utf8')) : {};
138-
return { ...genericJson, ...languageSpecificJson };
139+
const merged = { ...genericJson, ...languageSpecificJson };
140+
if (merged.hasOwnProperty('code') && merged.code.hasOwnProperty('impacts')) {
141+
merged['severity'] = maxSeverity(merged.code.impacts);
142+
}
143+
return merged;
139144
}

frontend/src/deployment/searchIndex.ts

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,8 @@ import path from 'path';
55
import { stripHtml } from 'string-strip-html';
66
import lunr, { Token } from 'lunr';
77

8-
import { IndexedRule, IndexStore, Severity, Type, IndexAggregates } from '../types/IndexStore';
8+
import { Severity, maxSeverity } from '../types/Severities';
9+
import { IndexedRule, IndexStore, Type, IndexAggregates } from '../types/IndexStore';
910
import { logger as rootLogger } from './deploymentLogger';
1011
import { LanguageSupport } from '../types/RuleMetadata';
1112

@@ -52,8 +53,12 @@ function buildOneRuleRecord(allLanguages: string[], rulesPath: string, ruleDir:
5253
metadata.extra?.legacyKeys?.forEach((legacyKey: string) => allKeys.add(legacyKey));
5354
titles.add(metadata.title);
5455
types.add(metadata.type);
55-
severities.add(metadata.defaultSeverity as Severity);
56-
supportedLanguages.push({name: lang, status: metadata.status});
56+
if (!metadata.hasOwnProperty('code')) {
57+
severities.add(Severity.INFO);
58+
} else {
59+
severities.add(maxSeverity(metadata.code.impacts));
60+
}
61+
supportedLanguages.push({ name: lang, status: metadata.status });
5762
if (metadata.tags) {
5863
for (const tag of metadata.tags) {
5964
tags.add(tag);
@@ -105,7 +110,7 @@ function buildOneRuleIndexedRecord(rulesPath: string, ruleDir: string)
105110
id: ruleDir,
106111
supportedLanguages: Array.from(record.supportedLanguages).sort((a, b) => a.name.localeCompare(b.name)),
107112
types: Array.from(record.types).sort((a, b) => a.localeCompare(b)),
108-
severities: Array.from(record.severities).sort((a, b) => a.localeCompare(b)),
113+
severities: Array.from(record.severities).sort((a, b) => b - a),
109114
all_keys: Array.from(record.allKeys).sort((a, b) => a.localeCompare(b)),
110115
titles: Array.from(record.titles).sort((a, b) => a.localeCompare(b)),
111116
tags: Array.from(record.tags).sort((a, b) => a.localeCompare(b)),
@@ -192,7 +197,7 @@ export function buildSearchIndex(ruleIndexStore: IndexStore) {
192197
this.field('titles', { extractor: (doc) => (doc as IndexedRule).titles.join('\n') });
193198
this.field('types');
194199
this.field('languages', { extractor: (doc) => (doc as IndexedRule).supportedLanguages.map(lang => lang.name) });
195-
this.field('defaultSeverity');
200+
this.field('severity');
196201
this.field('tags');
197202
this.field('qualityProfiles');
198203
this.field('descriptions');

frontend/src/types/IndexStore.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
import {LanguageSupport} from './RuleMetadata';
2-
3-
export type Severity = 'Blocker'|'Critical'|'Major'|'Minor'|'Info';
2+
import { Severity } from './Severities';
43
export type Type = 'BUG'|'CODE_SMELL'|'VULNERABILITY'|'SECURITY_HOTSPOT';
54

65
export interface IndexedRule {

frontend/src/types/Severities.ts

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
2+
export enum Severity {
3+
INFO,
4+
LOW,
5+
MEDIUM,
6+
HIGH,
7+
BLOCKER,
8+
};
9+
10+
export function maxSeverity(impacts: any): Severity {
11+
let maxSeverity: Severity = Severity.INFO;
12+
for (const key in impacts) {
13+
const val = impacts[key];
14+
const sev: Severity = Severity[val as keyof typeof Severity];
15+
if (sev > maxSeverity) {
16+
maxSeverity = sev;
17+
}
18+
}
19+
return maxSeverity;
20+
}

0 commit comments

Comments
 (0)