Skip to content

Commit 80615f5

Browse files
authored
Merge pull request #7379 from ryzngard/try_catch_completion
Catch exceptions on completion
2 parents 36a258b + 4bab6ab commit 80615f5

File tree

1 file changed

+45
-35
lines changed

1 file changed

+45
-35
lines changed

src/razor/src/completion/completionHandler.ts

Lines changed: 45 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -155,19 +155,23 @@ export class CompletionHandler {
155155
) {
156156
// TODO: Snippet support
157157

158-
if (delegatedCompletionItemResolveParams.originatingKind != LanguageKind.CSharp) {
159-
return delegatedCompletionItemResolveParams.completionItem;
160-
} else {
161-
const newItem = await vscode.commands.executeCommand<CompletionItem>(
162-
resolveCompletionsCommand,
163-
delegatedCompletionItemResolveParams.completionItem
164-
);
165-
166-
if (!newItem) {
158+
try {
159+
if (delegatedCompletionItemResolveParams.originatingKind != LanguageKind.CSharp) {
167160
return delegatedCompletionItemResolveParams.completionItem;
168-
}
161+
} else {
162+
const newItem = await vscode.commands.executeCommand<CompletionItem>(
163+
resolveCompletionsCommand,
164+
delegatedCompletionItemResolveParams.completionItem
165+
);
169166

170-
return newItem;
167+
if (!newItem) {
168+
return delegatedCompletionItemResolveParams.completionItem;
169+
}
170+
171+
return newItem;
172+
}
173+
} catch (error) {
174+
this.logger.logWarning(`${CompletionHandler.completionResolveEndpoint} failed with ${error}`);
171175
}
172176

173177
return CompletionHandler.emptyCompletionItem;
@@ -180,33 +184,39 @@ export class CompletionHandler {
180184
projectedPosition: Position,
181185
provisionalTextEdit?: SerializableTextEdit
182186
) {
183-
if (provisionalTextEdit) {
184-
// provisional C# completion
185-
return this.provideCSharpProvisionalCompletions(triggerCharacter, virtualDocument, projectedPosition);
186-
}
187+
try {
188+
if (provisionalTextEdit) {
189+
// provisional C# completion
190+
return this.provideCSharpProvisionalCompletions(triggerCharacter, virtualDocument, projectedPosition);
191+
}
187192

188-
// non-provisional C# completion
189-
const virtualDocumentUri = UriConverter.serialize(virtualDocument.uri);
190-
const params: CompletionParams = {
191-
context: {
192-
triggerKind: triggerKind,
193-
triggerCharacter: triggerCharacter,
194-
},
195-
textDocument: {
196-
uri: virtualDocumentUri,
197-
},
198-
position: projectedPosition,
199-
};
193+
// non-provisional C# completion
194+
const virtualDocumentUri = UriConverter.serialize(virtualDocument.uri);
195+
const params: CompletionParams = {
196+
context: {
197+
triggerKind: triggerKind,
198+
triggerCharacter: triggerCharacter,
199+
},
200+
textDocument: {
201+
uri: virtualDocumentUri,
202+
},
203+
position: projectedPosition,
204+
};
200205

201-
const csharpCompletions = await vscode.commands.executeCommand<CompletionList>(
202-
provideCompletionsCommand,
203-
params
204-
);
205-
if (!csharpCompletions) {
206-
return CompletionHandler.emptyCompletionList;
206+
const csharpCompletions = await vscode.commands.executeCommand<CompletionList>(
207+
provideCompletionsCommand,
208+
params
209+
);
210+
if (!csharpCompletions) {
211+
return CompletionHandler.emptyCompletionList;
212+
}
213+
CompletionHandler.adjustCSharpCompletionList(csharpCompletions, triggerCharacter);
214+
return csharpCompletions;
215+
} catch (error) {
216+
this.logger.logWarning(`${CompletionHandler.completionEndpoint} failed with ${error}`);
207217
}
208-
CompletionHandler.adjustCSharpCompletionList(csharpCompletions, triggerCharacter);
209-
return csharpCompletions;
218+
219+
return CompletionHandler.emptyCompletionList;
210220
}
211221

212222
// Provides 'provisional' C# completions.

0 commit comments

Comments
 (0)