Merge branch 'rel/15.3' into dev

# Conflicts:
#	src/Microsoft.AspNetCore.Razor.Language/Legacy/CSharpCodeParser.cs
#	src/Microsoft.AspNetCore.Razor.Language/TagHelperDescriptorBuilder.cs
#	src/Microsoft.CodeAnalysis.Razor/ViewComponentTagHelperDescriptorFactory.cs
#	test/Microsoft.AspNetCore.Razor.Language.Test/Legacy/CSharpDirectivesTest.cs
#	test/Microsoft.CodeAnalysis.Razor.Test/ViewComponentTagHelperDescriptorFactoryTest.cs
This commit is contained in:
N. Taylor Mullen 2017-05-19 11:23:00 -07:00
commit 2eb443acb6
6 changed files with 74 additions and 25 deletions

View File

@ -1559,7 +1559,6 @@ namespace Microsoft.AspNetCore.Razor.Language.Legacy
return; return;
} }
var outputKind = SpanKindInternal.Markup;
switch (tokenDescriptor.Kind) switch (tokenDescriptor.Kind)
{ {
case DirectiveTokenKind.Type: case DirectiveTokenKind.Type:
@ -1572,8 +1571,6 @@ namespace Microsoft.AspNetCore.Razor.Language.Legacy
return; return;
} }
outputKind = SpanKindInternal.Code;
break; break;
case DirectiveTokenKind.Namespace: case DirectiveTokenKind.Namespace:
@ -1586,8 +1583,6 @@ namespace Microsoft.AspNetCore.Razor.Language.Legacy
return; return;
} }
outputKind = SpanKindInternal.Code;
break; break;
case DirectiveTokenKind.Member: case DirectiveTokenKind.Member:
@ -1603,8 +1598,6 @@ namespace Microsoft.AspNetCore.Razor.Language.Legacy
CurrentSymbol.Content.Length); CurrentSymbol.Content.Length);
return; return;
} }
outputKind = SpanKindInternal.Code;
break; break;
case DirectiveTokenKind.String: case DirectiveTokenKind.String:
@ -1624,7 +1617,7 @@ namespace Microsoft.AspNetCore.Razor.Language.Legacy
} }
Span.ChunkGenerator = new DirectiveTokenChunkGenerator(tokenDescriptor); Span.ChunkGenerator = new DirectiveTokenChunkGenerator(tokenDescriptor);
Output(outputKind, AcceptedCharactersInternal.NonWhiteSpace); Output(SpanKindInternal.Code, AcceptedCharactersInternal.NonWhiteSpace);
} }
AcceptWhile(IsSpacingToken(includeNewLines: false, includeComments: true)); AcceptWhile(IsSpacingToken(includeNewLines: false, includeComments: true));

View File

