Moved all TagHelperDescriptor related builders to have getter setter

instead of methods

More polish to the tag helper descriptor builders.
- Expose underlying builders as getter only list
- Added AsDictionary() extension method to BoundAttributeDescriptorBuilder
- Expose diagnostics as RazorDiagnosticCollection
- Got rid of Require** prefix in TagMatchingRuleBuilder
- Workaround issue aspnet/Razor#1492 by copying the test descriptor
  extensions
This commit is contained in:
Ajay Bhargav Baaskaran 2017-06-29 18:03:40 -07:00
parent 4db7f2eb6d
commit 9c031e6fb5
44 changed files with 1477 additions and 835 deletions

View File

@ -56,16 +56,16 @@ namespace Microsoft.AspNetCore.Mvc.Razor.Extensions
var tagName = $"vc:{HtmlConventions.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(ViewComponentTagHelperConventions.Kind, typeName, assemblyName) var descriptorBuilder = TagHelperDescriptorBuilder.Create(ViewComponentTagHelperConventions.Kind, typeName, assemblyName);
.SetTypeName(typeName) descriptorBuilder.SetTypeName(typeName);
.DisplayName(displayName); descriptorBuilder.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;
descriptorBuilder.TagMatchingRule(ruleBuilder => descriptorBuilder.TagMatchingRule(ruleBuilder =>
{ {
ruleBuilder.RequireTagName(tagName); ruleBuilder.TagName = tagName;
AddRequiredAttributes(methodParameters, ruleBuilder); AddRequiredAttributes(methodParameters, ruleBuilder);
}); });
@ -73,10 +73,10 @@ namespace Microsoft.AspNetCore.Mvc.Razor.Extensions
} }
else else
{ {
descriptorBuilder.AddDiagnostic(diagnostic); descriptorBuilder.Diagnostics.Add(diagnostic);
} }
descriptorBuilder.AddMetadata(ViewComponentTagHelperMetadata.Name, shortName); descriptorBuilder.Metadata[ViewComponentTagHelperMetadata.Name] = shortName;
var descriptor = descriptorBuilder.Build(); var descriptor = descriptorBuilder.Build();
return descriptor; return descriptor;
@ -161,10 +161,10 @@ namespace Microsoft.AspNetCore.Mvc.Razor.Extensions
{ {
// Set required attributes only for non-indexer attributes. Indexer attributes can't be required attributes // Set required attributes only for non-indexer attributes. Indexer attributes can't be required attributes
// 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.Attribute(attributeBuilder =>
{ {
var lowerKebabName = HtmlConventions.ToHtmlCase(parameter.Name); var lowerKebabName = HtmlConventions.ToHtmlCase(parameter.Name);
attributeBuilder.Name(lowerKebabName); attributeBuilder.Name =lowerKebabName;
}); });
} }
} }
@ -184,15 +184,14 @@ namespace Microsoft.AspNetCore.Mvc.Razor.Extensions
builder.BindAttribute(attributeBuilder => builder.BindAttribute(attributeBuilder =>
{ {
attributeBuilder attributeBuilder.Name = lowerKebabName;
.Name(lowerKebabName) attributeBuilder.TypeName = typeName;
.SetPropertyName(parameter.Name) attributeBuilder.DisplayName = $"{simpleName} {containingDisplayName}.{parameter.Name}";
.TypeName(typeName) attributeBuilder.SetPropertyName(parameter.Name);
.DisplayName($"{simpleName} {containingDisplayName}.{parameter.Name}");
if (parameter.Type.TypeKind == TypeKind.Enum) if (parameter.Type.TypeKind == TypeKind.Enum)
{ {
attributeBuilder.AsEnum(); attributeBuilder.IsEnum = true;
} }
else else
{ {

View File

@ -7,23 +7,24 @@ namespace Microsoft.AspNetCore.Razor.Language
{ {
public abstract class BoundAttributeDescriptorBuilder public abstract class BoundAttributeDescriptorBuilder
{ {
public abstract string Name { get; set; }
public abstract string TypeName { get; set; }
public abstract bool IsEnum { get; set; }
public abstract bool IsDictionary { get; set; }
public abstract string IndexerAttributeNamePrefix { get; set; }
public abstract string IndexerValueTypeName { get; set; }
public abstract string Documentation { get; set; }
public abstract string DisplayName { get; set; }
public abstract IDictionary<string, string> Metadata { get; } public abstract IDictionary<string, string> Metadata { get; }
public abstract BoundAttributeDescriptorBuilder Name(string name); public abstract RazorDiagnosticCollection Diagnostics { get; }
public abstract BoundAttributeDescriptorBuilder TypeName(string typeName);
public abstract BoundAttributeDescriptorBuilder AsEnum();
public abstract BoundAttributeDescriptorBuilder AsDictionary(string attributeNamePrefix, string valueTypeName);
public abstract BoundAttributeDescriptorBuilder Documentation(string documentation);
public abstract BoundAttributeDescriptorBuilder AddMetadata(string key, string value);
public abstract BoundAttributeDescriptorBuilder AddDiagnostic(RazorDiagnostic diagnostic);
public abstract BoundAttributeDescriptorBuilder DisplayName(string displayName);
} }
} }

View File

@ -7,7 +7,7 @@ namespace Microsoft.AspNetCore.Razor.Language
{ {
public static class BoundAttributeDescriptorBuilderExtensions public static class BoundAttributeDescriptorBuilderExtensions
{ {
public static BoundAttributeDescriptorBuilder SetPropertyName(this BoundAttributeDescriptorBuilder builder, string propertyName) public static void SetPropertyName(this BoundAttributeDescriptorBuilder builder, string propertyName)
{ {
if (builder == null) if (builder == null)
{ {
@ -19,9 +19,7 @@ namespace Microsoft.AspNetCore.Razor.Language
throw new ArgumentNullException(nameof(propertyName)); throw new ArgumentNullException(nameof(propertyName));
} }
builder.AddMetadata(TagHelperMetadata.Common.PropertyName, propertyName); builder.Metadata[TagHelperMetadata.Common.PropertyName] = propertyName;
return builder;
} }
public static string GetPropertyName(this BoundAttributeDescriptorBuilder builder) public static string GetPropertyName(this BoundAttributeDescriptorBuilder builder)
@ -38,5 +36,20 @@ namespace Microsoft.AspNetCore.Razor.Language
return null; return null;
} }
public static void AsDictionary(
this BoundAttributeDescriptorBuilder builder,
string attributeNamePrefix,
string valueTypeName)
{
if (builder == null)
{
throw new ArgumentNullException(nameof(builder));
}
builder.IsDictionary = true;
builder.IndexerAttributeNamePrefix = attributeNamePrefix;
builder.IndexerValueTypeName = valueTypeName;
}
} }
} }

View File

@ -30,17 +30,9 @@ namespace Microsoft.AspNetCore.Razor.Language
private readonly DefaultTagHelperDescriptorBuilder _parent; private readonly DefaultTagHelperDescriptorBuilder _parent;
private readonly string _kind; private readonly string _kind;
private string _displayName;
private bool _isEnum;
private bool _hasIndexer;
private string _indexerValueTypeName;
private string _name;
private string _typeName;
private string _documentation;
private string _indexerNamePrefix;
private readonly Dictionary<string, string> _metadata; private readonly Dictionary<string, string> _metadata;
private HashSet<RazorDiagnostic> _diagnostics;
private DefaultRazorDiagnosticCollection _diagnostics;
public DefaultBoundAttributeDescriptorBuilder(DefaultTagHelperDescriptorBuilder parent, string kind) public DefaultBoundAttributeDescriptorBuilder(DefaultTagHelperDescriptorBuilder parent, string kind)
{ {
@ -50,70 +42,35 @@ namespace Microsoft.AspNetCore.Razor.Language
_metadata = new Dictionary<string, string>(); _metadata = new Dictionary<string, string>();
} }
public override string Name { get; set; }
public override string TypeName { get; set; }
public override bool IsEnum { get; set; }
public override bool IsDictionary { get; set; }
public override string IndexerAttributeNamePrefix { get; set; }
public override string IndexerValueTypeName { get; set; }
public override string Documentation { get; set; }
public override string DisplayName { get; set; }
public override IDictionary<string, string> Metadata => _metadata; public override IDictionary<string, string> Metadata => _metadata;
public override BoundAttributeDescriptorBuilder Name(string name) public override RazorDiagnosticCollection Diagnostics
{ {
_name = name; get
return this;
}
public override BoundAttributeDescriptorBuilder TypeName(string typeName)
{
_typeName = typeName;
return this;
}
public override BoundAttributeDescriptorBuilder AsEnum()
{
_isEnum = true;
return this;
}
public override BoundAttributeDescriptorBuilder AsDictionary(string attributeNamePrefix, string valueTypeName)
{
_indexerNamePrefix = attributeNamePrefix;
_indexerValueTypeName = valueTypeName;
_hasIndexer = true;
return this;
}
public override BoundAttributeDescriptorBuilder Documentation(string documentation)
{
_documentation = documentation;
return this;
}
public override BoundAttributeDescriptorBuilder AddMetadata(string key, string value)
{
_metadata[key] = value;
return this;
}
public override BoundAttributeDescriptorBuilder AddDiagnostic(RazorDiagnostic diagnostic)
{
EnsureDiagnostics();
_diagnostics.Add(diagnostic);
return this;
}
public override BoundAttributeDescriptorBuilder DisplayName(string displayName)
{
if (displayName == null)
{ {
throw new ArgumentNullException(nameof(displayName)); if (_diagnostics == null)
{
_diagnostics = new DefaultRazorDiagnosticCollection();
}
return _diagnostics;
} }
_displayName = displayName;
return this;
} }
public BoundAttributeDescriptor Build() public BoundAttributeDescriptor Build()
@ -127,15 +84,15 @@ namespace Microsoft.AspNetCore.Razor.Language
var descriptor = new DefaultBoundAttributeDescriptor( var descriptor = new DefaultBoundAttributeDescriptor(
_kind, _kind,
_name, Name,
_typeName, TypeName,
_isEnum, IsEnum,
_hasIndexer, IsDictionary,
_indexerNamePrefix, IndexerAttributeNamePrefix,
_indexerValueTypeName, IndexerValueTypeName,
_documentation, Documentation,
GetDisplayName(), GetDisplayName(),
new Dictionary<string, string>(_metadata), new Dictionary<string, string>(Metadata),
diagnostics.ToArray()); diagnostics.ToArray());
return descriptor; return descriptor;
@ -143,28 +100,28 @@ namespace Microsoft.AspNetCore.Razor.Language
private string GetDisplayName() private string GetDisplayName()
{ {
if (_displayName != null) if (DisplayName != null)
{ {
return _displayName; return DisplayName;
} }
var parentTypeName = _parent.GetTypeName(); var parentTypeName = _parent.GetTypeName();
var propertyName = this.GetPropertyName(); var propertyName = this.GetPropertyName();
if (_typeName != null && if (TypeName != null &&
propertyName != null && propertyName != null &&
parentTypeName != null) parentTypeName != null)
{ {
// This looks like a normal c# property, so lets compute a display name based on that. // This looks like a normal c# property, so lets compute a display name based on that.
if (!PrimitiveDisplayTypeNameLookups.TryGetValue(_typeName, out var simpleTypeName)) if (!PrimitiveDisplayTypeNameLookups.TryGetValue(TypeName, out var simpleTypeName))
{ {
simpleTypeName = _typeName; simpleTypeName = TypeName;
} }
return $"{simpleTypeName} {parentTypeName}.{propertyName}"; return $"{simpleTypeName} {parentTypeName}.{propertyName}";
} }
return _name; return Name;
} }
private IEnumerable<RazorDiagnostic> Validate() private IEnumerable<RazorDiagnostic> Validate()
@ -173,9 +130,9 @@ namespace Microsoft.AspNetCore.Razor.Language
// the server; therefore it's invalid for TagHelpers to bind to them. // the server; therefore it's invalid for TagHelpers to bind to them.
const string DataDashPrefix = "data-"; const string DataDashPrefix = "data-";
if (string.IsNullOrWhiteSpace(_name)) if (string.IsNullOrWhiteSpace(Name))
{ {
if (_indexerNamePrefix == null) if (IndexerAttributeNamePrefix == null)
{ {
var diagnostic = RazorDiagnosticFactory.CreateTagHelper_InvalidBoundAttributeNullOrWhitespace( var diagnostic = RazorDiagnosticFactory.CreateTagHelper_InvalidBoundAttributeNullOrWhitespace(
_parent.GetDisplayName(), _parent.GetDisplayName(),
@ -186,24 +143,24 @@ namespace Microsoft.AspNetCore.Razor.Language
} }
else else
{ {
if (_name.StartsWith(DataDashPrefix, StringComparison.OrdinalIgnoreCase)) if (Name.StartsWith(DataDashPrefix, StringComparison.OrdinalIgnoreCase))
{ {
var diagnostic = RazorDiagnosticFactory.CreateTagHelper_InvalidBoundAttributeNameStartsWith( var diagnostic = RazorDiagnosticFactory.CreateTagHelper_InvalidBoundAttributeNameStartsWith(
_parent.GetDisplayName(), _parent.GetDisplayName(),
GetDisplayName(), GetDisplayName(),
_name); Name);
yield return diagnostic; yield return diagnostic;
} }
foreach (var character in _name) foreach (var character in Name)
{ {
if (char.IsWhiteSpace(character) || HtmlConventions.InvalidNonWhitespaceHtmlCharacters.Contains(character)) if (char.IsWhiteSpace(character) || HtmlConventions.InvalidNonWhitespaceHtmlCharacters.Contains(character))
{ {
var diagnostic = RazorDiagnosticFactory.CreateTagHelper_InvalidBoundAttributeName( var diagnostic = RazorDiagnosticFactory.CreateTagHelper_InvalidBoundAttributeName(
_parent.GetDisplayName(), _parent.GetDisplayName(),
GetDisplayName(), GetDisplayName(),
_name, Name,
character); character);
yield return diagnostic; yield return diagnostic;
@ -211,18 +168,18 @@ namespace Microsoft.AspNetCore.Razor.Language
} }
} }
if (_indexerNamePrefix != null) if (IndexerAttributeNamePrefix != null)
{ {
if (_indexerNamePrefix.StartsWith(DataDashPrefix, StringComparison.OrdinalIgnoreCase)) if (IndexerAttributeNamePrefix.StartsWith(DataDashPrefix, StringComparison.OrdinalIgnoreCase))
{ {
var diagnostic = RazorDiagnosticFactory.CreateTagHelper_InvalidBoundAttributePrefixStartsWith( var diagnostic = RazorDiagnosticFactory.CreateTagHelper_InvalidBoundAttributePrefixStartsWith(
_parent.GetDisplayName(), _parent.GetDisplayName(),
GetDisplayName(), GetDisplayName(),
_indexerNamePrefix); IndexerAttributeNamePrefix);
yield return diagnostic; yield return diagnostic;
} }
else if (_indexerNamePrefix.Length > 0 && string.IsNullOrWhiteSpace(_indexerNamePrefix)) else if (IndexerAttributeNamePrefix.Length > 0 && string.IsNullOrWhiteSpace(IndexerAttributeNamePrefix))
{ {
var diagnostic = RazorDiagnosticFactory.CreateTagHelper_InvalidBoundAttributeNullOrWhitespace( var diagnostic = RazorDiagnosticFactory.CreateTagHelper_InvalidBoundAttributeNullOrWhitespace(
_parent.GetDisplayName(), _parent.GetDisplayName(),
@ -232,14 +189,14 @@ namespace Microsoft.AspNetCore.Razor.Language
} }
else else
{ {
foreach (var character in _indexerNamePrefix) foreach (var character in IndexerAttributeNamePrefix)
{ {
if (char.IsWhiteSpace(character) || HtmlConventions.InvalidNonWhitespaceHtmlCharacters.Contains(character)) if (char.IsWhiteSpace(character) || HtmlConventions.InvalidNonWhitespaceHtmlCharacters.Contains(character))
{ {
var diagnostic = RazorDiagnosticFactory.CreateTagHelper_InvalidBoundAttributePrefix( var diagnostic = RazorDiagnosticFactory.CreateTagHelper_InvalidBoundAttributePrefix(
_parent.GetDisplayName(), _parent.GetDisplayName(),
GetDisplayName(), GetDisplayName(),
_indexerNamePrefix, IndexerAttributeNamePrefix,
character); character);
yield return diagnostic; yield return diagnostic;
@ -248,13 +205,5 @@ namespace Microsoft.AspNetCore.Razor.Language
} }
} }
} }
private void EnsureDiagnostics()
{
if (_diagnostics == null)
{
_diagnostics = new HashSet<RazorDiagnostic>();
}
}
} }
} }

View File

@ -9,46 +9,27 @@ namespace Microsoft.AspNetCore.Razor.Language
{ {
internal class DefaultRequiredAttributeDescriptorBuilder : RequiredAttributeDescriptorBuilder internal class DefaultRequiredAttributeDescriptorBuilder : RequiredAttributeDescriptorBuilder
{ {
private string _name; private DefaultRazorDiagnosticCollection _diagnostics;
private RequiredAttributeDescriptor.NameComparisonMode _nameComparison;
private string _value;
private RequiredAttributeDescriptor.ValueComparisonMode _valueComparison;
private HashSet<RazorDiagnostic> _diagnostics;
public override RequiredAttributeDescriptorBuilder Name(string name) public override string Name { get; set; }
public override RequiredAttributeDescriptor.NameComparisonMode NameComparisonMode { get; set; }
public override string Value { get; set; }
public override RequiredAttributeDescriptor.ValueComparisonMode ValueComparisonMode { get; set; }
public override RazorDiagnosticCollection Diagnostics
{ {
_name = name; get
{
if (_diagnostics == null)
{
_diagnostics = new DefaultRazorDiagnosticCollection();
}
return this; return _diagnostics;
} }
public override RequiredAttributeDescriptorBuilder NameComparisonMode(RequiredAttributeDescriptor.NameComparisonMode nameComparison)
{
_nameComparison = nameComparison;
return this;
}
public override RequiredAttributeDescriptorBuilder Value(string value)
{
_value = value;
return this;
}
public override RequiredAttributeDescriptorBuilder ValueComparisonMode(RequiredAttributeDescriptor.ValueComparisonMode valueComparison)
{
_valueComparison = valueComparison;
return this;
}
public override RequiredAttributeDescriptorBuilder AddDiagnostic(RazorDiagnostic diagnostic)
{
EnsureDiagnostics();
_diagnostics.Add(diagnostic);
return this;
} }
public RequiredAttributeDescriptor Build() public RequiredAttributeDescriptor Build()
@ -60,12 +41,12 @@ namespace Microsoft.AspNetCore.Razor.Language
diagnostics.UnionWith(_diagnostics); diagnostics.UnionWith(_diagnostics);
} }
var displayName = _nameComparison == RequiredAttributeDescriptor.NameComparisonMode.PrefixMatch ? string.Concat(_name, "...") : _name; var displayName = NameComparisonMode == RequiredAttributeDescriptor.NameComparisonMode.PrefixMatch ? string.Concat(Name, "...") : Name;
var rule = new DefaultRequiredAttributeDescriptor( var rule = new DefaultRequiredAttributeDescriptor(
_name, Name,
_nameComparison, NameComparisonMode,
_value, Value,
_valueComparison, ValueComparisonMode,
displayName, displayName,
diagnostics?.ToArray() ?? Array.Empty<RazorDiagnostic>()); diagnostics?.ToArray() ?? Array.Empty<RazorDiagnostic>());
@ -74,7 +55,7 @@ namespace Microsoft.AspNetCore.Razor.Language
private IEnumerable<RazorDiagnostic> Validate() private IEnumerable<RazorDiagnostic> Validate()
{ {
if (string.IsNullOrWhiteSpace(_name)) if (string.IsNullOrWhiteSpace(Name))
{ {
var diagnostic = RazorDiagnosticFactory.CreateTagHelper_InvalidTargetedAttributeNameNullOrWhitespace(); var diagnostic = RazorDiagnosticFactory.CreateTagHelper_InvalidTargetedAttributeNameNullOrWhitespace();
@ -82,24 +63,16 @@ namespace Microsoft.AspNetCore.Razor.Language
} }
else else
{ {
foreach (var character in _name) foreach (var character in Name)
{ {
if (char.IsWhiteSpace(character) || HtmlConventions.InvalidNonWhitespaceHtmlCharacters.Contains(character)) if (char.IsWhiteSpace(character) || HtmlConventions.InvalidNonWhitespaceHtmlCharacters.Contains(character))
{ {
var diagnostic = RazorDiagnosticFactory.CreateTagHelper_InvalidTargetedAttributeName(_name, character); var diagnostic = RazorDiagnosticFactory.CreateTagHelper_InvalidTargetedAttributeName(Name, character);
yield return diagnostic; yield return diagnostic;
} }
} }
} }
} }
private void EnsureDiagnostics()
{
if (_diagnostics == null)
{
_diagnostics = new HashSet<RazorDiagnostic>();
}
}
} }
} }

View File

@ -10,31 +10,83 @@ namespace Microsoft.AspNetCore.Razor.Language
internal class DefaultTagHelperDescriptorBuilder : TagHelperDescriptorBuilder internal class DefaultTagHelperDescriptorBuilder : TagHelperDescriptorBuilder
{ {
// Required values // Required values
private readonly string _kind;
private readonly string _name;
private readonly string _assemblyName;
private readonly Dictionary<string, string> _metadata; private readonly Dictionary<string, string> _metadata;
private string _displayName;
private string _documentation;
private string _tagOutputHint;
private HashSet<string> _allowedChildTags; private HashSet<string> _allowedChildTags;
private List<DefaultBoundAttributeDescriptorBuilder> _attributeBuilders; private List<DefaultBoundAttributeDescriptorBuilder> _attributeBuilders;
private List<DefaultTagMatchingRuleDescriptorBuilder> _tagMatchingRuleBuilders; private List<DefaultTagMatchingRuleDescriptorBuilder> _tagMatchingRuleBuilders;
private HashSet<RazorDiagnostic> _diagnostics; private DefaultRazorDiagnosticCollection _diagnostics;
public DefaultTagHelperDescriptorBuilder(string kind, string name, string assemblyName) public DefaultTagHelperDescriptorBuilder(string kind, string name, string assemblyName)
{ {
_kind = kind; Kind = kind;
_name = name; Name = name;
_assemblyName = assemblyName; AssemblyName = assemblyName;
_metadata = new Dictionary<string, string>(StringComparer.Ordinal); _metadata = new Dictionary<string, string>(StringComparer.Ordinal);
} }
public override string Name { get; }
public override string AssemblyName { get; }
public override string Kind { get; }
public override string DisplayName { get; set; }
public override ICollection<string> AllowedChildTags
{
get
{
if (_allowedChildTags == null)
{
_allowedChildTags = new HashSet<string>(StringComparer.OrdinalIgnoreCase);
}
return _allowedChildTags;
}
}
public override string TagOutputHint { get; set; }
public override string Documentation { get; set; }
public override IDictionary<string, string> Metadata => _metadata; public override IDictionary<string, string> Metadata => _metadata;
public override TagHelperDescriptorBuilder BindAttribute(Action<BoundAttributeDescriptorBuilder> configure) public override RazorDiagnosticCollection Diagnostics
{
get
{
if (_diagnostics == null)
{
_diagnostics = new DefaultRazorDiagnosticCollection();
}
return _diagnostics;
}
}
public override IReadOnlyList<BoundAttributeDescriptorBuilder> BoundAttributes
{
get
{
EnsureAttributeBuilders();
return _attributeBuilders;
}
}
public override IReadOnlyList<TagMatchingRuleDescriptorBuilder> TagMatchingRules
{
get
{
EnsureTagMatchingRuleBuilders();
return _tagMatchingRuleBuilders;
}
}
public override void BindAttribute(Action<BoundAttributeDescriptorBuilder> configure)
{ {
if (configure == null) if (configure == null)
{ {
@ -43,13 +95,12 @@ namespace Microsoft.AspNetCore.Razor.Language
EnsureAttributeBuilders(); EnsureAttributeBuilders();
var builder = new DefaultBoundAttributeDescriptorBuilder(this, _kind); var builder = new DefaultBoundAttributeDescriptorBuilder(this, Kind);
configure(builder); configure(builder);
_attributeBuilders.Add(builder); _attributeBuilders.Add(builder);
return this;
} }
public override TagHelperDescriptorBuilder TagMatchingRule(Action<TagMatchingRuleDescriptorBuilder> configure) public override void TagMatchingRule(Action<TagMatchingRuleDescriptorBuilder> configure)
{ {
if (configure == null) if (configure == null)
{ {
@ -61,57 +112,6 @@ namespace Microsoft.AspNetCore.Razor.Language
var builder = new DefaultTagMatchingRuleDescriptorBuilder(); var builder = new DefaultTagMatchingRuleDescriptorBuilder();
configure(builder); configure(builder);
_tagMatchingRuleBuilders.Add(builder); _tagMatchingRuleBuilders.Add(builder);
return this;
}
public override TagHelperDescriptorBuilder AllowChildTag(string allowedChild)
{
EnsureAllowedChildTags();
_allowedChildTags.Add(allowedChild);
return this;
}
public override TagHelperDescriptorBuilder TagOutputHint(string hint)
{
_tagOutputHint = hint;
return this;
}
public override TagHelperDescriptorBuilder Documentation(string documentation)
{
_documentation = documentation;
return this;
}
public override TagHelperDescriptorBuilder AddMetadata(string key, string value)
{
_metadata[key] = value;
return this;
}
public override TagHelperDescriptorBuilder AddDiagnostic(RazorDiagnostic diagnostic)
{
EnsureDiagnostics();
_diagnostics.Add(diagnostic);
return this;
}
public override TagHelperDescriptorBuilder DisplayName(string displayName)
{
if (displayName == null)
{
throw new ArgumentNullException(nameof(displayName));
}
_displayName = displayName;
return this;
} }
public override TagHelperDescriptor Build() public override TagHelperDescriptor Build()
@ -148,12 +148,12 @@ namespace Microsoft.AspNetCore.Razor.Language
} }
var descriptor = new DefaultTagHelperDescriptor( var descriptor = new DefaultTagHelperDescriptor(
_kind, Kind,
_name, Name,
_assemblyName, AssemblyName,
GetDisplayName(), GetDisplayName(),
_documentation, Documentation,
_tagOutputHint, TagOutputHint,
tagMatchingRules, tagMatchingRules,
attributes, attributes,
_allowedChildTags?.ToArray() ?? Array.Empty<string>(), _allowedChildTags?.ToArray() ?? Array.Empty<string>(),
@ -165,8 +165,8 @@ namespace Microsoft.AspNetCore.Razor.Language
public override void Reset() public override void Reset()
{ {
_documentation = null; Documentation = null;
_tagOutputHint = null; TagOutputHint = null;
_allowedChildTags?.Clear(); _allowedChildTags?.Clear();
_attributeBuilders?.Clear(); _attributeBuilders?.Clear();
_tagMatchingRuleBuilders?.Clear(); _tagMatchingRuleBuilders?.Clear();
@ -176,12 +176,12 @@ namespace Microsoft.AspNetCore.Razor.Language
public string GetDisplayName() public string GetDisplayName()
{ {
if (_displayName != null) if (DisplayName != null)
{ {
return _displayName; return DisplayName;
} }
return this.GetTypeName() ?? _name; return this.GetTypeName() ?? Name;
} }
private IEnumerable<RazorDiagnostic> Validate() private IEnumerable<RazorDiagnostic> Validate()
@ -227,21 +227,5 @@ namespace Microsoft.AspNetCore.Razor.Language
_tagMatchingRuleBuilders = new List<DefaultTagMatchingRuleDescriptorBuilder>(); _tagMatchingRuleBuilders = new List<DefaultTagMatchingRuleDescriptorBuilder>();
} }
} }
private void EnsureAllowedChildTags()
{
if (_allowedChildTags == null)
{
_allowedChildTags = new HashSet<string>(StringComparer.OrdinalIgnoreCase);
}
}
private void EnsureDiagnostics()
{
if (_diagnostics == null)
{
_diagnostics = new HashSet<RazorDiagnostic>();
}
}
} }
} }

View File

@ -10,38 +10,43 @@ namespace Microsoft.AspNetCore.Razor.Language
{ {
internal class DefaultTagMatchingRuleDescriptorBuilder : TagMatchingRuleDescriptorBuilder internal class DefaultTagMatchingRuleDescriptorBuilder : TagMatchingRuleDescriptorBuilder
{ {
private string _tagName;
private string _parentTag;
private TagStructure _tagStructure;
private List<DefaultRequiredAttributeDescriptorBuilder> _requiredAttributeBuilders; private List<DefaultRequiredAttributeDescriptorBuilder> _requiredAttributeBuilders;
private HashSet<RazorDiagnostic> _diagnostics; private DefaultRazorDiagnosticCollection _diagnostics;
internal DefaultTagMatchingRuleDescriptorBuilder() internal DefaultTagMatchingRuleDescriptorBuilder()
{ {
} }
public override TagMatchingRuleDescriptorBuilder RequireTagName(string tagName) public override string TagName { get; set; }
{
_tagName = tagName;
return this; public override string ParentTag { get; set; }
public override TagStructure TagStructure { get; set; }
public override RazorDiagnosticCollection Diagnostics
{
get
{
if (_diagnostics == null)
{
_diagnostics = new DefaultRazorDiagnosticCollection();
}
return _diagnostics;
}
} }
public override TagMatchingRuleDescriptorBuilder RequireParentTag(string parentTag) public override IReadOnlyList<RequiredAttributeDescriptorBuilder> Attributes
{ {
_parentTag = parentTag; get
{
EnsureRequiredAttributeBuilders();
return this; return _requiredAttributeBuilders;
}
} }
public override TagMatchingRuleDescriptorBuilder RequireTagStructure(TagStructure tagStructure) public override void Attribute(Action<RequiredAttributeDescriptorBuilder> configure)
{
_tagStructure = tagStructure;
return this;
}
public override TagMatchingRuleDescriptorBuilder RequireAttribute(Action<RequiredAttributeDescriptorBuilder> configure)
{ {
if (configure == null) if (configure == null)
{ {
@ -53,16 +58,6 @@ namespace Microsoft.AspNetCore.Razor.Language
var builder = new DefaultRequiredAttributeDescriptorBuilder(); var builder = new DefaultRequiredAttributeDescriptorBuilder();
configure(builder); configure(builder);
_requiredAttributeBuilders.Add(builder); _requiredAttributeBuilders.Add(builder);
return this;
}
public override TagMatchingRuleDescriptorBuilder AddDiagnostic(RazorDiagnostic diagnostic)
{
EnsureDiagnostics();
_diagnostics.Add(diagnostic);
return this;
} }
public TagMatchingRuleDescriptor Build() public TagMatchingRuleDescriptor Build()
@ -87,9 +82,9 @@ namespace Microsoft.AspNetCore.Razor.Language
} }
var rule = new DefaultTagMatchingRuleDescriptor( var rule = new DefaultTagMatchingRuleDescriptor(
_tagName, TagName,
_parentTag, ParentTag,
_tagStructure, TagStructure,
requiredAttributes, requiredAttributes,
diagnostics.ToArray()); diagnostics.ToArray());
@ -98,42 +93,42 @@ namespace Microsoft.AspNetCore.Razor.Language
private IEnumerable<RazorDiagnostic> Validate() private IEnumerable<RazorDiagnostic> Validate()
{ {
if (string.IsNullOrWhiteSpace(_tagName)) if (string.IsNullOrWhiteSpace(TagName))
{ {
var diagnostic = RazorDiagnosticFactory.CreateTagHelper_InvalidTargetedTagNameNullOrWhitespace(); var diagnostic = RazorDiagnosticFactory.CreateTagHelper_InvalidTargetedTagNameNullOrWhitespace();
yield return diagnostic; yield return diagnostic;
} }
else if (_tagName != TagHelperMatchingConventions.ElementCatchAllName) else if (TagName != TagHelperMatchingConventions.ElementCatchAllName)
{ {
foreach (var character in _tagName) foreach (var character in TagName)
{ {
if (char.IsWhiteSpace(character) || HtmlConventions.InvalidNonWhitespaceHtmlCharacters.Contains(character)) if (char.IsWhiteSpace(character) || HtmlConventions.InvalidNonWhitespaceHtmlCharacters.Contains(character))
{ {
var diagnostic = RazorDiagnosticFactory.CreateTagHelper_InvalidTargetedTagName(_tagName, character); var diagnostic = RazorDiagnosticFactory.CreateTagHelper_InvalidTargetedTagName(TagName, character);
yield return diagnostic; yield return diagnostic;
} }
} }
} }
if (_parentTag != null) if (ParentTag != null)
{ {
if (string.IsNullOrWhiteSpace(_parentTag)) if (string.IsNullOrWhiteSpace(ParentTag))
{ {
var diagnostic = RazorDiagnosticFactory.CreateTagHelper_InvalidTargetedParentTagNameNullOrWhitespace(); var diagnostic = RazorDiagnosticFactory.CreateTagHelper_InvalidTargetedParentTagNameNullOrWhitespace();
AddDiagnostic(diagnostic); yield return diagnostic;
} }
else else
{ {
foreach (var character in _parentTag) foreach (var character in ParentTag)
{ {
if (char.IsWhiteSpace(character) || HtmlConventions.InvalidNonWhitespaceHtmlCharacters.Contains(character)) if (char.IsWhiteSpace(character) || HtmlConventions.InvalidNonWhitespaceHtmlCharacters.Contains(character))
{ {
var diagnostic = RazorDiagnosticFactory.CreateTagHelper_InvalidTargetedParentTagName(_parentTag, character); var diagnostic = RazorDiagnosticFactory.CreateTagHelper_InvalidTargetedParentTagName(ParentTag, character);
AddDiagnostic(diagnostic); yield return diagnostic;
} }
} }
} }
@ -147,13 +142,5 @@ namespace Microsoft.AspNetCore.Razor.Language
_requiredAttributeBuilders = new List<DefaultRequiredAttributeDescriptorBuilder>(); _requiredAttributeBuilders = new List<DefaultRequiredAttributeDescriptorBuilder>();
} }
} }
private void EnsureDiagnostics()
{
if (_diagnostics == null)
{
_diagnostics = new HashSet<RazorDiagnostic>();
}
}
} }
} }

View File

@ -5,14 +5,14 @@ namespace Microsoft.AspNetCore.Razor.Language
{ {
public abstract class RequiredAttributeDescriptorBuilder public abstract class RequiredAttributeDescriptorBuilder
{ {
public abstract RequiredAttributeDescriptorBuilder Name(string name); public abstract string Name { get; set; }
public abstract RequiredAttributeDescriptorBuilder NameComparisonMode(RequiredAttributeDescriptor.NameComparisonMode nameComparison); public abstract RequiredAttributeDescriptor.NameComparisonMode NameComparisonMode { get; set; }
public abstract RequiredAttributeDescriptorBuilder Value(string value); public abstract string Value { get; set; }
public abstract RequiredAttributeDescriptorBuilder ValueComparisonMode(RequiredAttributeDescriptor.ValueComparisonMode valueComparison); public abstract RequiredAttributeDescriptor.ValueComparisonMode ValueComparisonMode { get; set; }
public abstract RequiredAttributeDescriptorBuilder AddDiagnostic(RazorDiagnostic diagnostic); public abstract RazorDiagnosticCollection Diagnostics { get; }
} }
} }

View File

@ -42,23 +42,31 @@ namespace Microsoft.AspNetCore.Razor.Language
return new DefaultTagHelperDescriptorBuilder(kind, name, assemblyName); return new DefaultTagHelperDescriptorBuilder(kind, name, assemblyName);
} }
public abstract string Name { get; }
public abstract string AssemblyName { get; }
public abstract string Kind { get; }
public abstract string DisplayName { get; set; }
public abstract string TagOutputHint { get; set; }
public abstract string Documentation { get; set; }
public abstract ICollection<string> AllowedChildTags { get; }
public abstract IDictionary<string, string> Metadata { get; } public abstract IDictionary<string, string> Metadata { get; }
public abstract TagHelperDescriptorBuilder BindAttribute(Action<BoundAttributeDescriptorBuilder> configure); public abstract RazorDiagnosticCollection Diagnostics { get; }
public abstract TagHelperDescriptorBuilder TagMatchingRule(Action<TagMatchingRuleDescriptorBuilder> configure); public abstract IReadOnlyList<BoundAttributeDescriptorBuilder> BoundAttributes { get; }
public abstract TagHelperDescriptorBuilder AllowChildTag(string allowedChild); public abstract IReadOnlyList<TagMatchingRuleDescriptorBuilder> TagMatchingRules { get; }
public abstract TagHelperDescriptorBuilder TagOutputHint(string hint); public abstract void BindAttribute(Action<BoundAttributeDescriptorBuilder> configure);
public abstract TagHelperDescriptorBuilder Documentation(string documentation); public abstract void TagMatchingRule(Action<TagMatchingRuleDescriptorBuilder> configure);
public abstract TagHelperDescriptorBuilder AddMetadata(string key, string value);
public abstract TagHelperDescriptorBuilder AddDiagnostic(RazorDiagnostic diagnostic);
public abstract TagHelperDescriptorBuilder DisplayName(string displayName);
public abstract TagHelperDescriptor Build(); public abstract TagHelperDescriptor Build();

View File

@ -7,7 +7,7 @@ namespace Microsoft.AspNetCore.Razor.Language
{ {
public static class TagHelperDescriptorBuilderExtensions public static class TagHelperDescriptorBuilderExtensions
{ {
public static TagHelperDescriptorBuilder SetTypeName(this TagHelperDescriptorBuilder builder, string typeName) public static void SetTypeName(this TagHelperDescriptorBuilder builder, string typeName)
{ {
if (builder == null) if (builder == null)
{ {
@ -19,9 +19,7 @@ namespace Microsoft.AspNetCore.Razor.Language
throw new ArgumentNullException(nameof(typeName)); throw new ArgumentNullException(nameof(typeName));
} }
builder.AddMetadata(TagHelperMetadata.Common.TypeName, typeName); builder.Metadata[TagHelperMetadata.Common.TypeName] = typeName;
return builder;
} }
public static string GetTypeName(this TagHelperDescriptorBuilder builder) public static string GetTypeName(this TagHelperDescriptorBuilder builder)

View File

@ -2,19 +2,22 @@
// 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;
namespace Microsoft.AspNetCore.Razor.Language namespace Microsoft.AspNetCore.Razor.Language
{ {
public abstract class TagMatchingRuleDescriptorBuilder public abstract class TagMatchingRuleDescriptorBuilder
{ {
public abstract TagMatchingRuleDescriptorBuilder RequireTagName(string tagName); public abstract string TagName { get; set; }
public abstract TagMatchingRuleDescriptorBuilder RequireParentTag(string parentTag); public abstract string ParentTag { get; set; }
public abstract TagMatchingRuleDescriptorBuilder RequireTagStructure(TagStructure tagStructure); public abstract TagStructure TagStructure { get; set; }
public abstract TagMatchingRuleDescriptorBuilder RequireAttribute(Action<RequiredAttributeDescriptorBuilder> configure); public abstract RazorDiagnosticCollection Diagnostics { get; }
public abstract TagMatchingRuleDescriptorBuilder AddDiagnostic(RazorDiagnostic diagnostic); public abstract IReadOnlyList<RequiredAttributeDescriptorBuilder> Attributes { get; }
public abstract void Attribute(Action<RequiredAttributeDescriptorBuilder> configure);
} }
} }

View File

@ -90,7 +90,7 @@ namespace Microsoft.CodeAnalysis.Razor
descriptorBuilder.TagMatchingRule(ruleBuilder => descriptorBuilder.TagMatchingRule(ruleBuilder =>
{ {
var htmlCasedName = HtmlConventions.ToHtmlCase(name); var htmlCasedName = HtmlConventions.ToHtmlCase(name);
ruleBuilder.RequireTagName(htmlCasedName); ruleBuilder.TagName = htmlCasedName;
}); });
return; return;
@ -101,13 +101,13 @@ namespace Microsoft.CodeAnalysis.Razor
descriptorBuilder.TagMatchingRule(ruleBuilder => descriptorBuilder.TagMatchingRule(ruleBuilder =>
{ {
var tagName = HtmlTargetElementAttribute_Tag(targetElementAttribute); var tagName = HtmlTargetElementAttribute_Tag(targetElementAttribute);
ruleBuilder.RequireTagName(tagName); ruleBuilder.TagName = tagName;
var parentTag = HtmlTargetElementAttribute_ParentTag(targetElementAttribute); var parentTag = HtmlTargetElementAttribute_ParentTag(targetElementAttribute);
ruleBuilder.RequireParentTag(parentTag); ruleBuilder.ParentTag = parentTag;
var tagStructure = HtmlTargetElementAttribute_TagStructure(targetElementAttribute); var tagStructure = HtmlTargetElementAttribute_TagStructure(targetElementAttribute);
ruleBuilder.RequireTagStructure(tagStructure); ruleBuilder.TagStructure = tagStructure;
var requiredAttributeString = HtmlTargetElementAttribute_Attributes(targetElementAttribute); var requiredAttributeString = HtmlTargetElementAttribute_Attributes(targetElementAttribute);
RequiredAttributeParser.AddRequiredAttributes(requiredAttributeString, ruleBuilder); RequiredAttributeParser.AddRequiredAttributes(requiredAttributeString, ruleBuilder);
@ -140,13 +140,13 @@ namespace Microsoft.CodeAnalysis.Razor
return; return;
} }
builder.AllowChildTag((string)restrictChildrenAttribute.ConstructorArguments[0].Value); builder.AllowedChildTags.Add((string)restrictChildrenAttribute.ConstructorArguments[0].Value);
if (restrictChildrenAttribute.ConstructorArguments.Length == 2) if (restrictChildrenAttribute.ConstructorArguments.Length == 2)
{ {
foreach (var value in restrictChildrenAttribute.ConstructorArguments[1].Values) foreach (var value in restrictChildrenAttribute.ConstructorArguments[1].Values)
{ {
builder.AllowChildTag((string)value.Value); builder.AllowedChildTags.Add((string)value.Value);
} }
} }
} }
@ -162,7 +162,7 @@ namespace Microsoft.CodeAnalysis.Razor
if (!string.IsNullOrEmpty(xml)) if (!string.IsNullOrEmpty(xml))
{ {
builder.Documentation(xml); builder.Documentation = xml;
} }
} }
@ -177,7 +177,7 @@ namespace Microsoft.CodeAnalysis.Razor
if (outputElementHintAttribute != null) if (outputElementHintAttribute != null)
{ {
outputElementHint = (string)(outputElementHintAttribute.ConstructorArguments[0]).Value; outputElementHint = (string)(outputElementHintAttribute.ConstructorArguments[0]).Value;
builder.TagOutputHint(outputElementHint); builder.TagOutputHint = outputElementHint;
} }
} }
@ -208,17 +208,16 @@ namespace Microsoft.CodeAnalysis.Razor
var hasPublicSetter = property.SetMethod != null && property.SetMethod.DeclaredAccessibility == Accessibility.Public; var hasPublicSetter = property.SetMethod != null && property.SetMethod.DeclaredAccessibility == Accessibility.Public;
var typeName = GetFullName(property.Type); var typeName = GetFullName(property.Type);
builder builder.TypeName = typeName;
.TypeName(typeName) builder.SetPropertyName(property.Name);
.SetPropertyName(property.Name);
if (hasPublicSetter) if (hasPublicSetter)
{ {
builder.Name(attributeName); builder.Name = attributeName;
if (property.Type.TypeKind == TypeKind.Enum) if (property.Type.TypeKind == TypeKind.Enum)
{ {
builder.AsEnum(); builder.IsEnum = true;
} }
if (DesignTime) if (DesignTime)
@ -227,7 +226,7 @@ namespace Microsoft.CodeAnalysis.Razor
if (!string.IsNullOrEmpty(xml)) if (!string.IsNullOrEmpty(xml))
{ {
builder.Documentation(xml); builder.Documentation = xml;
} }
} }
} }
@ -235,18 +234,18 @@ namespace Microsoft.CodeAnalysis.Razor
{ {
// Specified HtmlAttributeNameAttribute.Name though property has no public setter. // Specified HtmlAttributeNameAttribute.Name though property has no public setter.
var diagnostic = RazorDiagnosticFactory.CreateTagHelper_InvalidAttributeNameNullOrEmpty(GetFullName(containingType), property.Name); var diagnostic = RazorDiagnosticFactory.CreateTagHelper_InvalidAttributeNameNullOrEmpty(GetFullName(containingType), property.Name);
builder.AddDiagnostic(diagnostic); builder.Diagnostics.Add(diagnostic);
} }
ConfigureDictionaryBoundAttribute(builder, property, containingType, attributeNameAttribute, attributeName, hasPublicSetter); ConfigureDictionaryBoundAttribute(builder, property, containingType, attributeNameAttribute, attributeName, hasPublicSetter);
} }
private void ConfigureDictionaryBoundAttribute( private void ConfigureDictionaryBoundAttribute(
BoundAttributeDescriptorBuilder builder, BoundAttributeDescriptorBuilder builder,
IPropertySymbol property, IPropertySymbol property,
INamedTypeSymbol containingType, INamedTypeSymbol containingType,
AttributeData attributeNameAttribute, AttributeData attributeNameAttribute,
string attributeName, string attributeName,
bool hasPublicSetter) bool hasPublicSetter)
{ {
string dictionaryAttributePrefix = null; string dictionaryAttributePrefix = null;
@ -291,7 +290,7 @@ namespace Microsoft.CodeAnalysis.Razor
// DictionaryAttributePrefix is not supported unless associated with an // DictionaryAttributePrefix is not supported unless associated with an
// IDictionary<string, TValue> property. // IDictionary<string, TValue> property.
var diagnostic = RazorDiagnosticFactory.CreateTagHelper_InvalidAttributePrefixNotNull(GetFullName(containingType), property.Name); var diagnostic = RazorDiagnosticFactory.CreateTagHelper_InvalidAttributePrefixNotNull(GetFullName(containingType), property.Name);
builder.AddDiagnostic(diagnostic); builder.Diagnostics.Add(diagnostic);
} }
return; return;
@ -301,7 +300,7 @@ namespace Microsoft.CodeAnalysis.Razor
// Must set DictionaryAttributePrefix when using HtmlAttributeNameAttribute with a dictionary property // Must set DictionaryAttributePrefix when using HtmlAttributeNameAttribute with a dictionary property
// that lacks a public setter. // that lacks a public setter.
var diagnostic = RazorDiagnosticFactory.CreateTagHelper_InvalidAttributePrefixNull(GetFullName(containingType), property.Name); var diagnostic = RazorDiagnosticFactory.CreateTagHelper_InvalidAttributePrefixNull(GetFullName(containingType), property.Name);
builder.AddDiagnostic(diagnostic); builder.Diagnostics.Add(diagnostic);
return; return;
} }

