提交 6cef5480 编写于 作者: D Dustin Campbell

Clean up member inserting completion providers (i.e. overrides and partial completion)

上级 e0a44481
...@@ -2,10 +2,8 @@ ...@@ -2,10 +2,8 @@
using System.Linq; using System.Linq;
using System.Threading; using System.Threading;
using System.Threading.Tasks;
using Microsoft.CodeAnalysis.CodeGeneration; using Microsoft.CodeAnalysis.CodeGeneration;
using Microsoft.CodeAnalysis.Completion; using Microsoft.CodeAnalysis.Completion;
using Microsoft.CodeAnalysis.Completion.Providers;
using Microsoft.CodeAnalysis.Editing; using Microsoft.CodeAnalysis.Editing;
using Microsoft.CodeAnalysis.Editor.Host; using Microsoft.CodeAnalysis.Editor.Host;
using Microsoft.CodeAnalysis.Editor.Shared.Extensions; using Microsoft.CodeAnalysis.Editor.Shared.Extensions;
...@@ -19,7 +17,7 @@ ...@@ -19,7 +17,7 @@
namespace Microsoft.CodeAnalysis.Editor.Implementation.IntelliSense.Completion namespace Microsoft.CodeAnalysis.Editor.Implementation.IntelliSense.Completion
{ {
internal abstract class AbstractMemberInsertingCompletionProvider : AbstractCompletionProvider, ICustomCommitCompletionProvider internal abstract class AbstractMemberInsertingCompletionProvider : CompletionListProvider, ICustomCommitCompletionProvider
{ {
private IWaitIndicator _waitIndicator; private IWaitIndicator _waitIndicator;
private readonly SyntaxAnnotation _annotation = new SyntaxAnnotation(); private readonly SyntaxAnnotation _annotation = new SyntaxAnnotation();
...@@ -37,11 +35,6 @@ internal abstract class AbstractMemberInsertingCompletionProvider : AbstractComp ...@@ -37,11 +35,6 @@ internal abstract class AbstractMemberInsertingCompletionProvider : AbstractComp
_waitIndicator = waitIndicator; _waitIndicator = waitIndicator;
} }
protected override Task<bool> IsExclusiveAsync(Document documentOpt, int caretPosition, CompletionTriggerInfo triggerInfo, CancellationToken cancellationToken)
{
return SpecializedTasks.True;
}
public void Commit(CompletionItem completionItem, ITextView textView, ITextBuffer subjectBuffer, ITextSnapshot triggerSnapshot, char? commitChar) public void Commit(CompletionItem completionItem, ITextView textView, ITextBuffer subjectBuffer, ITextSnapshot triggerSnapshot, char? commitChar)
{ {
var currentSnapshot = subjectBuffer.CurrentSnapshot; var currentSnapshot = subjectBuffer.CurrentSnapshot;
......
// Copyright (c) Microsoft. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. // 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.Collections.Generic;
using System.Linq;
using System.Threading; using System.Threading;
using System.Threading.Tasks; using System.Threading.Tasks;
using Microsoft.CodeAnalysis.CodeGeneration; using Microsoft.CodeAnalysis.CodeGeneration;
using Microsoft.CodeAnalysis.Completion; using Microsoft.CodeAnalysis.Completion;
using Microsoft.CodeAnalysis.Editing; using Microsoft.CodeAnalysis.Editing;
using Microsoft.CodeAnalysis.Editor.Host; using Microsoft.CodeAnalysis.Editor.Host;
using Microsoft.CodeAnalysis.Editor.Implementation.IntelliSense.Completion.CompletionProviders;
using Microsoft.CodeAnalysis.Shared.Extensions; using Microsoft.CodeAnalysis.Shared.Extensions;
using Microsoft.CodeAnalysis.Text; using Microsoft.CodeAnalysis.Text;
using Roslyn.Utilities; using Roslyn.Utilities;
...@@ -29,10 +29,16 @@ internal abstract partial class AbstractOverrideCompletionProvider : AbstractMem ...@@ -29,10 +29,16 @@ internal abstract partial class AbstractOverrideCompletionProvider : AbstractMem
public abstract bool TryDetermineModifiers(SyntaxToken startToken, SourceText text, int startLine, out Accessibility seenAccessibility, out DeclarationModifiers modifiers); public abstract bool TryDetermineModifiers(SyntaxToken startToken, SourceText text, int startLine, out Accessibility seenAccessibility, out DeclarationModifiers modifiers);
protected abstract TextSpan GetTextChangeSpan(SourceText text, int position); protected abstract TextSpan GetTextChangeSpan(SourceText text, int position);
protected override Task<IEnumerable<CompletionItem>> GetItemsWorkerAsync(Document document, int position, CompletionTriggerInfo triggerInfo, CancellationToken cancellationToken) public override async Task ProduceCompletionListAsync(CompletionListContext context)
{ {
var state = new ItemGetter(this, document, position, cancellationToken); var state = new ItemGetter(this, context.Document, context.Position, context.CancellationToken);
return state.GetItemsAsync(); var items = await state.GetItemsAsync().ConfigureAwait(false);
if (items?.Any() == true)
{
context.MakeExclusive(true);
context.AddItems(items);
}
} }
protected override ISymbol GenerateMember(ISymbol newOverriddenMember, INamedTypeSymbol newContainingType, Document newDocument, MemberInsertionCompletionItem completionItem, CancellationToken cancellationToken) protected override ISymbol GenerateMember(ISymbol newOverriddenMember, INamedTypeSymbol newContainingType, Document newDocument, MemberInsertionCompletionItem completionItem, CancellationToken cancellationToken)
......
...@@ -39,18 +39,28 @@ public AbstractPartialCompletionProvider(IWaitIndicator waitIndicator) ...@@ -39,18 +39,28 @@ public AbstractPartialCompletionProvider(IWaitIndicator waitIndicator)
protected abstract Task<TextSpan> GetTextChangeSpanAsync(Document document, int position, CancellationToken cancellationToken); protected abstract Task<TextSpan> GetTextChangeSpanAsync(Document document, int position, CancellationToken cancellationToken);
protected abstract bool IsPartial(IMethodSymbol m); protected abstract bool IsPartial(IMethodSymbol m);
protected override async Task<IEnumerable<CompletionItem>> GetItemsWorkerAsync(Document document, int position, CompletionTriggerInfo triggerInfo, CancellationToken cancellationToken) public override async Task ProduceCompletionListAsync(CompletionListContext context)
{ {
var document = context.Document;
var position = context.Position;
var cancellationToken = context.CancellationToken;
var tree = await document.GetSyntaxTreeAsync(cancellationToken).ConfigureAwait(false); var tree = await document.GetSyntaxTreeAsync(cancellationToken).ConfigureAwait(false);
DeclarationModifiers modifiers; DeclarationModifiers modifiers;
SyntaxToken token; SyntaxToken token;
if (!IsPartialCompletionContext(tree, position, cancellationToken, out modifiers, out token)) if (!IsPartialCompletionContext(tree, position, cancellationToken, out modifiers, out token))
{ {
return null; return;
} }
return await CreatePartialItemsAsync(document, position, modifiers, token, cancellationToken).ConfigureAwait(false); var items = await CreatePartialItemsAsync(document, position, modifiers, token, cancellationToken).ConfigureAwait(false);
if (items?.Any() == true)
{
context.MakeExclusive(true);
context.AddItems(items);
}
} }
protected override ISymbol GenerateMember(ISymbol member, INamedTypeSymbol containingType, Document document, MemberInsertionCompletionItem item, CancellationToken cancellationToken) protected override ISymbol GenerateMember(ISymbol member, INamedTypeSymbol containingType, Document document, MemberInsertionCompletionItem item, CancellationToken cancellationToken)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册