diff --git a/web/api/js/codechecker-api-node/dist/codechecker-api-6.60.0.tgz b/web/api/js/codechecker-api-node/dist/codechecker-api-6.60.0.tgz index 5d495c8edf..da421ef258 100644 Binary files a/web/api/js/codechecker-api-node/dist/codechecker-api-6.60.0.tgz and b/web/api/js/codechecker-api-node/dist/codechecker-api-6.60.0.tgz differ diff --git a/web/api/py/codechecker_api/dist/codechecker_api.tar.gz b/web/api/py/codechecker_api/dist/codechecker_api.tar.gz index 7b3fdba756..e1634ab257 100644 Binary files a/web/api/py/codechecker_api/dist/codechecker_api.tar.gz and b/web/api/py/codechecker_api/dist/codechecker_api.tar.gz differ diff --git a/web/api/py/codechecker_api_shared/dist/codechecker_api_shared.tar.gz b/web/api/py/codechecker_api_shared/dist/codechecker_api_shared.tar.gz index e1a622320e..4c3dc41e23 100644 Binary files a/web/api/py/codechecker_api_shared/dist/codechecker_api_shared.tar.gz and b/web/api/py/codechecker_api_shared/dist/codechecker_api_shared.tar.gz differ diff --git a/web/api/report_server.thrift b/web/api/report_server.thrift index 2db06a6326..cc4e7ee3f1 100644 --- a/web/api/report_server.thrift +++ b/web/api/report_server.thrift @@ -553,10 +553,10 @@ struct Guideline { } struct Rule { - 1: string ruleId, // The identifier of the rule. - 2: string title, // The rule summary. - 3: string url, // The link of the rule page. - 4: list> checkers // List of checker names + 1: string ruleId, // The identifier of the rule. + 2: string title, // The rule summary. + 3: string url, // The link of the rule page. + 4: list checkers // List of checker names } typedef map> GuidelineRules diff --git a/web/server/codechecker_server/api/report_server.py b/web/server/codechecker_server/api/report_server.py index 02a04e7a0c..6c6eaf9175 100644 --- a/web/server/codechecker_server/api/report_server.py +++ b/web/server/codechecker_server/api/report_server.py @@ -2790,13 +2790,8 @@ def getGuidelineRules( guideline_rules[guideline.guidelineName] = [] continue for rule in rules: - checkers = [{ - "checkerName": checker_name, - "severity": self._context.checker_labels.severity( - checker_name).lower() - } for checker_name in - self._context.checker_labels.checkers_by_labels( - [f"{guideline.guidelineName}:{rule}"])] + checkers = self._context.checker_labels.checkers_by_labels( + [f"{guideline.guidelineName}:{rule}"]) guideline_rules[guideline.guidelineName].append( Rule( diff --git a/web/server/vue-cli/package-lock.json b/web/server/vue-cli/package-lock.json index cbd9211158..1c6420c37c 100644 --- a/web/server/vue-cli/package-lock.json +++ b/web/server/vue-cli/package-lock.json @@ -5105,7 +5105,7 @@ "node_modules/codechecker-api": { "version": "6.60.0", "resolved": "file:../../api/js/codechecker-api-node/dist/codechecker-api-6.60.0.tgz", - "integrity": "sha512-sD+eHAFToerxDaKfhELvskHcwQ6d+J+jrhVA9vAesW/vawzjLG7OH9+Bz0XpTVwaCUKC6rhL5JSigCUIqF1f3g==", + "integrity": "sha512-tX0TNyDhJn6Zvw7KnyUXdFk/bYNVG2aLLbru3JjqfBJ545EeIiAfUTXm2xz5g9QfEAm3bqtKbCXDBA64mmKujw==", "license": "SEE LICENSE IN LICENSE", "dependencies": { "thrift": "0.13.0-hotfix.1" @@ -21141,7 +21141,7 @@ }, "codechecker-api": { "version": "file:../../api/js/codechecker-api-node/dist/codechecker-api-6.60.0.tgz", - "integrity": "sha512-sD+eHAFToerxDaKfhELvskHcwQ6d+J+jrhVA9vAesW/vawzjLG7OH9+Bz0XpTVwaCUKC6rhL5JSigCUIqF1f3g==", + "integrity": "sha512-tX0TNyDhJn6Zvw7KnyUXdFk/bYNVG2aLLbru3JjqfBJ545EeIiAfUTXm2xz5g9QfEAm3bqtKbCXDBA64mmKujw==", "requires": { "thrift": "0.13.0-hotfix.1" } diff --git a/web/server/vue-cli/src/components/Statistics/Guideline/GuidelineStatistics.vue b/web/server/vue-cli/src/components/Statistics/Guideline/GuidelineStatistics.vue index 25e06afb0f..10cb2aa873 100644 --- a/web/server/vue-cli/src/components/Statistics/Guideline/GuidelineStatistics.vue +++ b/web/server/vue-cli/src/components/Statistics/Guideline/GuidelineStatistics.vue @@ -131,6 +131,7 @@ import { BaseStatistics } from "@/components/Statistics"; import GuidelineStatisticsTable from "./GuidelineStatisticsTable"; import StatisticsDialog from "../StatisticsDialog"; import { + Checker, Guideline, MAX_QUERY_SIZE, ReportFilter, @@ -304,9 +305,52 @@ export default { this.all_guideline_rules = await new Promise(resolve => { ccService.getClient().getGuidelineRules( this.selectedGuidelines, - handleThriftError(guidelines => { + handleThriftError(async guidelines => { + for (const [ guideline, rules ] of Object.entries(guidelines)) { + guidelines[guideline] = await Promise.all( + rules.map(async rule => { + const checkers = await Promise.all( + rule.checkers.map(async checker => { + const severity = await new Promise(resolve => { + ccService.getClient().getCheckerLabels( + [ + new Checker({ + analyzerName: null, + checkerId: checker + }) + ], + handleThriftError(labels => { + const severityLabels = labels[0].filter(param => + param.startsWith("severity") + ); + const severity = severityLabels.length + ? severityLabels[0].split("severity:")[1] + : null; + resolve(severity); + }) + ); + }); + + return { + checkerName: checker, + severity: severity + }; + }) + ); + + return { + ruleId: rule.ruleId, + title: rule.title, + url: rule.url, + checkers: checkers + }; + }) + ); + } + resolve(guidelines); - })); + }) + ); }); }, diff --git a/web/tests/functional/report_viewer_api/test_get_run_results.py b/web/tests/functional/report_viewer_api/test_get_run_results.py index 06364d7157..a927051a44 100644 --- a/web/tests/functional/report_viewer_api/test_get_run_results.py +++ b/web/tests/functional/report_viewer_api/test_get_run_results.py @@ -470,8 +470,5 @@ def test_get_guideline_rules(self): sei_cert_rules))[0] self.assertEqual(len(con_54_cpp_rule.checkers), 1) - releated_checker = { - "checkerName": "bugprone-spuriously-wake-up-functions", - "severity": "medium" - } - self.assertEqual(con_54_cpp_rule.checkers, [releated_checker]) + self.assertEqual(con_54_cpp_rule.checkers, + ["bugprone-spuriously-wake-up-functions"])