Skip to content

Commit 51c9e45

Browse files
committed
Added error handling
1 parent cbd0d81 commit 51c9e45

18 files changed

Lines changed: 644 additions & 474 deletions

package.json

Lines changed: 49 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -92,20 +92,30 @@
9292
},
9393
"views": {
9494
"deepcode": [
95+
{
96+
"id": "deepcode.views.error",
97+
"name": "DeepCode Extension",
98+
"when": "deepcode:error"
99+
},
95100
{
96101
"id": "deepcode.views.welcome",
97102
"name": "DeepCode Extension",
98-
"when": "!deepcode:loggedIn"
103+
"when": "!deepcode:error && !deepcode:loggedIn"
104+
},
105+
{
106+
"id": "deepcode.views.tc",
107+
"name": "DeepCode Extension",
108+
"when": "!deepcode:error && deepcode:loggedIn && !deepcode:uploadApproved"
99109
},
100110
{
101111
"id": "deepcode.views.progress",
102112
"name": "DeepCode Analysis",
103-
"when": "deepcode:loggedIn && deepcode:analyzing"
113+
"when": "!deepcode:error && deepcode:loggedIn && deepcode:uploadApproved && !deepcode:analysisCompleted"
104114
},
105115
{
106116
"id": "deepcode.views.analysis",
107117
"name": "DeepCode Analysis",
108-
"when": "deepcode:loggedIn && deepcode:completed"
118+
"when": "!deepcode:error && deepcode:loggedIn && deepcode:uploadApproved && deepcode:analysisCompleted"
109119
},
110120
{
111121
"id": "deepcode.views.support",
@@ -114,17 +124,31 @@
114124
]
115125
},
116126
"viewsWelcome": [
127+
{
128+
"view": "deepcode.views.error",
129+
"contents": "DeepCode is temporarily unavailable, we are automatically retrying to connect...",
130+
"when": "deepcode:error == 'transient'"
131+
},
132+
{
133+
"view": "deepcode.views.error",
134+
"contents": "DeepCode has encountered a problem. Please restart the extension: \n[Restart](command:deepcode.start 'Restart DeepCode')\nIf the error persists, please check your [settings](command:deepcode.settings) and [contact us](https://www.deepcode.ai/feedback?select=2)!",
135+
"when": "deepcode:error != 'transient'"
136+
},
117137
{
118138
"view": "deepcode.views.welcome",
119139
"contents": "Welcome to DeepCode for Visual Studio Code. 👋\nLet's start by connecting VS Code with DeepCode:\n[Connect VS Code with DeepCode](command:deepcode.login 'Connect with DeepCode')\n🚀 DeepCode's mission is to find bugs in your Javascript, TypeScript, Python, Java and C/C++ code, fast!\n💬 A VS Code user (Lucas) recently said:\"I'm really crazy about this super simple service that feels like it's from 5 years in the future\".\n👉 Connect with DeepCode and start your first analysis!"
120140
},
141+
{
142+
"view": "deepcode.views.tc",
143+
"contents": "Thanks for connecting with DeepCode. ✅\n 👉 You are almost set 🤗, let's confirm and start the remote analysis - feel free to check out our [terms and conditions](https://www.deepcode.ai/tc?utm_source=vsc) if you are into this.\n[Accept code upload](command:deepcode.approveUpload 'Upload code to DeepCode')\nYou can always change it later in the [settings](command:deepcode.settings)!"
144+
},
121145
{
122146
"view": "deepcode.views.progress",
123-
"contents": "IN PROGRESS"
147+
"contents": "Analysis in progress"
124148
},
125149
{
126150
"view": "deepcode.views.analysis",
127-
"contents": "ANALYZED"
151+
"contents": "DeepCode analyzed your code and found no issue!"
128152
}
129153
],
130154
"menus": {
@@ -133,20 +157,38 @@
133157
"command": "deepcode.start",
134158
"when": "deepcode:loggedIn"
135159
}
160+
],
161+
"view/title": [
162+
{
163+
"command": "deepcode.settings",
164+
"when": "view == deepcode.views.support",
165+
"group": "navigation"
166+
},
167+
{
168+
"command": "deepcode.start",
169+
"when": "view == deepcode.views.analysis",
170+
"group": "navigation"
171+
}
136172
]
137173
},
138174
"commands": [
139175
{
140176
"command": "deepcode.start",
141-
"title": "DeepCode re-scan"
177+
"title": "DeepCode re-scan",
178+
"icon": "images/icon-sidebar.svg"
142179
},
143180
{
144181
"command": "deepcode.settings",
145-
"title": "DeepCode settings"
182+
"title": "DeepCode settings",
183+
"icon": "images/icon-sidebar.svg"
146184
},
147185
{
148186
"command": "deepcode.login",
149187
"title": "DeepCode login"
188+
},
189+
{
190+
"command": "deepcode.approve",
191+
"title": "DeepCode approve upload and remote analysis"
150192
}
151193
]
152194
},

