in server/aws-lsp-codewhisperer/src/language-server/securityScan/securityScanHandler.ts [171:219]
async mapToAggregatedList(json: string, projectPath: string) {
const codeScanIssueMap: Map<string, RawCodeScanIssue[]> = new Map()
const aggregatedCodeScanIssueList: AggregatedCodeScanIssue[] = []
const codeScanIssues: RawCodeScanIssue[] = JSON.parse(json)
codeScanIssues.forEach(issue => {
if (codeScanIssueMap.has(issue.filePath)) {
const list = codeScanIssueMap.get(issue.filePath)
if (list === undefined) {
codeScanIssueMap.set(issue.filePath, [issue])
} else {
list.push(issue)
codeScanIssueMap.set(issue.filePath, list)
}
} else {
codeScanIssueMap.set(issue.filePath, [issue])
}
})
for (const [relFilePath, issues] of codeScanIssueMap) {
const filePath = path.join(projectPath, relFilePath)
const fileExists = await this.workspace.fs.exists(filePath)
if (fileExists) {
const aggregatedCodeScanIssue = {
filePath: filePath,
issues: issues.map(issue => {
return {
startLine: issue.startLine - 1 >= 0 ? issue.startLine - 1 : 0,
endLine: issue.endLine,
comment: `${issue.title.trim()}: ${issue.description.text.trim()}`,
title: issue.title,
description: issue.description,
detectorId: issue.detectorId,
detectorName: issue.detectorName,
findingId: issue.findingId,
ruleId: issue.ruleId,
relatedVulnerabilities: issue.relatedVulnerabilities,
severity: issue.severity,
recommendation: issue.remediation.recommendation,
suggestedFixes: issue.remediation.suggestedFixes,
}
}),
}
aggregatedCodeScanIssueList.push(aggregatedCodeScanIssue)
}
}
return aggregatedCodeScanIssueList
}