Skip to content

Commit

Permalink
Merge pull request dotnet#62065 from jasonmalinowski/highlight-requir…
Browse files Browse the repository at this point in the history
…ed-methods-in-completion

Improve the experience of completion around required members
  • Loading branch information
jasonmalinowski committed Jun 29, 2022
2 parents 59f2e29 + 9833e19 commit 50bcdbf
Show file tree
Hide file tree
Showing 17 changed files with 109 additions and 3 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -996,6 +996,28 @@ static void Main(string[] args)
await VerifyItemIsAbsentAsync(markup, "this");
}

[Fact, Trait(Traits.Feature, Traits.Features.Completion)]
public async Task RequiredMembersLabeledAndSelected()
{
var markup = @"
class C
{
public required int RequiredField;
public required int RequiredProperty { get; set; }
}
class D
{
static void Main(string[] args)
{
var t = new C() { $$ };
}
}";

await VerifyItemExistsAsync(markup, "RequiredField", inlineDescription: FeaturesResources.Required, matchPriority: MatchPriority.Preselect);
await VerifyItemExistsAsync(markup, "RequiredProperty", inlineDescription: FeaturesResources.Required);
}

[WorkItem(15205, "https://github.com/dotnet/roslyn/issues/15205")]
[Fact, Trait(Traits.Feature, Traits.Features.Completion)]
public async Task NestedPropertyInitializers1()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -62,17 +62,32 @@ public override async Task ProvideCompletionsAsync(CompletionContext context)
var alreadyTypedMembers = GetInitializedMembers(semanticModel.SyntaxTree, position, cancellationToken);
var uninitializedMembers = members.Where(m => !alreadyTypedMembers.Contains(m.Name));

uninitializedMembers = uninitializedMembers.Where(m => m.IsEditorBrowsable(context.CompletionOptions.HideAdvancedMembers, semanticModel.Compilation));
// Sort the members by name so if we preselect one, it'll be stable
uninitializedMembers = uninitializedMembers.Where(m => m.IsEditorBrowsable(context.CompletionOptions.HideAdvancedMembers, semanticModel.Compilation))
.OrderBy(m => m.Name);

var firstUnitializedRequiredMember = true;

foreach (var uninitializedMember in uninitializedMembers)
{
var rules = s_rules;

// We'll hard select the first required member to make it a bit easier to type out an object initializer
// with a bunch of members.
if (firstUnitializedRequiredMember && uninitializedMember.IsRequired())
{
rules = rules.WithSelectionBehavior(CompletionItemSelectionBehavior.HardSelection).WithMatchPriority(MatchPriority.Preselect);
firstUnitializedRequiredMember = false;
}

context.AddItem(SymbolCompletionItem.CreateWithSymbolId(
displayText: EscapeIdentifier(uninitializedMember),
displayTextSuffix: "",
insertionText: null,
symbols: ImmutableArray.Create(uninitializedMember),
contextPosition: initializerLocation.SourceSpan.Start,
rules: s_rules));
inlineDescription: uninitializedMember.IsRequired() ? FeaturesResources.Required : null,
rules: rules));
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@

namespace Microsoft.CodeAnalysis.Completion.Providers
{
internal static partial class SymbolCompletionItem
internal static class SymbolCompletionItem
{
private const string InsertionTextProperty = "InsertionText";

Expand Down
4 changes: 4 additions & 0 deletions src/Features/Core/Portable/FeaturesResources.resx
Original file line number Diff line number Diff line change
Expand Up @@ -3153,4 +3153,8 @@ Zero-width positive lookbehind assertions are typically used at the beginning of
<data name="Fixing_0" xml:space="preserve">
<value>Fixing '{0}'</value>
</data>
<data name="Required" xml:space="preserve">
<value>required</value>
<comment>Used in the object initializer completion.</comment>
</data>
</root>
5 changes: 5 additions & 0 deletions src/Features/Core/Portable/xlf/FeaturesResources.cs.xlf

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

5 changes: 5 additions & 0 deletions src/Features/Core/Portable/xlf/FeaturesResources.de.xlf

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

5 changes: 5 additions & 0 deletions src/Features/Core/Portable/xlf/FeaturesResources.es.xlf

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

5 changes: 5 additions & 0 deletions src/Features/Core/Portable/xlf/FeaturesResources.fr.xlf

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

5 changes: 5 additions & 0 deletions src/Features/Core/Portable/xlf/FeaturesResources.it.xlf

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

5 changes: 5 additions & 0 deletions src/Features/Core/Portable/xlf/FeaturesResources.ja.xlf

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

5 changes: 5 additions & 0 deletions src/Features/Core/Portable/xlf/FeaturesResources.ko.xlf

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

5 changes: 5 additions & 0 deletions src/Features/Core/Portable/xlf/FeaturesResources.pl.xlf

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

5 changes: 5 additions & 0 deletions src/Features/Core/Portable/xlf/FeaturesResources.pt-BR.xlf

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

5 changes: 5 additions & 0 deletions src/Features/Core/Portable/xlf/FeaturesResources.ru.xlf

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

5 changes: 5 additions & 0 deletions src/Features/Core/Portable/xlf/FeaturesResources.tr.xlf

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

5 changes: 5 additions & 0 deletions src/Features/Core/Portable/xlf/FeaturesResources.zh-Hans.xlf

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

5 changes: 5 additions & 0 deletions src/Features/Core/Portable/xlf/FeaturesResources.zh-Hant.xlf

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

0 comments on commit 50bcdbf

Please sign in to comment.