提交 56055842 编写于 作者: D Dustin Campbell

Remove ITextCompletionService and TextCompletionListProvider

These are no longer needed now that InteractiveCommand is a proper workspace language again. The completion service now exclusive operates on documents.
上级 c9b9e041
......@@ -6,8 +6,6 @@
using System.Threading;
using System.Threading.Tasks;
using Microsoft.CodeAnalysis.Completion;
using Microsoft.CodeAnalysis.Completion.Providers;
using Microsoft.CodeAnalysis.Editor.Extensibility.Completion;
using Microsoft.CodeAnalysis.Editor.Shared.Extensions;
using Microsoft.CodeAnalysis.Editor.Shared.Utilities;
using Microsoft.CodeAnalysis.Internal.Log;
......@@ -126,19 +124,9 @@ private async Task<Model> DoInBackgroundAsync(CancellationToken cancellationToke
private async Task<CompletionList> GetCompletionListAsync(ICompletionService completionService, CompletionTriggerInfo triggerInfo, CancellationToken cancellationToken)
{
if (_documentOpt == null && completionService is ITextCompletionService)
{
var textCompletionService = (ITextCompletionService)completionService;
return await textCompletionService.GetCompletionListAsync(_text, _subjectBufferCaretPosition, triggerInfo, _completionProviders, _options, cancellationToken).ConfigureAwait(false);
}
else if (_documentOpt != null)
{
return await completionService.GetCompletionListAsync(_documentOpt, _subjectBufferCaretPosition, triggerInfo, _completionProviders, cancellationToken).ConfigureAwait(false);
}
else
{
return null;
}
return _documentOpt != null
? await completionService.GetCompletionListAsync(_documentOpt, _subjectBufferCaretPosition, triggerInfo, _completionProviders, cancellationToken).ConfigureAwait(false)
: null;
}
}
}
......
......@@ -15,7 +15,7 @@
namespace Microsoft.CodeAnalysis.Completion
{
internal abstract partial class AbstractCompletionService : ICompletionService, ITextCompletionService
internal abstract partial class AbstractCompletionService : ICompletionService
{
private static readonly Func<string, List<CompletionItem>> s_createList = _ => new List<CompletionItem>();
......@@ -76,47 +76,26 @@ public virtual string GetCultureSpecificQuirks(string candidate)
protected abstract string GetLanguageName();
public async Task<CompletionList> GetCompletionListAsync(
Document document,
int position,
CompletionTriggerInfo triggerInfo,
IEnumerable<CompletionListProvider> completionProviders,
CancellationToken cancellationToken)
{
var text = await document.GetTextAsync(cancellationToken).ConfigureAwait(false);
return await GetCompletionListAsync(document, text, position, triggerInfo, completionProviders, document.Project.Solution.Workspace.Options, cancellationToken).ConfigureAwait(false);
}
public Task<CompletionList> GetCompletionListAsync(
SourceText text,
int position,
CompletionTriggerInfo triggerInfo,
IEnumerable<CompletionListProvider> completionProviders,
OptionSet options,
CancellationToken cancellationToken)
{
return GetCompletionListAsync(null, text, position, triggerInfo, completionProviders, options, cancellationToken);
}
private class ProviderList
{
public CompletionListProvider Provider;
public CompletionList List;
}
private async Task<CompletionList> GetCompletionListAsync(
Document documentOpt,
SourceText text,
public async Task<CompletionList> GetCompletionListAsync(
Document document,
int position,
CompletionTriggerInfo triggerInfo,
IEnumerable<CompletionListProvider> completionProviders,
OptionSet options,
CancellationToken cancellationToken)
{
completionProviders = completionProviders ?? this.GetDefaultCompletionProviders();
var completionProviderToIndex = GetCompletionProviderToIndex(completionProviders);
var completionRules = GetCompletionRules();
var text = await document.GetTextAsync(cancellationToken).ConfigureAwait(false);
var options = document.Project.Solution.Workspace.Options;
IEnumerable<CompletionListProvider> triggeredProviders;
switch (triggerInfo.TriggerReason)
{
......@@ -137,7 +116,7 @@ private class ProviderList
var providersAndLists = new List<ProviderList>();
foreach (var provider in triggeredProviders)
{
var completionList = await GetCompletionListAsync(provider, documentOpt, text, position, triggerInfo, cancellationToken).ConfigureAwait(false);
var completionList = await GetCompletionListAsync(provider, document, position, triggerInfo, cancellationToken).ConfigureAwait(false);
if (completionList != null)
{
providersAndLists.Add(new ProviderList { Provider = provider, List = completionList });
......@@ -171,7 +150,7 @@ private class ProviderList
var nonUsedNonExclusiveProviders = new List<ProviderList>();
foreach (var provider in nonUsedProviders)
{
var completionList = await GetCompletionListAsync(provider, documentOpt, text, position, triggerInfo, cancellationToken).ConfigureAwait(false);
var completionList = await GetCompletionListAsync(provider, document, position, triggerInfo, cancellationToken).ConfigureAwait(false);
if (completionList != null && !completionList.IsExclusive)
{
nonUsedNonExclusiveProviders.Add(new ProviderList { Provider = provider, List = completionList });
......@@ -289,29 +268,16 @@ private static CompletionItem Disambiguate(CompletionItem item, CompletionItem e
private static async Task<CompletionList> GetCompletionListAsync(
CompletionListProvider provider,
Document documentOpt,
SourceText text,
Document document,
int position,
CompletionTriggerInfo triggerInfo,
CancellationToken cancellationToken)
{
if (provider is TextCompletionProvider)
{
return ((TextCompletionProvider)provider).GetCompletionList(text, position, triggerInfo, cancellationToken);
}
if (documentOpt != null)
{
var context = new CompletionListContext(documentOpt, position, triggerInfo, cancellationToken);
await provider.ProduceCompletionListAsync(context).ConfigureAwait(false);
return new CompletionList(context.GetItems(), context.Builder, context.IsExclusive);
}
var context = new CompletionListContext(document, position, triggerInfo, cancellationToken);
Contract.Fail("Should never get here.");
await provider.ProduceCompletionListAsync(context).ConfigureAwait(false);
return null;
return new CompletionList(context.GetItems(), context.Builder, context.IsExclusive);
}
public bool IsTriggerCharacter(SourceText text, int characterPosition, IEnumerable<CompletionListProvider> completionProviders, OptionSet options)
......
// Copyright (c) Microsoft. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
using System.Collections.Generic;
using System.Threading;
using System.Threading.Tasks;
using Microsoft.CodeAnalysis.Options;
using Microsoft.CodeAnalysis.Text;
namespace Microsoft.CodeAnalysis.Completion
{
internal interface ITextCompletionService : ICompletionService
{
Task<CompletionList> GetCompletionListAsync(SourceText text, int position, CompletionTriggerInfo triggerInfo, IEnumerable<CompletionListProvider> completionProviders, OptionSet options, CancellationToken cancellationToken);
}
}
// Copyright (c) Microsoft. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
using System.Threading;
using Microsoft.CodeAnalysis.Text;
namespace Microsoft.CodeAnalysis.Completion.Providers
{
internal abstract class TextCompletionProvider : CompletionListProvider
{
/// <summary>
/// Returns a CompletionItemGroup for the specified position in the text.
/// </summary>
public abstract CompletionList GetCompletionList(SourceText text, int position, CompletionTriggerInfo triggerInfo, CancellationToken cancellationToken = default(CancellationToken));
}
}
......@@ -165,7 +165,6 @@
<Compile Include="Completion\CompletionTriggerInfo.cs" />
<Compile Include="Completion\CompletionTriggerReason.cs" />
<Compile Include="Completion\ICompletionService.cs" />
<Compile Include="Completion\ITextCompletionService.cs" />
<Compile Include="Completion\Providers\AbstractCompletionProvider.cs" />
<Compile Include="Completion\Providers\AbstractCompletionProvider.UnionCompletionitemComparer.cs" />
<Compile Include="Completion\Providers\AbstractKeywordCompletionProvider.cs" />
......@@ -178,7 +177,6 @@
<Compile Include="Completion\Providers\KeywordCompletionItemRules.cs" />
<Compile Include="Completion\Providers\ObjectInitializerCompletionItemRules.cs" />
<Compile Include="Completion\Providers\AbstractSymbolCompletionItemRules.cs" />
<Compile Include="Completion\Providers\TextCompletionListProvider.cs" />
<Compile Include="Completion\Providers\KeywordCompletionItem.cs" />
<Compile Include="Completion\Providers\RecommendedKeyword.cs" />
<Compile Include="Completion\SuggestionMode\SuggestionModeCompletionItemRules.cs" />
......
// Copyright (c) Microsoft. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
using System.Collections.Immutable;
using System.Linq;
using System.Text.RegularExpressions;
using System.Threading;
using System.Threading.Tasks;
using Microsoft.CodeAnalysis.Completion;
using Microsoft.CodeAnalysis.Completion.Providers;
using Microsoft.CodeAnalysis.Editor.Implementation.IntelliSense.Completion.FileSystem;
using Microsoft.CodeAnalysis.Interactive;
using Microsoft.CodeAnalysis.Options;
......@@ -19,22 +17,11 @@ namespace Microsoft.CodeAnalysis.Editor.Implementation.Interactive
{
// TODO(cyrusn): Use a predefined name here.
[ExportCompletionProvider("LoadCommandCompletionProvider", InteractiveLanguageNames.InteractiveCommand)]
internal partial class LoadCommandCompletionProvider : TextCompletionProvider
internal partial class LoadCommandCompletionProvider : CompletionListProvider
{
private const string NetworkPath = "\\\\";
private static readonly Regex s_directiveRegex = new Regex(@"#load\s+(""[^""]*""?)", RegexOptions.Compiled);
public override CompletionList GetCompletionList(SourceText text, int position, CompletionTriggerInfo triggerInfo, CancellationToken cancellationToken = default(CancellationToken))
{
var items = this.GetItems(text, position, triggerInfo, cancellationToken);
if (items == null || !items.Any())
{
return null;
}
return new CompletionList(items);
}
public override async Task ProduceCompletionListAsync(CompletionListContext context)
{
var document = context.Document;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册