Skip to content

Commit cbd35dc

Browse files
authored
Add External Access APIs for F# and TS (#56972)
1 parent 47ea798 commit cbd35dc

File tree

5 files changed

+68
-3
lines changed

5 files changed

+68
-3
lines changed
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
// Licensed to the .NET Foundation under one or more agreements.
2+
// The .NET Foundation licenses this file to you under the MIT license.
3+
// See the LICENSE file in the project root for more information.
4+
5+
using Microsoft.CodeAnalysis.Completion;
6+
using Microsoft.CodeAnalysis.Host;
7+
using Microsoft.CodeAnalysis.Options;
8+
using Microsoft.CodeAnalysis.Text;
9+
10+
namespace Microsoft.CodeAnalysis.ExternalAccess.VSTypeScript.Api
11+
{
12+
internal abstract class VSTypeScriptCompletionProvider : CompletionProvider
13+
{
14+
public sealed override bool ShouldTriggerCompletion(SourceText text, int caretPosition, CompletionTrigger trigger, OptionSet options)
15+
{
16+
var triggerOnTypingLetters = options.GetOption(CompletionOptions.TriggerOnTypingLetters2, InternalLanguageNames.TypeScript);
17+
return ShouldTriggerCompletionImpl(text, caretPosition, trigger, triggerOnTypingLetters);
18+
}
19+
20+
protected abstract bool ShouldTriggerCompletionImpl(SourceText text, int caretPosition, CompletionTrigger trigger, bool triggerOnTypingLetters);
21+
}
22+
}

src/Tools/ExternalAccess/FSharp/Completion/FSharpCommonCompletionProvider.cs

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,16 +4,19 @@
44

55
#nullable disable
66

7+
using System;
78
using Microsoft.CodeAnalysis.Completion;
89
using Microsoft.CodeAnalysis.ExternalAccess.FSharp.Internal.Completion;
910

1011
namespace Microsoft.CodeAnalysis.ExternalAccess.FSharp.Completion
1112
{
1213
internal static class FSharpCommonCompletionProvider
1314
{
15+
[Obsolete]
1416
public static CompletionProvider Create(IFSharpCommonCompletionProvider fsharpCommonCompletionProvider)
15-
{
16-
return new FSharpInternalCommonCompletionProvider(fsharpCommonCompletionProvider);
17-
}
17+
=> new FSharpInternalCommonCompletionProvider(fsharpCommonCompletionProvider);
18+
19+
public static CompletionProvider Create(FSharpCommonCompletionProviderBase fsharpCommonCompletionProvider)
20+
=> new FSharpInternalCommonCompletionProvider(fsharpCommonCompletionProvider);
1821
}
1922
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
// Licensed to the .NET Foundation under one or more agreements.
2+
// The .NET Foundation licenses this file to you under the MIT license.
3+
// See the LICENSE file in the project root for more information.
4+
5+
using Microsoft.CodeAnalysis.Completion;
6+
using Microsoft.CodeAnalysis.Host;
7+
using Microsoft.CodeAnalysis.Options;
8+
using Microsoft.CodeAnalysis.Text;
9+
10+
namespace Microsoft.CodeAnalysis.ExternalAccess.FSharp.Completion
11+
{
12+
internal abstract class FSharpCompletionProviderBase : CompletionProvider
13+
{
14+
public sealed override bool ShouldTriggerCompletion(SourceText text, int caretPosition, CompletionTrigger trigger, OptionSet options)
15+
=> ShouldTriggerCompletionImpl(text, caretPosition, trigger);
16+
17+
protected abstract bool ShouldTriggerCompletionImpl(SourceText text, int caretPosition, CompletionTrigger trigger);
18+
}
19+
}

src/Tools/ExternalAccess/FSharp/Completion/IFSharpCommonCompletionProvider.cs

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313

1414
namespace Microsoft.CodeAnalysis.ExternalAccess.FSharp.Completion
1515
{
16+
[Obsolete]
1617
internal interface IFSharpCommonCompletionProvider
1718
{
1819
Task ProvideCompletionsAsync(CompletionContext context);
@@ -25,4 +26,22 @@ internal interface IFSharpCommonCompletionProvider
2526
char? ch,
2627
CancellationToken cancellationToken);
2728
}
29+
30+
#pragma warning disable CS0612 // Type or member is obsolete
31+
internal abstract class FSharpCommonCompletionProviderBase : IFSharpCommonCompletionProvider
32+
#pragma warning restore CS0612 // Type or member is obsolete
33+
{
34+
public abstract Task ProvideCompletionsAsync(CompletionContext context);
35+
36+
public abstract bool IsInsertionTrigger(SourceText text, int insertedCharacterPosition);
37+
38+
public abstract Task<TextChange?> GetTextChangeAsync(
39+
Func<CompletionItem, char?, CancellationToken, Task<TextChange?>> baseGetTextChangeAsync,
40+
CompletionItem selectedItem,
41+
char? ch,
42+
CancellationToken cancellationToken);
43+
44+
bool IFSharpCommonCompletionProvider.IsInsertionTrigger(SourceText text, int insertedCharacterPosition, OptionSet options)
45+
=> IsInsertionTrigger(text, insertedCharacterPosition);
46+
}
2847
}

src/Tools/ExternalAccess/FSharp/Internal/Completion/FSharpInternalCommonCompletionProvider.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,12 +16,14 @@ namespace Microsoft.CodeAnalysis.ExternalAccess.FSharp.Internal.Completion
1616
{
1717
internal sealed class FSharpInternalCommonCompletionProvider : CommonCompletionProvider
1818
{
19+
#pragma warning disable CS0612 // Switch to FSharpCommonCompletionProviderBase after F# switches
1920
private readonly IFSharpCommonCompletionProvider _provider;
2021

2122
public FSharpInternalCommonCompletionProvider(IFSharpCommonCompletionProvider provider)
2223
{
2324
_provider = provider;
2425
}
26+
#pragma warning restore CS0612 // Type or member is obsolete
2527

2628
public override Task ProvideCompletionsAsync(CompletionContext context)
2729
{

0 commit comments

Comments
 (0)