View File

@ -59,7 +59,7 @@ namespace Microsoft.CodeAnalysis.Razor
do do
{ {
var successfulParse = true; var successfulParse = true;
ruleBuilder.RequireAttribute(attributeBuilder => ruleBuilder.Attribute(attributeBuilder =>
{ {
if (At('[')) if (At('['))
{ {
@ -89,7 +89,7 @@ namespace Microsoft.CodeAnalysis.Razor
else if (!AtEnd) else if (!AtEnd)
{ {
var diagnostic = RazorDiagnosticFactory.CreateTagHelper_InvalidRequiredAttributeCharacter(Current, _requiredAttributes); var diagnostic = RazorDiagnosticFactory.CreateTagHelper_InvalidRequiredAttributeCharacter(Current, _requiredAttributes);
attributeBuilder.AddDiagnostic(diagnostic); attributeBuilder.Diagnostics.Add(diagnostic);
successfulParse = false; successfulParse = false;
return; return;
} }
@ -130,8 +130,8 @@ namespace Microsoft.CodeAnalysis.Razor
} }
} }
attributeBuilder.Name(attributeName); attributeBuilder.Name = attributeName;
attributeBuilder.NameComparisonMode(nameComparison); attributeBuilder.NameComparisonMode = nameComparison;
} }
private void ParseCssAttributeName(RequiredAttributeDescriptorBuilder builder) private void ParseCssAttributeName(RequiredAttributeDescriptorBuilder builder)
@ -143,7 +143,7 @@ namespace Microsoft.CodeAnalysis.Razor
var attributeName = _requiredAttributes.Substring(nameStartIndex, nameEndIndex - nameStartIndex); var attributeName = _requiredAttributes.Substring(nameStartIndex, nameEndIndex - nameStartIndex);
builder.Name(attributeName); builder.Name = attributeName;
} }
private bool TryParseCssValueComparison(RequiredAttributeDescriptorBuilder builder, out RequiredAttributeDescriptor.ValueComparisonMode valueComparison) private bool TryParseCssValueComparison(RequiredAttributeDescriptorBuilder builder, out RequiredAttributeDescriptor.ValueComparisonMode valueComparison)
@ -163,7 +163,7 @@ namespace Microsoft.CodeAnalysis.Razor
else if (op != '=') // We're at an incomplete operator (ex: [foo^] else if (op != '=') // We're at an incomplete operator (ex: [foo^]
{ {
var diagnostic = RazorDiagnosticFactory.CreateTagHelper_PartialRequiredAttributeOperator(op, _requiredAttributes); var diagnostic = RazorDiagnosticFactory.CreateTagHelper_PartialRequiredAttributeOperator(op, _requiredAttributes);
builder.AddDiagnostic(diagnostic); builder.Diagnostics.Add(diagnostic);
return false; return false;
} }
@ -171,12 +171,12 @@ namespace Microsoft.CodeAnalysis.Razor
else if (!At(']')) else if (!At(']'))
{ {
var diagnostic = RazorDiagnosticFactory.CreateTagHelper_InvalidRequiredAttributeOperator(Current, _requiredAttributes); var diagnostic = RazorDiagnosticFactory.CreateTagHelper_InvalidRequiredAttributeOperator(Current, _requiredAttributes);
builder.AddDiagnostic(diagnostic); builder.Diagnostics.Add(diagnostic);
return false; return false;
} }
builder.ValueComparisonMode(valueComparison); builder.ValueComparisonMode = valueComparison;
return true; return true;
} }
@ -197,7 +197,7 @@ namespace Microsoft.CodeAnalysis.Razor
if (valueEnd == -1) if (valueEnd == -1)
{ {
var diagnostic = RazorDiagnosticFactory.CreateTagHelper_InvalidRequiredAttributeMismatchedQuotes(quote, _requiredAttributes); var diagnostic = RazorDiagnosticFactory.CreateTagHelper_InvalidRequiredAttributeMismatchedQuotes(quote, _requiredAttributes);
builder.AddDiagnostic(diagnostic); builder.Diagnostics.Add(diagnostic);
return false; return false;
} }
@ -213,7 +213,7 @@ namespace Microsoft.CodeAnalysis.Razor
var value = _requiredAttributes.Substring(valueStart, valueEnd - valueStart); var value = _requiredAttributes.Substring(valueStart, valueEnd - valueStart);
builder.Value(value); builder.Value = value;
return true; return true;
} }
@ -263,12 +263,12 @@ namespace Microsoft.CodeAnalysis.Razor
else if (AtEnd) else if (AtEnd)
{ {
var diagnostic = RazorDiagnosticFactory.CreateTagHelper_CouldNotFindMatchingEndBrace(_requiredAttributes); var diagnostic = RazorDiagnosticFactory.CreateTagHelper_CouldNotFindMatchingEndBrace(_requiredAttributes);
attributeBuilder.AddDiagnostic(diagnostic); attributeBuilder.Diagnostics.Add(diagnostic);
} }
else else
{ {
var diagnostic = RazorDiagnosticFactory.CreateTagHelper_InvalidRequiredAttributeCharacter(Current, _requiredAttributes); var diagnostic = RazorDiagnosticFactory.CreateTagHelper_InvalidRequiredAttributeCharacter(Current, _requiredAttributes);
attributeBuilder.AddDiagnostic(diagnostic); attributeBuilder.Diagnostics.Add(diagnostic);
} }
return false; return false;
@ -279,7 +279,7 @@ namespace Microsoft.CodeAnalysis.Razor
if (AtEnd) if (AtEnd)
{ {
var diagnostic = RazorDiagnosticFactory.CreateTagHelper_CouldNotFindMatchingEndBrace(_requiredAttributes); var diagnostic = RazorDiagnosticFactory.CreateTagHelper_CouldNotFindMatchingEndBrace(_requiredAttributes);
builder.AddDiagnostic(diagnostic); builder.Diagnostics.Add(diagnostic);
return false; return false;
} }

View File

@ -41,9 +41,8 @@ namespace Microsoft.VisualStudio.LanguageServices.Razor
var builder = TagHelperDescriptorBuilder.Create(typeName, assemblyName); var builder = TagHelperDescriptorBuilder.Create(typeName, assemblyName);
builder builder.Documentation = documentation;
.Documentation(documentation) builder.TagOutputHint = tagOutputHint;
.TagOutputHint(tagOutputHint);
foreach (var tagMatchingRule in tagMatchingRules) foreach (var tagMatchingRule in tagMatchingRules)
{ {
@ -60,21 +59,21 @@ namespace Microsoft.VisualStudio.LanguageServices.Razor
foreach (var childTag in childTags) foreach (var childTag in childTags)
{ {
var tagValue = childTag.Value<string>(); var tagValue = childTag.Value<string>();
builder.AllowChildTag(tagValue); builder.AllowedChildTags.Add(tagValue);
} }
foreach (var diagnostic in diagnostics) foreach (var diagnostic in diagnostics)
{ {
var diagnosticReader = diagnostic.CreateReader(); var diagnosticReader = diagnostic.CreateReader();
var diagnosticObject = serializer.Deserialize<RazorDiagnostic>(diagnosticReader); var diagnosticObject = serializer.Deserialize<RazorDiagnostic>(diagnosticReader);
builder.AddDiagnostic(diagnosticObject); builder.Diagnostics.Add(diagnosticObject);
} }
var metadataReader = metadata.CreateReader(); var metadataReader = metadata.CreateReader();
var metadataValue = serializer.Deserialize<Dictionary<string, string>>(metadataReader); var metadataValue = serializer.Deserialize<Dictionary<string, string>>(metadataReader);
foreach (var item in metadataValue) foreach (var item in metadataValue)
{ {
builder.AddMetadata(item.Key, item.Value); builder.Metadata[item.Key] = item.Value;
} }
return builder.Build(); return builder.Build();
@ -95,22 +94,21 @@ namespace Microsoft.VisualStudio.LanguageServices.Razor
var tagStructure = rule[nameof(TagMatchingRuleDescriptor.TagStructure)].Value<int>(); var tagStructure = rule[nameof(TagMatchingRuleDescriptor.TagStructure)].Value<int>();
var diagnostics = rule[nameof(TagMatchingRuleDescriptor.Diagnostics)].Value<JArray>(); var diagnostics = rule[nameof(TagMatchingRuleDescriptor.Diagnostics)].Value<JArray>();
builder builder.TagName = tagName;
.RequireTagName(tagName) builder.ParentTag = parentTag;
.RequireParentTag(parentTag) builder.TagStructure = (TagStructure)tagStructure;
.RequireTagStructure((TagStructure)tagStructure);
foreach (var attribute in attributes) foreach (var attribute in attributes)
{ {
var attibuteValue = attribute.Value<JObject>(); var attibuteValue = attribute.Value<JObject>();
builder.RequireAttribute(b => ReadRequiredAttribute(b, attibuteValue, serializer)); builder.Attribute(b => ReadRequiredAttribute(b, attibuteValue, serializer));
} }
foreach (var diagnostic in diagnostics) foreach (var diagnostic in diagnostics)
{ {
var diagnosticReader = diagnostic.CreateReader(); var diagnosticReader = diagnostic.CreateReader();
var diagnosticObject = serializer.Deserialize<RazorDiagnostic>(diagnosticReader); var diagnosticObject = serializer.Deserialize<RazorDiagnostic>(diagnosticReader);
builder.AddDiagnostic(diagnosticObject); builder.Diagnostics.Add(diagnosticObject);
} }
} }
@ -122,17 +120,16 @@ namespace Microsoft.VisualStudio.LanguageServices.Razor
var valueComparison = attribute[nameof(RequiredAttributeDescriptor.ValueComparison)].Value<int>(); var valueComparison = attribute[nameof(RequiredAttributeDescriptor.ValueComparison)].Value<int>();
var diagnostics = attribute[nameof(RequiredAttributeDescriptor.Diagnostics)].Value<JArray>(); var diagnostics = attribute[nameof(RequiredAttributeDescriptor.Diagnostics)].Value<JArray>();
builder builder.Name = name;
.Name(name) builder.NameComparisonMode = (RequiredAttributeDescriptor.NameComparisonMode)nameComparison;
.NameComparisonMode((RequiredAttributeDescriptor.NameComparisonMode)nameComparison) builder.Value = value;
.Value(value) builder.ValueComparisonMode = (RequiredAttributeDescriptor.ValueComparisonMode)valueComparison;
.ValueComparisonMode((RequiredAttributeDescriptor.ValueComparisonMode)valueComparison);
foreach (var diagnostic in diagnostics) foreach (var diagnostic in diagnostics)
{ {
var diagnosticReader = diagnostic.CreateReader(); var diagnosticReader = diagnostic.CreateReader();
var diagnosticObject = serializer.Deserialize<RazorDiagnostic>(diagnosticReader); var diagnosticObject = serializer.Deserialize<RazorDiagnostic>(diagnosticReader);
builder.AddDiagnostic(diagnosticObject); builder.Diagnostics.Add(diagnosticObject);
} }
} }
@ -148,10 +145,9 @@ namespace Microsoft.VisualStudio.LanguageServices.Razor
var diagnostics = attribute[nameof(BoundAttributeDescriptor.Diagnostics)].Value<JArray>(); var diagnostics = attribute[nameof(BoundAttributeDescriptor.Diagnostics)].Value<JArray>();
var metadata = attribute[nameof(BoundAttributeDescriptor.Metadata)].Value<JObject>(); var metadata = attribute[nameof(BoundAttributeDescriptor.Metadata)].Value<JObject>();
builder builder.Name = name;
.Name(name) builder.TypeName = typeName;
.TypeName(typeName) builder.Documentation = documentation;
.Documentation(documentation);
if (indexerNamePrefix != null) if (indexerNamePrefix != null)
{ {
@ -160,21 +156,21 @@ namespace Microsoft.VisualStudio.LanguageServices.Razor
if (isEnum) if (isEnum)
{ {
builder.AsEnum(); builder.IsEnum = true;
} }
foreach (var diagnostic in diagnostics) foreach (var diagnostic in diagnostics)
{ {
var diagnosticReader = diagnostic.CreateReader(); var diagnosticReader = diagnostic.CreateReader();
var diagnosticObject = serializer.Deserialize<RazorDiagnostic>(diagnosticReader); var diagnosticObject = serializer.Deserialize<RazorDiagnostic>(diagnosticReader);
builder.AddDiagnostic(diagnosticObject); builder.Diagnostics.Add(diagnosticObject);
} }
var metadataReader = metadata.CreateReader(); var metadataReader = metadata.CreateReader();
var metadataValue = serializer.Deserialize<Dictionary<string, string>>(metadataReader); var metadataValue = serializer.Deserialize<Dictionary<string, string>>(metadataReader);
foreach (var item in metadataValue) foreach (var item in metadataValue)
{ {
builder.AddMetadata(item.Key, item.Value); builder.Metadata[item.Key] = item.Value;
} }
} }
} }

View File

@ -78,11 +78,11 @@ namespace Microsoft.AspNetCore.Mvc.Razor.Extensions.IntegrationTests
{ {
foreach (var attributeBuilder in attributes) foreach (var attributeBuilder in attributes)
{ {
builder.BindAttribute(attributeBuilder); builder.BoundAttributeDescriptor(attributeBuilder);
} }
} }
builder.TagMatchingRule(ruleBuilder => ruleBuilder.RequireTagName(tagName)); builder.TagMatchingRuleDescriptor(ruleBuilder => ruleBuilder.RequireTagName(tagName));
var descriptor = builder.Build(); var descriptor = builder.Build();

View File

@ -24,11 +24,11 @@ namespace Microsoft.AspNetCore.Mvc.Razor.Extensions
var tagHelpers = new[] var tagHelpers = new[]
{ {
TagHelperDescriptorBuilder.Create("TestTagHelper", "TestAssembly") TagHelperDescriptorBuilder.Create("TestTagHelper", "TestAssembly")
.BindAttribute(attribute => .BoundAttributeDescriptor(attribute =>
attribute attribute
.Name("Foo") .Name("Foo")
.TypeName("System.Int32")) .TypeName("System.Int32"))
.TagMatchingRule(rule => .TagMatchingRuleDescriptor(rule =>
rule.RequireTagName("p")) rule.RequireTagName("p"))
.Build() .Build()
}; };
@ -65,11 +65,11 @@ namespace Microsoft.AspNetCore.Mvc.Razor.Extensions
var tagHelpers = new[] var tagHelpers = new[]
{ {
TagHelperDescriptorBuilder.Create("TestTagHelper", "TestAssembly") TagHelperDescriptorBuilder.Create("TestTagHelper", "TestAssembly")
.BindAttribute(attribute => .BoundAttributeDescriptor(attribute =>
attribute attribute
.Name("Foo") .Name("Foo")
.TypeName("Microsoft.AspNetCore.Mvc.ViewFeatures.ModelExpression")) .TypeName("Microsoft.AspNetCore.Mvc.ViewFeatures.ModelExpression"))
.TagMatchingRule(rule => .TagMatchingRuleDescriptor(rule =>
rule.RequireTagName("p")) rule.RequireTagName("p"))
.Build() .Build()
}; };
@ -110,11 +110,11 @@ namespace Microsoft.AspNetCore.Mvc.Razor.Extensions
var tagHelpers = new[] var tagHelpers = new[]
{ {
TagHelperDescriptorBuilder.Create("TestTagHelper", "TestAssembly") TagHelperDescriptorBuilder.Create("TestTagHelper", "TestAssembly")
.BindAttribute(attribute => .BoundAttributeDescriptor(attribute =>
attribute attribute
.Name("Foo") .Name("Foo")
.TypeName("Microsoft.AspNetCore.Mvc.ViewFeatures.ModelExpression")) .TypeName("Microsoft.AspNetCore.Mvc.ViewFeatures.ModelExpression"))
.TagMatchingRule(rule => .TagMatchingRuleDescriptor(rule =>
rule.RequireTagName("p")) rule.RequireTagName("p"))
.Build() .Build()
}; };

