Rename HtmlCase => HtmlConventions.

- Moved the invalid non-whitespace html character entries from the various builders into the new HtmlConventions class.
- Updated test file name.
This commit is contained in:
N. Taylor Mullen 2017-05-19 12:35:56 -07:00
parent 6b1117caa9
commit 9bc9f0ef05
8 changed files with 18 additions and 27 deletions

View File

@ -2,11 +2,12 @@
// 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 System; using System;
using System.Collections.Generic;
using System.Text.RegularExpressions; using System.Text.RegularExpressions;
namespace Microsoft.AspNetCore.Razor.Language namespace Microsoft.AspNetCore.Razor.Language
{ {
public static class HtmlCase public static class HtmlConventions
{ {
private const string HtmlCaseRegexReplacement = "-$1$2"; private const string HtmlCaseRegexReplacement = "-$1$2";
@ -20,6 +21,9 @@ namespace Microsoft.AspNetCore.Razor.Language
RegexOptions.None, RegexOptions.None,
TimeSpan.FromMilliseconds(500)); TimeSpan.FromMilliseconds(500));
public static IReadOnlyCollection<char> InvalidNonWhitespaceHtmlCharacters { get; } = new HashSet<char>(
new[] { '@', '!', '<', '/', '?', '[', '>', ']', '=', '"', '\'', '*' });
/// <summary> /// <summary>
/// Converts from pascal/camel case to lower kebab-case. /// Converts from pascal/camel case to lower kebab-case.
/// </summary> /// </summary>

View File

@ -9,9 +9,6 @@ namespace Microsoft.AspNetCore.Razor.Language
{ {
public sealed class RequiredAttributeDescriptorBuilder public sealed class RequiredAttributeDescriptorBuilder
{ {
private static ICollection<char> InvalidNonWhitespaceAttributeNameCharacters { get; } = new HashSet<char>(
new[] { '@', '!', '<', '/', '?', '[', '>', ']', '=', '"', '\'', '*' });
private string _name; private string _name;
private RequiredAttributeDescriptor.NameComparisonMode _nameComparison; private RequiredAttributeDescriptor.NameComparisonMode _nameComparison;
private string _value; private string _value;
@ -105,7 +102,7 @@ namespace Microsoft.AspNetCore.Razor.Language
{ {
foreach (var character in _name) foreach (var character in _name)
{ {
if (char.IsWhiteSpace(character) || InvalidNonWhitespaceAttributeNameCharacters.Contains(character)) if (char.IsWhiteSpace(character) || HtmlConventions.InvalidNonWhitespaceHtmlCharacters.Contains(character))
{ {
var diagnostic = RazorDiagnosticFactory.CreateTagHelper_InvalidTargetedAttributeName(_name, character); var diagnostic = RazorDiagnosticFactory.CreateTagHelper_InvalidTargetedAttributeName(_name, character);

View File

@ -31,9 +31,6 @@ namespace Microsoft.AspNetCore.Razor.Language
[typeof(decimal).FullName] = "decimal", [typeof(decimal).FullName] = "decimal",
}; };
private static ICollection<char> InvalidNonWhitespaceAttributeNameCharacters { get; } = new HashSet<char>(
new[] { '@', '!', '<', '/', '?', '[', '>', ']', '=', '"', '\'', '*' });
private bool _isEnum; private bool _isEnum;
private bool _hasIndexer; private bool _hasIndexer;
private string _indexerValueTypeName; private string _indexerValueTypeName;
@ -191,7 +188,7 @@ namespace Microsoft.AspNetCore.Razor.Language
foreach (var character in _name) foreach (var character in _name)
{ {
if (char.IsWhiteSpace(character) || InvalidNonWhitespaceAttributeNameCharacters.Contains(character)) if (char.IsWhiteSpace(character) || HtmlConventions.InvalidNonWhitespaceHtmlCharacters.Contains(character))
{ {
var diagnostic = RazorDiagnosticFactory.CreateTagHelper_InvalidBoundAttributeName( var diagnostic = RazorDiagnosticFactory.CreateTagHelper_InvalidBoundAttributeName(
_containingTypeName, _containingTypeName,
@ -227,7 +224,7 @@ namespace Microsoft.AspNetCore.Razor.Language
{ {
foreach (var character in _indexerNamePrefix) foreach (var character in _indexerNamePrefix)
{ {
if (char.IsWhiteSpace(character) || InvalidNonWhitespaceAttributeNameCharacters.Contains(character)) if (char.IsWhiteSpace(character) || HtmlConventions.InvalidNonWhitespaceHtmlCharacters.Contains(character))
{ {
var diagnostic = RazorDiagnosticFactory.CreateTagHelper_InvalidBoundAttributePrefix( var diagnostic = RazorDiagnosticFactory.CreateTagHelper_InvalidBoundAttributePrefix(
_containingTypeName, _containingTypeName,

View File

@ -12,10 +12,6 @@ namespace Microsoft.AspNetCore.Razor.Language
internal const string DescriptorKind = "ITagHelper"; internal const string DescriptorKind = "ITagHelper";
internal const string TypeNameKey = "ITagHelper.TypeName"; internal const string TypeNameKey = "ITagHelper.TypeName";
private static ICollection<char> InvalidNonWhitespaceAllowedChildCharacters { get; } = new HashSet<char>(
new[] { '@', '!', '<', '/', '?', '[', '>', ']', '=', '"', '\'', '*' });
private string _displayName; private string _displayName;
private string _documentation; private string _documentation;
private string _tagOutputHint; private string _tagOutputHint;
@ -199,7 +195,7 @@ namespace Microsoft.AspNetCore.Razor.Language
{ {
foreach (var character in name) foreach (var character in name)
{ {
if (char.IsWhiteSpace(character) || InvalidNonWhitespaceAllowedChildCharacters.Contains(character)) if (char.IsWhiteSpace(character) || HtmlConventions.InvalidNonWhitespaceHtmlCharacters.Contains(character))
{ {
var diagnostic = RazorDiagnosticFactory.CreateTagHelper_InvalidRestrictedChild(name, _typeName, character); var diagnostic = RazorDiagnosticFactory.CreateTagHelper_InvalidRestrictedChild(name, _typeName, character);

View File

@ -10,9 +10,6 @@ namespace Microsoft.AspNetCore.Razor.Language
{ {
public sealed class TagMatchingRuleBuilder public sealed class TagMatchingRuleBuilder
{ {
private static ICollection<char> InvalidNonWhitespaceTagNameCharacters { get; } = new HashSet<char>(
new[] { '@', '!', '<', '/', '?', '[', '>', ']', '=', '"', '\'', '*' });
private string _tagName; private string _tagName;
private string _parentTag; private string _parentTag;
private TagStructure _tagStructure; private TagStructure _tagStructure;
@ -126,7 +123,7 @@ namespace Microsoft.AspNetCore.Razor.Language
{ {
foreach (var character in _tagName) foreach (var character in _tagName)
{ {
if (char.IsWhiteSpace(character) || InvalidNonWhitespaceTagNameCharacters.Contains(character)) if (char.IsWhiteSpace(character) || HtmlConventions.InvalidNonWhitespaceHtmlCharacters.Contains(character))
{ {
var diagnostic = RazorDiagnosticFactory.CreateTagHelper_InvalidTargetedTagName(_tagName, character); var diagnostic = RazorDiagnosticFactory.CreateTagHelper_InvalidTargetedTagName(_tagName, character);
@ -147,7 +144,7 @@ namespace Microsoft.AspNetCore.Razor.Language
{ {
foreach (var character in _parentTag) foreach (var character in _parentTag)
{ {
if (char.IsWhiteSpace(character) || InvalidNonWhitespaceTagNameCharacters.Contains(character)) if (char.IsWhiteSpace(character) || HtmlConventions.InvalidNonWhitespaceHtmlCharacters.Contains(character))
{ {
var diagnostic = RazorDiagnosticFactory.CreateTagHelper_InvalidTargetedParentTagName(_parentTag, character); var diagnostic = RazorDiagnosticFactory.CreateTagHelper_InvalidTargetedParentTagName(_parentTag, character);

View File

@ -88,7 +88,7 @@ namespace Microsoft.CodeAnalysis.Razor
descriptorBuilder.TagMatchingRule(ruleBuilder => descriptorBuilder.TagMatchingRule(ruleBuilder =>
{ {
var htmlCasedName = HtmlCase.ToHtmlCase(name); var htmlCasedName = HtmlConventions.ToHtmlCase(name);
ruleBuilder.RequireTagName(htmlCasedName); ruleBuilder.RequireTagName(htmlCasedName);
}); });
@ -197,7 +197,7 @@ namespace Microsoft.CodeAnalysis.Razor
string.IsNullOrEmpty((string)attributeNameAttribute.ConstructorArguments[0].Value)) string.IsNullOrEmpty((string)attributeNameAttribute.ConstructorArguments[0].Value))
{ {
hasExplicitName = false; hasExplicitName = false;
attributeName = HtmlCase.ToHtmlCase(property.Name); attributeName = HtmlConventions.ToHtmlCase(property.Name);
} }
else else
{ {

View File

@ -32,7 +32,7 @@ namespace Microsoft.CodeAnalysis.Razor
{ {
var assemblyName = type.ContainingAssembly.Name; var assemblyName = type.ContainingAssembly.Name;
var shortName = GetShortName(type); var shortName = GetShortName(type);
var tagName = $"vc:{HtmlCase.ToHtmlCase(shortName)}"; var tagName = $"vc:{HtmlConventions.ToHtmlCase(shortName)}";
var typeName = $"__Generated__{shortName}ViewComponentTagHelper"; var typeName = $"__Generated__{shortName}ViewComponentTagHelper";
var displayName = shortName + "ViewComponentTagHelper"; var displayName = shortName + "ViewComponentTagHelper";
var descriptorBuilder = TagHelperDescriptorBuilder.Create(typeName, assemblyName) var descriptorBuilder = TagHelperDescriptorBuilder.Create(typeName, assemblyName)
@ -141,7 +141,7 @@ namespace Microsoft.CodeAnalysis.Razor
// because there are two ways of setting values for the attribute. // because there are two ways of setting values for the attribute.
builder.RequireAttribute(attributeBuilder => builder.RequireAttribute(attributeBuilder =>
{ {
var lowerKebabName = HtmlCase.ToHtmlCase(parameter.Name); var lowerKebabName = HtmlConventions.ToHtmlCase(parameter.Name);
attributeBuilder.Name(lowerKebabName); attributeBuilder.Name(lowerKebabName);
}); });
} }
@ -152,7 +152,7 @@ namespace Microsoft.CodeAnalysis.Razor
{ {
foreach (var parameter in methodParameters) foreach (var parameter in methodParameters)
{ {
var lowerKebabName = HtmlCase.ToHtmlCase(parameter.Name); var lowerKebabName = HtmlConventions.ToHtmlCase(parameter.Name);
var typeName = parameter.Type.ToDisplayString(FullNameTypeDisplayFormat); var typeName = parameter.Type.ToDisplayString(FullNameTypeDisplayFormat);
builder.BindAttribute(attributeBuilder => builder.BindAttribute(attributeBuilder =>
{ {

View File

@ -5,7 +5,7 @@ using Xunit;
namespace Microsoft.AspNetCore.Razor.Language namespace Microsoft.AspNetCore.Razor.Language
{ {
public class HtmlCaseTest public class HtmlConventionsTest
{ {
public static TheoryData HtmlConversionData public static TheoryData HtmlConversionData
{ {
@ -30,7 +30,7 @@ namespace Microsoft.AspNetCore.Razor.Language
public void ToHtmlCase_ReturnsExpectedConversions(string input, string expectedOutput) public void ToHtmlCase_ReturnsExpectedConversions(string input, string expectedOutput)
{ {
// Arrange, Act // Arrange, Act
var output = HtmlCase.ToHtmlCase(input); var output = HtmlConventions.ToHtmlCase(input);
// Assert // Assert
Assert.Equal(output, expectedOutput); Assert.Equal(output, expectedOutput);