Skip to content

Commit 462c53b

Browse files
committed
IdeographAsyncCompletionItemManagerProvider现在未启用时不再自行查找IAsyncCompletionItemManager,以避免其它体验受影响
1 parent 30cd027 commit 462c53b

File tree

3 files changed

+6
-62
lines changed

3 files changed

+6
-62
lines changed

src/Intellisense/AsyncCompletion/IdeographAsyncCompletionItemManagerProvider.cs

Lines changed: 2 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
#nullable enable
22

33
using System.ComponentModel.Composition;
4-
using System.Threading;
54
using ChinesePinyinIntelliSenseExtender.Options;
65
using Microsoft.VisualStudio.Language.Intellisense.AsyncCompletion;
76
using Microsoft.VisualStudio.Text.Editor;
@@ -21,53 +20,23 @@ internal class IdeographAsyncCompletionItemManagerProvider(IPatternMatcherFactor
2120
{
2221
#region Private 字段
2322

24-
/// <summary>
25-
/// 递归标记
26-
/// </summary>
27-
private static readonly AsyncLocal<bool> s_completionItemManagerProviderRecursionTag = new();
28-
2923
private static IdeographAsyncCompletionItemManager? s_instance;
3024

31-
[ImportMany]
32-
private readonly Lazy<IAsyncCompletionItemManagerProvider>[] _lazyIAsyncCompletionItemManagerProviders = null!;
33-
3425
private readonly IPatternMatcherFactory _patternMatcherFactory = patternMatcherFactory ?? throw new ArgumentNullException(nameof(patternMatcherFactory));
3526

3627
#endregion Private 字段
3728

3829
#region Public 方法
3930

40-
public IAsyncCompletionItemManager GetOrCreate(ITextView textView)
31+
public IAsyncCompletionItemManager? GetOrCreate(ITextView textView)
4132
{
42-
if (s_completionItemManagerProviderRecursionTag.Value)
43-
{
44-
return null!;
45-
}
46-
4733
var options = GeneralOptions.Instance;
4834

4935
//非实验模式不使用 IdeographAsyncCompletionItemManager
5036
if (!options.Enable
5137
|| options.AsyncCompletionMode != AsyncCompletionMode.Experimental)
5238
{
53-
try
54-
{
55-
s_completionItemManagerProviderRecursionTag.Value = true;
56-
57-
foreach (var provider in _lazyIAsyncCompletionItemManagerProviders)
58-
{
59-
if (provider.Value.GetOrCreate(textView) is IAsyncCompletionItemManager asyncCompletionItemManager)
60-
{
61-
return asyncCompletionItemManager;
62-
}
63-
}
64-
//返回null应该是没问题的
65-
return null!;
66-
}
67-
finally
68-
{
69-
s_completionItemManagerProviderRecursionTag.Value = false;
70-
}
39+
return null;
7140
}
7241

7342
return s_instance ??= new IdeographAsyncCompletionItemManager(options, _patternMatcherFactory);

src/Intellisense/AsyncCompletion/IdeographAsyncCompletionSourceProvider.cs

Lines changed: 3 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,8 @@
22

33
using System.ComponentModel.Composition;
44
using System.Diagnostics;
5-
using System.Threading;
65
using ChinesePinyinIntelliSenseExtender.Options;
76
using Microsoft.VisualStudio.Language.Intellisense.AsyncCompletion;
8-
using Microsoft.VisualStudio.Language.Intellisense.AsyncCompletion.Data;
97
using Microsoft.VisualStudio.Text;
108
using Microsoft.VisualStudio.Text.Editor;
119
using Microsoft.VisualStudio.Utilities;
@@ -41,7 +39,7 @@ protected override IAsyncCompletionSource CreateCompletionSource(ITextView depen
4139
if (!Options.Enable
4240
|| Options.AsyncCompletionMode == AsyncCompletionMode.Experimental)
4341
{
44-
return EmptyAsyncCompletionSource.Instance;
42+
return null!;
4543
}
4644

4745
var currentContentType = dependence.TextBuffer.ContentType;
@@ -63,7 +61,7 @@ protected override IAsyncCompletionSource CreateCompletionSource(ITextView depen
6361
Debug.WriteLine($"Total {otherAsyncCompletionSources?.Count ?? 0} IAsyncCompletionSource found.");
6462

6563
IAsyncCompletionSource completionSource = otherAsyncCompletionSources is null || otherAsyncCompletionSources.Count == 0
66-
? EmptyAsyncCompletionSource.Instance
64+
? null!
6765
: new IdeographAsyncCompletionSource(otherAsyncCompletionSources!, Options);
6866

6967
return completionSource;
@@ -80,31 +78,8 @@ protected override IAsyncCompletionSource CreateCompletionSource(ITextView depen
8078

8179
protected override IAsyncCompletionSource GetDefaultCompletionSource(ITextView dependence)
8280
{
83-
return EmptyAsyncCompletionSource.Instance;
81+
return null!;
8482
}
8583

8684
#endregion Protected 方法
87-
88-
#region Private 类
89-
90-
private sealed class EmptyAsyncCompletionSource : IAsyncCompletionSource
91-
{
92-
#region Public 属性
93-
94-
public static EmptyAsyncCompletionSource Instance { get; } = new();
95-
96-
#endregion Public 属性
97-
98-
#region Public 方法
99-
100-
public Task<CompletionContext> GetCompletionContextAsync(IAsyncCompletionSession session, CompletionTrigger trigger, SnapshotPoint triggerLocation, SnapshotSpan applicableToSpan, CancellationToken token) => Task.FromResult<CompletionContext>(null!);
101-
102-
public Task<object> GetDescriptionAsync(IAsyncCompletionSession session, CompletionItem item, CancellationToken token) => Task.FromResult<object>(null!);
103-
104-
public CompletionStartData InitializeCompletion(CompletionTrigger trigger, SnapshotPoint triggerLocation, CancellationToken token) => CompletionStartData.DoesNotParticipateInCompletion;
105-
106-
#endregion Public 方法
107-
}
108-
109-
#endregion Private 类
11085
}

src/source.extension.vsixmanifest

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
<?xml version="1.0" encoding="utf-8"?>
22
<PackageManifest Version="2.0.0" xmlns="http://schemas.microsoft.com/developer/vsx-schema/2011" xmlns:d="http://schemas.microsoft.com/developer/vsx-schema-design/2011">
33
<Metadata>
4-
<Identity Id="ChinesePinyinIntelliSenseExtender.4293B766-9575-4472-B6F0-98BD86737E0D" Version="1.4.0" Language="en-US" Publisher="Stratos" />
4+
<Identity Id="ChinesePinyinIntelliSenseExtender.4293B766-9575-4472-B6F0-98BD86737E0D" Version="1.4.1" Language="en-US" Publisher="Stratos" />
55
<DisplayName>IntelliSense汉语拼音拓展</DisplayName>
66
<Description xml:space="preserve">表意文字补全拓展(内置汉语拼音、五笔,支持自定义字符映射;)</Description>
77
<MoreInfo>https://github.com/stratosblue/chinesepinyinintellisenseextender</MoreInfo>

0 commit comments

Comments
 (0)