View File

@ -63,7 +63,7 @@ namespace Microsoft.AspNetCore.Mvc.Razor.Extensions
private static TagHelperDescriptor CreateTagHelperDescriptor() private static TagHelperDescriptor CreateTagHelperDescriptor()
{ {
var descriptor = TagHelperDescriptorBuilder.Create("TypeName", "AssemblyName") var descriptor = TagHelperDescriptorBuilder.Create("TypeName", "AssemblyName")
.TagMatchingRule(rule => rule.RequireTagName("tag-name")) .TagMatchingRuleDescriptor(rule => rule.RequireTagName("tag-name"))
.Build(); .Build();
return descriptor; return descriptor;
@ -72,7 +72,7 @@ namespace Microsoft.AspNetCore.Mvc.Razor.Extensions
private static TagHelperDescriptor CreateViewComponentTagHelperDescriptor(string name = "ViewComponentName") private static TagHelperDescriptor CreateViewComponentTagHelperDescriptor(string name = "ViewComponentName")
{ {
var descriptor = TagHelperDescriptorBuilder.Create(ViewComponentTagHelperConventions.Kind, "TypeName", "AssemblyName") var descriptor = TagHelperDescriptorBuilder.Create(ViewComponentTagHelperConventions.Kind, "TypeName", "AssemblyName")
.TagMatchingRule(rule => rule.RequireTagName("tag-name")) .TagMatchingRuleDescriptor(rule => rule.RequireTagName("tag-name"))
.AddMetadata(ViewComponentTagHelperMetadata.Name, name) .AddMetadata(ViewComponentTagHelperMetadata.Name, name)
.Build(); .Build();

View File

@ -28,18 +28,18 @@ namespace Microsoft.AspNetCore.Mvc.Razor.Extensions
typeof(StringParameterViewComponent).GetTypeInfo().Assembly.GetName().Name) typeof(StringParameterViewComponent).GetTypeInfo().Assembly.GetName().Name)
.TypeName("__Generated__StringParameterViewComponentTagHelper") .TypeName("__Generated__StringParameterViewComponentTagHelper")
.DisplayName("StringParameterViewComponentTagHelper") .DisplayName("StringParameterViewComponentTagHelper")
.TagMatchingRule(rule => .TagMatchingRuleDescriptor(rule =>
rule rule
.RequireTagName("vc:string-parameter") .RequireTagName("vc:string-parameter")
.RequireAttribute(attribute => attribute.Name("foo")) .RequireAttributeDescriptor(attribute => attribute.Name("foo"))
.RequireAttribute(attribute => attribute.Name("bar"))) .RequireAttributeDescriptor(attribute => attribute.Name("bar")))
.BindAttribute(attribute => .BoundAttributeDescriptor(attribute =>
attribute attribute
.Name("foo") .Name("foo")
.PropertyName("foo") .PropertyName("foo")
.TypeName(typeof(string).FullName) .TypeName(typeof(string).FullName)
.DisplayName("string StringParameterViewComponentTagHelper.foo")) .DisplayName("string StringParameterViewComponentTagHelper.foo"))
.BindAttribute(attribute => .BoundAttributeDescriptor(attribute =>
attribute attribute
.Name("bar") .Name("bar")
.PropertyName("bar") .PropertyName("bar")
@ -69,26 +69,26 @@ namespace Microsoft.AspNetCore.Mvc.Razor.Extensions
typeof(VariousParameterViewComponent).GetTypeInfo().Assembly.GetName().Name) typeof(VariousParameterViewComponent).GetTypeInfo().Assembly.GetName().Name)
.TypeName("__Generated__VariousParameterViewComponentTagHelper") .TypeName("__Generated__VariousParameterViewComponentTagHelper")
.DisplayName("VariousParameterViewComponentTagHelper") .DisplayName("VariousParameterViewComponentTagHelper")
.TagMatchingRule(rule => .TagMatchingRuleDescriptor(rule =>
rule rule
.RequireTagName("vc:various-parameter") .RequireTagName("vc:various-parameter")
.RequireAttribute(attribute => attribute.Name("test-enum")) .RequireAttributeDescriptor(attribute => attribute.Name("test-enum"))
.RequireAttribute(attribute => attribute.Name("test-string")) .RequireAttributeDescriptor(attribute => attribute.Name("test-string"))
.RequireAttribute(attribute => attribute.Name("baz"))) .RequireAttributeDescriptor(attribute => attribute.Name("baz")))
.BindAttribute(attribute => .BoundAttributeDescriptor(attribute =>
attribute attribute
.Name("test-enum") .Name("test-enum")
.PropertyName("testEnum") .PropertyName("testEnum")
.TypeName(typeof(VariousParameterViewComponent).FullName + "." + nameof(VariousParameterViewComponent.TestEnum)) .TypeName(typeof(VariousParameterViewComponent).FullName + "." + nameof(VariousParameterViewComponent.TestEnum))
.AsEnum() .AsEnum()
.DisplayName(typeof(VariousParameterViewComponent).FullName + "." + nameof(VariousParameterViewComponent.TestEnum) + " VariousParameterViewComponentTagHelper.testEnum")) .DisplayName(typeof(VariousParameterViewComponent).FullName + "." + nameof(VariousParameterViewComponent.TestEnum) + " VariousParameterViewComponentTagHelper.testEnum"))
.BindAttribute(attribute => .BoundAttributeDescriptor(attribute =>
attribute attribute
.Name("test-string") .Name("test-string")
.PropertyName("testString") .PropertyName("testString")
.TypeName(typeof(string).FullName) .TypeName(typeof(string).FullName)
.DisplayName("string VariousParameterViewComponentTagHelper.testString")) .DisplayName("string VariousParameterViewComponentTagHelper.testString"))
.BindAttribute(attribute => .BoundAttributeDescriptor(attribute =>
attribute attribute
.Name("baz") .Name("baz")
.PropertyName("baz") .PropertyName("baz")
@ -118,22 +118,22 @@ namespace Microsoft.AspNetCore.Mvc.Razor.Extensions
typeof(GenericParameterViewComponent).GetTypeInfo().Assembly.GetName().Name) typeof(GenericParameterViewComponent).GetTypeInfo().Assembly.GetName().Name)
.TypeName("__Generated__GenericParameterViewComponentTagHelper") .TypeName("__Generated__GenericParameterViewComponentTagHelper")
.DisplayName("GenericParameterViewComponentTagHelper") .DisplayName("GenericParameterViewComponentTagHelper")
.TagMatchingRule(rule => .TagMatchingRuleDescriptor(rule =>
rule rule
.RequireTagName("vc:generic-parameter") .RequireTagName("vc:generic-parameter")
.RequireAttribute(attribute => attribute.Name("foo"))) .RequireAttributeDescriptor(attribute => attribute.Name("foo")))
.BindAttribute(attribute => .BoundAttributeDescriptor(attribute =>
attribute attribute
.Name("foo") .Name("foo")
.PropertyName("Foo") .PropertyName("Foo")
.TypeName("System.Collections.Generic.List<System.String>") .TypeName("System.Collections.Generic.List<System.String>")
.DisplayName("System.Collections.Generic.List<System.String> GenericParameterViewComponentTagHelper.Foo")) .DisplayName("System.Collections.Generic.List<System.String> GenericParameterViewComponentTagHelper.Foo"))
.BindAttribute(attribute => .BoundAttributeDescriptor(attribute =>
attribute attribute
.Name("bar") .Name("bar")
.PropertyName("Bar") .PropertyName("Bar")
.TypeName("System.Collections.Generic.Dictionary<System.String, System.Int32>") .TypeName("System.Collections.Generic.Dictionary<System.String, System.Int32>")
.AsDictionary("bar-", typeof(int).FullName) .AsDictionaryAttribute("bar-", typeof(int).FullName)
.DisplayName("System.Collections.Generic.Dictionary<System.String, System.Int32> GenericParameterViewComponentTagHelper.Bar")) .DisplayName("System.Collections.Generic.Dictionary<System.String, System.Int32> GenericParameterViewComponentTagHelper.Bar"))
.AddMetadata(ViewComponentTagHelperMetadata.Name, "GenericParameter") .AddMetadata(ViewComponentTagHelperMetadata.Name, "GenericParameter")
.Build(); .Build();

View File

@ -44,18 +44,18 @@ namespace Microsoft.AspNetCore.Mvc.Razor.Extensions
TestCompilation.AssemblyName) TestCompilation.AssemblyName)
.TypeName("__Generated__StringParameterViewComponentTagHelper") .TypeName("__Generated__StringParameterViewComponentTagHelper")
.DisplayName("StringParameterViewComponentTagHelper") .DisplayName("StringParameterViewComponentTagHelper")
.TagMatchingRule(rule => .TagMatchingRuleDescriptor(rule =>
rule rule
.RequireTagName("vc:string-parameter") .RequireTagName("vc:string-parameter")
.RequireAttribute(attribute => attribute.Name("foo")) .RequireAttributeDescriptor(attribute => attribute.Name("foo"))
.RequireAttribute(attribute => attribute.Name("bar"))) .RequireAttributeDescriptor(attribute => attribute.Name("bar")))
.BindAttribute(attribute => .BoundAttributeDescriptor(attribute =>
attribute attribute
.Name("foo") .Name("foo")
.PropertyName("foo") .PropertyName("foo")
.TypeName(typeof(string).FullName) .TypeName(typeof(string).FullName)
.DisplayName("string StringParameterViewComponentTagHelper.foo")) .DisplayName("string StringParameterViewComponentTagHelper.foo"))
.BindAttribute(attribute => .BoundAttributeDescriptor(attribute =>
attribute attribute
.Name("bar") .Name("bar")
.PropertyName("bar") .PropertyName("bar")

View File

@ -22,10 +22,10 @@ namespace Microsoft.AspNetCore.Mvc.Razor.Extensions
var tagHelpers = new[] var tagHelpers = new[]
{ {
TagHelperDescriptorBuilder.Create("TestTagHelper", "TestAssembly") TagHelperDescriptorBuilder.Create("TestTagHelper", "TestAssembly")
.BindAttribute(attribute => attribute .BoundAttributeDescriptor(attribute => attribute
.Name("Foo") .Name("Foo")
.TypeName("System.Int32")) .TypeName("System.Int32"))
.TagMatchingRule(rule => rule.RequireTagName("p")) .TagMatchingRuleDescriptor(rule => rule.RequireTagName("p"))
.Build() .Build()
}; };
@ -60,11 +60,11 @@ namespace Microsoft.AspNetCore.Mvc.Razor.Extensions
var tagHelpers = new[] var tagHelpers = new[]
{ {
TagHelperDescriptorBuilder.Create(ViewComponentTagHelperConventions.Kind, "TestTagHelper", "TestAssembly") TagHelperDescriptorBuilder.Create(ViewComponentTagHelperConventions.Kind, "TestTagHelper", "TestAssembly")
.BindAttribute(attribute => attribute .BoundAttributeDescriptor(attribute => attribute
.Name("Foo") .Name("Foo")
.TypeName("System.Int32") .TypeName("System.Int32")
.PropertyName("Foo")) .PropertyName("Foo"))
.TagMatchingRule(rule => rule.RequireTagName("tagcloud")) .TagMatchingRuleDescriptor(rule => rule.RequireTagName("tagcloud"))
.AddMetadata(ViewComponentTagHelperMetadata.Name, "TagCloud") .AddMetadata(ViewComponentTagHelperMetadata.Name, "TagCloud")
.Build() .Build()
}; };
@ -130,12 +130,12 @@ public class __Generated__TagCloudViewComponentTagHelper : Microsoft.AspNetCore.
var tagHelpers = new[] var tagHelpers = new[]
{ {
TagHelperDescriptorBuilder.Create(ViewComponentTagHelperConventions.Kind, "TestTagHelper", "TestAssembly") TagHelperDescriptorBuilder.Create(ViewComponentTagHelperConventions.Kind, "TestTagHelper", "TestAssembly")
.BindAttribute(attribute => attribute .BoundAttributeDescriptor(attribute => attribute
.Name("Foo") .Name("Foo")
.TypeName("System.Collections.Generic.Dictionary<System.String, System.Int32>") .TypeName("System.Collections.Generic.Dictionary<System.String, System.Int32>")
.PropertyName("Tags") .PropertyName("Tags")
.AsDictionary("foo-", "System.Int32")) .AsDictionaryAttribute("foo-", "System.Int32"))
.TagMatchingRule(rule => rule.RequireTagName("tagcloud")) .TagMatchingRuleDescriptor(rule => rule.RequireTagName("tagcloud"))
.AddMetadata(ViewComponentTagHelperMetadata.Name, "TagCloud") .AddMetadata(ViewComponentTagHelperMetadata.Name, "TagCloud")
.Build() .Build()
}; };
@ -202,19 +202,19 @@ public class __Generated__TagCloudViewComponentTagHelper : Microsoft.AspNetCore.
{ {
TagHelperDescriptorBuilder.Create("PTestTagHelper", "TestAssembly") TagHelperDescriptorBuilder.Create("PTestTagHelper", "TestAssembly")
.TypeName("PTestTagHelper") .TypeName("PTestTagHelper")
.BindAttribute(attribute => .BoundAttributeDescriptor(attribute =>
attribute attribute
.Name("Foo") .Name("Foo")
.TypeName("System.Int32")) .TypeName("System.Int32"))
.TagMatchingRule(rule => .TagMatchingRuleDescriptor(rule =>
rule.RequireTagName("p")) rule.RequireTagName("p"))
.Build(), .Build(),
TagHelperDescriptorBuilder.Create(ViewComponentTagHelperConventions.Kind, "TestTagHelper", "TestAssembly") TagHelperDescriptorBuilder.Create(ViewComponentTagHelperConventions.Kind, "TestTagHelper", "TestAssembly")
.BindAttribute(attribute => attribute .BoundAttributeDescriptor(attribute => attribute
.Name("Foo") .Name("Foo")
.TypeName("System.Int32") .TypeName("System.Int32")
.PropertyName("Foo")) .PropertyName("Foo"))
.TagMatchingRule(rule => rule.RequireTagName("tagcloud")) .TagMatchingRuleDescriptor(rule => rule.RequireTagName("tagcloud"))
.AddMetadata(ViewComponentTagHelperMetadata.Name, "TagCloud") .AddMetadata(ViewComponentTagHelperMetadata.Name, "TagCloud")
.Build() .Build()
}; };

View File

@ -162,7 +162,7 @@ __InputTagHelper.FooProp = 42;
.Name("bound") .Name("bound")
.PropertyName("FooProp") .PropertyName("FooProp")
.TypeName("System.Collections.Generic.Dictionary<System.String, System.Int32>") .TypeName("System.Collections.Generic.Dictionary<System.String, System.Int32>")
.AsDictionary("foo-", "System.Int32"), .AsDictionaryAttribute("foo-", "System.Int32"),
}) })
}; };
var engine = RazorEngine.Create(builder => builder.AddTagHelpers(descriptors)); var engine = RazorEngine.Create(builder => builder.AddTagHelpers(descriptors));
@ -253,11 +253,11 @@ __InputTagHelper.FooProp[""bound""] = 42;
{ {
foreach (var attributeBuilder in attributes) foreach (var attributeBuilder in attributes)
{ {
builder.BindAttribute(attributeBuilder); builder.BoundAttributeDescriptor(attributeBuilder);
} }
} }
builder.TagMatchingRule(ruleBuilder => ruleBuilder.RequireTagName(tagName)); builder.TagMatchingRuleDescriptor(ruleBuilder => ruleBuilder.RequireTagName(tagName));
var descriptor = builder.Build(); var descriptor = builder.Build();

View File

