Skip to content
This repository was archived by the owner on Nov 4, 2024. It is now read-only.

Commit c2c97ef

Browse files
felixhao28jakebailey
authored andcommitted
add ICompletionExtension2 accepting CompletionList as parameter (microsoft#1258)
* add ICompletionExtension2 accepting CompletionList as parameter * refactoring using switch pattern matching
1 parent ae7df8c commit c2c97ef

File tree

2 files changed

+20
-2
lines changed

2 files changed

+20
-2
lines changed

src/LanguageServer/Impl/Extensibility/ICompletionExtension.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,15 @@
1818
using Microsoft.Python.Analysis;
1919
using Microsoft.Python.Core.Text;
2020
using Microsoft.Python.LanguageServer.Completion;
21+
using Microsoft.Python.LanguageServer.Protocol;
2122

2223
namespace Microsoft.Python.LanguageServer.Extensibility {
2324
public interface ICompletionExtension {
2425
Task HandleCompletionAsync(IDocumentAnalysis analysis, SourceLocation location, CompletionItemEx[] completions, CancellationToken token);
26+
27+
}
28+
29+
public interface ICompletionExtension2 {
30+
Task HandleCompletionAsync(IDocumentAnalysis analysis, SourceLocation location, CompletionList completions, CancellationToken token);
2531
}
2632
}

src/LanguageServer/Impl/Implementation/Server.Editor.cs

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,8 +42,20 @@ public async Task<CompletionList> Completion(CompletionParams @params, Cancellat
4242
var result = _completionSource.GetCompletions(analysis, @params.position);
4343
res.items = result?.Completions?.ToArray() ?? Array.Empty<CompletionItem>();
4444

45-
await InvokeExtensionsAsync((ext, token)
46-
=> (ext as ICompletionExtension)?.HandleCompletionAsync(analysis, @params.position, res.items.OfType<CompletionItemEx>().ToArray(), cancellationToken), cancellationToken);
45+
await InvokeExtensionsAsync(async (ext, token)
46+
=> {
47+
switch (ext) {
48+
case ICompletionExtension2 e:
49+
await e.HandleCompletionAsync(analysis, @params.position, res, cancellationToken);
50+
break;
51+
case ICompletionExtension e:
52+
await e.HandleCompletionAsync(analysis, @params.position, res.items.OfType<CompletionItemEx>().ToArray(), cancellationToken);
53+
break;
54+
default:
55+
// ext is not a completion extension, ignore it.
56+
break;
57+
}
58+
}, cancellationToken);
4759
}
4860

4961
return res;

0 commit comments

Comments
 (0)