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

Final bit of clean up to C# and VB cref completion

上级 a4a3c451
......@@ -88,7 +88,7 @@ public override async Task ProduceCompletionListAsync(CompletionListContext cont
var text = await document.GetTextAsync(cancellationToken).ConfigureAwait(false);
var filterSpan = GetTextChangeSpan(text, position);
var items = CreateItems(document.Project.Solution.Workspace, semanticModel, symbols, token, filterSpan, cancellationToken);
var items = CreateCompletionItems(document.Project.Solution.Workspace, semanticModel, symbols, token, filterSpan);
context.AddItems(items);
}
......@@ -222,8 +222,8 @@ private static TextSpan GetTextChangeSpan(SourceText text, int position)
(ch) => CompletionUtilities.IsWordCharacter(ch) || ch == '{' || ch == '}');
}
private IEnumerable<CompletionItem> CreateItems(
Workspace workspace, SemanticModel semanticModel, IEnumerable<ISymbol> symbols, SyntaxToken token, TextSpan filterSpan, CancellationToken cancellationToken)
private IEnumerable<CompletionItem> CreateCompletionItems(
Workspace workspace, SemanticModel semanticModel, IEnumerable<ISymbol> symbols, SyntaxToken token, TextSpan filterSpan)
{
var builder = SharedPools.Default<StringBuilder>().Allocate();
try
......@@ -231,7 +231,7 @@ private static TextSpan GetTextChangeSpan(SourceText text, int position)
foreach (var symbol in symbols)
{
builder.Clear();
yield return CreateItem(workspace, semanticModel, symbol, token, filterSpan, builder, cancellationToken);
yield return CreateItem(workspace, semanticModel, symbol, token, filterSpan, builder);
}
}
finally
......@@ -241,7 +241,7 @@ private static TextSpan GetTextChangeSpan(SourceText text, int position)
}
private CompletionItem CreateItem(
Workspace workspace, SemanticModel semanticModel, ISymbol symbol, SyntaxToken token, TextSpan filterSpan, StringBuilder builder, CancellationToken cancellationToken)
Workspace workspace, SemanticModel semanticModel, ISymbol symbol, SyntaxToken token, TextSpan filterSpan, StringBuilder builder)
{
int position = token.SpanStart;
......
......@@ -38,7 +38,7 @@ Namespace Microsoft.CodeAnalysis.VisualBasic.Completion.Providers
Return
End If
If IsTypeParameterContext(token) Then
If IsCrefTypeParameterContext(token) Then
Return
End If
......@@ -60,7 +60,7 @@ Namespace Microsoft.CodeAnalysis.VisualBasic.Completion.Providers
Dim text = Await document.GetTextAsync(cancellationToken).ConfigureAwait(False)
Dim filterSpan = CompletionUtilities.GetTextChangeSpan(text, position)
Dim items = CreateCompletionItems(symbols, filterSpan, semanticModel, workspace, token.SpanStart)
Dim items = CreateCompletionItems(workspace, semanticModel, symbols, token.SpanStart, filterSpan)
context.AddItems(items)
If IsFirstCrefParameterContext(token) Then
......@@ -71,10 +71,10 @@ Namespace Microsoft.CodeAnalysis.VisualBasic.Completion.Providers
context.MakeExclusive(True)
End Function
Private Function IsTypeParameterContext(token As SyntaxToken) As Boolean
Private Shared Function IsCrefTypeParameterContext(token As SyntaxToken) As Boolean
Return (token.IsChildToken(Function(t As TypeArgumentListSyntax) t.OfKeyword) OrElse
token.IsChildSeparatorToken(Function(t As TypeArgumentListSyntax) t.Arguments)) AndAlso
token.GetAncestor(Of XmlCrefAttributeSyntax)() IsNot Nothing
token.Parent?.FirstAncestorOrSelf(Of XmlCrefAttributeSyntax)() IsNot Nothing
End Function
Private Shared Function IsCrefStartContext(token As SyntaxToken) As Boolean
......@@ -144,51 +144,54 @@ Namespace Microsoft.CodeAnalysis.VisualBasic.Completion.Providers
End If
End Function
Private Iterator Function CreateCompletionItems(symbols As IEnumerable(Of ISymbol), filterSpan As TextSpan, semanticModel As SemanticModel, workspace As Workspace, position As Integer) As IEnumerable(Of CompletionItem)
Private Iterator Function CreateCompletionItems(workspace As Workspace, semanticModel As SemanticModel, symbols As IEnumerable(Of ISymbol), position As Integer, filterSpan As TextSpan) As IEnumerable(Of CompletionItem)
Dim builder = SharedPools.Default(Of StringBuilder).Allocate()
Try
For Each symbol In symbols
builder.Clear()
Yield CreateCompletionItem(workspace, semanticModel, symbol, position, filterSpan, builder)
Next
Finally
SharedPools.Default(Of StringBuilder).ClearAndFree(builder)
End Try
End Function
If symbol.IsUserDefinedOperator() Then
builder.Append("Operator ")
End If
Private Function CreateCompletionItem(workspace As Workspace, semanticModel As SemanticModel, symbol As ISymbol, position As Integer, filterSpan As TextSpan, builder As StringBuilder) As CompletionItem
If symbol.IsUserDefinedOperator() Then
builder.Append("Operator ")
End If
builder.Append(symbol.ToDisplayString(CrefFormat))
builder.Append(symbol.ToDisplayString(CrefFormat))
Dim parameters = symbol.GetParameters()
Dim parameters = symbol.GetParameters()
If Not parameters.IsDefaultOrEmpty Then
builder.Append("("c)
If Not parameters.IsDefaultOrEmpty Then
builder.Append("("c)
For i = 0 To parameters.Length - 1
If i > 0 Then
builder.Append(", ")
End If
For i = 0 To parameters.Length - 1
If i > 0 Then
builder.Append(", ")
End If
Dim parameter = parameters(i)
Dim parameter = parameters(i)
If parameter.RefKind = RefKind.Ref Then
builder.Append("ByRef ")
End If
If parameter.RefKind = RefKind.Ref Then
builder.Append("ByRef ")
End If
builder.Append(parameter.Type.ToMinimalDisplayString(semanticModel, position))
Next
builder.Append(parameter.Type.ToMinimalDisplayString(semanticModel, position))
Next
builder.Append(")"c)
ElseIf symbol.Kind = SymbolKind.Method
builder.Append("()")
End If
builder.Append(")"c)
ElseIf symbol.Kind = SymbolKind.Method
builder.Append("()")
End If
Dim displayString = builder.ToString()
Dim displayString = builder.ToString()
Yield New CompletionItem(Me, displayString, filterSpan, glyph:=symbol.GetGlyph(),
descriptionFactory:=CommonCompletionUtilities.CreateDescriptionFactory(workspace, semanticModel, position, symbol),
rules:=ItemRules.Instance)
Next
Finally
SharedPools.Default(Of StringBuilder).ClearAndFree(builder)
End Try
Return New CompletionItem(Me, displayString, filterSpan, glyph:=symbol.GetGlyph(),
descriptionFactory:=CommonCompletionUtilities.CreateDescriptionFactory(workspace, semanticModel, position, symbol),
rules:=ItemRules.Instance)
End Function
Private Function CreateOfCompletionItem(span As TextSpan) As CompletionItem
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册