in packages/core/src/codewhisperer/service/securityIssueCodeActionProvider.ts [20:105]
public provideCodeActions(
document: vscode.TextDocument,
range: vscode.Range | vscode.Selection,
_context: vscode.CodeActionContext,
_token: vscode.CancellationToken
): vscode.CodeAction[] {
const codeActions: vscode.CodeAction[] = []
for (const group of this.issueProvider.issues) {
if (document.fileName !== group.filePath) {
continue
}
for (const issue of group.issues) {
if (!issue.visible) {
continue
}
const issueRange = new vscode.Range(issue.startLine, 0, issue.endLine, 0)
if (issueRange.contains(range)) {
const [suggestedFix] = issue.suggestedFixes
if (suggestedFix) {
const fixIssue = new vscode.CodeAction(
`Amazon Q: Fix "${issue.title}"`,
vscode.CodeActionKind.QuickFix
)
const args: [CodeScanIssue, string, Component] = [issue, group.filePath, 'quickfix']
fixIssue.command = {
title: 'Fix with Amazon Q',
command: 'aws.amazonq.applySecurityFix',
arguments: args,
}
codeActions.push(fixIssue)
}
const openIssue = new vscode.CodeAction(
`Amazon Q: View details for "${issue.title}"`,
vscode.CodeActionKind.QuickFix
)
const args: [CodeScanIssue, string] = [issue, group.filePath]
openIssue.command = {
title: `Open "${amazonqCodeIssueDetailsTabTitle}"`,
command: 'aws.amazonq.openSecurityIssuePanel',
arguments: args,
}
codeActions.push(openIssue)
const explainWithQ = new vscode.CodeAction(
`Amazon Q: Explain "${issue.title}"`,
vscode.CodeActionKind.QuickFix
)
const explainWithQArgs = [issue]
explainWithQ.command = {
title: 'Explain with Amazon Q',
command: 'aws.amazonq.explainIssue',
arguments: explainWithQArgs,
}
codeActions.push(explainWithQ)
const ignoreIssue = new vscode.CodeAction(
`Amazon Q: Ignore this "${issue.title}" issue`,
vscode.CodeActionKind.QuickFix
)
const ignoreIssueArgs = [issue, group.filePath, 'quickfix']
ignoreIssue.command = {
title: 'Ignore this issue',
command: 'aws.amazonq.security.ignore',
arguments: ignoreIssueArgs,
}
codeActions.push(ignoreIssue)
const ignoreAllIssues = new vscode.CodeAction(
`Amazon Q: Ignore all "${issue.title}" issues`,
vscode.CodeActionKind.QuickFix
)
const ignoreAllIssuesArgs = [issue, 'quickfix']
ignoreAllIssues.command = {
title: 'Ignore similar issues',
command: 'aws.amazonq.security.ignoreAll',
arguments: ignoreAllIssuesArgs,
}
codeActions.push(ignoreAllIssues)
}
}
}
return codeActions
}