提交 60ecc6e2 编写于 作者: I Ivan Basov

self code review

上级 8478f635
......@@ -616,7 +616,9 @@ private static CrefParameterSyntax CreateNewCrefParameterSyntax(AddedParameter a
SeparatedSyntaxList<AttributeArgumentSyntax> arguments,
SignatureChange updatedSignature)
{
var newArguments = PermuteArguments<AttributeArgumentSyntax>(declarationSymbol, arguments.Select(a => UnifiedArgumentSyntax.Create(a)).ToList(), updatedSignature);
var newArguments = PermuteArguments(declarationSymbol, arguments.Select(a => UnifiedArgumentSyntax.Create(a)).ToList(),
updatedSignature,
callsiteValue => UnifiedArgumentSyntax.Create(SyntaxFactory.AttributeArgument(SyntaxFactory.ParseExpression(callsiteValue))));
var numSeparatorsToSkip = arguments.Count - newArguments.Count;
// copy whitespace trivia from original position
......@@ -632,7 +634,10 @@ private static CrefParameterSyntax CreateNewCrefParameterSyntax(AddedParameter a
SignatureChange updatedSignature,
bool isReducedExtensionMethod = false)
{
var newArguments = PermuteArguments<ArgumentSyntax>(declarationSymbol, arguments.Select(a => UnifiedArgumentSyntax.Create(a)).ToList(), updatedSignature, isReducedExtensionMethod);
var newArguments = PermuteArguments(declarationSymbol, arguments.Select(a => UnifiedArgumentSyntax.Create(a)).ToList(),
updatedSignature,
callsiteValue => UnifiedArgumentSyntax.Create(SyntaxFactory.Argument(SyntaxFactory.ParseExpression(callsiteValue))),
isReducedExtensionMethod);
// copy whitespace trivia from original position
var newArgumentsWithTrivia = TransferLeadingWhitespaceTrivia(
......@@ -885,22 +890,6 @@ protected override IEnumerable<AbstractFormattingRule> GetFormattingRules(Docume
return new[] { new ChangeSignatureFormattingRule() }.Concat(Formatter.GetDefaultFormattingRules(document));
}
protected override IUnifiedArgumentSyntax CreateRegularArgumentSyntax<T>(string callsiteValue)
{
var type = typeof(T);
if (type == typeof(ArgumentSyntax))
{
return UnifiedArgumentSyntax.Create(SyntaxFactory.Argument(SyntaxFactory.ParseExpression(callsiteValue)));
}
if (type == typeof(AttributeArgumentSyntax))
{
return UnifiedArgumentSyntax.Create(SyntaxFactory.AttributeArgument(SyntaxFactory.ParseExpression(callsiteValue)));
}
return default;
}
protected override SyntaxToken CreateSeparatorSyntaxToken()
=> SyntaxFactory.Token(SyntaxKind.CommaToken).WithTrailingTrivia(SyntaxFactory.ElasticSpace);
}
......
......@@ -46,8 +46,6 @@ internal abstract class AbstractChangeSignatureService : ILanguageService
SignatureChange signaturePermutation,
CancellationToken cancellationToken);
protected abstract IUnifiedArgumentSyntax CreateRegularArgumentSyntax<T>(string callsiteValue);
protected abstract IEnumerable<AbstractFormattingRule> GetFormattingRules(Document document);
public async Task<ImmutableArray<ChangeSignatureCodeAction>> GetChangeSignatureCodeActionAsync(Document document, TextSpan span, CancellationToken cancellationToken)
......@@ -387,10 +385,11 @@ private bool TryGetNodeWithEditableSignatureOrAttributes(Location location, Solu
return nodeToUpdate != null;
}
protected List<IUnifiedArgumentSyntax> PermuteArguments<T>(
protected List<IUnifiedArgumentSyntax> PermuteArguments(
ISymbol declarationSymbol,
List<IUnifiedArgumentSyntax> arguments,
SignatureChange updatedSignature,
Func<string, IUnifiedArgumentSyntax> createIUnifiedArgument,
bool isReducedExtensionMethod = false)
{
// 1. Determine which parameters are permutable
......@@ -462,7 +461,7 @@ private bool TryGetNodeWithEditableSignatureOrAttributes(Location location, Solu
foreach (var brandNewParameter in brandNewParameters)
{
newArguments.Add(CreateRegularArgumentSyntax<T>(brandNewParameter.CallsiteValue).WithName(brandNewParameter.ParameterName));
newArguments.Add(createIUnifiedArgument(brandNewParameter.CallsiteValue).WithName(brandNewParameter.ParameterName));
}
// 6. Add the params argument with the first value:
......@@ -513,9 +512,9 @@ private static SignatureChange CreateCompensatingSignatureChange(ISymbol declara
originalConfigurationParameters.AddRange(bonusParameters.Select(p => new ExistingParameter(p)));
updatedConfigurationParameters.AddRange(bonusParameters.Select(p => new ExistingParameter(p)));
var newOrigParams = ParameterConfiguration.Create(originalConfigurationParameters, updatedSignature.OriginalConfiguration.ThisParameter != null, selectedIndex: 0);
var newOriginalParameters = ParameterConfiguration.Create(originalConfigurationParameters, updatedSignature.OriginalConfiguration.ThisParameter != null, selectedIndex: 0);
var newUpdatedParams = ParameterConfiguration.Create(updatedConfigurationParameters, updatedSignature.OriginalConfiguration.ThisParameter != null, selectedIndex: 0);
updatedSignature = new SignatureChange(newOrigParams, newUpdatedParams);
updatedSignature = new SignatureChange(newOriginalParameters, newUpdatedParams);
}
return updatedSignature;
......
......@@ -56,9 +56,7 @@ public static ParameterConfiguration Create(List<Parameter> parameters, bool isE
}
internal ParameterConfiguration WithoutAddedParameters()
{
return Create(ToListOfParameters().OfType<ExistingParameter>().ToList<Parameter>(), ThisParameter != null, selectedIndex: 0);
}
=> Create(ToListOfParameters().OfType<ExistingParameter>().ToList<Parameter>(), ThisParameter != null, selectedIndex: 0);
public List<Parameter> ToListOfParameters()
{
......
......@@ -2,7 +2,6 @@
using System;
using System.Collections.Generic;
using System.Linq;
using Microsoft.CodeAnalysis.Shared.Extensions;
namespace Microsoft.CodeAnalysis.ChangeSignature
......@@ -42,8 +41,6 @@ public SignatureChange(ParameterConfiguration originalConfiguration, ParameterCo
}
internal SignatureChange WithoutAddedParameters()
{
return new SignatureChange(OriginalConfiguration, UpdatedConfiguration.WithoutAddedParameters());
}
=> new SignatureChange(OriginalConfiguration, UpdatedConfiguration.WithoutAddedParameters());
}
}
......@@ -425,7 +425,10 @@ Namespace Microsoft.CodeAnalysis.VisualBasic.ChangeSignature
declarationSymbol As ISymbol,
Optional isReducedExtensionMethod As Boolean = False) As SeparatedSyntaxList(Of ArgumentSyntax)
Dim newArguments As List(Of IUnifiedArgumentSyntax) = MyBase.PermuteArguments(Of ArgumentSyntax)(declarationSymbol, arguments.Select(Function(a) UnifiedArgumentSyntax.Create(a)).ToList(), permutedSignature, isReducedExtensionMethod)
Dim newArguments As List(Of IUnifiedArgumentSyntax) = MyBase.PermuteArguments(
declarationSymbol, arguments.Select(Function(a) UnifiedArgumentSyntax.Create(a)).ToList(), permutedSignature,
Function(callsiteValue) UnifiedArgumentSyntax.Create(SyntaxFactory.SimpleArgument(SyntaxFactory.ParseExpression(callsiteValue))),
isReducedExtensionMethod)
Dim numSeparatorsToSkip = arguments.Count - newArguments.Count
Return SyntaxFactory.SeparatedList(newArguments.Select(Function(a) CType(DirectCast(a, UnifiedArgumentSyntax), ArgumentSyntax)), GetSeparators(arguments, numSeparatorsToSkip))
......@@ -690,10 +693,6 @@ Namespace Microsoft.CodeAnalysis.VisualBasic.ChangeSignature
Return New AbstractFormattingRule() {New ChangeSignatureFormattingRule()}.Concat(Formatter.GetDefaultFormattingRules(document))
End Function
Protected Overrides Function CreateRegularArgumentSyntax(Of T)(callsiteValue As String) As IUnifiedArgumentSyntax
Return UnifiedArgumentSyntax.Create(SyntaxFactory.SimpleArgument(SyntaxFactory.ParseExpression(callsiteValue)))
End Function
Protected Overrides Function CreateSeparatorSyntaxToken() As SyntaxToken
Return SyntaxFactory.Token(SyntaxKind.CommaToken).WithTrailingTrivia(SyntaxFactory.ElasticSpace)
End Function
......
using System.Collections.Generic;
// 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.Composition;
using System.Threading;
using System.Threading.Tasks;
......
using System.Collections.Generic;
using System.Threading;
using System.Threading.Tasks;
using Microsoft.CodeAnalysis;
using Microsoft.CodeAnalysis.CSharp.Syntax;
using Microsoft.VisualStudio.LanguageServices.Implementation.IntellisenseControls;
using Microsoft.VisualStudio.Text;
using Microsoft.VisualStudio.Text.Projection;
using Microsoft.VisualStudio.Utilities;
namespace Microsoft.VisualStudio.LanguageServices.Implementation.ChangeSignature
{
internal abstract class AbstractChangeSignatureLanguageService : IChangeSignatureLanguageService
{
public abstract Task<IntellisenseTextBoxViewModel[]> CreateViewModelsAsync(
string[] rolesCollectionType,
string[] rolesCollectionName,
int insertPosition,
Document document,
string documentText,
IContentType contentType,
IntellisenseTextBoxViewModelFactory intellisenseTextBoxViewModelFactory,
CancellationToken cancellationToken);
public abstract void GeneratePreviewGrammar(ChangeSignatureDialogViewModel.AddedParameterViewModel addedParameterViewModel, List<SymbolDisplayPart> displayParts);
public abstract IContentType GetContentType(IContentTypeRegistryService contentTypeRegistryService);
public abstract bool IsTypeNameValid(string typeName);
protected ITrackingSpan[] CreateTrackingSpansHelper(IProjectionSnapshot snapshot, int contextPoint, int spaceBetweenTypeAndName)
{
// Get the previous span/text.
var previousStatementSpan = snapshot.CreateTrackingSpanFromStartToIndex(contextPoint, SpanTrackingMode.EdgeNegative);
// Get the appropriate ITrackingSpan for the window the user is typing in.
// mappedSpan1 is the 'Type' field for C# and 'Name' for VB.
var mappedSpan1 = snapshot.CreateTrackingSpan(contextPoint, 0, SpanTrackingMode.EdgeExclusive);
// Space could be either ' ' for C# or '] AS ' for VB
var spaceSpan = snapshot.CreateTrackingSpan(contextPoint, spaceBetweenTypeAndName, SpanTrackingMode.EdgeExclusive);
// mappedSpan2 is the 'Name' field for C# and 'Type' for VB.
var mappedSpan2 = snapshot.CreateTrackingSpan(contextPoint + spaceBetweenTypeAndName, 0, SpanTrackingMode.EdgeExclusive);
// Build the tracking span that includes the rest of the file.
var restOfFileSpan = snapshot.CreateTrackingSpanFromIndexToEnd(contextPoint + spaceBetweenTypeAndName, SpanTrackingMode.EdgePositive);
// This array as a whole should encompass the span of the entire file.
return new ITrackingSpan[] { previousStatementSpan, mappedSpan1, spaceSpan, mappedSpan2, restOfFileSpan };
}
}
}
using System.Collections.Generic;
// 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;
......@@ -11,8 +13,14 @@ namespace Microsoft.VisualStudio.LanguageServices.Implementation.ChangeSignature
{
internal abstract class ChangeSignatureLanguageService : IChangeSignatureLanguageService
{
public abstract Task<IntellisenseTextBoxViewModel[]> CreateViewModelsAsync(string[] rolesCollectionType, string[] rolesCollectionName, int insertPosition, Document document, string documentText, IContentType contentType, IntellisenseTextBoxViewModelFactory intellisenseTextBoxViewModelFactory, CancellationToken cancellationToken);
public abstract void GeneratePreviewGrammar(ChangeSignatureDialogViewModel.AddedParameterViewModel addedParameterViewModel, List<SymbolDisplayPart> displayParts);
public abstract Task<IntellisenseTextBoxViewModel[]> CreateViewModelsAsync(
string[] rolesCollectionType, string[] rolesCollectionName, int insertPosition,
Document document, string documentText, IContentType contentType,
IntellisenseTextBoxViewModelFactory intellisenseTextBoxViewModelFactory, CancellationToken cancellationToken);
public abstract void GeneratePreviewGrammar(
ChangeSignatureDialogViewModel.AddedParameterViewModel addedParameterViewModel, List<SymbolDisplayPart> displayParts);
public abstract bool IsTypeNameValid(string typeName);
protected ITrackingSpan[] CreateTrackingSpansHelper(IProjectionSnapshot snapshot, int contextPoint, int spaceBetweenTypeAndName)
......
......@@ -4,7 +4,6 @@
using System.Threading;
using System.Threading.Tasks;
using Microsoft.CodeAnalysis;
using Microsoft.CodeAnalysis.CSharp.Syntax;
using Microsoft.CodeAnalysis.Host;
using Microsoft.VisualStudio.LanguageServices.Implementation.IntellisenseControls;
using Microsoft.VisualStudio.Utilities;
......
......@@ -46,7 +46,7 @@ internal class IntellisenseTextBox : FrameworkElement, IOleCommandTarget
/// <summary>
/// Appearance category of text view in the intellisense textbox
/// </summary>
private const string appearanceCategory = "IntellisenseTextblock";
private const string appearanceCategory = "IntellisenseTextBlock";
/// <summary>
/// Name of container.
......@@ -524,6 +524,5 @@ public bool HandleKeyDown(OLE.Interop.MSG message)
// no translation available for this message
return false;
}
}
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册