Skip to content
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -26,8 +26,15 @@ internal class DirectiveCompletionItemProvider : IRazorCompletionItemProvider
CSharpCodeParser.UsingDirectiveDescriptor
};

private static readonly IEnumerable<DirectiveDescriptor> s_componentDefaultDirectives = new[]
{
CSharpCodeParser.UsingDirectiveDescriptor
};


// Test accessor
internal static IEnumerable<DirectiveDescriptor> DefaultDirectives => s_defaultDirectives;
internal static IEnumerable<DirectiveDescriptor> ComponentDefaultDirectives => s_componentDefaultDirectives;

// internal for testing
// Do not forget to update both insert and display text !important
Expand Down Expand Up @@ -133,7 +140,7 @@ internal static bool ShouldProvideCompletions(RazorCompletionContext context)
// Internal for testing
internal static ImmutableArray<RazorCompletionItem> GetDirectiveCompletionItems(RazorSyntaxTree syntaxTree)
{
var defaultDirectives = FileKinds.IsComponent(syntaxTree.Options.FileKind) ? Array.Empty<DirectiveDescriptor>() : s_defaultDirectives;
var defaultDirectives = FileKinds.IsComponent(syntaxTree.Options.FileKind) ? s_componentDefaultDirectives : s_defaultDirectives;
var directives = syntaxTree.Options.Directives.Concat(defaultDirectives);

using var completionItems = new PooledArrayBuilder<RazorCompletionItem>();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,18 +19,25 @@ namespace Microsoft.CodeAnalysis.Razor.Completion;
public class DirectiveCompletionItemProviderTest : ToolingTestBase
{
private static readonly Action<RazorCompletionItem>[] s_defaultDirectiveCollectionVerifiers;
private static readonly Action<RazorCompletionItem>[] s_componentDirectiveCollectionVerifiers;

static DirectiveCompletionItemProviderTest()
{
var defaultDirectiveList = new List<Action<RazorCompletionItem>>(DirectiveCompletionItemProvider.DefaultDirectives.Count() * 2);
s_defaultDirectiveCollectionVerifiers = GetDirectiveVerifies(DirectiveCompletionItemProvider.DefaultDirectives);
s_componentDirectiveCollectionVerifiers = GetDirectiveVerifies(DirectiveCompletionItemProvider.ComponentDefaultDirectives);
}

private static Action<RazorCompletionItem>[] GetDirectiveVerifies(IEnumerable<DirectiveDescriptor> directiveDescriptors)
{
var directiveList = new List<Action<RazorCompletionItem>>(directiveDescriptors.Count() * 2);

foreach (var directive in DirectiveCompletionItemProvider.DefaultDirectives)
foreach (var directive in directiveDescriptors)
{
defaultDirectiveList.Add(item => AssertRazorCompletionItem(directive, item, isSnippet: false));
defaultDirectiveList.Add(item => AssertRazorCompletionItem(directive, item, isSnippet: true));
directiveList.Add(item => AssertRazorCompletionItem(directive, item, isSnippet: false));
directiveList.Add(item => AssertRazorCompletionItem(directive, item, isSnippet: true));
}

s_defaultDirectiveCollectionVerifiers = defaultDirectiveList.ToArray();
return directiveList.ToArray();
}

public DirectiveCompletionItemProviderTest(ITestOutputHelper testOutput)
Expand Down Expand Up @@ -164,6 +171,7 @@ public void GetDirectiveCompletionItems_RazorBlockCommitCharacters()
public void GetDirectiveCompletionItems_ReturnsKnownDirectivesAsSnippets_SingleLine_Component(string knownDirective)
{
// Arrange
var usingDirective = DirectiveCompletionItemProvider.ComponentDefaultDirectives.First();
var customDirective = DirectiveDescriptor.CreateRazorBlockDirective(knownDirective, builder =>
{
builder.DisplayName = knownDirective;
Expand All @@ -178,7 +186,9 @@ public void GetDirectiveCompletionItems_ReturnsKnownDirectivesAsSnippets_SingleL
Assert.Collection(
completionItems,
item => AssertRazorCompletionItem(knownDirective, customDirective, item, commitCharacters: DirectiveCompletionItemProvider.BlockDirectiveCommitCharacters, isSnippet: false),
item => AssertRazorCompletionItem(knownDirective + " directive ...", customDirective, item, commitCharacters: DirectiveCompletionItemProvider.BlockDirectiveCommitCharacters, isSnippet: true));
item => AssertRazorCompletionItem(knownDirective + " directive ...", customDirective, item, commitCharacters: DirectiveCompletionItemProvider.BlockDirectiveCommitCharacters, isSnippet: true),
item => AssertRazorCompletionItem(usingDirective.Directive, usingDirective, item, commitCharacters: DirectiveCompletionItemProvider.SingleLineDirectiveCommitCharacters, isSnippet: false),
item => AssertRazorCompletionItem(usingDirective.Directive + " directive ...", usingDirective, item, commitCharacters: DirectiveCompletionItemProvider.SingleLineDirectiveCommitCharacters, isSnippet: true));
}

[Fact]
Expand Down Expand Up @@ -208,7 +218,7 @@ public void GetDirectiveCompletionItems_ReturnsKnownDirectivesAsSnippets_SingleL
}

[Fact]
public void GetDirectiveCompletionItems_ComponentDocument_DoesNotReturnsDefaultDirectivesAsCompletionItems()
public void GetDirectiveCompletionItems_ComponentDocument_ReturnsDefaultComponentDirectivesAsCompletionItems()
{
// Arrange
var syntaxTree = CreateSyntaxTree("@addTag", FileKinds.Component);
Expand All @@ -217,7 +227,11 @@ public void GetDirectiveCompletionItems_ComponentDocument_DoesNotReturnsDefaultD
var completionItems = DirectiveCompletionItemProvider.GetDirectiveCompletionItems(syntaxTree);

// Assert
Assert.Empty(completionItems);
// Assert
Assert.Collection(
completionItems,
s_componentDirectiveCollectionVerifiers
);
}

[Fact]
Expand Down