Source code for mythx_cli.formatter.sonarqube

import json
from typing import List, Optional, Tuple

from mythx_models.response import AnalysisInputResponse, DetectedIssuesResponse
from mythx_models.response.issue import Severity, SourceType

from mythx_cli.formatter.json import JSONFormatter


[docs]class SonarQubeFormatter(JSONFormatter): report_requires_input = False
[docs] @staticmethod def format_detected_issues( issues_list: List[Tuple[DetectedIssuesResponse, Optional[AnalysisInputResponse]]] ) -> str: new_reports = [] for resp, _ in issues_list: for report in resp.issue_reports: for issue in report: new_issue = {} for loc in issue.decoded_locations: for raw_loc in issue.locations: if raw_loc.source_type != SourceType.SOLIDITY_FILE: continue new_issue["onInputFile"] = raw_loc.source_list[raw_loc.source_map.components[0].file_id] new_issue["atLineNr"] = loc.start_line new_issue.update( { "linterName": "mythx", "forRule": issue.swc_id, "ruleType": issue.severity.name, "remediationEffortMinutes": 0, "severity": "vulnerability" if issue.severity == Severity.HIGH else issue.severity.name, "message": issue.description_long, } ) new_reports.append(new_issue) return json.dumps(new_reports)