@ -16,6 +16,7 @@ namespace Microsoft.AspNetCore.Razor.Language
new[] { '@', '!', '<', '/', '?', '[', '>', ']', '=', '"', '\'', '*' }); new[] { '@', '!', '<', '/', '?', '[', '>', ']', '=', '"', '\'', '*' });
private string _displayName;
private string _documentation; private string _documentation;
private string _tagOutputHint; private string _tagOutputHint;
private HashSet<string> _allowedChildTags; private HashSet<string> _allowedChildTags;
@ -29,6 +30,7 @@ namespace Microsoft.AspNetCore.Razor.Language
private TagHelperDescriptorBuilder(string typeName, string assemblyName) private TagHelperDescriptorBuilder(string typeName, string assemblyName)
{ {
_typeName = typeName; _typeName = typeName;
_displayName = _typeName;
_assemblyName = assemblyName; _assemblyName = assemblyName;
_metadata = new Dictionary<string, string>(StringComparer.Ordinal); _metadata = new Dictionary<string, string>(StringComparer.Ordinal);
} }
@ -133,6 +135,18 @@ namespace Microsoft.AspNetCore.Razor.Language
return this; return this;
} }
public TagHelperDescriptorBuilder DisplayName(string displayName)
{
if (displayName == null)
{
throw new ArgumentNullException(nameof(displayName));
}
_displayName = displayName;
return this;
}
public TagHelperDescriptor Build() public TagHelperDescriptor Build()
{ {
var validationDiagnostics = Validate(); var validationDiagnostics = Validate();
@ -146,7 +160,7 @@ namespace Microsoft.AspNetCore.Razor.Language
_typeName, _typeName,
_assemblyName, _assemblyName,
_typeName /* Name */, _typeName /* Name */,
_typeName /* DisplayName */, _displayName,
_documentation, _documentation,
_tagOutputHint, _tagOutputHint,
_tagMatchingRules ?? Enumerable.Empty<TagMatchingRule>(), _tagMatchingRules ?? Enumerable.Empty<TagMatchingRule>(),

View File

@ -34,8 +34,10 @@ namespace Microsoft.CodeAnalysis.Razor
var shortName = GetShortName(type); var shortName = GetShortName(type);
var tagName = $"vc:{HtmlCase.ToHtmlCase(shortName)}"; var tagName = $"vc:{HtmlCase.ToHtmlCase(shortName)}";
var typeName = $"__Generated__{shortName}ViewComponentTagHelper"; var typeName = $"__Generated__{shortName}ViewComponentTagHelper";
var descriptorBuilder = TagHelperDescriptorBuilder.Create(typeName, assemblyName); var displayName = shortName + "ViewComponentTagHelper";
var descriptorBuilder = TagHelperDescriptorBuilder.Create(typeName, assemblyName)
.DisplayName(displayName);
if (TryFindInvokeMethod(type, out var method, out var diagnostic)) if (TryFindInvokeMethod(type, out var method, out var diagnostic))
{ {
var methodParameters = method.Parameters; var methodParameters = method.Parameters;

View File

@ -120,7 +120,7 @@ namespace Microsoft.AspNetCore.Razor.Language.Legacy
Factory.CodeTransition(), Factory.CodeTransition(),
Factory.MetaCode("custom").Accepts(AcceptedCharactersInternal.None), Factory.MetaCode("custom").Accepts(AcceptedCharactersInternal.None),
Factory.Span(SpanKindInternal.Markup, " ", markup: false).Accepts(AcceptedCharactersInternal.WhiteSpace), Factory.Span(SpanKindInternal.Markup, " ", markup: false).Accepts(AcceptedCharactersInternal.WhiteSpace),
Factory.Span(SpanKindInternal.Markup, "\"AString\"", markup: false) Factory.Span(SpanKindInternal.Code, "\"AString\"", markup: false)
.With(new DirectiveTokenChunkGenerator(descriptor.Tokens[0])) .With(new DirectiveTokenChunkGenerator(descriptor.Tokens[0]))
.Accepts(AcceptedCharactersInternal.NonWhiteSpace))); .Accepts(AcceptedCharactersInternal.NonWhiteSpace)));
} }
@ -255,7 +255,7 @@ namespace Microsoft.AspNetCore.Razor.Language.Legacy
.Accepts(AcceptedCharactersInternal.NonWhiteSpace), .Accepts(AcceptedCharactersInternal.NonWhiteSpace),
Factory.Span(SpanKindInternal.Markup, " ", markup: false).Accepts(AcceptedCharactersInternal.WhiteSpace), Factory.Span(SpanKindInternal.Markup, " ", markup: false).Accepts(AcceptedCharactersInternal.WhiteSpace),
Factory.Span(SpanKindInternal.Markup, "\"AString\"", markup: false) Factory.Span(SpanKindInternal.Code, "\"AString\"", markup: false)
.With(new DirectiveTokenChunkGenerator(descriptor.Tokens[2])) .With(new DirectiveTokenChunkGenerator(descriptor.Tokens[2]))
.Accepts(AcceptedCharactersInternal.NonWhiteSpace))); .Accepts(AcceptedCharactersInternal.NonWhiteSpace)));
} }
@ -278,7 +278,7 @@ namespace Microsoft.AspNetCore.Razor.Language.Legacy
Factory.CodeTransition(), Factory.CodeTransition(),
Factory.MetaCode("custom").Accepts(AcceptedCharactersInternal.None), Factory.MetaCode("custom").Accepts(AcceptedCharactersInternal.None),
Factory.Span(SpanKindInternal.Markup, " ", markup: false).Accepts(AcceptedCharactersInternal.WhiteSpace), Factory.Span(SpanKindInternal.Markup, " ", markup: false).Accepts(AcceptedCharactersInternal.WhiteSpace),
Factory.Span(SpanKindInternal.Markup, "\"Header\"", markup: false) Factory.Span(SpanKindInternal.Code, "\"Header\"", markup: false)
.With(new DirectiveTokenChunkGenerator(descriptor.Tokens[0])) .With(new DirectiveTokenChunkGenerator(descriptor.Tokens[0]))
.Accepts(AcceptedCharactersInternal.NonWhiteSpace), .Accepts(AcceptedCharactersInternal.NonWhiteSpace),
Factory.Span(SpanKindInternal.Markup, " ", markup: false).Accepts(AcceptedCharactersInternal.AllWhiteSpace), Factory.Span(SpanKindInternal.Markup, " ", markup: false).Accepts(AcceptedCharactersInternal.AllWhiteSpace),
@ -314,7 +314,7 @@ namespace Microsoft.AspNetCore.Razor.Language.Legacy
Factory.CodeTransition(), Factory.CodeTransition(),
Factory.MetaCode("custom").Accepts(AcceptedCharactersInternal.None), Factory.MetaCode("custom").Accepts(AcceptedCharactersInternal.None),
Factory.Span(SpanKindInternal.Markup, " ", markup: false).Accepts(AcceptedCharactersInternal.WhiteSpace), Factory.Span(SpanKindInternal.Markup, " ", markup: false).Accepts(AcceptedCharactersInternal.WhiteSpace),
Factory.Span(SpanKindInternal.Markup, "\"Name\"", markup: false) Factory.Span(SpanKindInternal.Code, "\"Name\"", markup: false)
.With(new DirectiveTokenChunkGenerator(descriptor.Tokens[0])) .With(new DirectiveTokenChunkGenerator(descriptor.Tokens[0]))
.Accepts(AcceptedCharactersInternal.NonWhiteSpace), .Accepts(AcceptedCharactersInternal.NonWhiteSpace),
Factory.Span(SpanKindInternal.Markup, " ", markup: false).Accepts(AcceptedCharactersInternal.AllWhiteSpace), Factory.Span(SpanKindInternal.Markup, " ", markup: false).Accepts(AcceptedCharactersInternal.AllWhiteSpace),
@ -401,7 +401,7 @@ namespace Microsoft.AspNetCore.Razor.Language.Legacy
Factory.CodeTransition(), Factory.CodeTransition(),
Factory.MetaCode("custom").Accepts(AcceptedCharactersInternal.None), Factory.MetaCode("custom").Accepts(AcceptedCharactersInternal.None),
Factory.Span(SpanKindInternal.Markup, " ", markup: false).Accepts(AcceptedCharactersInternal.WhiteSpace), Factory.Span(SpanKindInternal.Markup, " ", markup: false).Accepts(AcceptedCharactersInternal.WhiteSpace),
Factory.Span(SpanKindInternal.Markup, "\"hello\"", markup: false) Factory.Span(SpanKindInternal.Code, "\"hello\"", markup: false)
.With(new DirectiveTokenChunkGenerator(descriptor.Tokens[0])) .With(new DirectiveTokenChunkGenerator(descriptor.Tokens[0]))
.Accepts(AcceptedCharactersInternal.NonWhiteSpace), .Accepts(AcceptedCharactersInternal.NonWhiteSpace),
Factory.Span(SpanKindInternal.Markup, " ; ", markup: false).Accepts(AcceptedCharactersInternal.WhiteSpace))); Factory.Span(SpanKindInternal.Markup, " ; ", markup: false).Accepts(AcceptedCharactersInternal.WhiteSpace)));
@ -430,7 +430,7 @@ namespace Microsoft.AspNetCore.Razor.Language.Legacy
Factory.CodeTransition(), Factory.CodeTransition(),
Factory.MetaCode("custom").Accepts(AcceptedCharactersInternal.None), Factory.MetaCode("custom").Accepts(AcceptedCharactersInternal.None),
Factory.Span(SpanKindInternal.Markup, " ", markup: false).Accepts(AcceptedCharactersInternal.WhiteSpace), Factory.Span(SpanKindInternal.Markup, " ", markup: false).Accepts(AcceptedCharactersInternal.WhiteSpace),
Factory.Span(SpanKindInternal.Markup, "\"hello\"", markup: false) Factory.Span(SpanKindInternal.Code, "\"hello\"", markup: false)
.With(new DirectiveTokenChunkGenerator(descriptor.Tokens[0])) .With(new DirectiveTokenChunkGenerator(descriptor.Tokens[0]))
.Accepts(AcceptedCharactersInternal.NonWhiteSpace), .Accepts(AcceptedCharactersInternal.NonWhiteSpace),
@ -461,7 +461,7 @@ namespace Microsoft.AspNetCore.Razor.Language.Legacy
Factory.CodeTransition(), Factory.CodeTransition(),
Factory.MetaCode("custom").Accepts(AcceptedCharactersInternal.None), Factory.MetaCode("custom").Accepts(AcceptedCharactersInternal.None),
Factory.Span(SpanKindInternal.Markup, " ", markup: false).Accepts(AcceptedCharactersInternal.WhiteSpace), Factory.Span(SpanKindInternal.Markup, " ", markup: false).Accepts(AcceptedCharactersInternal.WhiteSpace),
Factory.Span(SpanKindInternal.Markup, "\"Hello\"", markup: false) Factory.Span(SpanKindInternal.Code, "\"Hello\"", markup: false)
.With(new DirectiveTokenChunkGenerator(descriptor.Tokens[0])) .With(new DirectiveTokenChunkGenerator(descriptor.Tokens[0]))
.Accepts(AcceptedCharactersInternal.NonWhiteSpace), .Accepts(AcceptedCharactersInternal.NonWhiteSpace),
@ -492,7 +492,7 @@ namespace Microsoft.AspNetCore.Razor.Language.Legacy
Factory.CodeTransition(), Factory.CodeTransition(),
Factory.MetaCode("custom").Accepts(AcceptedCharactersInternal.None), Factory.MetaCode("custom").Accepts(AcceptedCharactersInternal.None),
Factory.Span(SpanKindInternal.Markup, " ", markup: false).Accepts(AcceptedCharactersInternal.WhiteSpace), Factory.Span(SpanKindInternal.Markup, " ", markup: false).Accepts(AcceptedCharactersInternal.WhiteSpace),
Factory.Span(SpanKindInternal.Markup, "\"Hello\"", markup: false) Factory.Span(SpanKindInternal.Code, "\"Hello\"", markup: false)
.With(new DirectiveTokenChunkGenerator(descriptor.Tokens[0])) .With(new DirectiveTokenChunkGenerator(descriptor.Tokens[0]))
.Accepts(AcceptedCharactersInternal.NonWhiteSpace)), .Accepts(AcceptedCharactersInternal.NonWhiteSpace)),
expectedErorr); expectedErorr);
@ -521,7 +521,7 @@ namespace Microsoft.AspNetCore.Razor.Language.Legacy
Factory.CodeTransition(), Factory.CodeTransition(),
Factory.MetaCode("custom").Accepts(AcceptedCharactersInternal.None), Factory.MetaCode("custom").Accepts(AcceptedCharactersInternal.None),
Factory.Span(SpanKindInternal.Markup, " ", markup: false).Accepts(AcceptedCharactersInternal.WhiteSpace), Factory.Span(SpanKindInternal.Markup, " ", markup: false).Accepts(AcceptedCharactersInternal.WhiteSpace),
Factory.Span(SpanKindInternal.Markup, "\"Hello\"", markup: false) Factory.Span(SpanKindInternal.Code, "\"Hello\"", markup: false)
.With(new DirectiveTokenChunkGenerator(descriptor.Tokens[0])) .With(new DirectiveTokenChunkGenerator(descriptor.Tokens[0]))
.Accepts(AcceptedCharactersInternal.NonWhiteSpace), .Accepts(AcceptedCharactersInternal.NonWhiteSpace),
Factory.Span(SpanKindInternal.Markup, " ", markup: false).Accepts(AcceptedCharactersInternal.AllWhiteSpace), Factory.Span(SpanKindInternal.Markup, " ", markup: false).Accepts(AcceptedCharactersInternal.AllWhiteSpace),
@ -979,7 +979,7 @@ namespace Microsoft.AspNetCore.Razor.Language.Legacy
Factory.CodeTransition(), Factory.CodeTransition(),
Factory.MetaCode("custom").Accepts(AcceptedCharactersInternal.None), Factory.MetaCode("custom").Accepts(AcceptedCharactersInternal.None),
Factory.Span(SpanKindInternal.Markup, " ", markup: false).Accepts(AcceptedCharactersInternal.WhiteSpace), Factory.Span(SpanKindInternal.Markup, " ", markup: false).Accepts(AcceptedCharactersInternal.WhiteSpace),
Factory.Span(SpanKindInternal.Markup, "\"simple-value\"", markup: false) Factory.Span(SpanKindInternal.Code, "\"simple-value\"", markup: false)
.Accepts(AcceptedCharactersInternal.NonWhiteSpace) .Accepts(AcceptedCharactersInternal.NonWhiteSpace)
.With(chunkGenerator))); .With(chunkGenerator)));
} }
@ -1004,7 +1004,7 @@ namespace Microsoft.AspNetCore.Razor.Language.Legacy
Factory.CodeTransition(), Factory.CodeTransition(),
Factory.MetaCode("custom").Accepts(AcceptedCharactersInternal.None), Factory.MetaCode("custom").Accepts(AcceptedCharactersInternal.None),
Factory.Span(SpanKindInternal.Markup, " ", markup: false).Accepts(AcceptedCharactersInternal.WhiteSpace), Factory.Span(SpanKindInternal.Markup, " ", markup: false).Accepts(AcceptedCharactersInternal.WhiteSpace),
Factory.Span(SpanKindInternal.Markup, "\"{formaction}?/{id}?\"", markup: false) Factory.Span(SpanKindInternal.Code, "\"{formaction}?/{id}?\"", markup: false)
.Accepts(AcceptedCharactersInternal.NonWhiteSpace) .Accepts(AcceptedCharactersInternal.NonWhiteSpace)
.With(chunkGenerator))); .With(chunkGenerator)));
} }
@ -1027,7 +1027,7 @@ namespace Microsoft.AspNetCore.Razor.Language.Legacy
Factory.CodeTransition(), Factory.CodeTransition(),
Factory.MetaCode("custom").Accepts(AcceptedCharactersInternal.None), Factory.MetaCode("custom").Accepts(AcceptedCharactersInternal.None),
Factory.Span(SpanKindInternal.Markup, " ", markup: false).Accepts(AcceptedCharactersInternal.WhiteSpace), Factory.Span(SpanKindInternal.Markup, " ", markup: false).Accepts(AcceptedCharactersInternal.WhiteSpace),
Factory.Span(SpanKindInternal.Markup, "\"{formaction}?/{id}?\"", markup: false) Factory.Span(SpanKindInternal.Code, "\"{formaction}?/{id}?\"", markup: false)
.Accepts(AcceptedCharactersInternal.NonWhiteSpace) .Accepts(AcceptedCharactersInternal.NonWhiteSpace)
.With(new DirectiveTokenChunkGenerator(descriptor.Tokens.First())), .With(new DirectiveTokenChunkGenerator(descriptor.Tokens.First())),
Factory.Span(SpanKindInternal.Code, " ", markup: false).Accepts(AcceptedCharactersInternal.WhiteSpace), Factory.Span(SpanKindInternal.Code, " ", markup: false).Accepts(AcceptedCharactersInternal.WhiteSpace),

