aboutsummaryrefslogtreecommitdiff
path: root/editors/code/src
diff options
context:
space:
mode:
Diffstat (limited to 'editors/code/src')
-rw-r--r--editors/code/src/main.ts26
1 files changed, 19 insertions, 7 deletions
diff --git a/editors/code/src/main.ts b/editors/code/src/main.ts
index 2982b9cbf..a1521a93b 100644
--- a/editors/code/src/main.ts
+++ b/editors/code/src/main.ts
@@ -19,6 +19,16 @@ let ctx: Ctx | undefined;
19const RUST_PROJECT_CONTEXT_NAME = "inRustProject"; 19const RUST_PROJECT_CONTEXT_NAME = "inRustProject";
20 20
21export async function activate(context: vscode.ExtensionContext) { 21export async function activate(context: vscode.ExtensionContext) {
22 // For some reason vscode not always shows pop-up error notifications
23 // when an extension fails to activate, so we do it explicitly by ourselves.
24 // FIXME: remove this bit of code once vscode fixes this issue: https://github.com/microsoft/vscode/issues/101242
25 await tryActivate(context).catch(err => {
26 void vscode.window.showErrorMessage(`Cannot activate rust-analyzer: ${err.message}`);
27 throw err;
28 });
29}
30
31async function tryActivate(context: vscode.ExtensionContext) {
22 // Register a "dumb" onEnter command for the case where server fails to 32 // Register a "dumb" onEnter command for the case where server fails to
23 // start. 33 // start.
24 // 34 //
@@ -58,9 +68,7 @@ export async function activate(context: vscode.ExtensionContext) {
58 68
59 const workspaceFolder = vscode.workspace.workspaceFolders?.[0]; 69 const workspaceFolder = vscode.workspace.workspaceFolders?.[0];
60 if (workspaceFolder === undefined) { 70 if (workspaceFolder === undefined) {
61 const err = "Cannot activate rust-analyzer when no folder is opened"; 71 throw new Error("no folder is opened");
62 void vscode.window.showErrorMessage(err);
63 throw new Error(err);
64 } 72 }
65 73
66 // Note: we try to start the server before we activate type hints so that it 74 // Note: we try to start the server before we activate type hints so that it
@@ -152,13 +160,17 @@ async function bootstrapExtension(config: Config, state: PersistentState): Promi
152 return; 160 return;
153 }; 161 };
154 162
155 const lastCheck = state.lastCheck;
156 const now = Date.now(); 163 const now = Date.now();
164 if (config.package.releaseTag === NIGHTLY_TAG) {
165 // Check if we should poll github api for the new nightly version
166 // if we haven't done it during the past hour
167 const lastCheck = state.lastCheck;
157 168
158 const anHour = 60 * 60 * 1000; 169 const anHour = 60 * 60 * 1000;
159 const shouldDownloadNightly = state.releaseId === undefined || (now - (lastCheck ?? 0)) > anHour; 170 const shouldCheckForNewNightly = state.releaseId === undefined || (now - (lastCheck ?? 0)) > anHour;
160 171
161 if (!shouldDownloadNightly) return; 172 if (!shouldCheckForNewNightly) return;
173 }
162 174
163 const release = await fetchRelease("nightly").catch((e) => { 175 const release = await fetchRelease("nightly").catch((e) => {
164 log.error(e); 176 log.error(e);