src/config/DeepCodeStore.ts

Lines changed: 0 additions & 27 deletions
This file was deleted.

src/deepcode/DeepCodeExtension.ts

Lines changed: 19 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import {
88
DEEPCODE_START_COMMAND,
99
DEEPCODE_SETTINGS_COMMAND,
1010
DEEPCODE_LOGIN,
11+
DEEPCODE_APPROVE,
1112
DEEPCODE_OPEN_BROWSER,
1213
DEEPCODE_OPEN_LOCAL,
1314
} from "./constants/commands";
@@ -24,7 +25,6 @@ import { IssueProvider } from "./view/IssueProvider";
2425

2526
class DeepCodeExtension extends DeepCodeLib implements DeepCode.ExtensionInterface {
2627
public activate(context: vscode.ExtensionContext): void {
27-
this.store.createStore(context);
2828
this.statusBarItem.show();
2929

3030
context.subscriptions.push(
@@ -50,14 +50,21 @@ class DeepCodeExtension extends DeepCodeLib implements DeepCode.ExtensionInterfa
5050
context.subscriptions.push(
5151
vscode.commands.registerCommand(
5252
DEEPCODE_LOGIN,
53-
this.activateExtensionAnalyzeActions.bind(this)
53+
this.initiateLogin.bind(this)
54+
)
55+
);
56+
57+
context.subscriptions.push(
58+
vscode.commands.registerCommand(
59+
DEEPCODE_APPROVE,
60+
this.approveUpload.bind(this)
5461
)
5562
);
5663

5764
context.subscriptions.push(
5865
vscode.commands.registerCommand(
5966
DEEPCODE_START_COMMAND,
60-
this.activateExtensionAnalyzeActions.bind(this)
67+
this.startExtension.bind(this)
6168
)
6269
);
6370

@@ -83,28 +90,19 @@ class DeepCodeExtension extends DeepCodeLib implements DeepCode.ExtensionInterfa
8390
new IssueProvider(this)
8491
);
8592

86-
context.subscriptions.push(
87-
{ dispose: this.startExtension() },
88-
);
89-
90-
this.runMigration();
91-
}
92-
93-
private runMigration() {
94-
// TODO: remove it after 01.06.2020
95-
// Move 'deepcode.api.cloudBackend' to 'deepcode.url' configuration
96-
const config = vscode.workspace.getConfiguration('deepcode');
97-
const oldBaseURL = config.get('api.cloudBackend');
98-
if (!config.get('url') && oldBaseURL) {
99-
config.update('url', oldBaseURL, true);
100-
}
101-
}
93+
// context.subscriptions.push(
94+
// { dispose: this.startExtension() },
95+
// );
10296

103-
public startExtension(): any {
10497
this.activateAll();
105-
this.activateExtensionAnalyzeActions();
98+
this.startExtension();
10699
}
107100

101+
// public startExtension(): any {
102+
// this.activateAll();
103+
// this.activateExtensionAnalyzeActions();
104+
// }
105+
108106
}
109107

110108
export default DeepCodeExtension;

src/deepcode/constants/commands.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ export const VSCODE_ADD_COMMENT_COMMAND = "editor.action.addCommentLine";
55
// custom depcode commands
66
export const DEEPCODE_START_COMMAND = "deepcode.start";
77
export const DEEPCODE_LOGIN = "deepcode.login";
8+
export const DEEPCODE_APPROVE = "deepcode.approve";
89
export const DEEPCODE_SETTINGS_COMMAND = "deepcode.settings";
910
export const DEEPCODE_IGNORE_ISSUES_COMMAND = "deepcode.ignoreissues";
1011
export const DEEPCODE_OPEN_BROWSER = "deepcode.open";

src/deepcode/constants/general.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
// Changing this requires changing display name in package.json.
22
export const DEEPCODE_NAME = "DeepCode";
33
export const ALLOWED_PAYLOAD_SIZE = 1024 * 1024 * 4; // max payload size of 4MB in bytes
4+
export const MAX_CONNECTION_RETRIES = 5; // max number of automatic retries before showing an error
45
export const IDE_NAME = "vscode";