View File

@ -0,0 +1,38 @@
// Copyright (c) .NET Foundation. All rights reserved.
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
using Xunit;
namespace Microsoft.AspNetCore.Razor.Language
{
public class TagHelperDescriptorBuilderTest
{
[Fact]
public void DisplayName_SetsDescriptorsDisplayName()
{
// Arrange
var expectedDisplayName = "ExpectedDisplayName";
var builder = TagHelperDescriptorBuilder.Create("TestTagHelper", "TestAssembly");
// Act
var descriptor = builder.DisplayName(expectedDisplayName).Build();
// Assert
Assert.Equal(expectedDisplayName, descriptor.DisplayName);
}
[Fact]
public void DisplayName_DefaultsToTypeName()
{
// Arrange
var expectedDisplayName = "TestTagHelper";
var builder = TagHelperDescriptorBuilder.Create("TestTagHelper", "TestAssembly");
// Act
var descriptor = builder.Build();
// Assert
Assert.Equal(expectedDisplayName, descriptor.DisplayName);
}
}
}

View File

@ -1,11 +1,10 @@
// Copyright (c) .NET Foundation. All rights reserved. // Copyright (c) .NET Foundation. All rights reserved.
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
using Microsoft.AspNetCore.Razor.Language;
using System.Collections.Generic; using System.Collections.Generic;
using System.Reflection; using System.Reflection;
using Microsoft.AspNetCore.Razor.Language;
using Xunit; using Xunit;
using Microsoft.AspNetCore.Razor.Language.Legacy;
using System.Threading.Tasks; using System.Threading.Tasks;
namespace Microsoft.CodeAnalysis.Razor.Workspaces namespace Microsoft.CodeAnalysis.Razor.Workspaces
@ -22,6 +21,7 @@ namespace Microsoft.CodeAnalysis.Razor.Workspaces
var expectedDescriptor = TagHelperDescriptorBuilder.Create( var expectedDescriptor = TagHelperDescriptorBuilder.Create(
"__Generated__StringParameterViewComponentTagHelper", "__Generated__StringParameterViewComponentTagHelper",
typeof(StringParameterViewComponent).GetTypeInfo().Assembly.GetName().Name) typeof(StringParameterViewComponent).GetTypeInfo().Assembly.GetName().Name)
.DisplayName("StringParameterViewComponentTagHelper")
.TagMatchingRule(rule => .TagMatchingRule(rule =>
rule rule
.RequireTagName("vc:string-parameter") .RequireTagName("vc:string-parameter")
@ -57,6 +57,7 @@ namespace Microsoft.CodeAnalysis.Razor.Workspaces
var expectedDescriptor = TagHelperDescriptorBuilder.Create( var expectedDescriptor = TagHelperDescriptorBuilder.Create(
"__Generated__VariousParameterViewComponentTagHelper", "__Generated__VariousParameterViewComponentTagHelper",
typeof(VariousParameterViewComponent).GetTypeInfo().Assembly.GetName().Name) typeof(VariousParameterViewComponent).GetTypeInfo().Assembly.GetName().Name)
.DisplayName("VariousParameterViewComponentTagHelper")
.TagMatchingRule(rule => .TagMatchingRule(rule =>
rule rule
.RequireTagName("vc:various-parameter") .RequireTagName("vc:various-parameter")
@ -99,6 +100,7 @@ namespace Microsoft.CodeAnalysis.Razor.Workspaces
var expectedDescriptor = TagHelperDescriptorBuilder.Create( var expectedDescriptor = TagHelperDescriptorBuilder.Create(
"__Generated__GenericParameterViewComponentTagHelper", "__Generated__GenericParameterViewComponentTagHelper",
typeof(GenericParameterViewComponent).GetTypeInfo().Assembly.GetName().Name) typeof(GenericParameterViewComponent).GetTypeInfo().Assembly.GetName().Name)
.DisplayName("GenericParameterViewComponentTagHelper")
.TagMatchingRule(rule => .TagMatchingRule(rule =>
rule rule
.RequireTagName("vc:generic-parameter") .RequireTagName("vc:generic-parameter")