Skip to content

Commit 2c89022

Browse files
committed
Added show suggestion to code actions.
1 parent 900fb5f commit 2c89022

3 files changed

Lines changed: 32 additions & 4 deletions

File tree

src/deepcode/DeepCodeExtension.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -123,7 +123,8 @@ class DeepCodeExtension extends DeepCodeLib implements ExtensionInterface {
123123
async (message: string, severity: number, uri: vscode.Uri, range: vscode.Range, openUri?: vscode.Uri, openRange?: vscode.Range) => {
124124
const suggestion = this.analyzer.findSuggestion(message);
125125
if (!suggestion) return;
126-
await vscode.commands.executeCommand(DEEPCODE_OPEN_LOCAL_COMMAND, openUri || uri, openRange || range);
126+
// Set openUri = null to avoid opening the file (e.g. in the ActionProvider)
127+
if (openUri !== null) await vscode.commands.executeCommand(DEEPCODE_OPEN_LOCAL_COMMAND, openUri || uri, openRange || range);
127128
this.suggestionProvider.show(suggestion.id, uri, range);
128129
await this.trackViewSuggestion(suggestion.id, severity);
129130
},

src/deepcode/constants/analysis.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@ export const FILE_IGNORE_ISSUE_BASE_COMMENT_TEXT: string = `file ${IGNORE_ISSUE_
1111
export const IGNORE_ISSUE_REASON_TIP: string =
1212
"<please specify a reason of ignoring this>";
1313

14+
export const SHOW_ISSUE_ACTION_NAME: string =
15+
"Show this suggestion (DeepCode)";
1416
export const IGNORE_ISSUE_ACTION_NAME: string =
1517
"Ignore this particular suggestion (DeepCode)";
1618
export const FILE_IGNORE_ACTION_NAME: string =

src/deepcode/lib/deepCodeProviders/codeActionsProvider/DeepCodeIssuesActionsProvider.ts

Lines changed: 28 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,17 @@
11
import * as vscode from "vscode";
22
import * as _ from "lodash";
3-
import { findIssueWithRange, ignoreIssueCommentText } from '../../../utils/analysisUtils';
3+
import { getDeepCodeSeverity, findIssueWithRange, ignoreIssueCommentText } from '../../../utils/analysisUtils';
44
import {
5+
SHOW_ISSUE_ACTION_NAME,
56
IGNORE_ISSUE_ACTION_NAME,
67
FILE_IGNORE_ACTION_NAME,
78
IGNORE_ISSUE_BASE_COMMENT_TEXT,
89
FILE_IGNORE_ISSUE_BASE_COMMENT_TEXT,
910
} from "../../../constants/analysis";
1011
import {
12+
DEEPCODE_OPEN_ISSUE_COMMAND,
1113
DEEPCODE_IGNORE_ISSUE_COMMAND,
12-
VSCODE_ADD_COMMENT_COMMAND
14+
VSCODE_ADD_COMMENT_COMMAND,
1315
} from "../../../constants/commands";
1416
import { COMMAND_DEBOUNCE_INTERVAL } from "../../../constants/general";
1517

@@ -167,6 +169,28 @@ export class DeepCodeIssuesActionProvider implements vscode.CodeActionProvider {
167169
return ignoreIssueAction;
168170
}
169171

172+
private createShowIssueAction({
173+
document,
174+
matchedIssue,
175+
}: {
176+
document: vscode.TextDocument;
177+
matchedIssue: vscode.Diagnostic;
178+
}): vscode.CodeAction {
179+
const showIssueAction = new vscode.CodeAction(
180+
SHOW_ISSUE_ACTION_NAME,
181+
DeepCodeIssuesActionProvider.providedCodeActionKinds[0],
182+
);
183+
184+
const suggestion = this.findSuggestion(matchedIssue.message);
185+
if (suggestion) showIssueAction.command = {
186+
command: DEEPCODE_OPEN_ISSUE_COMMAND,
187+
title: DEEPCODE_OPEN_ISSUE_COMMAND,
188+
arguments: [matchedIssue.message, suggestion.severity, document.uri, matchedIssue.range, null],
189+
};
190+
191+
return showIssueAction;
192+
}
193+
170194
public provideCodeActions(
171195
document: vscode.TextDocument,
172196
clickedRange: vscode.Range,
@@ -178,13 +202,14 @@ export class DeepCodeIssuesActionProvider implements vscode.CodeActionProvider {
178202
const matchedIssue = findIssueWithRange(clickedRange, fileIssues);
179203
if (matchedIssue) {
180204
const codeActionParams = { document, matchedIssue };
205+
const showIssueAction = this.createShowIssueAction(codeActionParams);
181206
const ignoreIssueAction = this.createIgnoreIssueAction(codeActionParams);
182207
const fileIgnoreIssueAction = this.createIgnoreIssueAction({
183208
...codeActionParams,
184209
isFileIgnore: true,
185210
});
186211
// returns list of actions, all new actions should be added to this list
187-
return [ignoreIssueAction, fileIgnoreIssueAction];
212+
return [showIssueAction, ignoreIssueAction, fileIgnoreIssueAction];
188213
}
189214
}
190215
}

0 commit comments

Comments
 (0)