src/deepcode/constants/views.ts

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,18 @@ export const DEEPCODE_VIEW_ANALYSIS = "deepcode.views.analysis";
44

55
export const DEEPCODE_CONTEXT = {
66
LOGGEDIN: "loggedIn",
7-
ANALYZING: "analyzing",
8-
COMPLETED: "completed",
7+
APPROVED: "uploadApproved",
8+
COMPLETED: "analysisCompleted",
9+
ERROR: "error",
10+
};
11+
12+
export const DEEPCODE_ERROR_CODES = {
13+
TRANSIENT: "transient",
14+
BLOCKING: "blocking",
915
};
1016

1117
export const DEEPCODE_ANALYSIS_STATUS = {
18+
COLLECTING: "Collecting files",
1219
HASHING: "Hashing files",
1320
UPLOADING: "Uploading files",
1421
ANALYZING: "Analyzing files",

src/deepcode/lib/analyzer/DeepCodeAnalyzer.ts

Lines changed: 33 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -223,7 +223,7 @@ class DeepCodeAnalyzer implements DeepCode.AnalyzerInterface {
223223
this.setIssuesMarkersDecoration();
224224
}
225225
} catch (err) {
226-
extension.errorHandler.processError(extension, err, {
226+
extension.processError(err, {
227227
message: errorsLogs.updateReviewPositions,
228228
bundleId: (extension.remoteBundles[updatedFile.workspace] || {}).bundleId,
229229
data: {
@@ -233,38 +233,38 @@ class DeepCodeAnalyzer implements DeepCode.AnalyzerInterface {
233233
}
234234
}
235235

236-
private async processFailedReviewCodeResults(
237-
extension: DeepCode.ExtensionInterface,
238-
path: string
239-
): Promise<void> {
240-
const { bundleId } = extension.remoteBundles[path];
241-
extension.errorHandler.processError(extension, new Error(), {
242-
message: errorsLogs.failedStatusOfAnalysis,
243-
bundleId
244-
});
245-
const workspace = vscode.workspace.workspaceFolders
246-
? vscode.workspace.workspaceFolders.find(folder => {
247-
return folder.uri.fsPath === path;
248-
})
249-
: { name: "" };
250-
const workspaceName = workspace ? workspace.name : "";
251-
const {
252-
msg: analysisErrorMsg,
253-
button: analysisErrorBtn
254-
} = deepCodeMessages.codeReviewFailed;
255-
const analysisErrorButton:
256-
| string
257-
| undefined = await vscode.window.showErrorMessage(
258-
analysisErrorMsg(workspaceName),
259-
analysisErrorBtn
260-
);
261-
if (analysisErrorButton === analysisErrorBtn) {
262-
// if analysis status === FAILED,
263-
// we create new bundle, send it, check it and trigger new review
264-
await extension.updateHashesBundles(path);
265-
await extension.performBundlesActions(path);
266-
}
267-
}
236+
// private async processFailedReviewCodeResults(
237+
// extension: DeepCode.ExtensionInterface,
238+
// path: string
239+
// ): Promise<void> {
240+
// const { bundleId } = extension.remoteBundles[path];
241+
// extension.processError(new Error(), {
242+
// message: errorsLogs.failedStatusOfAnalysis,
243+
// bundleId
244+
// });
245+
// const workspace = vscode.workspace.workspaceFolders
246+
// ? vscode.workspace.workspaceFolders.find(folder => {
247+
// return folder.uri.fsPath === path;
248+
// })
249+
// : { name: "" };
250+
// const workspaceName = workspace ? workspace.name : "";
251+
// const {
252+
// msg: analysisErrorMsg,
253+
// button: analysisErrorBtn
254+
// } = deepCodeMessages.codeReviewFailed;
255+
// const analysisErrorButton:
256+
// | string
257+
// | undefined = await vscode.window.showErrorMessage(
258+
// analysisErrorMsg(workspaceName),
259+
// analysisErrorBtn
260+
// );
261+
// if (analysisErrorButton === analysisErrorBtn) {
262+
// // if analysis status === FAILED,
263+
// // we create new bundle, send it, check it and trigger new review
264+
// await extension.updateHashesBundles(path);
265+
// await extension.performBundlesActions(path);
266+
// }
267+
// }
268268

269269
public async removeReviewResults(workspacePath: string): Promise<void> {
270270
await delete this.analysisResultsCollection[workspacePath];

0 commit comments

Comments
 (0)