提交 7827464f 编写于 作者: R Ravi Chande

Suggest names for aliases

上级 120df9af
......@@ -24,17 +24,20 @@ internal struct NameDeclarationInfo
ImmutableArray<SymbolKind> possibleSymbolKinds,
Accessibility accessibility,
DeclarationModifiers declarationModifiers,
ITypeSymbol type)
ITypeSymbol type,
IAliasSymbol alias)
{
PossibleSymbolKinds = possibleSymbolKinds;
DeclaredAccessibility = accessibility;
Modifiers = declarationModifiers;
Type = type;
Alias = alias;
}
public ImmutableArray<SymbolKind> PossibleSymbolKinds { get; }
public DeclarationModifiers Modifiers { get; }
public ITypeSymbol Type { get; }
public IAliasSymbol Alias { get; }
public Accessibility DeclaredAccessibility { get; }
internal static async Task<NameDeclarationInfo> GetDeclarationInfo(Document document, int position, CancellationToken cancellationToken)
......@@ -136,11 +139,15 @@ internal static async Task<NameDeclarationInfo> GetDeclarationInfo(Document docu
return default(NameDeclarationInfo);
}
var alias = semanticModel.GetAliasInfo(typeSyntax, cancellationToken);
var type = semanticModel.GetTypeInfo(typeSyntax, cancellationToken).Type;
return new NameDeclarationInfo(
possibleDeclarationComputer(GetDeclarationModifiers(modifiers.Value)),
GetAccessibility(modifiers.Value),
GetDeclarationModifiers(modifiers.Value),
semanticModel.GetTypeInfo(typeSyntax, cancellationToken).Type);
type,
alias);
}
private static NameDeclarationInfo IsLastTokenOfType<TSyntaxNode>(
......@@ -178,7 +185,8 @@ internal static async Task<NameDeclarationInfo> GetDeclarationInfo(Document docu
possibleDeclarationComputer(GetDeclarationModifiers(modifiers.Value)),
GetAccessibility(modifiers.Value),
GetDeclarationModifiers(modifiers.Value),
semanticModel.GetTypeInfo(typeSyntax, cancellationToken).Type);
semanticModel.GetTypeInfo(typeSyntax, cancellationToken).Type,
semanticModel.GetAliasInfo(typeSyntax, cancellationToken));
}
private static bool IsFieldDeclaration(SyntaxToken token, SemanticModel semanticModel,
......@@ -224,7 +232,8 @@ internal static async Task<NameDeclarationInfo> GetDeclarationInfo(Document docu
ImmutableArray.Create(SymbolKind.TypeParameter),
Accessibility.NotApplicable,
new DeclarationModifiers(),
type: null);
type: null,
alias: null);
return true;
}
......
......@@ -12,6 +12,7 @@
using Microsoft.CodeAnalysis.Shared.Extensions;
using Microsoft.CodeAnalysis.Simplification;
using Microsoft.CodeAnalysis.Text;
using Roslyn.Utilities;
using static Microsoft.CodeAnalysis.Diagnostics.Analyzers.NamingStyles.SymbolSpecification;
namespace Microsoft.CodeAnalysis.CSharp.Completion.Providers
......@@ -37,14 +38,12 @@ public override async Task ProvideCompletionsAsync(CompletionContext completionC
}
var nameInfo = await NameDeclarationInfo.GetDeclarationInfo(document, position, cancellationToken).ConfigureAwait(false);
if (!IsValidType(nameInfo.Type))
var baseNames = GetBaseNames(semanticModel, nameInfo);
if (baseNames == default)
{
return;
}
var type = UnwrapType(nameInfo.Type, semanticModel.Compilation);
var baseNames = NameGenerator.GetBaseNames(type);
var recommendedNames = await GetRecommendedNamesAsync(baseNames, nameInfo, context, document, cancellationToken).ConfigureAwait(false);
int sortValue = 0;
foreach (var (name, kind) in recommendedNames)
......@@ -57,6 +56,23 @@ public override async Task ProvideCompletionsAsync(CompletionContext completionC
completionContext.SuggestionModeItem = CommonCompletionItem.Create(CSharpFeaturesResources.Name, CompletionItemRules.Default);
}
private ImmutableArray<IEnumerable<string>> GetBaseNames(SemanticModel semanticModel, NameDeclarationInfo nameInfo)
{
if (nameInfo.Alias != null)
{
return ImmutableArray.Create(SpecializedCollections.SingletonEnumerable(nameInfo.Alias.Name));
}
if (!IsValidType(nameInfo.Type))
{
return default;
}
var type = UnwrapType(nameInfo.Type, semanticModel.Compilation);
var baseNames = NameGenerator.GetBaseNames(type);
return baseNames;
}
private bool IsValidType(ITypeSymbol type)
{
if (type == null)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册