@ -394,7 +394,7 @@ __tagHelperExecutionContext.AddTagHelperAttribute(""bound"", __InputTagHelper.Fo
.Name("bound") .Name("bound")
.PropertyName("FooProp") .PropertyName("FooProp")
.TypeName("System.Collections.Generic.Dictionary<System.String, System.Int32>") .TypeName("System.Collections.Generic.Dictionary<System.String, System.Int32>")
.AsDictionary("foo-", "System.Int32"), .AsDictionaryAttribute("foo-", "System.Int32"),
}) })
}; };
var engine = RazorEngine.Create(builder => builder.AddTagHelpers(descriptors)); var engine = RazorEngine.Create(builder => builder.AddTagHelpers(descriptors));
@ -489,11 +489,11 @@ __tagHelperExecutionContext.AddTagHelperAttribute(""foo-bound"", __InputTagHelpe
{ {
foreach (var attributeBuilder in attributes) foreach (var attributeBuilder in attributes)
{ {
builder.BindAttribute(attributeBuilder); builder.BoundAttributeDescriptor(attributeBuilder);
} }
} }
builder.TagMatchingRule(ruleBuilder => ruleBuilder.RequireTagName(tagName)); builder.TagMatchingRuleDescriptor(ruleBuilder => ruleBuilder.RequireTagName(tagName));
var descriptor = builder.Build(); var descriptor = builder.Build();

View File

@ -482,11 +482,11 @@ namespace Microsoft.AspNetCore.Razor.Language
{ {
foreach (var attributeBuilder in attributes) foreach (var attributeBuilder in attributes)
{ {
builder.BindAttribute(attributeBuilder); builder.BoundAttributeDescriptor(attributeBuilder);
} }
} }
builder.TagMatchingRule(ruleBuilder => ruleBuilder.RequireTagName(tagName)); builder.TagMatchingRuleDescriptor(ruleBuilder => ruleBuilder.RequireTagName(tagName));
var descriptor = builder.Build(); var descriptor = builder.Build();

View File

@ -204,11 +204,11 @@ namespace Microsoft.AspNetCore.Razor.Language
ruleBuilders: new Action<TagMatchingRuleDescriptorBuilder>[] ruleBuilders: new Action<TagMatchingRuleDescriptorBuilder>[]
{ {
ruleBuilder => ruleBuilder ruleBuilder => ruleBuilder
.RequireAttribute(attribute => attribute .RequireAttributeDescriptor(attribute => attribute
.Name("a") .Name("a")
.NameComparisonMode(RequiredAttributeDescriptor.NameComparisonMode.FullMatch)), .NameComparisonMode(RequiredAttributeDescriptor.NameComparisonMode.FullMatch)),
ruleBuilder => ruleBuilder ruleBuilder => ruleBuilder
.RequireAttribute(attribute => attribute .RequireAttributeDescriptor(attribute => attribute
.Name("b") .Name("b")
.NameComparisonMode(RequiredAttributeDescriptor.NameComparisonMode.FullMatch)), .NameComparisonMode(RequiredAttributeDescriptor.NameComparisonMode.FullMatch)),
}); });
@ -257,11 +257,11 @@ namespace Microsoft.AspNetCore.Razor.Language
ruleBuilders: new Action<TagMatchingRuleDescriptorBuilder>[] ruleBuilders: new Action<TagMatchingRuleDescriptorBuilder>[]
{ {
ruleBuilder => ruleBuilder ruleBuilder => ruleBuilder
.RequireAttribute(attribute => attribute .RequireAttributeDescriptor(attribute => attribute
.Name("a") .Name("a")
.NameComparisonMode(RequiredAttributeDescriptor.NameComparisonMode.FullMatch)), .NameComparisonMode(RequiredAttributeDescriptor.NameComparisonMode.FullMatch)),
ruleBuilder => ruleBuilder ruleBuilder => ruleBuilder
.RequireAttribute(attribute => attribute .RequireAttributeDescriptor(attribute => attribute
.Name("b") .Name("b")
.NameComparisonMode(RequiredAttributeDescriptor.NameComparisonMode.FullMatch)), .NameComparisonMode(RequiredAttributeDescriptor.NameComparisonMode.FullMatch)),
}); });
@ -1397,7 +1397,7 @@ namespace Microsoft.AspNetCore.Razor.Language
{ {
foreach (var attributeBuilder in attributes) foreach (var attributeBuilder in attributes)
{ {
builder.BindAttribute(attributeBuilder); builder.BoundAttributeDescriptor(attributeBuilder);
} }
} }
@ -1405,7 +1405,7 @@ namespace Microsoft.AspNetCore.Razor.Language
{ {
foreach (var ruleBuilder in ruleBuilders) foreach (var ruleBuilder in ruleBuilders)
{ {
builder.TagMatchingRule(innerRuleBuilder => builder.TagMatchingRuleDescriptor(innerRuleBuilder =>
{ {
innerRuleBuilder.RequireTagName(tagName); innerRuleBuilder.RequireTagName(tagName);
ruleBuilder(innerRuleBuilder); ruleBuilder(innerRuleBuilder);
@ -1414,7 +1414,7 @@ namespace Microsoft.AspNetCore.Razor.Language
} }
else else
{ {
builder.TagMatchingRule(ruleBuilder => ruleBuilder.RequireTagName(tagName)); builder.TagMatchingRuleDescriptor(ruleBuilder => ruleBuilder.RequireTagName(tagName));
} }
var descriptor = builder.Build(); var descriptor = builder.Build();

View File

@ -187,7 +187,7 @@ __tagHelperExecutionContext.AddTagHelperAttribute(_tagHelper1);
builder builder
.Name("Foo") .Name("Foo")
.TypeName("System.Collections.Generic.Dictionary<System.String, System.String>") .TypeName("System.Collections.Generic.Dictionary<System.String, System.String>")
.AsDictionary("pre-", "System.String") .AsDictionaryAttribute("pre-", "System.String")
.PropertyName("FooProp"); .PropertyName("FooProp");
var descriptor = builder.Build(); var descriptor = builder.Build();

View File

@ -110,11 +110,11 @@ namespace Microsoft.AspNetCore.Razor.Language.IntegrationTests
{ {
foreach (var attributeBuilder in attributes) foreach (var attributeBuilder in attributes)
{ {
builder.BindAttribute(attributeBuilder); builder.BoundAttributeDescriptor(attributeBuilder);
} }
} }
builder.TagMatchingRule(ruleBuilder => ruleBuilder.RequireTagName(tagName)); builder.TagMatchingRuleDescriptor(ruleBuilder => ruleBuilder.RequireTagName(tagName));
var descriptor = builder.Build(); var descriptor = builder.Build();

View File

@ -62,7 +62,7 @@ namespace Microsoft.AspNetCore.Razor.Language.IntegrationTests
ruleBuilders: new Action<TagMatchingRuleDescriptorBuilder>[] ruleBuilders: new Action<TagMatchingRuleDescriptorBuilder>[]
{ {
builder => builder builder => builder
.RequireAttribute(attribute => attribute .RequireAttributeDescriptor(attribute => attribute
.Name("href") .Name("href")
.NameComparisonMode(RequiredAttributeDescriptor.NameComparisonMode.FullMatch) .NameComparisonMode(RequiredAttributeDescriptor.NameComparisonMode.FullMatch)
.Value("~/") .Value("~/")
@ -75,12 +75,12 @@ namespace Microsoft.AspNetCore.Razor.Language.IntegrationTests
ruleBuilders: new Action<TagMatchingRuleDescriptorBuilder>[] ruleBuilders: new Action<TagMatchingRuleDescriptorBuilder>[]
{ {
builder => builder builder => builder
.RequireAttribute(attribute => attribute .RequireAttributeDescriptor(attribute => attribute
.Name("href") .Name("href")
.NameComparisonMode(RequiredAttributeDescriptor.NameComparisonMode.FullMatch) .NameComparisonMode(RequiredAttributeDescriptor.NameComparisonMode.FullMatch)
.Value("~/") .Value("~/")
.ValueComparisonMode(RequiredAttributeDescriptor.ValueComparisonMode.PrefixMatch)) .ValueComparisonMode(RequiredAttributeDescriptor.ValueComparisonMode.PrefixMatch))
.RequireAttribute(attribute => attribute .RequireAttributeDescriptor(attribute => attribute
.Name("href") .Name("href")
.NameComparisonMode(RequiredAttributeDescriptor.NameComparisonMode.FullMatch) .NameComparisonMode(RequiredAttributeDescriptor.NameComparisonMode.FullMatch)
.Value("?hello=world") .Value("?hello=world")
@ -97,7 +97,7 @@ namespace Microsoft.AspNetCore.Razor.Language.IntegrationTests
ruleBuilders: new Action<TagMatchingRuleDescriptorBuilder>[] ruleBuilders: new Action<TagMatchingRuleDescriptorBuilder>[]
{ {
builder => builder builder => builder
.RequireAttribute(attribute => attribute .RequireAttributeDescriptor(attribute => attribute
.Name("type") .Name("type")
.NameComparisonMode(RequiredAttributeDescriptor.NameComparisonMode.FullMatch) .NameComparisonMode(RequiredAttributeDescriptor.NameComparisonMode.FullMatch)
.Value("text") .Value("text")
@ -114,7 +114,7 @@ namespace Microsoft.AspNetCore.Razor.Language.IntegrationTests
ruleBuilders: new Action<TagMatchingRuleDescriptorBuilder>[] ruleBuilders: new Action<TagMatchingRuleDescriptorBuilder>[]
{ {
builder => builder builder => builder
.RequireAttribute(attribute => attribute .RequireAttributeDescriptor(attribute => attribute
.Name("ty") .Name("ty")
.NameComparisonMode(RequiredAttributeDescriptor.NameComparisonMode.PrefixMatch)), .NameComparisonMode(RequiredAttributeDescriptor.NameComparisonMode.PrefixMatch)),
}), }),
@ -125,7 +125,7 @@ namespace Microsoft.AspNetCore.Razor.Language.IntegrationTests
ruleBuilders: new Action<TagMatchingRuleDescriptorBuilder>[] ruleBuilders: new Action<TagMatchingRuleDescriptorBuilder>[]
{ {
builder => builder builder => builder
.RequireAttribute(attribute => attribute .RequireAttributeDescriptor(attribute => attribute
.Name("href") .Name("href")
.NameComparisonMode(RequiredAttributeDescriptor.NameComparisonMode.FullMatch) .NameComparisonMode(RequiredAttributeDescriptor.NameComparisonMode.FullMatch)
.Value("~/") .Value("~/")
@ -138,7 +138,7 @@ namespace Microsoft.AspNetCore.Razor.Language.IntegrationTests
ruleBuilders: new Action<TagMatchingRuleDescriptorBuilder>[] ruleBuilders: new Action<TagMatchingRuleDescriptorBuilder>[]
{ {
builder => builder builder => builder
.RequireAttribute(attribute => attribute .RequireAttributeDescriptor(attribute => attribute
.Name("type") .Name("type")
.NameComparisonMode(RequiredAttributeDescriptor.NameComparisonMode.FullMatch)), .NameComparisonMode(RequiredAttributeDescriptor.NameComparisonMode.FullMatch)),
}), }),
@ -219,7 +219,7 @@ namespace Microsoft.AspNetCore.Razor.Language.IntegrationTests
}, },
ruleBuilders: new Action<TagMatchingRuleDescriptorBuilder>[] ruleBuilders: new Action<TagMatchingRuleDescriptorBuilder>[]
{ {
builder => builder.RequireAttribute(attribute => attribute.Name("bound")), builder => builder.RequireAttributeDescriptor(attribute => attribute.Name("bound")),
}), }),
}; };
} }
@ -244,7 +244,7 @@ namespace Microsoft.AspNetCore.Razor.Language.IntegrationTests
}, },
ruleBuilders: new Action<TagMatchingRuleDescriptorBuilder>[] ruleBuilders: new Action<TagMatchingRuleDescriptorBuilder>[]
{ {
builder => builder.RequireAttribute(attribute => attribute.Name("catchall-unbound-required")), builder => builder.RequireAttributeDescriptor(attribute => attribute.Name("catchall-unbound-required")),
}), }),
CreateTagHelperDescriptor( CreateTagHelperDescriptor(
tagName: "input", tagName: "input",
@ -264,8 +264,8 @@ namespace Microsoft.AspNetCore.Razor.Language.IntegrationTests
ruleBuilders: new Action<TagMatchingRuleDescriptorBuilder>[] ruleBuilders: new Action<TagMatchingRuleDescriptorBuilder>[]
{ {
builder => builder builder => builder
.RequireAttribute(attribute => attribute.Name("input-bound-required-string")) .RequireAttributeDescriptor(attribute => attribute.Name("input-bound-required-string"))
.RequireAttribute(attribute => attribute.Name("input-unbound-required")), .RequireAttributeDescriptor(attribute => attribute.Name("input-unbound-required")),
}), }),
}; };
} }
@ -311,8 +311,8 @@ namespace Microsoft.AspNetCore.Razor.Language.IntegrationTests
}, },
ruleBuilders: new Action<TagMatchingRuleDescriptorBuilder>[] ruleBuilders: new Action<TagMatchingRuleDescriptorBuilder>[]
{ {
builder => builder.RequireAttribute(attribute => attribute.Name("type")), builder => builder.RequireAttributeDescriptor(attribute => attribute.Name("type")),
builder => builder.RequireAttribute(attribute => attribute.Name("checked")) builder => builder.RequireAttributeDescriptor(attribute => attribute.Name("checked"))
}), }),
CreateTagHelperDescriptor( CreateTagHelperDescriptor(
tagName: "input", tagName: "input",
@ -325,8 +325,8 @@ namespace Microsoft.AspNetCore.Razor.Language.IntegrationTests
}, },
ruleBuilders: new Action<TagMatchingRuleDescriptorBuilder>[] ruleBuilders: new Action<TagMatchingRuleDescriptorBuilder>[]
{ {
builder => builder.RequireAttribute(attribute => attribute.Name("type")), builder => builder.RequireAttributeDescriptor(attribute => attribute.Name("type")),
builder => builder.RequireAttribute(attribute => attribute.Name("checked")) builder => builder.RequireAttributeDescriptor(attribute => attribute.Name("checked"))
}) })
}; };
} }
@ -346,7 +346,7 @@ namespace Microsoft.AspNetCore.Razor.Language.IntegrationTests
assemblyName: "TestAssembly", assemblyName: "TestAssembly",
ruleBuilders: new Action<TagMatchingRuleDescriptorBuilder>[] ruleBuilders: new Action<TagMatchingRuleDescriptorBuilder>[]
{ {
builder => builder.RequireAttribute(attribute => attribute.Name("class")), builder => builder.RequireAttributeDescriptor(attribute => attribute.Name("class")),
}), }),
CreateTagHelperDescriptor( CreateTagHelperDescriptor(
tagName: "input", tagName: "input",
@ -358,7 +358,7 @@ namespace Microsoft.AspNetCore.Razor.Language.IntegrationTests
}, },
ruleBuilders: new Action<TagMatchingRuleDescriptorBuilder>[] ruleBuilders: new Action<TagMatchingRuleDescriptorBuilder>[]
{ {
builder => builder.RequireAttribute(attribute => attribute.Name("type")), builder => builder.RequireAttributeDescriptor(attribute => attribute.Name("type")),
}), }),
CreateTagHelperDescriptor( CreateTagHelperDescriptor(
tagName: "input", tagName: "input",
@ -372,8 +372,8 @@ namespace Microsoft.AspNetCore.Razor.Language.IntegrationTests
ruleBuilders: new Action<TagMatchingRuleDescriptorBuilder>[] ruleBuilders: new Action<TagMatchingRuleDescriptorBuilder>[]
{ {
builder => builder builder => builder
.RequireAttribute(attribute => attribute.Name("type")) .RequireAttributeDescriptor(attribute => attribute.Name("type"))
.RequireAttribute(attribute => attribute.Name("checked")), .RequireAttributeDescriptor(attribute => attribute.Name("checked")),
}), }),
CreateTagHelperDescriptor( CreateTagHelperDescriptor(
tagName: "*", tagName: "*",
@ -381,7 +381,7 @@ namespace Microsoft.AspNetCore.Razor.Language.IntegrationTests
assemblyName: "TestAssembly", assemblyName: "TestAssembly",
ruleBuilders: new Action<TagMatchingRuleDescriptorBuilder>[] ruleBuilders: new Action<TagMatchingRuleDescriptorBuilder>[]
{ {
builder => builder.RequireAttribute(attribute => attribute.Name("catchAll")), builder => builder.RequireAttributeDescriptor(attribute => attribute.Name("catchAll")),
}), }),
}; };
} }
@ -407,7 +407,7 @@ namespace Microsoft.AspNetCore.Razor.Language.IntegrationTests
.Name("int-dictionary") .Name("int-dictionary")
.PropertyName("IntDictionaryProperty") .PropertyName("IntDictionaryProperty")
.TypeName(typeof(IDictionary<string, int>).FullName) .TypeName(typeof(IDictionary<string, int>).FullName)
.AsDictionary("int-prefix-", typeof(int).FullName), .AsDictionaryAttribute("int-prefix-", typeof(int).FullName),
builder => builder builder => builder
.Name("string-prefix-grabber") .Name("string-prefix-grabber")
.PropertyName("StringProperty") .PropertyName("StringProperty")
@ -416,7 +416,7 @@ namespace Microsoft.AspNetCore.Razor.Language.IntegrationTests
.Name("string-dictionary") .Name("string-dictionary")
.PropertyName("StringDictionaryProperty") .PropertyName("StringDictionaryProperty")
.TypeName("Namespace.DictionaryWithoutParameterlessConstructor<string, string>") .TypeName("Namespace.DictionaryWithoutParameterlessConstructor<string, string>")
.AsDictionary("string-prefix-", typeof(string).FullName), .AsDictionaryAttribute("string-prefix-", typeof(string).FullName),
}), }),
CreateTagHelperDescriptor( CreateTagHelperDescriptor(
tagName: "input", tagName: "input",
@ -428,12 +428,12 @@ namespace Microsoft.AspNetCore.Razor.Language.IntegrationTests
.Name("int-dictionary") .Name("int-dictionary")
.PropertyName("IntDictionaryProperty") .PropertyName("IntDictionaryProperty")
.TypeName(typeof(int).FullName) .TypeName(typeof(int).FullName)
.AsDictionary("int-prefix-", typeof(int).FullName), .AsDictionaryAttribute("int-prefix-", typeof(int).FullName),
builder => builder builder => builder
.Name("string-dictionary") .Name("string-dictionary")
.PropertyName("StringDictionaryProperty") .PropertyName("StringDictionaryProperty")
.TypeName("Namespace.DictionaryWithoutParameterlessConstructor<string, string>") .TypeName("Namespace.DictionaryWithoutParameterlessConstructor<string, string>")
.AsDictionary("string-prefix-", typeof(string).FullName), .AsDictionaryAttribute("string-prefix-", typeof(string).FullName),
}), }),
}; };
} }
@ -523,7 +523,7 @@ namespace Microsoft.AspNetCore.Razor.Language.IntegrationTests
{ {
foreach (var attributeBuilder in attributes) foreach (var attributeBuilder in attributes)
{ {
builder.BindAttribute(attributeBuilder); builder.BoundAttributeDescriptor(attributeBuilder);
} }
} }
@ -531,7 +531,7 @@ namespace Microsoft.AspNetCore.Razor.Language.IntegrationTests
{ {
foreach (var ruleBuilder in ruleBuilders) foreach (var ruleBuilder in ruleBuilders)
{ {
builder.TagMatchingRule(innerRuleBuilder => builder.TagMatchingRuleDescriptor(innerRuleBuilder =>
{ {
innerRuleBuilder.RequireTagName(tagName); innerRuleBuilder.RequireTagName(tagName);
ruleBuilder(innerRuleBuilder); ruleBuilder(innerRuleBuilder);
@ -540,7 +540,7 @@ namespace Microsoft.AspNetCore.Razor.Language.IntegrationTests
} }
else else
{ {
builder.TagMatchingRule(ruleBuilder => ruleBuilder.RequireTagName(tagName)); builder.TagMatchingRuleDescriptor(ruleBuilder => ruleBuilder.RequireTagName(tagName));
} }
var descriptor = builder.Build(); var descriptor = builder.Build();

View File

@ -118,36 +118,36 @@ namespace Microsoft.AspNetCore.Razor.Language.Legacy
var descriptors = new[] var descriptors = new[]
{ {
TagHelperDescriptorBuilder.Create("CatchAllTagHelper", "SomeAssembly") TagHelperDescriptorBuilder.Create("CatchAllTagHelper", "SomeAssembly")
.TagMatchingRule(rule => .TagMatchingRuleDescriptor(rule =>
rule rule
.RequireTagName("*") .RequireTagName("*")
.RequireAttribute(attribute => attribute.Name("bound"))) .RequireAttributeDescriptor(attribute => attribute.Name("bound")))
.BindAttribute(attribute => .BoundAttributeDescriptor(attribute =>
attribute attribute
.Name("[item]") .Name("[item]")
.PropertyName("ListItems") .PropertyName("ListItems")
.TypeName(typeof(List<string>).Namespace + "List<System.String>")) .TypeName(typeof(List<string>).Namespace + "List<System.String>"))
.BindAttribute(attribute => .BoundAttributeDescriptor(attribute =>
attribute attribute
.Name("[(item)]") .Name("[(item)]")
.PropertyName("ArrayItems") .PropertyName("ArrayItems")
.TypeName(typeof(string[]).Namespace + "System.String[]")) .TypeName(typeof(string[]).Namespace + "System.String[]"))
.BindAttribute(attribute => .BoundAttributeDescriptor(attribute =>
attribute attribute
.Name("(click)") .Name("(click)")
.PropertyName("Event1") .PropertyName("Event1")
.TypeName(typeof(Action).FullName)) .TypeName(typeof(Action).FullName))
.BindAttribute(attribute => .BoundAttributeDescriptor(attribute =>
attribute attribute
.Name("(^click)") .Name("(^click)")
.PropertyName("Event2") .PropertyName("Event2")
.TypeName(typeof(Action).FullName)) .TypeName(typeof(Action).FullName))
.BindAttribute(attribute => .BoundAttributeDescriptor(attribute =>
attribute attribute
.Name("*something") .Name("*something")
.PropertyName("StringProperty1") .PropertyName("StringProperty1")
.TypeName(typeof(string).FullName)) .TypeName(typeof(string).FullName))
.BindAttribute(attribute => .BoundAttributeDescriptor(attribute =>
attribute attribute
.Name("#local") .Name("#local")
.PropertyName("StringProperty2") .PropertyName("StringProperty2")
@ -222,7 +222,7 @@ namespace Microsoft.AspNetCore.Razor.Language.Legacy
var descriptors = new TagHelperDescriptor[] var descriptors = new TagHelperDescriptor[]
{ {
TagHelperDescriptorBuilder.Create("InputTagHelper", "SomeAssembly") TagHelperDescriptorBuilder.Create("InputTagHelper", "SomeAssembly")
.TagMatchingRule(rule => .TagMatchingRuleDescriptor(rule =>
rule rule
.RequireTagName("input") .RequireTagName("input")
.RequireTagStructure(TagStructure.WithoutEndTag)) .RequireTagStructure(TagStructure.WithoutEndTag))
@ -320,13 +320,13 @@ namespace Microsoft.AspNetCore.Razor.Language.Legacy
var descriptors = new TagHelperDescriptor[] var descriptors = new TagHelperDescriptor[]
{ {
TagHelperDescriptorBuilder.Create("InputTagHelper1", "SomeAssembly") TagHelperDescriptorBuilder.Create("InputTagHelper1", "SomeAssembly")
.TagMatchingRule(rule => .TagMatchingRuleDescriptor(rule =>
rule rule
.RequireTagName("input") .RequireTagName("input")
.RequireTagStructure(structure1)) .RequireTagStructure(structure1))
.Build(), .Build(),
TagHelperDescriptorBuilder.Create("InputTagHelper2", "SomeAssembly") TagHelperDescriptorBuilder.Create("InputTagHelper2", "SomeAssembly")
.TagMatchingRule(rule => .TagMatchingRuleDescriptor(rule =>
rule rule
.RequireTagName("input") .RequireTagName("input")
.RequireTagStructure(structure2)) .RequireTagStructure(structure2))
@ -1195,18 +1195,18 @@ namespace Microsoft.AspNetCore.Razor.Language.Legacy
var descriptors = new TagHelperDescriptor[] var descriptors = new TagHelperDescriptor[]
{ {
TagHelperDescriptorBuilder.Create("PersonTagHelper", "personAssembly") TagHelperDescriptorBuilder.Create("PersonTagHelper", "personAssembly")
.TagMatchingRule(rule => rule.RequireTagName("person")) .TagMatchingRuleDescriptor(rule => rule.RequireTagName("person"))
.BindAttribute(attribute => .BoundAttributeDescriptor(attribute =>
attribute attribute
.Name("age") .Name("age")
.PropertyName("Age") .PropertyName("Age")
.TypeName(typeof(int).FullName)) .TypeName(typeof(int).FullName))
.BindAttribute(attribute => .BoundAttributeDescriptor(attribute =>
attribute attribute
.Name("birthday") .Name("birthday")
.PropertyName("BirthDay") .PropertyName("BirthDay")
.TypeName(typeof(DateTime).FullName)) .TypeName(typeof(DateTime).FullName))
.BindAttribute(attribute => .BoundAttributeDescriptor(attribute =>
attribute attribute
.Name("name") .Name("name")
.PropertyName("Name") .PropertyName("Name")
@ -2250,13 +2250,13 @@ namespace Microsoft.AspNetCore.Razor.Language.Legacy
var descriptors = new TagHelperDescriptor[] var descriptors = new TagHelperDescriptor[]
{ {
TagHelperDescriptorBuilder.Create("mythTagHelper", "SomeAssembly") TagHelperDescriptorBuilder.Create("mythTagHelper", "SomeAssembly")
.TagMatchingRule(rule => rule.RequireTagName("myth")) .TagMatchingRuleDescriptor(rule => rule.RequireTagName("myth"))
.BindAttribute(attribute => .BoundAttributeDescriptor(attribute =>
attribute attribute
.Name("bound") .Name("bound")
.PropertyName("Bound") .PropertyName("Bound")
.TypeName(typeof(bool).FullName)) .TypeName(typeof(bool).FullName))
.BindAttribute(attribute => .BoundAttributeDescriptor(attribute =>
attribute attribute
.Name("name") .Name("name")
.PropertyName("Name") .PropertyName("Name")
@ -3901,54 +3901,54 @@ namespace Microsoft.AspNetCore.Razor.Language.Legacy
var descriptors = new TagHelperDescriptor[] var descriptors = new TagHelperDescriptor[]
{ {
TagHelperDescriptorBuilder.Create("InputTagHelper1", "SomeAssembly") TagHelperDescriptorBuilder.Create("InputTagHelper1", "SomeAssembly")
.TagMatchingRule(rule => .TagMatchingRuleDescriptor(rule =>
rule rule
.RequireTagName("input") .RequireTagName("input")
.RequireAttribute(attribute => attribute.Name("unbound-required"))) .RequireAttributeDescriptor(attribute => attribute.Name("unbound-required")))
.TagMatchingRule(rule => .TagMatchingRuleDescriptor(rule =>
rule rule
.RequireTagName("input") .RequireTagName("input")
.RequireAttribute(attribute => attribute.Name("bound-required-string"))) .RequireAttributeDescriptor(attribute => attribute.Name("bound-required-string")))
.BindAttribute(attribute => .BoundAttributeDescriptor(attribute =>
attribute attribute
.Name("bound-required-string") .Name("bound-required-string")
.PropertyName("BoundRequiredString") .PropertyName("BoundRequiredString")
.TypeName(typeof(string).FullName)) .TypeName(typeof(string).FullName))
.Build(), .Build(),
TagHelperDescriptorBuilder.Create("InputTagHelper2", "SomeAssembly") TagHelperDescriptorBuilder.Create("InputTagHelper2", "SomeAssembly")
.TagMatchingRule(rule => .TagMatchingRuleDescriptor(rule =>
rule rule
.RequireTagName("input") .RequireTagName("input")
.RequireAttribute(attribute => attribute.Name("bound-required-int"))) .RequireAttributeDescriptor(attribute => attribute.Name("bound-required-int")))
.BindAttribute(attribute => .BoundAttributeDescriptor(attribute =>
attribute attribute
.Name("bound-required-int") .Name("bound-required-int")
.PropertyName("BoundRequiredInt") .PropertyName("BoundRequiredInt")
.TypeName(typeof(int).FullName)) .TypeName(typeof(int).FullName))
.Build(), .Build(),
TagHelperDescriptorBuilder.Create("InputTagHelper3", "SomeAssembly") TagHelperDescriptorBuilder.Create("InputTagHelper3", "SomeAssembly")
.TagMatchingRule(rule => rule.RequireTagName("input")) .TagMatchingRuleDescriptor(rule => rule.RequireTagName("input"))
.BindAttribute(attribute => .BoundAttributeDescriptor(attribute =>
attribute attribute
.Name("int-dictionary") .Name("int-dictionary")
.PropertyName("DictionaryOfIntProperty") .PropertyName("DictionaryOfIntProperty")
.TypeName(typeof(IDictionary<string, int>).Namespace + ".IDictionary<System.String, System.Int32>") .TypeName(typeof(IDictionary<string, int>).Namespace + ".IDictionary<System.String, System.Int32>")
.AsDictionary("int-prefix-", typeof(int).FullName)) .AsDictionaryAttribute("int-prefix-", typeof(int).FullName))
.BindAttribute(attribute => .BoundAttributeDescriptor(attribute =>
attribute attribute
.Name("string-dictionary") .Name("string-dictionary")
.PropertyName("DictionaryOfStringProperty") .PropertyName("DictionaryOfStringProperty")
.TypeName(typeof(IDictionary<string, string>).Namespace + ".IDictionary<System.String, System.String>") .TypeName(typeof(IDictionary<string, string>).Namespace + ".IDictionary<System.String, System.String>")
.AsDictionary("string-prefix-", typeof(string).FullName)) .AsDictionaryAttribute("string-prefix-", typeof(string).FullName))
.Build(), .Build(),
TagHelperDescriptorBuilder.Create("PTagHelper", "SomeAssembly") TagHelperDescriptorBuilder.Create("PTagHelper", "SomeAssembly")
.TagMatchingRule(rule => rule.RequireTagName("p")) .TagMatchingRuleDescriptor(rule => rule.RequireTagName("p"))
.BindAttribute(attribute => .BoundAttributeDescriptor(attribute =>
attribute attribute
.Name("bound-string") .Name("bound-string")
.PropertyName("BoundRequiredString") .PropertyName("BoundRequiredString")
.TypeName(typeof(string).FullName)) .TypeName(typeof(string).FullName))
.BindAttribute(attribute => .BoundAttributeDescriptor(attribute =>
attribute attribute
.Name("bound-int") .Name("bound-int")
.PropertyName("BoundRequiredString") .PropertyName("BoundRequiredString")

View File

@ -161,14 +161,14 @@ namespace Microsoft.AspNetCore.Razor.Language.Legacy
var descriptors = new TagHelperDescriptor[] var descriptors = new TagHelperDescriptor[]
{ {
TagHelperDescriptorBuilder.Create("StrongTagHelper", "SomeAssembly") TagHelperDescriptorBuilder.Create("StrongTagHelper", "SomeAssembly")
.TagMatchingRule(rule => rule.RequireTagName("strong")) .TagMatchingRuleDescriptor(rule => rule.RequireTagName("strong"))
.TagMatchingRule(rule => rule.RequireTagName("div")) .TagMatchingRuleDescriptor(rule => rule.RequireTagName("div"))
.Build(), .Build(),
TagHelperDescriptorBuilder.Create("CatchALlTagHelper", "SomeAssembly") TagHelperDescriptorBuilder.Create("CatchALlTagHelper", "SomeAssembly")
.TagMatchingRule(rule => rule.RequireTagName("*")) .TagMatchingRuleDescriptor(rule => rule.RequireTagName("*"))
.Build(), .Build(),
TagHelperDescriptorBuilder.Create("PTagHelper", "SomeAssembly") TagHelperDescriptorBuilder.Create("PTagHelper", "SomeAssembly")
.TagMatchingRule(rule => rule.RequireTagName("p")) .TagMatchingRuleDescriptor(rule => rule.RequireTagName("p"))
.Build(), .Build(),
}; };
@ -258,23 +258,23 @@ namespace Microsoft.AspNetCore.Razor.Language.Legacy
var descriptors = new TagHelperDescriptor[] var descriptors = new TagHelperDescriptor[]
{ {
TagHelperDescriptorBuilder.Create("InputTagHelper", "SomeAssembly") TagHelperDescriptorBuilder.Create("InputTagHelper", "SomeAssembly")
.TagMatchingRule(rule => .TagMatchingRuleDescriptor(rule =>
rule rule
.RequireTagName("input") .RequireTagName("input")
.RequireTagStructure(TagStructure.WithoutEndTag)) .RequireTagStructure(TagStructure.WithoutEndTag))
.Build(), .Build(),
TagHelperDescriptorBuilder.Create("StrongTagHelper", "SomeAssembly") TagHelperDescriptorBuilder.Create("StrongTagHelper", "SomeAssembly")
.TagMatchingRule(rule => .TagMatchingRuleDescriptor(rule =>
rule rule
.RequireTagName("strong") .RequireTagName("strong")
.RequireParentTag("p")) .RequireParentTag("p"))
.TagMatchingRule(rule => .TagMatchingRuleDescriptor(rule =>
rule rule
.RequireTagName("strong") .RequireTagName("strong")
.RequireParentTag("input")) .RequireParentTag("input"))
.Build(), .Build(),
TagHelperDescriptorBuilder.Create("PTagHelper", "SomeAssembly") TagHelperDescriptorBuilder.Create("PTagHelper", "SomeAssembly")
.TagMatchingRule(rule => rule.RequireTagName("p")) .TagMatchingRuleDescriptor(rule => rule.RequireTagName("p"))
.Build(), .Build(),
}; };
@ -339,17 +339,17 @@ namespace Microsoft.AspNetCore.Razor.Language.Legacy
var descriptors = new TagHelperDescriptor[] var descriptors = new TagHelperDescriptor[]
{ {
TagHelperDescriptorBuilder.Create("StrongTagHelper", "SomeAssembly") TagHelperDescriptorBuilder.Create("StrongTagHelper", "SomeAssembly")
.TagMatchingRule(rule => .TagMatchingRuleDescriptor(rule =>
rule rule
.RequireTagName("strong") .RequireTagName("strong")
.RequireParentTag("p")) .RequireParentTag("p"))
.TagMatchingRule(rule => .TagMatchingRuleDescriptor(rule =>
rule rule
.RequireTagName("strong") .RequireTagName("strong")
.RequireParentTag("div")) .RequireParentTag("div"))
.Build(), .Build(),
TagHelperDescriptorBuilder.Create("PTagHelper", "SomeAssembly") TagHelperDescriptorBuilder.Create("PTagHelper", "SomeAssembly")
.TagMatchingRule(rule => rule.RequireTagName("p")) .TagMatchingRuleDescriptor(rule => rule.RequireTagName("p"))
.Build(), .Build(),
}; };
@ -368,11 +368,11 @@ namespace Microsoft.AspNetCore.Razor.Language.Legacy
var descriptors = new TagHelperDescriptor[] var descriptors = new TagHelperDescriptor[]
{ {
TagHelperDescriptorBuilder.Create("PTagHelper", "SomeAssembly") TagHelperDescriptorBuilder.Create("PTagHelper", "SomeAssembly")
.TagMatchingRule(rule => rule.RequireTagName("p")) .TagMatchingRuleDescriptor(rule => rule.RequireTagName("p"))
.AllowChildTag("strong") .AllowChildTag("strong")
.Build(), .Build(),
TagHelperDescriptorBuilder.Create("StrongTagHelper", "SomeAssembly") TagHelperDescriptorBuilder.Create("StrongTagHelper", "SomeAssembly")
.TagMatchingRule(rule => rule.RequireTagName("strong")) .TagMatchingRuleDescriptor(rule => rule.RequireTagName("strong"))
.Build(), .Build(),
}; };
@ -679,7 +679,7 @@ namespace Microsoft.AspNetCore.Razor.Language.Legacy
var descriptors = new TagHelperDescriptor[] var descriptors = new TagHelperDescriptor[]
{ {
TagHelperDescriptorBuilder.Create("PTagHelper", "SomeAssembly") TagHelperDescriptorBuilder.Create("PTagHelper", "SomeAssembly")
.TagMatchingRule(rule => rule.RequireTagName("p")) .TagMatchingRuleDescriptor(rule => rule.RequireTagName("p"))
.AllowChildTag("br") .AllowChildTag("br")
.Build() .Build()
}; };
@ -715,10 +715,10 @@ namespace Microsoft.AspNetCore.Razor.Language.Legacy
var descriptors = new TagHelperDescriptor[] var descriptors = new TagHelperDescriptor[]
{ {
TagHelperDescriptorBuilder.Create("StrongTagHelper", "SomeAssembly") TagHelperDescriptorBuilder.Create("StrongTagHelper", "SomeAssembly")
.TagMatchingRule(rule => .TagMatchingRuleDescriptor(rule =>
rule rule
.RequireTagName("strong") .RequireTagName("strong")
.RequireAttribute(attribute => attribute.Name("required"))) .RequireAttributeDescriptor(attribute => attribute.Name("required")))
.AllowChildTag("br") .AllowChildTag("br")
.Build() .Build()
}; };
@ -741,18 +741,18 @@ namespace Microsoft.AspNetCore.Razor.Language.Legacy
var descriptors = new TagHelperDescriptor[] var descriptors = new TagHelperDescriptor[]
{ {
TagHelperDescriptorBuilder.Create("PTagHelper1", "SomeAssembly") TagHelperDescriptorBuilder.Create("PTagHelper1", "SomeAssembly")
.TagMatchingRule(rule => rule.RequireTagName("p")) .TagMatchingRuleDescriptor(rule => rule.RequireTagName("p"))
.AllowChildTag("strong") .AllowChildTag("strong")
.AllowChildTag("br") .AllowChildTag("br")
.Build(), .Build(),
TagHelperDescriptorBuilder.Create("PTagHelper2", "SomeAssembly") TagHelperDescriptorBuilder.Create("PTagHelper2", "SomeAssembly")
.TagMatchingRule(rule => rule.RequireTagName("p")) .TagMatchingRuleDescriptor(rule => rule.RequireTagName("p"))
.Build(), .Build(),
TagHelperDescriptorBuilder.Create("StrongTagHelper", "SomeAssembly") TagHelperDescriptorBuilder.Create("StrongTagHelper", "SomeAssembly")
.TagMatchingRule(rule => rule.RequireTagName("strong")) .TagMatchingRuleDescriptor(rule => rule.RequireTagName("strong"))
.Build(), .Build(),
TagHelperDescriptorBuilder.Create("BRTagHelper", "SomeAssembly") TagHelperDescriptorBuilder.Create("BRTagHelper", "SomeAssembly")
.TagMatchingRule(rule => .TagMatchingRuleDescriptor(rule =>
rule rule
.RequireTagName("br") .RequireTagName("br")
.RequireTagStructure(TagStructure.WithoutEndTag)) .RequireTagStructure(TagStructure.WithoutEndTag))
@ -777,18 +777,18 @@ namespace Microsoft.AspNetCore.Razor.Language.Legacy
var descriptors = new TagHelperDescriptor[] var descriptors = new TagHelperDescriptor[]
{ {
TagHelperDescriptorBuilder.Create("PTagHelper1", "SomeAssembly") TagHelperDescriptorBuilder.Create("PTagHelper1", "SomeAssembly")
.TagMatchingRule(rule => rule.RequireTagName("p")) .TagMatchingRuleDescriptor(rule => rule.RequireTagName("p"))
.AllowChildTag("strong") .AllowChildTag("strong")
.Build(), .Build(),
TagHelperDescriptorBuilder.Create("PTagHelper2", "SomeAssembly") TagHelperDescriptorBuilder.Create("PTagHelper2", "SomeAssembly")
.TagMatchingRule(rule => rule.RequireTagName("p")) .TagMatchingRuleDescriptor(rule => rule.RequireTagName("p"))
.AllowChildTag("br") .AllowChildTag("br")
.Build(), .Build(),
TagHelperDescriptorBuilder.Create("StrongTagHelper", "SomeAssembly") TagHelperDescriptorBuilder.Create("StrongTagHelper", "SomeAssembly")
.TagMatchingRule(rule => rule.RequireTagName("strong")) .TagMatchingRuleDescriptor(rule => rule.RequireTagName("strong"))
.Build(), .Build(),
TagHelperDescriptorBuilder.Create("BRTagHelper", "SomeAssembly") TagHelperDescriptorBuilder.Create("BRTagHelper", "SomeAssembly")
.TagMatchingRule(rule => .TagMatchingRuleDescriptor(rule =>
rule rule
.RequireTagName("br") .RequireTagName("br")
.RequireTagStructure(TagStructure.WithoutEndTag)) .RequireTagStructure(TagStructure.WithoutEndTag))
@ -1014,9 +1014,9 @@ namespace Microsoft.AspNetCore.Razor.Language.Legacy
{ {
// Arrange // Arrange
var pTagHelperBuilder = TagHelperDescriptorBuilder.Create("PTagHelper", "SomeAssembly") var pTagHelperBuilder = TagHelperDescriptorBuilder.Create("PTagHelper", "SomeAssembly")
.TagMatchingRule(rule => rule.RequireTagName("p")); .TagMatchingRuleDescriptor(rule => rule.RequireTagName("p"));
var strongTagHelperBuilder = TagHelperDescriptorBuilder.Create("StrongTagHelper", "SomeAssembly") var strongTagHelperBuilder = TagHelperDescriptorBuilder.Create("StrongTagHelper", "SomeAssembly")
.TagMatchingRule(rule => rule.RequireTagName("strong")); .TagMatchingRuleDescriptor(rule => rule.RequireTagName("strong"));
foreach (var childTag in allowedChildren) foreach (var childTag in allowedChildren)
{ {
@ -1028,7 +1028,7 @@ namespace Microsoft.AspNetCore.Razor.Language.Legacy
pTagHelperBuilder.Build(), pTagHelperBuilder.Build(),
strongTagHelperBuilder.Build(), strongTagHelperBuilder.Build(),
TagHelperDescriptorBuilder.Create("BRTagHelper", "SomeAssembly") TagHelperDescriptorBuilder.Create("BRTagHelper", "SomeAssembly")
.TagMatchingRule(rule => .TagMatchingRuleDescriptor(rule =>
rule rule
.RequireTagName("br") .RequireTagName("br")
.RequireTagStructure(TagStructure.WithoutEndTag)) .RequireTagStructure(TagStructure.WithoutEndTag))
@ -1047,11 +1047,11 @@ namespace Microsoft.AspNetCore.Razor.Language.Legacy
var descriptors = new TagHelperDescriptor[] var descriptors = new TagHelperDescriptor[]
{ {
TagHelperDescriptorBuilder.Create("PTagHelper", "SomeAssembly") TagHelperDescriptorBuilder.Create("PTagHelper", "SomeAssembly")
.TagMatchingRule(rule => rule.RequireTagName("p")) .TagMatchingRuleDescriptor(rule => rule.RequireTagName("p"))
.AllowChildTag("custom") .AllowChildTag("custom")
.Build(), .Build(),
TagHelperDescriptorBuilder.Create("CatchAllTagHelper", "SomeAssembly") TagHelperDescriptorBuilder.Create("CatchAllTagHelper", "SomeAssembly")
.TagMatchingRule(rule => rule.RequireTagName("*")) .TagMatchingRuleDescriptor(rule => rule.RequireTagName("*"))
.Build(), .Build(),
}; };
var expectedOutput = new MarkupBlock( var expectedOutput = new MarkupBlock(
@ -1079,11 +1079,11 @@ namespace Microsoft.AspNetCore.Razor.Language.Legacy
var descriptors = new TagHelperDescriptor[] var descriptors = new TagHelperDescriptor[]
{ {
TagHelperDescriptorBuilder.Create("PTagHelper", "SomeAssembly") TagHelperDescriptorBuilder.Create("PTagHelper", "SomeAssembly")
.TagMatchingRule(rule => rule.RequireTagName("p")) .TagMatchingRuleDescriptor(rule => rule.RequireTagName("p"))
.AllowChildTag("custom") .AllowChildTag("custom")
.Build(), .Build(),
TagHelperDescriptorBuilder.Create("CatchAllTagHelper", "SomeAssembly") TagHelperDescriptorBuilder.Create("CatchAllTagHelper", "SomeAssembly")
.TagMatchingRule(rule => rule.RequireTagName("*")) .TagMatchingRuleDescriptor(rule => rule.RequireTagName("*"))
.Build(), .Build(),
}; };
var expectedOutput = new MarkupBlock( var expectedOutput = new MarkupBlock(
@ -1112,7 +1112,7 @@ namespace Microsoft.AspNetCore.Razor.Language.Legacy
var descriptors = new TagHelperDescriptor[] var descriptors = new TagHelperDescriptor[]
{ {
TagHelperDescriptorBuilder.Create("InputTagHelper", "SomeAssembly") TagHelperDescriptorBuilder.Create("InputTagHelper", "SomeAssembly")
.TagMatchingRule(rule => .TagMatchingRuleDescriptor(rule =>
rule rule
.RequireTagName("input") .RequireTagName("input")
.RequireTagStructure(TagStructure.WithoutEndTag)) .RequireTagStructure(TagStructure.WithoutEndTag))
@ -1143,7 +1143,7 @@ namespace Microsoft.AspNetCore.Razor.Language.Legacy
var descriptors = new TagHelperDescriptor[] var descriptors = new TagHelperDescriptor[]
{ {
TagHelperDescriptorBuilder.Create("InputTagHelper", "SomeAssembly") TagHelperDescriptorBuilder.Create("InputTagHelper", "SomeAssembly")
.TagMatchingRule(rule => .TagMatchingRuleDescriptor(rule =>
rule rule
.RequireTagName("input") .RequireTagName("input")
.RequireTagStructure(TagStructure.WithoutEndTag)) .RequireTagStructure(TagStructure.WithoutEndTag))
@ -1175,13 +1175,13 @@ namespace Microsoft.AspNetCore.Razor.Language.Legacy
var descriptors = new TagHelperDescriptor[] var descriptors = new TagHelperDescriptor[]
{ {
TagHelperDescriptorBuilder.Create("InputTagHelper1", "SomeAssembly") TagHelperDescriptorBuilder.Create("InputTagHelper1", "SomeAssembly")
.TagMatchingRule(rule => .TagMatchingRuleDescriptor(rule =>
rule rule
.RequireTagName("input") .RequireTagName("input")
.RequireTagStructure(TagStructure.WithoutEndTag)) .RequireTagStructure(TagStructure.WithoutEndTag))
.Build(), .Build(),
TagHelperDescriptorBuilder.Create("InputTagHelper2", "SomeAssembly") TagHelperDescriptorBuilder.Create("InputTagHelper2", "SomeAssembly")
.TagMatchingRule(rule => .TagMatchingRuleDescriptor(rule =>
rule rule
.RequireTagName("input") .RequireTagName("input")
.RequireTagStructure(TagStructure.NormalOrSelfClosing)) .RequireTagStructure(TagStructure.NormalOrSelfClosing))
@ -1597,23 +1597,23 @@ namespace Microsoft.AspNetCore.Razor.Language.Legacy
var descriptors = new TagHelperDescriptor[] var descriptors = new TagHelperDescriptor[]
{ {
TagHelperDescriptorBuilder.Create("pTagHelper", "SomeAssembly") TagHelperDescriptorBuilder.Create("pTagHelper", "SomeAssembly")
.TagMatchingRule(rule => .TagMatchingRuleDescriptor(rule =>
rule rule
.RequireTagName("p") .RequireTagName("p")
.RequireAttribute(attribute => attribute.Name("class"))) .RequireAttributeDescriptor(attribute => attribute.Name("class")))
.Build(), .Build(),
TagHelperDescriptorBuilder.Create("divTagHelper", "SomeAssembly") TagHelperDescriptorBuilder.Create("divTagHelper", "SomeAssembly")
.TagMatchingRule(rule => .TagMatchingRuleDescriptor(rule =>
rule rule
.RequireTagName("div") .RequireTagName("div")
.RequireAttribute(attribute => attribute.Name("class")) .RequireAttributeDescriptor(attribute => attribute.Name("class"))
.RequireAttribute(attribute => attribute.Name("style"))) .RequireAttributeDescriptor(attribute => attribute.Name("style")))
.Build(), .Build(),
TagHelperDescriptorBuilder.Create("catchAllTagHelper", "SomeAssembly") TagHelperDescriptorBuilder.Create("catchAllTagHelper", "SomeAssembly")
.TagMatchingRule(rule => .TagMatchingRuleDescriptor(rule =>
rule rule
.RequireTagName("*") .RequireTagName("*")
.RequireAttribute(attribute => attribute.Name("catchAll"))) .RequireAttributeDescriptor(attribute => attribute.Name("catchAll")))
.Build() .Build()
}; };
@ -1857,16 +1857,16 @@ namespace Microsoft.AspNetCore.Razor.Language.Legacy
var descriptors = new TagHelperDescriptor[] var descriptors = new TagHelperDescriptor[]
{ {
TagHelperDescriptorBuilder.Create("pTagHelper", "SomeAssembly") TagHelperDescriptorBuilder.Create("pTagHelper", "SomeAssembly")
.TagMatchingRule(rule => .TagMatchingRuleDescriptor(rule =>
rule rule
.RequireTagName("p") .RequireTagName("p")
.RequireAttribute(attribute => attribute.Name("class"))) .RequireAttributeDescriptor(attribute => attribute.Name("class")))
.Build(), .Build(),
TagHelperDescriptorBuilder.Create("catchAllTagHelper", "SomeAssembly") TagHelperDescriptorBuilder.Create("catchAllTagHelper", "SomeAssembly")
.TagMatchingRule(rule => .TagMatchingRuleDescriptor(rule =>
rule rule
.RequireTagName("*") .RequireTagName("*")
.RequireAttribute(attribute => attribute.Name("catchAll"))) .RequireAttributeDescriptor(attribute => attribute.Name("catchAll")))
.Build(), .Build(),
}; };
@ -2078,10 +2078,10 @@ namespace Microsoft.AspNetCore.Razor.Language.Legacy
var descriptors = new TagHelperDescriptor[] var descriptors = new TagHelperDescriptor[]
{ {
TagHelperDescriptorBuilder.Create("pTagHelper", "SomeAssembly") TagHelperDescriptorBuilder.Create("pTagHelper", "SomeAssembly")
.TagMatchingRule(rule => .TagMatchingRuleDescriptor(rule =>
rule rule
.RequireTagName("p") .RequireTagName("p")
.RequireAttribute(attribute => attribute.Name("class"))) .RequireAttributeDescriptor(attribute => attribute.Name("class")))
.Build(), .Build(),
}; };
@ -2098,11 +2098,11 @@ namespace Microsoft.AspNetCore.Razor.Language.Legacy
var availableDescriptorsColon = new TagHelperDescriptor[] var availableDescriptorsColon = new TagHelperDescriptor[]
{ {
TagHelperDescriptorBuilder.Create("mythTagHelper", "SomeAssembly") TagHelperDescriptorBuilder.Create("mythTagHelper", "SomeAssembly")
.TagMatchingRule(rule => rule.RequireTagName("myth")) .TagMatchingRuleDescriptor(rule => rule.RequireTagName("myth"))
.Build(), .Build(),
TagHelperDescriptorBuilder.Create("mythTagHelper2", "SomeAssembly") TagHelperDescriptorBuilder.Create("mythTagHelper2", "SomeAssembly")
.TagMatchingRule(rule => rule.RequireTagName("myth2")) .TagMatchingRuleDescriptor(rule => rule.RequireTagName("myth2"))
.BindAttribute(attribute => .BoundAttributeDescriptor(attribute =>
attribute attribute
.Name("bound") .Name("bound")
.PropertyName("Bound") .PropertyName("Bound")
@ -2112,7 +2112,7 @@ namespace Microsoft.AspNetCore.Razor.Language.Legacy
var availableDescriptorsCatchAll = new TagHelperDescriptor[] var availableDescriptorsCatchAll = new TagHelperDescriptor[]
{ {
TagHelperDescriptorBuilder.Create("mythTagHelper", "SomeAssembly") TagHelperDescriptorBuilder.Create("mythTagHelper", "SomeAssembly")
.TagMatchingRule(rule => rule.RequireTagName("*")) .TagMatchingRuleDescriptor(rule => rule.RequireTagName("*"))
.Build(), .Build(),
}; };

View File

@ -38,7 +38,7 @@ namespace Microsoft.AspNetCore.Razor.Language.Legacy
foreach (var tagName in tagNames) foreach (var tagName in tagNames)
{ {
var descriptor = TagHelperDescriptorBuilder.Create(tagName + "taghelper", "SomeAssembly") var descriptor = TagHelperDescriptorBuilder.Create(tagName + "taghelper", "SomeAssembly")
.TagMatchingRule(rule => rule.RequireTagName(tagName)) .TagMatchingRuleDescriptor(rule => rule.RequireTagName(tagName))
.Build(); .Build();
descriptors.Add(descriptor); descriptors.Add(descriptor);
} }

View File

@ -15,7 +15,7 @@ namespace Microsoft.AspNetCore.Razor.Language
{ {
// Arrange // Arrange
var divTagHelper = TagHelperDescriptorBuilder.Create("DivTagHelper", "SomeAssembly") var divTagHelper = TagHelperDescriptorBuilder.Create("DivTagHelper", "SomeAssembly")
.TagMatchingRule(rule => rule.RequireTagName("div")) .TagMatchingRuleDescriptor(rule => rule.RequireTagName("div"))
.Build(); .Build();
var expectedDescriptors = new[] { divTagHelper }; var expectedDescriptors = new[] { divTagHelper };
var expectedAttributes = new[] var expectedAttributes = new[]
@ -44,17 +44,17 @@ namespace Microsoft.AspNetCore.Razor.Language
get get
{ {
var strongPDivParent = TagHelperDescriptorBuilder.Create("StrongTagHelper", "SomeAssembly") var strongPDivParent = TagHelperDescriptorBuilder.Create("StrongTagHelper", "SomeAssembly")
.TagMatchingRule(rule => .TagMatchingRuleDescriptor(rule =>
rule rule
.RequireTagName("strong") .RequireTagName("strong")
.RequireParentTag("p")) .RequireParentTag("p"))
.TagMatchingRule(rule => .TagMatchingRuleDescriptor(rule =>
rule rule
.RequireTagName("strong") .RequireTagName("strong")
.RequireParentTag("div")) .RequireParentTag("div"))
.Build(); .Build();
var catchAllPParent = TagHelperDescriptorBuilder.Create("CatchAllTagHelper", "SomeAssembly") var catchAllPParent = TagHelperDescriptorBuilder.Create("CatchAllTagHelper", "SomeAssembly")
.TagMatchingRule(rule => .TagMatchingRuleDescriptor(rule =>
rule rule
.RequireTagName("*") .RequireTagName("*")
.RequireParentTag("p")) .RequireParentTag("p"))
@ -120,45 +120,45 @@ namespace Microsoft.AspNetCore.Razor.Language
get get
{ {
var divDescriptor = TagHelperDescriptorBuilder.Create("DivTagHelper", "SomeAssembly") var divDescriptor = TagHelperDescriptorBuilder.Create("DivTagHelper", "SomeAssembly")
.TagMatchingRule(rule => .TagMatchingRuleDescriptor(rule =>
rule rule
.RequireTagName("div") .RequireTagName("div")
.RequireAttribute(attribute => attribute.Name("style"))) .RequireAttributeDescriptor(attribute => attribute.Name("style")))
.Build(); .Build();
var inputDescriptor = TagHelperDescriptorBuilder.Create("InputTagHelper", "SomeAssembly") var inputDescriptor = TagHelperDescriptorBuilder.Create("InputTagHelper", "SomeAssembly")
.TagMatchingRule(rule => .TagMatchingRuleDescriptor(rule =>
rule rule
.RequireTagName("input") .RequireTagName("input")
.RequireAttribute(attribute => attribute.Name("class")) .RequireAttributeDescriptor(attribute => attribute.Name("class"))
.RequireAttribute(attribute => attribute.Name("style"))) .RequireAttributeDescriptor(attribute => attribute.Name("style")))
.Build(); .Build();
var inputWildcardPrefixDescriptor = TagHelperDescriptorBuilder.Create("InputWildCardAttribute", "SomeAssembly") var inputWildcardPrefixDescriptor = TagHelperDescriptorBuilder.Create("InputWildCardAttribute", "SomeAssembly")
.TagMatchingRule(rule => .TagMatchingRuleDescriptor(rule =>
rule rule
.RequireTagName("input") .RequireTagName("input")
.RequireAttribute(attribute => .RequireAttributeDescriptor(attribute =>
attribute attribute
.Name("nodashprefix") .Name("nodashprefix")
.NameComparisonMode(RequiredAttributeDescriptor.NameComparisonMode.PrefixMatch))) .NameComparisonMode(RequiredAttributeDescriptor.NameComparisonMode.PrefixMatch)))
.Build(); .Build();
var catchAllDescriptor = TagHelperDescriptorBuilder.Create("CatchAllTagHelper", "SomeAssembly") var catchAllDescriptor = TagHelperDescriptorBuilder.Create("CatchAllTagHelper", "SomeAssembly")
.TagMatchingRule(rule => .TagMatchingRuleDescriptor(rule =>
rule rule
.RequireTagName(TagHelperMatchingConventions.ElementCatchAllName) .RequireTagName(TagHelperMatchingConventions.ElementCatchAllName)
.RequireAttribute(attribute => attribute.Name("class"))) .RequireAttributeDescriptor(attribute => attribute.Name("class")))
.Build(); .Build();
var catchAllDescriptor2 = TagHelperDescriptorBuilder.Create("CatchAllTagHelper2", "SomeAssembly") var catchAllDescriptor2 = TagHelperDescriptorBuilder.Create("CatchAllTagHelper2", "SomeAssembly")
.TagMatchingRule(rule => .TagMatchingRuleDescriptor(rule =>
rule rule
.RequireTagName(TagHelperMatchingConventions.ElementCatchAllName) .RequireTagName(TagHelperMatchingConventions.ElementCatchAllName)
.RequireAttribute(attribute => attribute.Name("custom")) .RequireAttributeDescriptor(attribute => attribute.Name("custom"))
.RequireAttribute(attribute => attribute.Name("class"))) .RequireAttributeDescriptor(attribute => attribute.Name("class")))
.Build(); .Build();
var catchAllWildcardPrefixDescriptor = TagHelperDescriptorBuilder.Create("CatchAllWildCardAttribute", "SomeAssembly") var catchAllWildcardPrefixDescriptor = TagHelperDescriptorBuilder.Create("CatchAllWildCardAttribute", "SomeAssembly")
.TagMatchingRule(rule => .TagMatchingRuleDescriptor(rule =>
rule rule
.RequireTagName(TagHelperMatchingConventions.ElementCatchAllName) .RequireTagName(TagHelperMatchingConventions.ElementCatchAllName)
.RequireAttribute(attribute => .RequireAttributeDescriptor(attribute =>
attribute attribute
.Name("prefix-") .Name("prefix-")
.NameComparisonMode(RequiredAttributeDescriptor.NameComparisonMode.PrefixMatch))) .NameComparisonMode(RequiredAttributeDescriptor.NameComparisonMode.PrefixMatch)))
@ -283,7 +283,7 @@ namespace Microsoft.AspNetCore.Razor.Language
{ {
// Arrange // Arrange
var catchAllDescriptor = TagHelperDescriptorBuilder.Create("foo1", "SomeAssembly") var catchAllDescriptor = TagHelperDescriptorBuilder.Create("foo1", "SomeAssembly")
.TagMatchingRule(rule => rule.RequireTagName(TagHelperMatchingConventions.ElementCatchAllName)) .TagMatchingRuleDescriptor(rule => rule.RequireTagName(TagHelperMatchingConventions.ElementCatchAllName))
.Build(); .Build();
var descriptors = new[] { catchAllDescriptor }; var descriptors = new[] { catchAllDescriptor };
var tagHelperBinder = new TagHelperBinder("th", descriptors); var tagHelperBinder = new TagHelperBinder("th", descriptors);
@ -303,7 +303,7 @@ namespace Microsoft.AspNetCore.Razor.Language
{ {
// Arrange // Arrange
var catchAllDescriptor = TagHelperDescriptorBuilder.Create("foo1", "SomeAssembly") var catchAllDescriptor = TagHelperDescriptorBuilder.Create("foo1", "SomeAssembly")
.TagMatchingRule(rule => rule.RequireTagName(TagHelperMatchingConventions.ElementCatchAllName)) .TagMatchingRuleDescriptor(rule => rule.RequireTagName(TagHelperMatchingConventions.ElementCatchAllName))
.Build(); .Build();
var descriptors = new[] { catchAllDescriptor }; var descriptors = new[] { catchAllDescriptor };
var tagHelperBinder = new TagHelperBinder("th:", descriptors); var tagHelperBinder = new TagHelperBinder("th:", descriptors);
@ -330,7 +330,7 @@ namespace Microsoft.AspNetCore.Razor.Language
{ {
// Arrange // Arrange
var divDescriptor = TagHelperDescriptorBuilder.Create("foo1", "SomeAssembly") var divDescriptor = TagHelperDescriptorBuilder.Create("foo1", "SomeAssembly")
.TagMatchingRule(rule => rule.RequireTagName("div")) .TagMatchingRuleDescriptor(rule => rule.RequireTagName("div"))
.Build(); .Build();
var descriptors = new[] { divDescriptor }; var descriptors = new[] { divDescriptor };
var tagHelperBinder = new TagHelperBinder("th:", descriptors); var tagHelperBinder = new TagHelperBinder("th:", descriptors);
@ -353,7 +353,7 @@ namespace Microsoft.AspNetCore.Razor.Language
{ {
// Arrange // Arrange
var divDescriptor = TagHelperDescriptorBuilder.Create("foo1", "SomeAssembly") var divDescriptor = TagHelperDescriptorBuilder.Create("foo1", "SomeAssembly")
.TagMatchingRule(rule => rule.RequireTagName(tagName)) .TagMatchingRuleDescriptor(rule => rule.RequireTagName(tagName))
.Build(); .Build();
var descriptors = new[] { divDescriptor }; var descriptors = new[] { divDescriptor };
var tagHelperBinder = new TagHelperBinder("th:", descriptors); var tagHelperBinder = new TagHelperBinder("th:", descriptors);
@ -373,10 +373,10 @@ namespace Microsoft.AspNetCore.Razor.Language
{ {
// Arrange // Arrange
var divDescriptor = TagHelperDescriptorBuilder.Create("foo1", "SomeAssembly") var divDescriptor = TagHelperDescriptorBuilder.Create("foo1", "SomeAssembly")
.TagMatchingRule(rule => rule.RequireTagName("div")) .TagMatchingRuleDescriptor(rule => rule.RequireTagName("div"))
.Build(); .Build();
var spanDescriptor = TagHelperDescriptorBuilder.Create("foo2", "SomeAssembly") var spanDescriptor = TagHelperDescriptorBuilder.Create("foo2", "SomeAssembly")
.TagMatchingRule(rule => rule.RequireTagName("span")) .TagMatchingRuleDescriptor(rule => rule.RequireTagName("span"))
.Build(); .Build();
var descriptors = new TagHelperDescriptor[] { divDescriptor, spanDescriptor }; var descriptors = new TagHelperDescriptor[] { divDescriptor, spanDescriptor };
var tagHelperBinder = new TagHelperBinder(null, descriptors); var tagHelperBinder = new TagHelperBinder(null, descriptors);
@ -396,13 +396,13 @@ namespace Microsoft.AspNetCore.Razor.Language
{ {
// Arrange // Arrange
var divDescriptor = TagHelperDescriptorBuilder.Create("foo1", "SomeAssembly") var divDescriptor = TagHelperDescriptorBuilder.Create("foo1", "SomeAssembly")
.TagMatchingRule(rule => rule.RequireTagName("div")) .TagMatchingRuleDescriptor(rule => rule.RequireTagName("div"))
.Build(); .Build();
var spanDescriptor = TagHelperDescriptorBuilder.Create("foo2", "SomeAssembly") var spanDescriptor = TagHelperDescriptorBuilder.Create("foo2", "SomeAssembly")
.TagMatchingRule(rule => rule.RequireTagName("span")) .TagMatchingRuleDescriptor(rule => rule.RequireTagName("span"))
.Build(); .Build();
var catchAllDescriptor = TagHelperDescriptorBuilder.Create("foo3", "SomeAssembly") var catchAllDescriptor = TagHelperDescriptorBuilder.Create("foo3", "SomeAssembly")
.TagMatchingRule(rule => rule.RequireTagName(TagHelperMatchingConventions.ElementCatchAllName)) .TagMatchingRuleDescriptor(rule => rule.RequireTagName(TagHelperMatchingConventions.ElementCatchAllName))
.Build(); .Build();
var descriptors = new TagHelperDescriptor[] { divDescriptor, spanDescriptor, catchAllDescriptor }; var descriptors = new TagHelperDescriptor[] { divDescriptor, spanDescriptor, catchAllDescriptor };
var tagHelperBinder = new TagHelperBinder(null, descriptors); var tagHelperBinder = new TagHelperBinder(null, descriptors);
@ -434,7 +434,7 @@ namespace Microsoft.AspNetCore.Razor.Language
{ {
// Arrange // Arrange
var divDescriptor = TagHelperDescriptorBuilder.Create("foo1", "SomeAssembly") var divDescriptor = TagHelperDescriptorBuilder.Create("foo1", "SomeAssembly")
.TagMatchingRule(rule => rule.RequireTagName("div")) .TagMatchingRuleDescriptor(rule => rule.RequireTagName("div"))
.Build(); .Build();
var descriptors = new TagHelperDescriptor[] { divDescriptor, divDescriptor }; var descriptors = new TagHelperDescriptor[] { divDescriptor, divDescriptor };
var tagHelperBinder = new TagHelperBinder(null, descriptors); var tagHelperBinder = new TagHelperBinder(null, descriptors);
@ -455,12 +455,12 @@ namespace Microsoft.AspNetCore.Razor.Language
{ {
// Arrange // Arrange
var multiRuleDescriptor = TagHelperDescriptorBuilder.Create("foo", "SomeAssembly") var multiRuleDescriptor = TagHelperDescriptorBuilder.Create("foo", "SomeAssembly")
.TagMatchingRule(rule => rule .TagMatchingRuleDescriptor(rule => rule
.RequireTagName(TagHelperMatchingConventions.ElementCatchAllName) .RequireTagName(TagHelperMatchingConventions.ElementCatchAllName)
.RequireParentTag("body")) .RequireParentTag("body"))
.TagMatchingRule(rule => rule .TagMatchingRuleDescriptor(rule => rule
.RequireTagName("div")) .RequireTagName("div"))
.TagMatchingRule(rule => rule .TagMatchingRuleDescriptor(rule => rule
.RequireTagName("span")) .RequireTagName("span"))
.Build(); .Build();
var descriptors = new TagHelperDescriptor[] { multiRuleDescriptor }; var descriptors = new TagHelperDescriptor[] { multiRuleDescriptor };

View File

@ -0,0 +1,123 @@
// 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 System;
namespace Microsoft.AspNetCore.Razor.Language
{
public static class TestBoundAttributeDescriptorBuilderExtensions
{
public static BoundAttributeDescriptorBuilder Name(this BoundAttributeDescriptorBuilder builder, string name)
{
if (builder == null)
{
throw new ArgumentNullException(nameof(builder));
}
builder.Name = name;
return builder;
}
public static BoundAttributeDescriptorBuilder TypeName(this BoundAttributeDescriptorBuilder builder, string typeName)
{
if (builder == null)
{
throw new ArgumentNullException(nameof(builder));
}
builder.TypeName = typeName;
return builder;
}
public static BoundAttributeDescriptorBuilder PropertyName(this BoundAttributeDescriptorBuilder builder, string propertyName)
{
if (builder == null)
{
throw new ArgumentNullException(nameof(builder));
}
builder.SetPropertyName(propertyName);
return builder;
}
public static BoundAttributeDescriptorBuilder DisplayName(this BoundAttributeDescriptorBuilder builder, string displayName)
{
if (builder == null)
{
throw new ArgumentNullException(nameof(builder));
}
builder.DisplayName = displayName;
return builder;
}
public static BoundAttributeDescriptorBuilder AsEnum(this BoundAttributeDescriptorBuilder builder)
{
if (builder == null)
{
throw new ArgumentNullException(nameof(builder));
}
builder.IsEnum = true;
return builder;
}
public static BoundAttributeDescriptorBuilder AsDictionaryAttribute(
this BoundAttributeDescriptorBuilder builder,
string attributeNamePrefix,
string valueTypeName)
{
if (builder == null)
{
throw new ArgumentNullException(nameof(builder));
}
builder.IsDictionary = true;
builder.IndexerAttributeNamePrefix = attributeNamePrefix;
builder.IndexerValueTypeName = valueTypeName;
return builder;
}
public static BoundAttributeDescriptorBuilder Documentation(this BoundAttributeDescriptorBuilder builder, string documentation)
{
if (builder == null)
{
throw new ArgumentNullException(nameof(builder));
}
builder.Documentation = documentation;
return builder;
}
public static BoundAttributeDescriptorBuilder AddMetadata(this BoundAttributeDescriptorBuilder builder, string key, string value)
{
if (builder == null)
{
throw new ArgumentNullException(nameof(builder));
}
builder.Metadata[key] = value;
return builder;
}
public static BoundAttributeDescriptorBuilder AddDiagnostic(this BoundAttributeDescriptorBuilder builder, RazorDiagnostic diagnostic)
{
if (builder == null)
{
throw new ArgumentNullException(nameof(builder));
}
builder.Diagnostics.Add(diagnostic);
return builder;
}
}
}

View File

@ -1,20 +0,0 @@
// 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 System;
namespace Microsoft.AspNetCore.Razor.Language
{
public static class TestBoundAttributeDescriptorBuilderExtensions
{
public static BoundAttributeDescriptorBuilder PropertyName(this BoundAttributeDescriptorBuilder builder, string propertyName)
{
if (builder == null)
{
throw new ArgumentNullException(nameof(builder));
}
return builder.SetPropertyName(propertyName);
}
}
}

View File

@ -0,0 +1,69 @@
// 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 System;
namespace Microsoft.AspNetCore.Razor.Language
{
public static class TestRequiredAttributeDescriptorBuilderExtensions
{
public static RequiredAttributeDescriptorBuilder Name(this RequiredAttributeDescriptorBuilder builder, string name)
{
if (builder == null)
{
throw new ArgumentNullException(nameof(builder));
}
builder.Name = name;
return builder;
}
public static RequiredAttributeDescriptorBuilder NameComparisonMode(
this RequiredAttributeDescriptorBuilder builder,
RequiredAttributeDescriptor.NameComparisonMode nameComparison)
{
if (builder == null)
{
throw new ArgumentNullException(nameof(builder));
}
builder.NameComparisonMode = nameComparison;
return builder;
}
public static RequiredAttributeDescriptorBuilder Value(this RequiredAttributeDescriptorBuilder builder, string value)
{
if (builder == null)
{
throw new ArgumentNullException(nameof(builder));
}
builder.Value = value;
return builder;
}
public static RequiredAttributeDescriptorBuilder ValueComparisonMode(
this RequiredAttributeDescriptorBuilder builder,
RequiredAttributeDescriptor.ValueComparisonMode valueComparison)
{
if (builder == null)
{
throw new ArgumentNullException(nameof(builder));
}
builder.ValueComparisonMode = valueComparison;
return builder;
}
public static RequiredAttributeDescriptorBuilder AddDiagnostic(this RequiredAttributeDescriptorBuilder builder, RazorDiagnostic diagnostic)
{
builder.Diagnostics.Add(diagnostic);
return builder;
}
}
}

View File

@ -14,7 +14,109 @@ namespace Microsoft.AspNetCore.Razor.Language
throw new ArgumentNullException(nameof(builder)); throw new ArgumentNullException(nameof(builder));
} }
return builder.SetTypeName(typeName); builder.SetTypeName(typeName);
return builder;
}
public static TagHelperDescriptorBuilder DisplayName(this TagHelperDescriptorBuilder builder, string displayName)
{
if (builder == null)
{
throw new ArgumentNullException(nameof(builder));
}
builder.DisplayName = displayName;
return builder;
}
public static TagHelperDescriptorBuilder AllowChildTag(this TagHelperDescriptorBuilder builder, string allowedChild)
{
if (builder == null)
{
throw new ArgumentNullException(nameof(builder));
}
builder.AllowedChildTags.Add(allowedChild);
return builder;
}
public static TagHelperDescriptorBuilder TagOutputHint(this TagHelperDescriptorBuilder builder, string hint)
{
if (builder == null)
{
throw new ArgumentNullException(nameof(builder));
}
builder.TagOutputHint = hint;
return builder;
}
public static TagHelperDescriptorBuilder Documentation(this TagHelperDescriptorBuilder builder, string documentation)
{
if (builder == null)
{
throw new ArgumentNullException(nameof(builder));
}
builder.Documentation = documentation;
return builder;
}
public static TagHelperDescriptorBuilder AddMetadata(this TagHelperDescriptorBuilder builder, string key, string value)
{
if (builder == null)
{
throw new ArgumentNullException(nameof(builder));
}
builder.Metadata[key] = value;
return builder;
}
public static TagHelperDescriptorBuilder AddDiagnostic(this TagHelperDescriptorBuilder builder, RazorDiagnostic diagnostic)
{
if (builder == null)
{
throw new ArgumentNullException(nameof(builder));
}
builder.Diagnostics.Add(diagnostic);
return builder;
}
public static TagHelperDescriptorBuilder BoundAttributeDescriptor(
this TagHelperDescriptorBuilder builder,
Action<BoundAttributeDescriptorBuilder> configure)
{
if (builder == null)
{
throw new ArgumentNullException(nameof(builder));
}
builder.BindAttribute(configure);
return builder;
}
public static TagHelperDescriptorBuilder TagMatchingRuleDescriptor(
this TagHelperDescriptorBuilder builder,
Action<TagMatchingRuleDescriptorBuilder> configure)
{
if (builder == null)
{
throw new ArgumentNullException(nameof(builder));
}
builder.TagMatchingRule(configure);
return builder;
} }
} }
} }

View File

@ -0,0 +1,72 @@
// 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 System;
namespace Microsoft.AspNetCore.Razor.Language
{
public static class TestTagMatchingRuleDescriptorBuilderExtensions
{
public static TagMatchingRuleDescriptorBuilder RequireTagName(this TagMatchingRuleDescriptorBuilder builder, string tagName)
{
if (builder == null)
{
throw new ArgumentNullException(nameof(builder));
}
builder.TagName = tagName;
return builder;
}
public static TagMatchingRuleDescriptorBuilder RequireParentTag(this TagMatchingRuleDescriptorBuilder builder, string parentTag)
{
if (builder == null)
{
throw new ArgumentNullException(nameof(builder));
}
builder.ParentTag = parentTag;
return builder;
}
public static TagMatchingRuleDescriptorBuilder RequireTagStructure(this TagMatchingRuleDescriptorBuilder builder, TagStructure tagStructure)
{
if (builder == null)
{
throw new ArgumentNullException(nameof(builder));
}
builder.TagStructure = tagStructure;
return builder;
}
public static TagMatchingRuleDescriptorBuilder AddDiagnostic(this TagMatchingRuleDescriptorBuilder builder, RazorDiagnostic diagnostic)
{
if (builder == null)
{
throw new ArgumentNullException(nameof(builder));
}
builder.Diagnostics.Add(diagnostic);
return builder;
}
public static TagMatchingRuleDescriptorBuilder RequireAttributeDescriptor(
this TagMatchingRuleDescriptorBuilder builder,
Action<RequiredAttributeDescriptorBuilder> configure)
{
if (builder == null)
{
throw new ArgumentNullException(nameof(builder));
}
builder.Attribute(configure);
return builder;
}
}
}

View File

@ -324,13 +324,13 @@ namespace Microsoft.CodeAnalysis.Razor.Workspaces
typeof(EnumTagHelper), typeof(EnumTagHelper),
TagHelperDescriptorBuilder.Create(typeof(EnumTagHelper).FullName, AssemblyName) TagHelperDescriptorBuilder.Create(typeof(EnumTagHelper).FullName, AssemblyName)
.TypeName(typeof(EnumTagHelper).FullName) .TypeName(typeof(EnumTagHelper).FullName)
.TagMatchingRule(ruleBuilder => ruleBuilder.RequireTagName("enum")) .TagMatchingRuleDescriptor(ruleBuilder => ruleBuilder.RequireTagName("enum"))
.BindAttribute(builder => .BoundAttributeDescriptor(builder =>
builder builder
.Name("non-enum-property") .Name("non-enum-property")
.PropertyName(nameof(EnumTagHelper.NonEnumProperty)) .PropertyName(nameof(EnumTagHelper.NonEnumProperty))
.TypeName(typeof(int).FullName)) .TypeName(typeof(int).FullName))
.BindAttribute(builder => .BoundAttributeDescriptor(builder =>
builder builder
.Name("enum-property") .Name("enum-property")
.PropertyName(nameof(EnumTagHelper.EnumProperty)) .PropertyName(nameof(EnumTagHelper.EnumProperty))
@ -342,14 +342,14 @@ namespace Microsoft.CodeAnalysis.Razor.Workspaces
typeof(MultiEnumTagHelper), typeof(MultiEnumTagHelper),
TagHelperDescriptorBuilder.Create(typeof(MultiEnumTagHelper).FullName, AssemblyName) TagHelperDescriptorBuilder.Create(typeof(MultiEnumTagHelper).FullName, AssemblyName)
.TypeName(typeof(MultiEnumTagHelper).FullName) .TypeName(typeof(MultiEnumTagHelper).FullName)
.TagMatchingRule(ruleBuilder => ruleBuilder.RequireTagName("p")) .TagMatchingRuleDescriptor(ruleBuilder => ruleBuilder.RequireTagName("p"))
.TagMatchingRule(ruleBuilder => ruleBuilder.RequireTagName("input")) .TagMatchingRuleDescriptor(ruleBuilder => ruleBuilder.RequireTagName("input"))
.BindAttribute(builder => .BoundAttributeDescriptor(builder =>
builder builder
.Name("non-enum-property") .Name("non-enum-property")
.PropertyName(nameof(MultiEnumTagHelper.NonEnumProperty)) .PropertyName(nameof(MultiEnumTagHelper.NonEnumProperty))
.TypeName(typeof(int).FullName)) .TypeName(typeof(int).FullName))
.BindAttribute(builder => .BoundAttributeDescriptor(builder =>
builder builder
.Name("enum-property") .Name("enum-property")
.PropertyName(nameof(MultiEnumTagHelper.EnumProperty)) .PropertyName(nameof(MultiEnumTagHelper.EnumProperty))
@ -361,19 +361,19 @@ namespace Microsoft.CodeAnalysis.Razor.Workspaces
typeof(NestedEnumTagHelper), typeof(NestedEnumTagHelper),
TagHelperDescriptorBuilder.Create(typeof(NestedEnumTagHelper).FullName, AssemblyName) TagHelperDescriptorBuilder.Create(typeof(NestedEnumTagHelper).FullName, AssemblyName)
.TypeName(typeof(NestedEnumTagHelper).FullName) .TypeName(typeof(NestedEnumTagHelper).FullName)
.TagMatchingRule(ruleBuilder => ruleBuilder.RequireTagName("nested-enum")) .TagMatchingRuleDescriptor(ruleBuilder => ruleBuilder.RequireTagName("nested-enum"))
.BindAttribute(builder => .BoundAttributeDescriptor(builder =>
builder builder
.Name("non-enum-property") .Name("non-enum-property")
.PropertyName(nameof(NestedEnumTagHelper.NonEnumProperty)) .PropertyName(nameof(NestedEnumTagHelper.NonEnumProperty))
.TypeName(typeof(int).FullName)) .TypeName(typeof(int).FullName))
.BindAttribute(builder => .BoundAttributeDescriptor(builder =>
builder builder
.Name("enum-property") .Name("enum-property")
.PropertyName(nameof(NestedEnumTagHelper.EnumProperty)) .PropertyName(nameof(NestedEnumTagHelper.EnumProperty))
.TypeName(typeof(CustomEnum).FullName) .TypeName(typeof(CustomEnum).FullName)
.AsEnum()) .AsEnum())
.BindAttribute(builder => .BoundAttributeDescriptor(builder =>
builder builder
.Name("nested-enum-property") .Name("nested-enum-property")
.PropertyName(nameof(NestedEnumTagHelper.NestedEnumProperty)) .PropertyName(nameof(NestedEnumTagHelper.NestedEnumProperty))
@ -413,23 +413,23 @@ namespace Microsoft.CodeAnalysis.Razor.Workspaces
typeof(RequiredParentTagHelper), typeof(RequiredParentTagHelper),
TagHelperDescriptorBuilder.Create(typeof(RequiredParentTagHelper).FullName, AssemblyName) TagHelperDescriptorBuilder.Create(typeof(RequiredParentTagHelper).FullName, AssemblyName)
.TypeName(typeof(RequiredParentTagHelper).FullName) .TypeName(typeof(RequiredParentTagHelper).FullName)
.TagMatchingRule(builder => builder.RequireTagName("input").RequireParentTag("div")) .TagMatchingRuleDescriptor(builder => builder.RequireTagName("input").RequireParentTag("div"))
.Build() .Build()
}, },
{ {
typeof(MultiSpecifiedRequiredParentTagHelper), typeof(MultiSpecifiedRequiredParentTagHelper),
TagHelperDescriptorBuilder.Create(typeof(MultiSpecifiedRequiredParentTagHelper).FullName, AssemblyName) TagHelperDescriptorBuilder.Create(typeof(MultiSpecifiedRequiredParentTagHelper).FullName, AssemblyName)
.TypeName(typeof(MultiSpecifiedRequiredParentTagHelper).FullName) .TypeName(typeof(MultiSpecifiedRequiredParentTagHelper).FullName)
.TagMatchingRule(builder => builder.RequireTagName("p").RequireParentTag("div")) .TagMatchingRuleDescriptor(builder => builder.RequireTagName("p").RequireParentTag("div"))
.TagMatchingRule(builder => builder.RequireTagName("input").RequireParentTag("section")) .TagMatchingRuleDescriptor(builder => builder.RequireTagName("input").RequireParentTag("section"))
.Build() .Build()
}, },
{ {
typeof(MultiWithUnspecifiedRequiredParentTagHelper), typeof(MultiWithUnspecifiedRequiredParentTagHelper),
TagHelperDescriptorBuilder.Create(typeof(MultiWithUnspecifiedRequiredParentTagHelper).FullName, AssemblyName) TagHelperDescriptorBuilder.Create(typeof(MultiWithUnspecifiedRequiredParentTagHelper).FullName, AssemblyName)
.TypeName(typeof(MultiWithUnspecifiedRequiredParentTagHelper).FullName) .TypeName(typeof(MultiWithUnspecifiedRequiredParentTagHelper).FullName)
.TagMatchingRule(builder => builder.RequireTagName("p")) .TagMatchingRuleDescriptor(builder => builder.RequireTagName("p"))
.TagMatchingRule(builder => builder.RequireTagName("input").RequireParentTag("div")) .TagMatchingRuleDescriptor(builder => builder.RequireTagName("input").RequireParentTag("div"))
.Build() .Build()
}, },
}; };
@ -464,7 +464,7 @@ namespace Microsoft.CodeAnalysis.Razor.Workspaces
typeof(RestrictChildrenTagHelper), typeof(RestrictChildrenTagHelper),
TagHelperDescriptorBuilder.Create(typeof(RestrictChildrenTagHelper).FullName, AssemblyName) TagHelperDescriptorBuilder.Create(typeof(RestrictChildrenTagHelper).FullName, AssemblyName)
.TypeName(typeof(RestrictChildrenTagHelper).FullName) .TypeName(typeof(RestrictChildrenTagHelper).FullName)
.TagMatchingRule(builder => builder.RequireTagName("restrict-children")) .TagMatchingRuleDescriptor(builder => builder.RequireTagName("restrict-children"))
.AllowChildTag("p") .AllowChildTag("p")
.Build() .Build()
}, },
@ -472,7 +472,7 @@ namespace Microsoft.CodeAnalysis.Razor.Workspaces
typeof(DoubleRestrictChildrenTagHelper), typeof(DoubleRestrictChildrenTagHelper),
TagHelperDescriptorBuilder.Create(typeof(DoubleRestrictChildrenTagHelper).FullName, AssemblyName) TagHelperDescriptorBuilder.Create(typeof(DoubleRestrictChildrenTagHelper).FullName, AssemblyName)
.TypeName(typeof(DoubleRestrictChildrenTagHelper).FullName) .TypeName(typeof(DoubleRestrictChildrenTagHelper).FullName)
.TagMatchingRule(builder => builder.RequireTagName("double-restrict-children")) .TagMatchingRuleDescriptor(builder => builder.RequireTagName("double-restrict-children"))
.AllowChildTag("p") .AllowChildTag("p")
.AllowChildTag("strong") .AllowChildTag("strong")
.Build() .Build()
@ -481,8 +481,8 @@ namespace Microsoft.CodeAnalysis.Razor.Workspaces
typeof(MultiTargetRestrictChildrenTagHelper), typeof(MultiTargetRestrictChildrenTagHelper),
TagHelperDescriptorBuilder.Create(typeof(MultiTargetRestrictChildrenTagHelper).FullName, AssemblyName) TagHelperDescriptorBuilder.Create(typeof(MultiTargetRestrictChildrenTagHelper).FullName, AssemblyName)
.TypeName(typeof(MultiTargetRestrictChildrenTagHelper).FullName) .TypeName(typeof(MultiTargetRestrictChildrenTagHelper).FullName)
.TagMatchingRule(builder => builder.RequireTagName("p")) .TagMatchingRuleDescriptor(builder => builder.RequireTagName("p"))
.TagMatchingRule(builder => builder.RequireTagName("div")) .TagMatchingRuleDescriptor(builder => builder.RequireTagName("div"))
.AllowChildTag("p") .AllowChildTag("p")
.AllowChildTag("strong") .AllowChildTag("strong")
.Build() .Build()
@ -520,7 +520,7 @@ namespace Microsoft.CodeAnalysis.Razor.Workspaces
typeof(TagStructureTagHelper), typeof(TagStructureTagHelper),
TagHelperDescriptorBuilder.Create(typeof(TagStructureTagHelper).FullName, AssemblyName) TagHelperDescriptorBuilder.Create(typeof(TagStructureTagHelper).FullName, AssemblyName)
.TypeName(typeof(TagStructureTagHelper).FullName) .TypeName(typeof(TagStructureTagHelper).FullName)
.TagMatchingRule(builder => builder .TagMatchingRuleDescriptor(builder => builder
.RequireTagName("input") .RequireTagName("input")
.RequireTagStructure(TagStructure.WithoutEndTag)) .RequireTagStructure(TagStructure.WithoutEndTag))
.Build() .Build()
@ -529,10 +529,10 @@ namespace Microsoft.CodeAnalysis.Razor.Workspaces
typeof(MultiSpecifiedTagStructureTagHelper), typeof(MultiSpecifiedTagStructureTagHelper),
TagHelperDescriptorBuilder.Create(typeof(MultiSpecifiedTagStructureTagHelper).FullName, AssemblyName) TagHelperDescriptorBuilder.Create(typeof(MultiSpecifiedTagStructureTagHelper).FullName, AssemblyName)
.TypeName(typeof(MultiSpecifiedTagStructureTagHelper).FullName) .TypeName(typeof(MultiSpecifiedTagStructureTagHelper).FullName)
.TagMatchingRule(builder => builder .TagMatchingRuleDescriptor(builder => builder
.RequireTagName("p") .RequireTagName("p")
.RequireTagStructure(TagStructure.NormalOrSelfClosing)) .RequireTagStructure(TagStructure.NormalOrSelfClosing))
.TagMatchingRule(builder => builder .TagMatchingRuleDescriptor(builder => builder
.RequireTagName("input") .RequireTagName("input")
.RequireTagStructure(TagStructure.WithoutEndTag)) .RequireTagStructure(TagStructure.WithoutEndTag))
.Build() .Build()
@ -541,9 +541,9 @@ namespace Microsoft.CodeAnalysis.Razor.Workspaces
typeof(MultiWithUnspecifiedTagStructureTagHelper), typeof(MultiWithUnspecifiedTagStructureTagHelper),
TagHelperDescriptorBuilder.Create(typeof(MultiWithUnspecifiedTagStructureTagHelper).FullName, AssemblyName) TagHelperDescriptorBuilder.Create(typeof(MultiWithUnspecifiedTagStructureTagHelper).FullName, AssemblyName)
.TypeName(typeof(MultiWithUnspecifiedTagStructureTagHelper).FullName) .TypeName(typeof(MultiWithUnspecifiedTagStructureTagHelper).FullName)
.TagMatchingRule(builder => builder .TagMatchingRuleDescriptor(builder => builder
.RequireTagName("p")) .RequireTagName("p"))
.TagMatchingRule(builder => builder .TagMatchingRuleDescriptor(builder => builder
.RequireTagName("input") .RequireTagName("input")
.RequireTagStructure(TagStructure.WithoutEndTag)) .RequireTagStructure(TagStructure.WithoutEndTag))
.Build() .Build()
@ -761,7 +761,7 @@ namespace Microsoft.CodeAnalysis.Razor.Workspaces
AssemblyName, AssemblyName,
ruleBuilders: new Action<TagMatchingRuleDescriptorBuilder>[] ruleBuilders: new Action<TagMatchingRuleDescriptorBuilder>[]
{ {
builder => builder.RequireAttribute(attribute => attribute.Name("class")), builder => builder.RequireAttributeDescriptor(attribute => attribute.Name("class")),
}) })
}, },
{ {
@ -775,8 +775,8 @@ namespace Microsoft.CodeAnalysis.Razor.Workspaces
builder => builder =>
{ {
builder builder
.RequireAttribute(attribute => attribute.Name("class")) .RequireAttributeDescriptor(attribute => attribute.Name("class"))
.RequireAttribute(attribute => attribute.Name("style")); .RequireAttributeDescriptor(attribute => attribute.Name("style"));
}, },
}) })
}, },
@ -788,12 +788,12 @@ namespace Microsoft.CodeAnalysis.Razor.Workspaces
AssemblyName, AssemblyName,
ruleBuilders: new Action<TagMatchingRuleDescriptorBuilder>[] ruleBuilders: new Action<TagMatchingRuleDescriptorBuilder>[]
{ {
builder => builder.RequireAttribute(attribute => attribute.Name("custom")), builder => builder.RequireAttributeDescriptor(attribute => attribute.Name("custom")),
builder => builder =>
{ {
builder builder
.RequireAttribute(attribute => attribute.Name("class")) .RequireAttributeDescriptor(attribute => attribute.Name("class"))
.RequireAttribute(attribute => attribute.Name("style")); .RequireAttributeDescriptor(attribute => attribute.Name("style"));
}, },
}) })
}, },
@ -805,7 +805,7 @@ namespace Microsoft.CodeAnalysis.Razor.Workspaces
AssemblyName, AssemblyName,
ruleBuilders: new Action<TagMatchingRuleDescriptorBuilder>[] ruleBuilders: new Action<TagMatchingRuleDescriptorBuilder>[]
{ {
builder => builder.RequireAttribute(attribute => attribute.Name("style")), builder => builder.RequireAttributeDescriptor(attribute => attribute.Name("style")),
}) })
}, },
{ {
@ -816,7 +816,7 @@ namespace Microsoft.CodeAnalysis.Razor.Workspaces
AssemblyName, AssemblyName,
ruleBuilders: new Action<TagMatchingRuleDescriptorBuilder>[] ruleBuilders: new Action<TagMatchingRuleDescriptorBuilder>[]
{ {
builder => builder.RequireAttribute(attribute => attribute.Name("class")), builder => builder.RequireAttributeDescriptor(attribute => attribute.Name("class")),
}) })
}, },
{ {
@ -827,7 +827,7 @@ namespace Microsoft.CodeAnalysis.Razor.Workspaces
AssemblyName, AssemblyName,
ruleBuilders: new Action<TagMatchingRuleDescriptorBuilder>[] ruleBuilders: new Action<TagMatchingRuleDescriptorBuilder>[]
{ {
builder => builder.RequireAttribute(attribute => attribute.Name("class")), builder => builder.RequireAttributeDescriptor(attribute => attribute.Name("class")),
}) })
}, },
{ {
@ -840,10 +840,10 @@ namespace Microsoft.CodeAnalysis.Razor.Workspaces
{ {
builder => builder builder => builder
.RequireTagName("div") .RequireTagName("div")
.RequireAttribute(attribute => attribute.Name("class")), .RequireAttributeDescriptor(attribute => attribute.Name("class")),
builder => builder builder => builder
.RequireTagName("input") .RequireTagName("input")
.RequireAttribute(attribute => attribute.Name("class")), .RequireAttributeDescriptor(attribute => attribute.Name("class")),
}) })
}, },
{ {
@ -854,8 +854,8 @@ namespace Microsoft.CodeAnalysis.Razor.Workspaces
AssemblyName, AssemblyName,
ruleBuilders: new Action<TagMatchingRuleDescriptorBuilder>[] ruleBuilders: new Action<TagMatchingRuleDescriptorBuilder>[]
{ {
builder => builder.RequireAttribute(attribute => attribute.Name("style")), builder => builder.RequireAttributeDescriptor(attribute => attribute.Name("style")),
builder => builder.RequireAttribute(attribute => attribute.Name("class")), builder => builder.RequireAttributeDescriptor(attribute => attribute.Name("class")),
}) })
}, },
{ {
@ -867,8 +867,8 @@ namespace Microsoft.CodeAnalysis.Razor.Workspaces
ruleBuilders: new Action<TagMatchingRuleDescriptorBuilder>[] ruleBuilders: new Action<TagMatchingRuleDescriptorBuilder>[]
{ {
builder => builder builder => builder
.RequireAttribute(attribute => attribute.Name("class")) .RequireAttributeDescriptor(attribute => attribute.Name("class"))
.RequireAttribute(attribute => attribute.Name("style")), .RequireAttributeDescriptor(attribute => attribute.Name("style")),
}) })
}, },
{ {
@ -881,12 +881,12 @@ namespace Microsoft.CodeAnalysis.Razor.Workspaces
{ {
builder => builder builder => builder
.RequireTagName("div") .RequireTagName("div")
.RequireAttribute(attribute => attribute.Name("class")) .RequireAttributeDescriptor(attribute => attribute.Name("class"))
.RequireAttribute(attribute => attribute.Name("style")), .RequireAttributeDescriptor(attribute => attribute.Name("style")),
builder => builder builder => builder
.RequireTagName("input") .RequireTagName("input")
.RequireAttribute(attribute => attribute.Name("class")) .RequireAttributeDescriptor(attribute => attribute.Name("class"))
.RequireAttribute(attribute => attribute.Name("style")), .RequireAttributeDescriptor(attribute => attribute.Name("style")),
}) })
}, },
{ {
@ -898,7 +898,7 @@ namespace Microsoft.CodeAnalysis.Razor.Workspaces
ruleBuilders: new Action<TagMatchingRuleDescriptorBuilder>[] ruleBuilders: new Action<TagMatchingRuleDescriptorBuilder>[]
{ {
builder => builder builder => builder
.RequireAttribute(attribute => attribute .RequireAttributeDescriptor(attribute => attribute
.Name("class") .Name("class")
.NameComparisonMode(RequiredAttributeDescriptor.NameComparisonMode.PrefixMatch)), .NameComparisonMode(RequiredAttributeDescriptor.NameComparisonMode.PrefixMatch)),
}) })
@ -912,10 +912,10 @@ namespace Microsoft.CodeAnalysis.Razor.Workspaces
ruleBuilders: new Action<TagMatchingRuleDescriptorBuilder>[] ruleBuilders: new Action<TagMatchingRuleDescriptorBuilder>[]
{ {
builder => builder builder => builder
.RequireAttribute(attribute => attribute .RequireAttributeDescriptor(attribute => attribute
.Name("class") .Name("class")
.NameComparisonMode(RequiredAttributeDescriptor.NameComparisonMode.PrefixMatch)) .NameComparisonMode(RequiredAttributeDescriptor.NameComparisonMode.PrefixMatch))
.RequireAttribute(attribute => attribute .RequireAttributeDescriptor(attribute => attribute
.Name("style") .Name("style")
.NameComparisonMode(RequiredAttributeDescriptor.NameComparisonMode.PrefixMatch)), .NameComparisonMode(RequiredAttributeDescriptor.NameComparisonMode.PrefixMatch)),
}) })
@ -1786,7 +1786,7 @@ namespace Microsoft.CodeAnalysis.Razor.Workspaces
.Name("dictionary-property") .Name("dictionary-property")
.PropertyName(nameof(DefaultValidHtmlAttributePrefix.DictionaryProperty)) .PropertyName(nameof(DefaultValidHtmlAttributePrefix.DictionaryProperty))
.TypeName($"{dictionaryNamespace}<System.String, System.String>") .TypeName($"{dictionaryNamespace}<System.String, System.String>")
.AsDictionary("dictionary-property-", typeof(string).FullName); .AsDictionaryAttribute("dictionary-property-", typeof(string).FullName);
}), }),
}, },
Enumerable.Empty<RazorDiagnostic>() Enumerable.Empty<RazorDiagnostic>()
@ -1801,7 +1801,7 @@ namespace Microsoft.CodeAnalysis.Razor.Workspaces
.Name("valid-name") .Name("valid-name")
.PropertyName(nameof(SingleValidHtmlAttributePrefix.DictionaryProperty)) .PropertyName(nameof(SingleValidHtmlAttributePrefix.DictionaryProperty))
.TypeName($"{dictionaryNamespace}<System.String, System.String>") .TypeName($"{dictionaryNamespace}<System.String, System.String>")
.AsDictionary("valid-name-", typeof(string).FullName); .AsDictionaryAttribute("valid-name-", typeof(string).FullName);
}), }),
}, },
Enumerable.Empty<RazorDiagnostic>() Enumerable.Empty<RazorDiagnostic>()
@ -1816,7 +1816,7 @@ namespace Microsoft.CodeAnalysis.Razor.Workspaces
.Name("valid-name1") .Name("valid-name1")
.PropertyName(nameof(MultipleValidHtmlAttributePrefix.DictionaryProperty)) .PropertyName(nameof(MultipleValidHtmlAttributePrefix.DictionaryProperty))
.TypeName($"{typeof(Dictionary<,>).Namespace}.Dictionary<System.String, System.Object>") .TypeName($"{typeof(Dictionary<,>).Namespace}.Dictionary<System.String, System.Object>")
.AsDictionary("valid-prefix1-", typeof(object).FullName); .AsDictionaryAttribute("valid-prefix1-", typeof(object).FullName);
}), }),
CreateAttributeFor(typeof(MultipleValidHtmlAttributePrefix), attribute => CreateAttributeFor(typeof(MultipleValidHtmlAttributePrefix), attribute =>
{ {
@ -1824,7 +1824,7 @@ namespace Microsoft.CodeAnalysis.Razor.Workspaces
.Name("valid-name2") .Name("valid-name2")
.PropertyName(nameof(MultipleValidHtmlAttributePrefix.DictionarySubclassProperty)) .PropertyName(nameof(MultipleValidHtmlAttributePrefix.DictionarySubclassProperty))
.TypeName(typeof(DictionarySubclass).FullName) .TypeName(typeof(DictionarySubclass).FullName)
.AsDictionary("valid-prefix2-", typeof(string).FullName); .AsDictionaryAttribute("valid-prefix2-", typeof(string).FullName);
}), }),
CreateAttributeFor(typeof(MultipleValidHtmlAttributePrefix), attribute => CreateAttributeFor(typeof(MultipleValidHtmlAttributePrefix), attribute =>
{ {
@ -1832,7 +1832,7 @@ namespace Microsoft.CodeAnalysis.Razor.Workspaces
.Name("valid-name3") .Name("valid-name3")
.PropertyName(nameof(MultipleValidHtmlAttributePrefix.DictionaryWithoutParameterlessConstructorProperty)) .PropertyName(nameof(MultipleValidHtmlAttributePrefix.DictionaryWithoutParameterlessConstructorProperty))
.TypeName(typeof(DictionaryWithoutParameterlessConstructor).FullName) .TypeName(typeof(DictionaryWithoutParameterlessConstructor).FullName)
.AsDictionary("valid-prefix3-", typeof(string).FullName); .AsDictionaryAttribute("valid-prefix3-", typeof(string).FullName);
}), }),
CreateAttributeFor(typeof(MultipleValidHtmlAttributePrefix), attribute => CreateAttributeFor(typeof(MultipleValidHtmlAttributePrefix), attribute =>
{ {
@ -1840,7 +1840,7 @@ namespace Microsoft.CodeAnalysis.Razor.Workspaces
.Name("valid-name4") .Name("valid-name4")
.PropertyName(nameof(MultipleValidHtmlAttributePrefix.GenericDictionarySubclassProperty)) .PropertyName(nameof(MultipleValidHtmlAttributePrefix.GenericDictionarySubclassProperty))
.TypeName(typeof(GenericDictionarySubclass<object>).Namespace + ".GenericDictionarySubclass<System.Object>") .TypeName(typeof(GenericDictionarySubclass<object>).Namespace + ".GenericDictionarySubclass<System.Object>")
.AsDictionary("valid-prefix4-", typeof(object).FullName); .AsDictionaryAttribute("valid-prefix4-", typeof(object).FullName);
}), }),
CreateAttributeFor(typeof(MultipleValidHtmlAttributePrefix), attribute => CreateAttributeFor(typeof(MultipleValidHtmlAttributePrefix), attribute =>
{ {
@ -1848,7 +1848,7 @@ namespace Microsoft.CodeAnalysis.Razor.Workspaces
.Name("valid-name5") .Name("valid-name5")
.PropertyName(nameof(MultipleValidHtmlAttributePrefix.SortedDictionaryProperty)) .PropertyName(nameof(MultipleValidHtmlAttributePrefix.SortedDictionaryProperty))
.TypeName(typeof(SortedDictionary<string, int>).Namespace + ".SortedDictionary<System.String, System.Int32>") .TypeName(typeof(SortedDictionary<string, int>).Namespace + ".SortedDictionary<System.String, System.Int32>")
.AsDictionary("valid-prefix5-", typeof(int).FullName); .AsDictionaryAttribute("valid-prefix5-", typeof(int).FullName);
}), }),
CreateAttributeFor(typeof(MultipleValidHtmlAttributePrefix), attribute => CreateAttributeFor(typeof(MultipleValidHtmlAttributePrefix), attribute =>
{ {
@ -1862,14 +1862,14 @@ namespace Microsoft.CodeAnalysis.Razor.Workspaces
attribute attribute
.PropertyName(nameof(MultipleValidHtmlAttributePrefix.GetOnlyDictionaryProperty)) .PropertyName(nameof(MultipleValidHtmlAttributePrefix.GetOnlyDictionaryProperty))
.TypeName($"{dictionaryNamespace}<System.String, System.Int32>") .TypeName($"{dictionaryNamespace}<System.String, System.Int32>")
.AsDictionary("get-only-dictionary-property-", typeof(int).FullName); .AsDictionaryAttribute("get-only-dictionary-property-", typeof(int).FullName);
}), }),
CreateAttributeFor(typeof(MultipleValidHtmlAttributePrefix), attribute => CreateAttributeFor(typeof(MultipleValidHtmlAttributePrefix), attribute =>
{ {
attribute attribute
.PropertyName(nameof(MultipleValidHtmlAttributePrefix.GetOnlyDictionaryPropertyWithAttributePrefix)) .PropertyName(nameof(MultipleValidHtmlAttributePrefix.GetOnlyDictionaryPropertyWithAttributePrefix))
.TypeName($"{dictionaryNamespace}<System.String, System.String>") .TypeName($"{dictionaryNamespace}<System.String, System.String>")
.AsDictionary("valid-prefix6", typeof(string).FullName); .AsDictionaryAttribute("valid-prefix6", typeof(string).FullName);
}), }),
}, },
Enumerable.Empty<RazorDiagnostic>() Enumerable.Empty<RazorDiagnostic>()
@ -1913,7 +1913,7 @@ namespace Microsoft.CodeAnalysis.Razor.Workspaces
.Name("valid-name2") .Name("valid-name2")
.PropertyName(nameof(MultipleInvalidHtmlAttributePrefix.DictionaryOfIntProperty)) .PropertyName(nameof(MultipleInvalidHtmlAttributePrefix.DictionaryOfIntProperty))
.TypeName($"{typeof(Dictionary<,>).Namespace}.Dictionary<System.Int32, System.String>") .TypeName($"{typeof(Dictionary<,>).Namespace}.Dictionary<System.Int32, System.String>")
.AsDictionary("valid-prefix2-", typeof(string).FullName) .AsDictionaryAttribute("valid-prefix2-", typeof(string).FullName)
.AddDiagnostic( .AddDiagnostic(
RazorDiagnosticFactory.CreateTagHelper_InvalidAttributePrefixNotNull( RazorDiagnosticFactory.CreateTagHelper_InvalidAttributePrefixNotNull(
typeof(MultipleInvalidHtmlAttributePrefix).FullName, typeof(MultipleInvalidHtmlAttributePrefix).FullName,
@ -1947,7 +1947,7 @@ namespace Microsoft.CodeAnalysis.Razor.Workspaces
.Name("valid-name5") .Name("valid-name5")
.PropertyName(nameof(MultipleInvalidHtmlAttributePrefix.DictionaryOfIntSubclassProperty)) .PropertyName(nameof(MultipleInvalidHtmlAttributePrefix.DictionaryOfIntSubclassProperty))
.TypeName(typeof(DictionaryOfIntSubclass).FullName) .TypeName(typeof(DictionaryOfIntSubclass).FullName)
.AsDictionary("valid-prefix5-", typeof(string).FullName) .AsDictionaryAttribute("valid-prefix5-", typeof(string).FullName)
.AddDiagnostic( .AddDiagnostic(
RazorDiagnosticFactory.CreateTagHelper_InvalidAttributePrefixNotNull( RazorDiagnosticFactory.CreateTagHelper_InvalidAttributePrefixNotNull(
typeof(MultipleInvalidHtmlAttributePrefix).FullName, typeof(MultipleInvalidHtmlAttributePrefix).FullName,
@ -1958,7 +1958,7 @@ namespace Microsoft.CodeAnalysis.Razor.Workspaces
attribute attribute
.PropertyName(nameof(MultipleInvalidHtmlAttributePrefix.GetOnlyDictionaryAttributePrefix)) .PropertyName(nameof(MultipleInvalidHtmlAttributePrefix.GetOnlyDictionaryAttributePrefix))
.TypeName($"{dictionaryNamespace}<System.Int32, System.String>") .TypeName($"{dictionaryNamespace}<System.Int32, System.String>")
.AsDictionary("valid-prefix6", typeof(string).FullName) .AsDictionaryAttribute("valid-prefix6", typeof(string).FullName)
.AddDiagnostic( .AddDiagnostic(
RazorDiagnosticFactory.CreateTagHelper_InvalidAttributePrefixNotNull( RazorDiagnosticFactory.CreateTagHelper_InvalidAttributePrefixNotNull(
typeof(MultipleInvalidHtmlAttributePrefix).FullName, typeof(MultipleInvalidHtmlAttributePrefix).FullName,
@ -1969,7 +1969,7 @@ namespace Microsoft.CodeAnalysis.Razor.Workspaces
attribute attribute
.PropertyName(nameof(MultipleInvalidHtmlAttributePrefix.GetOnlyDictionaryPropertyWithAttributeName)) .PropertyName(nameof(MultipleInvalidHtmlAttributePrefix.GetOnlyDictionaryPropertyWithAttributeName))
.TypeName($"{dictionaryNamespace}<System.String, System.Object>") .TypeName($"{dictionaryNamespace}<System.String, System.Object>")
.AsDictionary("invalid-name7-", typeof(object).FullName) .AsDictionaryAttribute("invalid-name7-", typeof(object).FullName)
.AddDiagnostic( .AddDiagnostic(
RazorDiagnosticFactory.CreateTagHelper_InvalidAttributePrefixNull( RazorDiagnosticFactory.CreateTagHelper_InvalidAttributePrefixNull(
typeof(MultipleInvalidHtmlAttributePrefix).FullName, typeof(MultipleInvalidHtmlAttributePrefix).FullName,
@ -2035,8 +2035,8 @@ namespace Microsoft.CodeAnalysis.Razor.Workspaces
typeof(MultipleDescriptorTagHelperWithOutputElementHint), typeof(MultipleDescriptorTagHelperWithOutputElementHint),
TagHelperDescriptorBuilder.Create(typeof(MultipleDescriptorTagHelperWithOutputElementHint).FullName, AssemblyName) TagHelperDescriptorBuilder.Create(typeof(MultipleDescriptorTagHelperWithOutputElementHint).FullName, AssemblyName)
.TypeName(typeof(MultipleDescriptorTagHelperWithOutputElementHint).FullName) .TypeName(typeof(MultipleDescriptorTagHelperWithOutputElementHint).FullName)
.TagMatchingRule(builder => builder.RequireTagName("a")) .TagMatchingRuleDescriptor(builder => builder.RequireTagName("a"))
.TagMatchingRule(builder => builder.RequireTagName("p")) .TagMatchingRuleDescriptor(builder => builder.RequireTagName("p"))
.TagOutputHint("div") .TagOutputHint("div")
.Build() .Build()
}, },
@ -2044,14 +2044,14 @@ namespace Microsoft.CodeAnalysis.Razor.Workspaces
typeof(InheritedOutputElementHintTagHelper), typeof(InheritedOutputElementHintTagHelper),
TagHelperDescriptorBuilder.Create(typeof(InheritedOutputElementHintTagHelper).FullName, AssemblyName) TagHelperDescriptorBuilder.Create(typeof(InheritedOutputElementHintTagHelper).FullName, AssemblyName)
.TypeName(typeof(InheritedOutputElementHintTagHelper).FullName) .TypeName(typeof(InheritedOutputElementHintTagHelper).FullName)
.TagMatchingRule(builder => builder.RequireTagName("inherited-output-element-hint")) .TagMatchingRuleDescriptor(builder => builder.RequireTagName("inherited-output-element-hint"))
.Build() .Build()
}, },
{ {
typeof(OutputElementHintTagHelper), typeof(OutputElementHintTagHelper),
TagHelperDescriptorBuilder.Create(typeof(OutputElementHintTagHelper).FullName, AssemblyName) TagHelperDescriptorBuilder.Create(typeof(OutputElementHintTagHelper).FullName, AssemblyName)
.TypeName(typeof(OutputElementHintTagHelper).FullName) .TypeName(typeof(OutputElementHintTagHelper).FullName)
.TagMatchingRule(builder => builder.RequireTagName("output-element-hint")) .TagMatchingRuleDescriptor(builder => builder.RequireTagName("output-element-hint"))
.TagOutputHint("hinted-value") .TagOutputHint("hinted-value")
.Build() .Build()
}, },
@ -2059,7 +2059,7 @@ namespace Microsoft.CodeAnalysis.Razor.Workspaces
typeof(OverriddenOutputElementHintTagHelper), typeof(OverriddenOutputElementHintTagHelper),
TagHelperDescriptorBuilder.Create(typeof(OverriddenOutputElementHintTagHelper).FullName, AssemblyName) TagHelperDescriptorBuilder.Create(typeof(OverriddenOutputElementHintTagHelper).FullName, AssemblyName)
.TypeName(typeof(OverriddenOutputElementHintTagHelper).FullName) .TypeName(typeof(OverriddenOutputElementHintTagHelper).FullName)
.TagMatchingRule(builder => builder.RequireTagName("overridden-output-element-hint")) .TagMatchingRuleDescriptor(builder => builder.RequireTagName("overridden-output-element-hint"))
.TagOutputHint("overridden") .TagOutputHint("overridden")
.Build() .Build()
}, },
@ -2330,7 +2330,7 @@ namespace Microsoft.CodeAnalysis.Razor.Workspaces
{ {
foreach (var attributeBuilder in attributes) foreach (var attributeBuilder in attributes)
{ {
builder.BindAttribute(attributeBuilder); builder.BoundAttributeDescriptor(attributeBuilder);
} }
} }
@ -2338,7 +2338,7 @@ namespace Microsoft.CodeAnalysis.Razor.Workspaces
{ {
foreach (var ruleBuilder in ruleBuilders) foreach (var ruleBuilder in ruleBuilders)
{ {
builder.TagMatchingRule(innerRuleBuilder => builder.TagMatchingRuleDescriptor(innerRuleBuilder =>
{ {
innerRuleBuilder.RequireTagName(tagName); innerRuleBuilder.RequireTagName(tagName);
ruleBuilder(innerRuleBuilder); ruleBuilder(innerRuleBuilder);
@ -2347,7 +2347,7 @@ namespace Microsoft.CodeAnalysis.Razor.Workspaces
} }
else else
{ {
builder.TagMatchingRule(ruleBuilder => ruleBuilder.RequireTagName(tagName)); builder.TagMatchingRuleDescriptor(ruleBuilder => ruleBuilder.RequireTagName(tagName));
} }
var descriptor = builder.Build(); var descriptor = builder.Build();

View File

@ -17,20 +17,20 @@ namespace Microsoft.VisualStudio.LanguageServices.Razor
var documentDescriptors = new[] var documentDescriptors = new[]
{ {
TagHelperDescriptorBuilder.Create("DivTagHelper", "TestAssembly") TagHelperDescriptorBuilder.Create("DivTagHelper", "TestAssembly")
.TagMatchingRule(rule => rule .TagMatchingRuleDescriptor(rule => rule
.RequireTagName("div") .RequireTagName("div")
.RequireAttribute(attribute => attribute.Name("repeat"))) .RequireAttributeDescriptor(attribute => attribute.Name("repeat")))
.BindAttribute(attribute => attribute .BoundAttributeDescriptor(attribute => attribute
.Name("visible") .Name("visible")
.TypeName(typeof(bool).FullName) .TypeName(typeof(bool).FullName)
.SetPropertyName("Visible")) .PropertyName("Visible"))
.Build(), .Build(),
TagHelperDescriptorBuilder.Create("StyleTagHelper", "TestAssembly") TagHelperDescriptorBuilder.Create("StyleTagHelper", "TestAssembly")
.TagMatchingRule(rule => rule.RequireTagName("*")) .TagMatchingRuleDescriptor(rule => rule.RequireTagName("*"))
.BindAttribute(attribute => attribute .BoundAttributeDescriptor(attribute => attribute
.Name("class") .Name("class")
.TypeName(typeof(string).FullName) .TypeName(typeof(string).FullName)
.SetPropertyName("Class")) .PropertyName("Class"))
.Build(), .Build(),
}; };
var expectedCompletions = AttributeCompletionResult.Create(new Dictionary<string, HashSet<BoundAttributeDescriptor>>() var expectedCompletions = AttributeCompletionResult.Create(new Dictionary<string, HashSet<BoundAttributeDescriptor>>()
@ -68,14 +68,14 @@ namespace Microsoft.VisualStudio.LanguageServices.Razor
var documentDescriptors = new[] var documentDescriptors = new[]
{ {
TagHelperDescriptorBuilder.Create("DivTagHelper", "TestAssembly") TagHelperDescriptorBuilder.Create("DivTagHelper", "TestAssembly")
.TagMatchingRule(rule => rule .TagMatchingRuleDescriptor(rule => rule
.RequireTagName("div") .RequireTagName("div")
.RequireAttribute(attribute => attribute.Name("repeat"))) .RequireAttributeDescriptor(attribute => attribute.Name("repeat")))
.Build(), .Build(),
TagHelperDescriptorBuilder.Create("StyleTagHelper", "TestAssembly") TagHelperDescriptorBuilder.Create("StyleTagHelper", "TestAssembly")
.TagMatchingRule(rule => rule .TagMatchingRuleDescriptor(rule => rule
.RequireTagName("*") .RequireTagName("*")
.RequireAttribute(attribute => attribute.Name("class"))) .RequireAttributeDescriptor(attribute => attribute.Name("class")))
.Build(), .Build(),
}; };
var expectedCompletions = AttributeCompletionResult.Create(new Dictionary<string, HashSet<BoundAttributeDescriptor>>() var expectedCompletions = AttributeCompletionResult.Create(new Dictionary<string, HashSet<BoundAttributeDescriptor>>()
@ -106,26 +106,26 @@ namespace Microsoft.VisualStudio.LanguageServices.Razor
var documentDescriptors = new[] var documentDescriptors = new[]
{ {
TagHelperDescriptorBuilder.Create("DivTagHelper", "TestAssembly") TagHelperDescriptorBuilder.Create("DivTagHelper", "TestAssembly")
.TagMatchingRule(rule => rule .TagMatchingRuleDescriptor(rule => rule
.RequireTagName("div") .RequireTagName("div")
.RequireAttribute(attribute => attribute.Name("repeat"))) .RequireAttributeDescriptor(attribute => attribute.Name("repeat")))
.BindAttribute(attribute => attribute .BoundAttributeDescriptor(attribute => attribute
.Name("repeat") .Name("repeat")
.TypeName(typeof(bool).FullName) .TypeName(typeof(bool).FullName)
.SetPropertyName("Repeat")) .PropertyName("Repeat"))
.BindAttribute(attribute => attribute .BoundAttributeDescriptor(attribute => attribute
.Name("visible") .Name("visible")
.TypeName(typeof(bool).FullName) .TypeName(typeof(bool).FullName)
.SetPropertyName("Visible")) .PropertyName("Visible"))
.Build(), .Build(),
TagHelperDescriptorBuilder.Create("StyleTagHelper", "TestAssembly") TagHelperDescriptorBuilder.Create("StyleTagHelper", "TestAssembly")
.TagMatchingRule(rule => rule .TagMatchingRuleDescriptor(rule => rule
.RequireTagName("*") .RequireTagName("*")
.RequireAttribute(attribute => attribute.Name("class"))) .RequireAttributeDescriptor(attribute => attribute.Name("class")))
.BindAttribute(attribute => attribute .BoundAttributeDescriptor(attribute => attribute
.Name("class") .Name("class")
.TypeName(typeof(string).FullName) .TypeName(typeof(string).FullName)
.SetPropertyName("Class")) .PropertyName("Class"))
.Build(), .Build(),
}; };
var expectedCompletions = AttributeCompletionResult.Create(new Dictionary<string, HashSet<BoundAttributeDescriptor>>() var expectedCompletions = AttributeCompletionResult.Create(new Dictionary<string, HashSet<BoundAttributeDescriptor>>()
@ -159,31 +159,31 @@ namespace Microsoft.VisualStudio.LanguageServices.Razor
var documentDescriptors = new[] var documentDescriptors = new[]
{ {
TagHelperDescriptorBuilder.Create("DivTagHelper", "TestAssembly") TagHelperDescriptorBuilder.Create("DivTagHelper", "TestAssembly")
.TagMatchingRule(rule => rule.RequireTagName("div")) .TagMatchingRuleDescriptor(rule => rule.RequireTagName("div"))
.BindAttribute(attribute => attribute .BoundAttributeDescriptor(attribute => attribute
.Name("repeat") .Name("repeat")
.TypeName(typeof(bool).FullName) .TypeName(typeof(bool).FullName)
.SetPropertyName("Repeat")) .PropertyName("Repeat"))
.BindAttribute(attribute => attribute .BoundAttributeDescriptor(attribute => attribute
.Name("visible") .Name("visible")
.TypeName(typeof(bool).FullName) .TypeName(typeof(bool).FullName)
.SetPropertyName("Visible")) .PropertyName("Visible"))
.Build(), .Build(),
TagHelperDescriptorBuilder.Create("StyleTagHelper", "TestAssembly") TagHelperDescriptorBuilder.Create("StyleTagHelper", "TestAssembly")
.TagMatchingRule(rule => rule .TagMatchingRuleDescriptor(rule => rule
.RequireTagName("*") .RequireTagName("*")
.RequireAttribute(attribute => attribute.Name("class"))) .RequireAttributeDescriptor(attribute => attribute.Name("class")))
.BindAttribute(attribute => attribute .BoundAttributeDescriptor(attribute => attribute
.Name("class") .Name("class")
.TypeName(typeof(string).FullName) .TypeName(typeof(string).FullName)
.SetPropertyName("Class")) .PropertyName("Class"))
.Build(), .Build(),
TagHelperDescriptorBuilder.Create("StyleTagHelper", "TestAssembly") TagHelperDescriptorBuilder.Create("StyleTagHelper", "TestAssembly")
.TagMatchingRule(rule => rule.RequireTagName("*")) .TagMatchingRuleDescriptor(rule => rule.RequireTagName("*"))
.BindAttribute(attribute => attribute .BoundAttributeDescriptor(attribute => attribute
.Name("visible") .Name("visible")
.TypeName(typeof(bool).FullName) .TypeName(typeof(bool).FullName)
.SetPropertyName("Visible")) .PropertyName("Visible"))
.Build(), .Build(),
}; };
var expectedCompletions = AttributeCompletionResult.Create(new Dictionary<string, HashSet<BoundAttributeDescriptor>>() var expectedCompletions = AttributeCompletionResult.Create(new Dictionary<string, HashSet<BoundAttributeDescriptor>>()
@ -222,11 +222,11 @@ namespace Microsoft.VisualStudio.LanguageServices.Razor
var documentDescriptors = new[] var documentDescriptors = new[]
{ {
TagHelperDescriptorBuilder.Create("CustomTagHelper", "TestAssembly") TagHelperDescriptorBuilder.Create("CustomTagHelper", "TestAssembly")
.TagMatchingRule(rule => rule.RequireTagName("custom")) .TagMatchingRuleDescriptor(rule => rule.RequireTagName("custom"))
.BindAttribute(attribute => attribute .BoundAttributeDescriptor(attribute => attribute
.Name("repeat") .Name("repeat")
.TypeName(typeof(bool).FullName) .TypeName(typeof(bool).FullName)
.SetPropertyName("Repeat")) .PropertyName("Repeat"))
.TagOutputHint("div") .TagOutputHint("div")
.Build(), .Build(),
}; };
@ -257,11 +257,11 @@ namespace Microsoft.VisualStudio.LanguageServices.Razor
var documentDescriptors = new[] var documentDescriptors = new[]
{ {
TagHelperDescriptorBuilder.Create("CustomTagHelper", "TestAssembly") TagHelperDescriptorBuilder.Create("CustomTagHelper", "TestAssembly")
.TagMatchingRule(rule => rule.RequireTagName("custom")) .TagMatchingRuleDescriptor(rule => rule.RequireTagName("custom"))
.BindAttribute(attribute => attribute .BoundAttributeDescriptor(attribute => attribute
.Name("repeat") .Name("repeat")
.TypeName(typeof(bool).FullName) .TypeName(typeof(bool).FullName)
.SetPropertyName("Repeat")) .PropertyName("Repeat"))
.Build(), .Build(),
}; };
var expectedCompletions = AttributeCompletionResult.Create(new Dictionary<string, HashSet<BoundAttributeDescriptor>>() var expectedCompletions = AttributeCompletionResult.Create(new Dictionary<string, HashSet<BoundAttributeDescriptor>>()
@ -290,11 +290,11 @@ namespace Microsoft.VisualStudio.LanguageServices.Razor
var documentDescriptors = new[] var documentDescriptors = new[]
{ {
TagHelperDescriptorBuilder.Create("DivTagHelper", "TestAssembly") TagHelperDescriptorBuilder.Create("DivTagHelper", "TestAssembly")
.TagMatchingRule(rule => rule.RequireTagName("div")) .TagMatchingRuleDescriptor(rule => rule.RequireTagName("div"))
.BindAttribute(attribute => attribute .BoundAttributeDescriptor(attribute => attribute
.Name("repeat") .Name("repeat")
.TypeName(typeof(bool).FullName) .TypeName(typeof(bool).FullName)
.SetPropertyName("Repeat")) .PropertyName("Repeat"))
.Build(), .Build(),
}; };
var expectedCompletions = AttributeCompletionResult.Create(new Dictionary<string, HashSet<BoundAttributeDescriptor>>() var expectedCompletions = AttributeCompletionResult.Create(new Dictionary<string, HashSet<BoundAttributeDescriptor>>()
@ -347,9 +347,9 @@ namespace Microsoft.VisualStudio.LanguageServices.Razor
var documentDescriptors = new[] var documentDescriptors = new[]
{ {
TagHelperDescriptorBuilder.Create("DivTagHelper", "TestAssembly") TagHelperDescriptorBuilder.Create("DivTagHelper", "TestAssembly")
.TagMatchingRule(rule => rule .TagMatchingRuleDescriptor(rule => rule
.RequireTagName("div") .RequireTagName("div")
.RequireAttribute(attribute => attribute.Name("special"))) .RequireAttributeDescriptor(attribute => attribute.Name("special")))
.Build(), .Build(),
}; };
var expectedCompletions = AttributeCompletionResult.Create(new Dictionary<string, HashSet<BoundAttributeDescriptor>>() var expectedCompletions = AttributeCompletionResult.Create(new Dictionary<string, HashSet<BoundAttributeDescriptor>>()
@ -379,9 +379,9 @@ namespace Microsoft.VisualStudio.LanguageServices.Razor
var documentDescriptors = new[] var documentDescriptors = new[]
{ {
TagHelperDescriptorBuilder.Create("MyTableTagHelper", "TestAssembly") TagHelperDescriptorBuilder.Create("MyTableTagHelper", "TestAssembly")
.TagMatchingRule(rule => rule .TagMatchingRuleDescriptor(rule => rule
.RequireTagName("table") .RequireTagName("table")
.RequireAttribute(attribute => attribute.Name("special"))) .RequireAttributeDescriptor(attribute => attribute.Name("special")))
.Build(), .Build(),
}; };
var expectedCompletions = AttributeCompletionResult.Create(new Dictionary<string, HashSet<BoundAttributeDescriptor>>() var expectedCompletions = AttributeCompletionResult.Create(new Dictionary<string, HashSet<BoundAttributeDescriptor>>()
@ -410,11 +410,11 @@ namespace Microsoft.VisualStudio.LanguageServices.Razor
var documentDescriptors = new[] var documentDescriptors = new[]
{ {
TagHelperDescriptorBuilder.Create("MyTableTagHelper", "TestAssembly") TagHelperDescriptorBuilder.Create("MyTableTagHelper", "TestAssembly")
.TagMatchingRule(rule => rule.RequireTagName("my-table")) .TagMatchingRuleDescriptor(rule => rule.RequireTagName("my-table"))
.TagOutputHint("table") .TagOutputHint("table")
.Build(), .Build(),
TagHelperDescriptorBuilder.Create("MyTrTagHelper", "TestAssembly") TagHelperDescriptorBuilder.Create("MyTrTagHelper", "TestAssembly")
.TagMatchingRule(rule => rule.RequireTagName("my-tr")) .TagMatchingRuleDescriptor(rule => rule.RequireTagName("my-tr"))
.TagOutputHint("tr") .TagOutputHint("tr")
.Build(), .Build(),
}; };
@ -446,10 +446,10 @@ namespace Microsoft.VisualStudio.LanguageServices.Razor
var documentDescriptors = new[] var documentDescriptors = new[]
{ {
TagHelperDescriptorBuilder.Create("CatchAllTagHelper", "TestAssembly") TagHelperDescriptorBuilder.Create("CatchAllTagHelper", "TestAssembly")
.TagMatchingRule(rule => rule.RequireTagName("*")) .TagMatchingRuleDescriptor(rule => rule.RequireTagName("*"))
.Build(), .Build(),
TagHelperDescriptorBuilder.Create("LiTagHelper", "TestAssembly") TagHelperDescriptorBuilder.Create("LiTagHelper", "TestAssembly")
.TagMatchingRule(rule => rule.RequireTagName("li")) .TagMatchingRuleDescriptor(rule => rule.RequireTagName("li"))
.Build(), .Build(),
}; };
var expectedCompletions = ElementCompletionResult.Create(new Dictionary<string, HashSet<TagHelperDescriptor>>() var expectedCompletions = ElementCompletionResult.Create(new Dictionary<string, HashSet<TagHelperDescriptor>>()
@ -480,10 +480,10 @@ namespace Microsoft.VisualStudio.LanguageServices.Razor
var documentDescriptors = new[] var documentDescriptors = new[]
{ {
TagHelperDescriptorBuilder.Create("SuperLiTagHelper", "TestAssembly") TagHelperDescriptorBuilder.Create("SuperLiTagHelper", "TestAssembly")
.TagMatchingRule(rule => rule.RequireTagName("superli")) .TagMatchingRuleDescriptor(rule => rule.RequireTagName("superli"))
.Build(), .Build(),
TagHelperDescriptorBuilder.Create("LiTagHelper", "TestAssembly") TagHelperDescriptorBuilder.Create("LiTagHelper", "TestAssembly")
.TagMatchingRule(rule => rule.RequireTagName("li")) .TagMatchingRuleDescriptor(rule => rule.RequireTagName("li"))
.Build(), .Build(),
}; };
var expectedCompletions = ElementCompletionResult.Create(new Dictionary<string, HashSet<TagHelperDescriptor>>() var expectedCompletions = ElementCompletionResult.Create(new Dictionary<string, HashSet<TagHelperDescriptor>>()
@ -515,10 +515,10 @@ namespace Microsoft.VisualStudio.LanguageServices.Razor
var documentDescriptors = new[] var documentDescriptors = new[]
{ {
TagHelperDescriptorBuilder.Create("SuperLiTagHelper", "TestAssembly") TagHelperDescriptorBuilder.Create("SuperLiTagHelper", "TestAssembly")
.TagMatchingRule(rule => rule.RequireTagName("superli")) .TagMatchingRuleDescriptor(rule => rule.RequireTagName("superli"))
.Build(), .Build(),
TagHelperDescriptorBuilder.Create("CatchAll", "TestAssembly") TagHelperDescriptorBuilder.Create("CatchAll", "TestAssembly")
.TagMatchingRule(rule => rule.RequireTagName("*")) .TagMatchingRuleDescriptor(rule => rule.RequireTagName("*"))
.Build(), .Build(),
}; };
var expectedCompletions = ElementCompletionResult.Create(new Dictionary<string, HashSet<TagHelperDescriptor>>() var expectedCompletions = ElementCompletionResult.Create(new Dictionary<string, HashSet<TagHelperDescriptor>>()
@ -548,10 +548,10 @@ namespace Microsoft.VisualStudio.LanguageServices.Razor
var documentDescriptors = new[] var documentDescriptors = new[]
{ {
TagHelperDescriptorBuilder.Create("SuperLiTagHelper", "TestAssembly") TagHelperDescriptorBuilder.Create("SuperLiTagHelper", "TestAssembly")
.TagMatchingRule(rule => rule.RequireTagName("superli")) .TagMatchingRuleDescriptor(rule => rule.RequireTagName("superli"))
.Build(), .Build(),
TagHelperDescriptorBuilder.Create("CatchAll", "TestAssembly") TagHelperDescriptorBuilder.Create("CatchAll", "TestAssembly")
.TagMatchingRule(rule => rule.RequireTagName("*")) .TagMatchingRuleDescriptor(rule => rule.RequireTagName("*"))
.Build(), .Build(),
}; };
var expectedCompletions = ElementCompletionResult.Create(new Dictionary<string, HashSet<TagHelperDescriptor>>() var expectedCompletions = ElementCompletionResult.Create(new Dictionary<string, HashSet<TagHelperDescriptor>>()
@ -582,12 +582,12 @@ namespace Microsoft.VisualStudio.LanguageServices.Razor
var documentDescriptors = new[] var documentDescriptors = new[]
{ {
TagHelperDescriptorBuilder.Create("BoldTagHelper1", "TestAssembly") TagHelperDescriptorBuilder.Create("BoldTagHelper1", "TestAssembly")
.TagMatchingRule(rule => rule.RequireTagName("strong")) .TagMatchingRuleDescriptor(rule => rule.RequireTagName("strong"))
.TagMatchingRule(rule => rule.RequireTagName("b")) .TagMatchingRuleDescriptor(rule => rule.RequireTagName("b"))
.TagMatchingRule(rule => rule.RequireTagName("bold")) .TagMatchingRuleDescriptor(rule => rule.RequireTagName("bold"))
.Build(), .Build(),
TagHelperDescriptorBuilder.Create("BoldTagHelper2", "TestAssembly") TagHelperDescriptorBuilder.Create("BoldTagHelper2", "TestAssembly")
.TagMatchingRule(rule => rule.RequireTagName("strong")) .TagMatchingRuleDescriptor(rule => rule.RequireTagName("strong"))
.Build(), .Build(),
}; };
var expectedCompletions = ElementCompletionResult.Create(new Dictionary<string, HashSet<TagHelperDescriptor>>() var expectedCompletions = ElementCompletionResult.Create(new Dictionary<string, HashSet<TagHelperDescriptor>>()
@ -618,10 +618,10 @@ namespace Microsoft.VisualStudio.LanguageServices.Razor
var documentDescriptors = new[] var documentDescriptors = new[]
{ {
TagHelperDescriptorBuilder.Create("LiTagHelper1", "TestAssembly") TagHelperDescriptorBuilder.Create("LiTagHelper1", "TestAssembly")
.TagMatchingRule(rule => rule.RequireTagName("li")) .TagMatchingRuleDescriptor(rule => rule.RequireTagName("li"))
.Build(), .Build(),
TagHelperDescriptorBuilder.Create("LiTagHelper2", "TestAssembly") TagHelperDescriptorBuilder.Create("LiTagHelper2", "TestAssembly")
.TagMatchingRule(rule => rule.RequireTagName("li")) .TagMatchingRuleDescriptor(rule => rule.RequireTagName("li"))
.Build(), .Build(),
}; };
var expectedCompletions = ElementCompletionResult.Create(new Dictionary<string, HashSet<TagHelperDescriptor>>() var expectedCompletions = ElementCompletionResult.Create(new Dictionary<string, HashSet<TagHelperDescriptor>>()
@ -647,14 +647,14 @@ namespace Microsoft.VisualStudio.LanguageServices.Razor
var documentDescriptors = new[] var documentDescriptors = new[]
{ {
TagHelperDescriptorBuilder.Create("SuperLiTagHelper", "TestAssembly") TagHelperDescriptorBuilder.Create("SuperLiTagHelper", "TestAssembly")
.TagMatchingRule(rule => rule.RequireTagName("superli")) .TagMatchingRuleDescriptor(rule => rule.RequireTagName("superli"))
.Build(), .Build(),
TagHelperDescriptorBuilder.Create("LiTagHelper", "TestAssembly") TagHelperDescriptorBuilder.Create("LiTagHelper", "TestAssembly")
.TagMatchingRule(rule => rule.RequireTagName("li")) .TagMatchingRuleDescriptor(rule => rule.RequireTagName("li"))
.TagOutputHint("strong") .TagOutputHint("strong")
.Build(), .Build(),
TagHelperDescriptorBuilder.Create("DivTagHelper", "TestAssembly") TagHelperDescriptorBuilder.Create("DivTagHelper", "TestAssembly")
.TagMatchingRule(rule => rule.RequireTagName("div")) .TagMatchingRuleDescriptor(rule => rule.RequireTagName("div"))
.Build(), .Build(),
}; };
var expectedCompletions = ElementCompletionResult.Create(new Dictionary<string, HashSet<TagHelperDescriptor>>() var expectedCompletions = ElementCompletionResult.Create(new Dictionary<string, HashSet<TagHelperDescriptor>>()
@ -681,11 +681,11 @@ namespace Microsoft.VisualStudio.LanguageServices.Razor
var documentDescriptors = new[] var documentDescriptors = new[]
{ {
TagHelperDescriptorBuilder.Create("DivTagHelper", "TestAssembly") TagHelperDescriptorBuilder.Create("DivTagHelper", "TestAssembly")
.TagMatchingRule(rule => rule.RequireTagName("div")) .TagMatchingRuleDescriptor(rule => rule.RequireTagName("div"))
.TagOutputHint("li") .TagOutputHint("li")
.Build(), .Build(),
TagHelperDescriptorBuilder.Create("LiTagHelper", "TestAssembly") TagHelperDescriptorBuilder.Create("LiTagHelper", "TestAssembly")
.TagMatchingRule(rule => rule.RequireTagName("li")) .TagMatchingRuleDescriptor(rule => rule.RequireTagName("li"))
.TagOutputHint("strong") .TagOutputHint("strong")
.Build(), .Build(),
}; };
@ -713,10 +713,10 @@ namespace Microsoft.VisualStudio.LanguageServices.Razor
var documentDescriptors = new[] var documentDescriptors = new[]
{ {
TagHelperDescriptorBuilder.Create("LiTagHelper1", "TestAssembly") TagHelperDescriptorBuilder.Create("LiTagHelper1", "TestAssembly")
.TagMatchingRule(rule => rule.RequireTagName("li")) .TagMatchingRuleDescriptor(rule => rule.RequireTagName("li"))
.Build(), .Build(),
TagHelperDescriptorBuilder.Create("LiTagHelper2", "TestAssembly") TagHelperDescriptorBuilder.Create("LiTagHelper2", "TestAssembly")
.TagMatchingRule(rule => rule.RequireTagName("li").RequireParentTag("ol")) .TagMatchingRuleDescriptor(rule => rule.RequireTagName("li").RequireParentTag("ol"))
.Build(), .Build(),
}; };
var expectedCompletions = ElementCompletionResult.Create(new Dictionary<string, HashSet<TagHelperDescriptor>>() var expectedCompletions = ElementCompletionResult.Create(new Dictionary<string, HashSet<TagHelperDescriptor>>()
@ -742,7 +742,7 @@ namespace Microsoft.VisualStudio.LanguageServices.Razor
var documentDescriptors = new[] var documentDescriptors = new[]
{ {
TagHelperDescriptorBuilder.Create("CatchAll", "TestAssembly") TagHelperDescriptorBuilder.Create("CatchAll", "TestAssembly")
.TagMatchingRule(rule => rule.RequireTagName("*")) .TagMatchingRuleDescriptor(rule => rule.RequireTagName("*"))
.AllowChildTag("b") .AllowChildTag("b")
.AllowChildTag("bold") .AllowChildTag("bold")
.AllowChildTag("div") .AllowChildTag("div")
@ -772,7 +772,7 @@ namespace Microsoft.VisualStudio.LanguageServices.Razor
var documentDescriptors = new[] var documentDescriptors = new[]
{ {
TagHelperDescriptorBuilder.Create("BoldParent", "TestAssembly") TagHelperDescriptorBuilder.Create("BoldParent", "TestAssembly")
.TagMatchingRule(rule => rule.RequireTagName("div")) .TagMatchingRuleDescriptor(rule => rule.RequireTagName("div"))
.AllowChildTag("b") .AllowChildTag("b")
.AllowChildTag("bold") .AllowChildTag("bold")
.AllowChildTag("div") .AllowChildTag("div")
@ -803,7 +803,7 @@ namespace Microsoft.VisualStudio.LanguageServices.Razor
var documentDescriptors = new[] var documentDescriptors = new[]
{ {
TagHelperDescriptorBuilder.Create("BoldParent", "TestAssembly") TagHelperDescriptorBuilder.Create("BoldParent", "TestAssembly")
.TagMatchingRule(rule => rule.RequireTagName("div")) .TagMatchingRuleDescriptor(rule => rule.RequireTagName("div"))
.AllowChildTag("b") .AllowChildTag("b")
.AllowChildTag("bold") .AllowChildTag("bold")
.Build(), .Build(),
@ -831,7 +831,7 @@ namespace Microsoft.VisualStudio.LanguageServices.Razor
var documentDescriptors = new[] var documentDescriptors = new[]
{ {
TagHelperDescriptorBuilder.Create("BoldParent", "TestAssembly") TagHelperDescriptorBuilder.Create("BoldParent", "TestAssembly")
.TagMatchingRule(rule => rule.RequireTagName("div")) .TagMatchingRuleDescriptor(rule => rule.RequireTagName("div"))
.AllowChildTag("b") .AllowChildTag("b")
.AllowChildTag("bold") .AllowChildTag("bold")
.AllowChildTag("div") .AllowChildTag("div")
@ -861,13 +861,13 @@ namespace Microsoft.VisualStudio.LanguageServices.Razor
var documentDescriptors = new[] var documentDescriptors = new[]
{ {
TagHelperDescriptorBuilder.Create("BoldParentCatchAll", "TestAssembly") TagHelperDescriptorBuilder.Create("BoldParentCatchAll", "TestAssembly")
.TagMatchingRule(rule => rule.RequireTagName("*")) .TagMatchingRuleDescriptor(rule => rule.RequireTagName("*"))
.AllowChildTag("strong") .AllowChildTag("strong")
.AllowChildTag("div") .AllowChildTag("div")
.AllowChildTag("b") .AllowChildTag("b")
.Build(), .Build(),
TagHelperDescriptorBuilder.Create("BoldParent", "TestAssembly") TagHelperDescriptorBuilder.Create("BoldParent", "TestAssembly")
.TagMatchingRule(rule => rule.RequireTagName("div")) .TagMatchingRuleDescriptor(rule => rule.RequireTagName("div"))
.AllowChildTag("b") .AllowChildTag("b")
.AllowChildTag("bold") .AllowChildTag("bold")
.Build(), .Build(),

View File

@ -20,7 +20,7 @@ namespace Microsoft.VisualStudio.LanguageServices.Razor
var documentDescriptors = new[] var documentDescriptors = new[]
{ {
TagHelperDescriptorBuilder.Create("TestType", "TestAssembly") TagHelperDescriptorBuilder.Create("TestType", "TestAssembly")
.TagMatchingRule(rule => rule.RequireTagName("*")) .TagMatchingRuleDescriptor(rule => rule.RequireTagName("*"))
.Build() .Build()
}; };
var documentContext = TagHelperDocumentContext.Create(string.Empty, documentDescriptors); var documentContext = TagHelperDocumentContext.Create(string.Empty, documentDescriptors);
@ -40,29 +40,29 @@ namespace Microsoft.VisualStudio.LanguageServices.Razor
var documentDescriptors = new[] var documentDescriptors = new[]
{ {
TagHelperDescriptorBuilder.Create("TestType", "TestAssembly") TagHelperDescriptorBuilder.Create("TestType", "TestAssembly")
.TagMatchingRule(rule => .TagMatchingRuleDescriptor(rule =>
rule rule
.RequireTagName("a") .RequireTagName("a")
.RequireAttribute(attribute => attribute.Name("asp-for"))) .RequireAttributeDescriptor(attribute => attribute.Name("asp-for")))
.BindAttribute(attribute => .BoundAttributeDescriptor(attribute =>
attribute attribute
.Name("asp-for") .Name("asp-for")
.TypeName(typeof(string).FullName) .TypeName(typeof(string).FullName)
.SetPropertyName("AspFor")) .PropertyName("AspFor"))
.BindAttribute(attribute => .BoundAttributeDescriptor(attribute =>
attribute attribute
.Name("asp-route") .Name("asp-route")
.TypeName(typeof(IDictionary<string, string>).Namespace + "IDictionary<string, string>") .TypeName(typeof(IDictionary<string, string>).Namespace + "IDictionary<string, string>")
.SetPropertyName("AspRoute") .PropertyName("AspRoute")
.AsDictionary("asp-route-", typeof(string).FullName)) .AsDictionaryAttribute("asp-route-", typeof(string).FullName))
.Build(), .Build(),
TagHelperDescriptorBuilder.Create("TestType", "TestAssembly") TagHelperDescriptorBuilder.Create("TestType", "TestAssembly")
.TagMatchingRule(rule => rule.RequireTagName("input")) .TagMatchingRuleDescriptor(rule => rule.RequireTagName("input"))
.BindAttribute(attribute => .BoundAttributeDescriptor(attribute =>
attribute attribute
.Name("asp-for") .Name("asp-for")
.TypeName(typeof(string).FullName) .TypeName(typeof(string).FullName)
.SetPropertyName("AspFor")) .PropertyName("AspFor"))
.Build(), .Build(),
}; };
var documentContext = TagHelperDocumentContext.Create(string.Empty, documentDescriptors); var documentContext = TagHelperDocumentContext.Create(string.Empty, documentDescriptors);
@ -89,18 +89,18 @@ namespace Microsoft.VisualStudio.LanguageServices.Razor
var documentDescriptors = new[] var documentDescriptors = new[]
{ {
TagHelperDescriptorBuilder.Create("TestType", "TestAssembly") TagHelperDescriptorBuilder.Create("TestType", "TestAssembly")
.TagMatchingRule(rule => rule.RequireTagName("a")) .TagMatchingRuleDescriptor(rule => rule.RequireTagName("a"))
.BindAttribute(attribute => .BoundAttributeDescriptor(attribute =>
attribute attribute
.Name("asp-for") .Name("asp-for")
.TypeName(typeof(string).FullName) .TypeName(typeof(string).FullName)
.SetPropertyName("AspFor")) .PropertyName("AspFor"))
.BindAttribute(attribute => .BoundAttributeDescriptor(attribute =>
attribute attribute
.Name("asp-route") .Name("asp-route")
.TypeName(typeof(IDictionary<string, string>).Namespace + "IDictionary<string, string>") .TypeName(typeof(IDictionary<string, string>).Namespace + "IDictionary<string, string>")
.SetPropertyName("AspRoute") .PropertyName("AspRoute")
.AsDictionary("asp-route-", typeof(string).FullName)) .AsDictionaryAttribute("asp-route-", typeof(string).FullName))
.Build() .Build()
}; };
var expectedAttributeDescriptors = new[] var expectedAttributeDescriptors = new[]
@ -125,17 +125,17 @@ namespace Microsoft.VisualStudio.LanguageServices.Razor
var documentDescriptors = new[] var documentDescriptors = new[]
{ {
TagHelperDescriptorBuilder.Create("TestType", "TestAssembly") TagHelperDescriptorBuilder.Create("TestType", "TestAssembly")
.TagMatchingRule(rule => rule.RequireTagName("input")) .TagMatchingRuleDescriptor(rule => rule.RequireTagName("input"))
.BindAttribute(attribute => .BoundAttributeDescriptor(attribute =>
attribute attribute
.Name("asp-for") .Name("asp-for")
.TypeName(typeof(string).FullName) .TypeName(typeof(string).FullName)
.SetPropertyName("AspFor")) .PropertyName("AspFor"))
.BindAttribute(attribute => .BoundAttributeDescriptor(attribute =>
attribute attribute
.Name("asp-extra") .Name("asp-extra")
.TypeName(typeof(string).FullName) .TypeName(typeof(string).FullName)
.SetPropertyName("AspExtra")) .PropertyName("AspExtra"))
.Build() .Build()
}; };
var expectedAttributeDescriptors = new[] var expectedAttributeDescriptors = new[]
@ -160,7 +160,7 @@ namespace Microsoft.VisualStudio.LanguageServices.Razor
var documentDescriptors = new[] var documentDescriptors = new[]
{ {
TagHelperDescriptorBuilder.Create("TestType", "TestAssembly") TagHelperDescriptorBuilder.Create("TestType", "TestAssembly")
.TagMatchingRule(rule => rule.RequireTagName("*")) .TagMatchingRuleDescriptor(rule => rule.RequireTagName("*"))
.Build() .Build()
}; };
var documentContext = TagHelperDocumentContext.Create(string.Empty, documentDescriptors); var documentContext = TagHelperDocumentContext.Create(string.Empty, documentDescriptors);
@ -180,7 +180,7 @@ namespace Microsoft.VisualStudio.LanguageServices.Razor
var documentDescriptors = new[] var documentDescriptors = new[]
{ {
TagHelperDescriptorBuilder.Create("TestType", "TestAssembly") TagHelperDescriptorBuilder.Create("TestType", "TestAssembly")
.TagMatchingRule(rule => rule.RequireTagName("strong")) .TagMatchingRuleDescriptor(rule => rule.RequireTagName("strong"))
.Build() .Build()
}; };
var documentContext = TagHelperDocumentContext.Create(string.Empty, documentDescriptors); var documentContext = TagHelperDocumentContext.Create(string.Empty, documentDescriptors);
@ -200,7 +200,7 @@ namespace Microsoft.VisualStudio.LanguageServices.Razor
var expectedDescriptors = new[] var expectedDescriptors = new[]
{ {
TagHelperDescriptorBuilder.Create("TestType", "TestAssembly") TagHelperDescriptorBuilder.Create("TestType", "TestAssembly")
.TagMatchingRule( .TagMatchingRuleDescriptor(
rule => rule rule => rule
.RequireTagName("a") .RequireTagName("a")
.RequireParentTag("div")) .RequireParentTag("div"))
@ -210,7 +210,7 @@ namespace Microsoft.VisualStudio.LanguageServices.Razor
{ {
expectedDescriptors[0], expectedDescriptors[0],
TagHelperDescriptorBuilder.Create("TestType2", "TestAssembly") TagHelperDescriptorBuilder.Create("TestType2", "TestAssembly")
.TagMatchingRule( .TagMatchingRuleDescriptor(
rule => rule rule => rule
.RequireTagName("strong") .RequireTagName("strong")
.RequireParentTag("div")) .RequireParentTag("div"))
@ -233,14 +233,14 @@ namespace Microsoft.VisualStudio.LanguageServices.Razor
var expectedDescriptors = new[] var expectedDescriptors = new[]
{ {
TagHelperDescriptorBuilder.Create("TestType", "TestAssembly") TagHelperDescriptorBuilder.Create("TestType", "TestAssembly")
.TagMatchingRule(rule => rule.RequireTagName("strong")) .TagMatchingRuleDescriptor(rule => rule.RequireTagName("strong"))
.Build() .Build()
}; };
var documentDescriptors = new[] var documentDescriptors = new[]
{ {
expectedDescriptors[0], expectedDescriptors[0],
TagHelperDescriptorBuilder.Create("TestType2", "TestAssembly") TagHelperDescriptorBuilder.Create("TestType2", "TestAssembly")
.TagMatchingRule(rule => rule.RequireTagName("thstrong")) .TagMatchingRuleDescriptor(rule => rule.RequireTagName("thstrong"))
.Build() .Build()
}; };
var documentContext = TagHelperDocumentContext.Create("th", documentDescriptors); var documentContext = TagHelperDocumentContext.Create("th", documentDescriptors);
@ -260,7 +260,7 @@ namespace Microsoft.VisualStudio.LanguageServices.Razor
var expectedDescriptors = new[] var expectedDescriptors = new[]
{ {
TagHelperDescriptorBuilder.Create("TestType", "TestAssembly") TagHelperDescriptorBuilder.Create("TestType", "TestAssembly")
.TagMatchingRule( .TagMatchingRuleDescriptor(
rule => rule rule => rule
.RequireTagName("strong") .RequireTagName("strong")
.RequireParentTag("div")) .RequireParentTag("div"))
@ -270,7 +270,7 @@ namespace Microsoft.VisualStudio.LanguageServices.Razor
{ {
expectedDescriptors[0], expectedDescriptors[0],
TagHelperDescriptorBuilder.Create("TestType2", "TestAssembly") TagHelperDescriptorBuilder.Create("TestType2", "TestAssembly")
.TagMatchingRule( .TagMatchingRuleDescriptor(
rule => rule rule => rule
.RequireTagName("strong") .RequireTagName("strong")
.RequireParentTag("p")) .RequireParentTag("p"))
@ -293,7 +293,7 @@ namespace Microsoft.VisualStudio.LanguageServices.Razor
var documentDescriptors = new[] var documentDescriptors = new[]
{ {
TagHelperDescriptorBuilder.Create("TestType", "TestAssembly") TagHelperDescriptorBuilder.Create("TestType", "TestAssembly")
.TagMatchingRule(rule => rule.RequireTagName("div")) .TagMatchingRuleDescriptor(rule => rule.RequireTagName("div"))
.Build() .Build()
}; };
var documentContext = TagHelperDocumentContext.Create(string.Empty, documentDescriptors); var documentContext = TagHelperDocumentContext.Create(string.Empty, documentDescriptors);
@ -313,10 +313,10 @@ namespace Microsoft.VisualStudio.LanguageServices.Razor
var documentDescriptors = new[] var documentDescriptors = new[]
{ {
TagHelperDescriptorBuilder.Create("DivTagHelper", "TestAssembly") TagHelperDescriptorBuilder.Create("DivTagHelper", "TestAssembly")
.TagMatchingRule(rule => rule.RequireTagName("div")) .TagMatchingRuleDescriptor(rule => rule.RequireTagName("div"))
.Build(), .Build(),
TagHelperDescriptorBuilder.Create("PTagHelper", "TestAssembly") TagHelperDescriptorBuilder.Create("PTagHelper", "TestAssembly")
.TagMatchingRule(rule => rule .TagMatchingRuleDescriptor(rule => rule
.RequireTagName("p") .RequireTagName("p")
.RequireParentTag("body")) .RequireParentTag("body"))
.Build() .Build()
@ -339,7 +339,7 @@ namespace Microsoft.VisualStudio.LanguageServices.Razor
var documentDescriptors = new[] var documentDescriptors = new[]
{ {
TagHelperDescriptorBuilder.Create("TestType", "TestAssembly") TagHelperDescriptorBuilder.Create("TestType", "TestAssembly")
.TagMatchingRule(rule => rule.RequireTagName("div")) .TagMatchingRuleDescriptor(rule => rule.RequireTagName("div"))
.Build() .Build()
}; };
var documentContext = TagHelperDocumentContext.Create(string.Empty, documentDescriptors); var documentContext = TagHelperDocumentContext.Create(string.Empty, documentDescriptors);
@ -359,7 +359,7 @@ namespace Microsoft.VisualStudio.LanguageServices.Razor
var expectedDescriptors = new[] var expectedDescriptors = new[]
{ {
TagHelperDescriptorBuilder.Create("TestType", "TestAssembly") TagHelperDescriptorBuilder.Create("TestType", "TestAssembly")
.TagMatchingRule( .TagMatchingRuleDescriptor(
rule => rule rule => rule
.RequireTagName("p") .RequireTagName("p")
.RequireParentTag("div")) .RequireParentTag("div"))
@ -369,7 +369,7 @@ namespace Microsoft.VisualStudio.LanguageServices.Razor
{ {
expectedDescriptors[0], expectedDescriptors[0],
TagHelperDescriptorBuilder.Create("TestType2", "TestAssembly") TagHelperDescriptorBuilder.Create("TestType2", "TestAssembly")
.TagMatchingRule( .TagMatchingRuleDescriptor(
rule => rule rule => rule
.RequireTagName("strong") .RequireTagName("strong")
.RequireParentTag("p")) .RequireParentTag("p"))

View File

@ -0,0 +1,123 @@
// 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 System;
namespace Microsoft.AspNetCore.Razor.Language
{
public static class TestBoundAttributeDescriptorBuilderExtensions
{
public static BoundAttributeDescriptorBuilder Name(this BoundAttributeDescriptorBuilder builder, string name)
{
if (builder == null)
{
throw new ArgumentNullException(nameof(builder));
}
builder.Name = name;
return builder;
}
public static BoundAttributeDescriptorBuilder TypeName(this BoundAttributeDescriptorBuilder builder, string typeName)
{
if (builder == null)
{
throw new ArgumentNullException(nameof(builder));
}
builder.TypeName = typeName;
return builder;
}
public static BoundAttributeDescriptorBuilder PropertyName(this BoundAttributeDescriptorBuilder builder, string propertyName)
{
if (builder == null)
{
throw new ArgumentNullException(nameof(builder));
}
builder.SetPropertyName(propertyName);
return builder;
}
public static BoundAttributeDescriptorBuilder DisplayName(this BoundAttributeDescriptorBuilder builder, string displayName)
{
if (builder == null)
{
throw new ArgumentNullException(nameof(builder));
}
builder.DisplayName = displayName;
return builder;
}
public static BoundAttributeDescriptorBuilder AsEnum(this BoundAttributeDescriptorBuilder builder)
{
if (builder == null)
{
throw new ArgumentNullException(nameof(builder));
}
builder.IsEnum = true;
return builder;
}
public static BoundAttributeDescriptorBuilder AsDictionaryAttribute(
this BoundAttributeDescriptorBuilder builder,
string attributeNamePrefix,
string valueTypeName)
{
if (builder == null)
{
throw new ArgumentNullException(nameof(builder));
}
builder.IsDictionary = true;
builder.IndexerAttributeNamePrefix = attributeNamePrefix;
builder.IndexerValueTypeName = valueTypeName;
return builder;
}
public static BoundAttributeDescriptorBuilder Documentation(this BoundAttributeDescriptorBuilder builder, string documentation)
{
if (builder == null)
{
throw new ArgumentNullException(nameof(builder));
}
builder.Documentation = documentation;
return builder;
}
public static BoundAttributeDescriptorBuilder AddMetadata(this BoundAttributeDescriptorBuilder builder, string key, string value)
{
if (builder == null)
{
throw new ArgumentNullException(nameof(builder));
}
builder.Metadata[key] = value;
return builder;
}
public static BoundAttributeDescriptorBuilder AddDiagnostic(this BoundAttributeDescriptorBuilder builder, RazorDiagnostic diagnostic)
{
if (builder == null)
{
throw new ArgumentNullException(nameof(builder));
}
builder.Diagnostics.Add(diagnostic);
return builder;
}
}
}

View File

@ -0,0 +1,69 @@
// 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 System;
namespace Microsoft.AspNetCore.Razor.Language
{
public static class TestRequiredAttributeDescriptorBuilderExtensions
{
public static RequiredAttributeDescriptorBuilder Name(this RequiredAttributeDescriptorBuilder builder, string name)
{
if (builder == null)
{
throw new ArgumentNullException(nameof(builder));
}
builder.Name = name;
return builder;
}
public static RequiredAttributeDescriptorBuilder NameComparisonMode(
this RequiredAttributeDescriptorBuilder builder,
RequiredAttributeDescriptor.NameComparisonMode nameComparison)
{
if (builder == null)
{
throw new ArgumentNullException(nameof(builder));
}
builder.NameComparisonMode = nameComparison;
return builder;
}
public static RequiredAttributeDescriptorBuilder Value(this RequiredAttributeDescriptorBuilder builder, string value)
{
if (builder == null)
{
throw new ArgumentNullException(nameof(builder));
}
builder.Value = value;
return builder;
}
public static RequiredAttributeDescriptorBuilder ValueComparisonMode(
this RequiredAttributeDescriptorBuilder builder,
RequiredAttributeDescriptor.ValueComparisonMode valueComparison)
{
if (builder == null)
{
throw new ArgumentNullException(nameof(builder));
}
builder.ValueComparisonMode = valueComparison;
return builder;
}
public static RequiredAttributeDescriptorBuilder AddDiagnostic(this RequiredAttributeDescriptorBuilder builder, RazorDiagnostic diagnostic)
{
builder.Diagnostics.Add(diagnostic);
return builder;
}
}
}

View File

@ -0,0 +1,122 @@
// 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 System;
namespace Microsoft.AspNetCore.Razor.Language
{
public static class TestTagHelperDescriptorBuilderExtensions
{
public static TagHelperDescriptorBuilder TypeName(this TagHelperDescriptorBuilder builder, string typeName)
{
if (builder == null)
{
throw new ArgumentNullException(nameof(builder));
}
builder.SetTypeName(typeName);
return builder;
}
public static TagHelperDescriptorBuilder DisplayName(this TagHelperDescriptorBuilder builder, string displayName)
{
if (builder == null)
{
throw new ArgumentNullException(nameof(builder));
}
builder.DisplayName = displayName;
return builder;
}
public static TagHelperDescriptorBuilder AllowChildTag(this TagHelperDescriptorBuilder builder, string allowedChild)
{
if (builder == null)
{
throw new ArgumentNullException(nameof(builder));
}
builder.AllowedChildTags.Add(allowedChild);
return builder;
}
public static TagHelperDescriptorBuilder TagOutputHint(this TagHelperDescriptorBuilder builder, string hint)
{
if (builder == null)
{
throw new ArgumentNullException(nameof(builder));
}
builder.TagOutputHint = hint;
return builder;
}
public static TagHelperDescriptorBuilder Documentation(this TagHelperDescriptorBuilder builder, string documentation)
{
if (builder == null)
{
throw new ArgumentNullException(nameof(builder));
}
builder.Documentation = documentation;
return builder;
}
public static TagHelperDescriptorBuilder AddMetadata(this TagHelperDescriptorBuilder builder, string key, string value)
{
if (builder == null)
{
throw new ArgumentNullException(nameof(builder));
}
builder.Metadata[key] = value;
return builder;
}
public static TagHelperDescriptorBuilder AddDiagnostic(this TagHelperDescriptorBuilder builder, RazorDiagnostic diagnostic)
{
if (builder == null)
{
throw new ArgumentNullException(nameof(builder));
}
builder.Diagnostics.Add(diagnostic);
return builder;
}
public static TagHelperDescriptorBuilder BoundAttributeDescriptor(
this TagHelperDescriptorBuilder builder,
Action<BoundAttributeDescriptorBuilder> configure)
{
if (builder == null)
{
throw new ArgumentNullException(nameof(builder));
}
builder.BindAttribute(configure);
return builder;
}
public static TagHelperDescriptorBuilder TagMatchingRuleDescriptor(
this TagHelperDescriptorBuilder builder,
Action<TagMatchingRuleDescriptorBuilder> configure)
{
if (builder == null)
{
throw new ArgumentNullException(nameof(builder));
}
builder.TagMatchingRule(configure);
return builder;
}
}
}

View File

@ -0,0 +1,72 @@
// 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 System;
namespace Microsoft.AspNetCore.Razor.Language
{
public static class TestTagMatchingRuleDescriptorBuilderExtensions
{
public static TagMatchingRuleDescriptorBuilder RequireTagName(this TagMatchingRuleDescriptorBuilder builder, string tagName)
{
if (builder == null)
{
throw new ArgumentNullException(nameof(builder));
}
builder.TagName = tagName;
return builder;
}
public static TagMatchingRuleDescriptorBuilder RequireParentTag(this TagMatchingRuleDescriptorBuilder builder, string parentTag)
{
if (builder == null)
{
throw new ArgumentNullException(nameof(builder));
}
builder.ParentTag = parentTag;
return builder;
}
public static TagMatchingRuleDescriptorBuilder RequireTagStructure(this TagMatchingRuleDescriptorBuilder builder, TagStructure tagStructure)
{
if (builder == null)
{
throw new ArgumentNullException(nameof(builder));
}
builder.TagStructure = tagStructure;
return builder;
}
public static TagMatchingRuleDescriptorBuilder AddDiagnostic(this TagMatchingRuleDescriptorBuilder builder, RazorDiagnostic diagnostic)
{
if (builder == null)
{
throw new ArgumentNullException(nameof(builder));
}
builder.Diagnostics.Add(diagnostic);
return builder;
}
public static TagMatchingRuleDescriptorBuilder RequireAttributeDescriptor(
this TagMatchingRuleDescriptorBuilder builder,
Action<RequiredAttributeDescriptorBuilder> configure)
{
if (builder == null)
{
throw new ArgumentNullException(nameof(builder));
}
builder.Attribute(configure);
return builder;
}
}
}

View File

@ -24,16 +24,16 @@ namespace Microsoft.VisualStudio.LanguageServices.Razor
{ {
builder => builder builder => builder
.Name("test-attribute") .Name("test-attribute")
.SetPropertyName("TestAttribute") .PropertyName("TestAttribute")
.TypeName("string"), .TypeName("string"),
}, },
ruleBuilders: new Action<TagMatchingRuleDescriptorBuilder>[] ruleBuilders: new Action<TagMatchingRuleDescriptorBuilder>[]
{ {
builder => builder builder => builder
.RequireAttribute(attribute => attribute .RequireAttributeDescriptor(attribute => attribute
.Name("required-attribute-one") .Name("required-attribute-one")
.NameComparisonMode(RequiredAttributeDescriptor.NameComparisonMode.PrefixMatch)) .NameComparisonMode(RequiredAttributeDescriptor.NameComparisonMode.PrefixMatch))
.RequireAttribute(attribute => attribute .RequireAttributeDescriptor(attribute => attribute
.Name("required-attribute-two") .Name("required-attribute-two")
.NameComparisonMode(RequiredAttributeDescriptor.NameComparisonMode.FullMatch) .NameComparisonMode(RequiredAttributeDescriptor.NameComparisonMode.FullMatch)
.Value("something") .Value("something")
@ -67,16 +67,16 @@ namespace Microsoft.VisualStudio.LanguageServices.Razor
{ {
builder => builder builder => builder
.Name("test-attribute") .Name("test-attribute")
.SetPropertyName("TestAttribute") .PropertyName("TestAttribute")
.TypeName("string"), .TypeName("string"),
}, },
ruleBuilders: new Action<TagMatchingRuleDescriptorBuilder>[] ruleBuilders: new Action<TagMatchingRuleDescriptorBuilder>[]
{ {
builder => builder builder => builder
.RequireAttribute(attribute => attribute .RequireAttributeDescriptor(attribute => attribute
.Name("required-attribute-one") .Name("required-attribute-one")
.NameComparisonMode(RequiredAttributeDescriptor.NameComparisonMode.PrefixMatch)) .NameComparisonMode(RequiredAttributeDescriptor.NameComparisonMode.PrefixMatch))
.RequireAttribute(attribute => attribute .RequireAttributeDescriptor(attribute => attribute
.Name("required-attribute-two") .Name("required-attribute-two")
.NameComparisonMode(RequiredAttributeDescriptor.NameComparisonMode.FullMatch) .NameComparisonMode(RequiredAttributeDescriptor.NameComparisonMode.FullMatch)
.Value("something") .Value("something")
@ -112,20 +112,20 @@ namespace Microsoft.VisualStudio.LanguageServices.Razor
{ {
builder => builder builder => builder
.Name("test-attribute") .Name("test-attribute")
.SetPropertyName("TestAttribute") .PropertyName("TestAttribute")
.TypeName("SomeEnum") .TypeName("SomeEnum")
.AsEnum() .AsEnum()
.Documentation("Summary"), .Documentation("Summary"),
builder => builder builder => builder
.Name("test-attribute2") .Name("test-attribute2")
.SetPropertyName("TestAttribute2") .PropertyName("TestAttribute2")
.TypeName("SomeDictionary") .TypeName("SomeDictionary")
.AsDictionary("dict-prefix-", "string"), .AsDictionaryAttribute("dict-prefix-", "string"),
}, },
ruleBuilders: new Action<TagMatchingRuleDescriptorBuilder>[] ruleBuilders: new Action<TagMatchingRuleDescriptorBuilder>[]
{ {
builder => builder builder => builder
.RequireAttribute(attribute => attribute .RequireAttributeDescriptor(attribute => attribute
.Name("required-attribute-one") .Name("required-attribute-one")
.NameComparisonMode(RequiredAttributeDescriptor.NameComparisonMode.PrefixMatch)) .NameComparisonMode(RequiredAttributeDescriptor.NameComparisonMode.PrefixMatch))
}, },
@ -160,7 +160,7 @@ namespace Microsoft.VisualStudio.LanguageServices.Razor
{ {
foreach (var attributeBuilder in attributes) foreach (var attributeBuilder in attributes)
{ {
builder.BindAttribute(attributeBuilder); builder.BoundAttributeDescriptor(attributeBuilder);
} }
} }
@ -168,7 +168,7 @@ namespace Microsoft.VisualStudio.LanguageServices.Razor
{ {
foreach (var ruleBuilder in ruleBuilders) foreach (var ruleBuilder in ruleBuilders)
{ {
builder.TagMatchingRule(innerRuleBuilder => { builder.TagMatchingRuleDescriptor(innerRuleBuilder => {
innerRuleBuilder.RequireTagName(tagName); innerRuleBuilder.RequireTagName(tagName);
ruleBuilder(innerRuleBuilder); ruleBuilder(innerRuleBuilder);
}); });
@ -176,7 +176,7 @@ namespace Microsoft.VisualStudio.LanguageServices.Razor
} }
else else
{ {
builder.TagMatchingRule(ruleBuilder => ruleBuilder.RequireTagName(tagName)); builder.TagMatchingRuleDescriptor(ruleBuilder => ruleBuilder.RequireTagName(tagName));
} }
configureAction?.Invoke(builder); configureAction?.Invoke(builder);