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 typeName = $"__Generated__{shortName}ViewComponentTagHelper";
var displayName = shortName + "ViewComponentTagHelper";
var descriptorBuilder = TagHelperDescriptorBuilder.Create(ViewComponentTagHelperConventions.Kind, typeName, assemblyName)
.SetTypeName(typeName)
.DisplayName(displayName);
var descriptorBuilder = TagHelperDescriptorBuilder.Create(ViewComponentTagHelperConventions.Kind, typeName, assemblyName);
descriptorBuilder.SetTypeName(typeName);
descriptorBuilder.DisplayName = displayName;
if (TryFindInvokeMethod(type, out var method, out var diagnostic))
{
var methodParameters = method.Parameters;
descriptorBuilder.TagMatchingRule(ruleBuilder =>
{
ruleBuilder.RequireTagName(tagName);
ruleBuilder.TagName = tagName;
AddRequiredAttributes(methodParameters, ruleBuilder);
});
@ -73,10 +73,10 @@ namespace Microsoft.AspNetCore.Mvc.Razor.Extensions
}
else
{
descriptorBuilder.AddDiagnostic(diagnostic);
descriptorBuilder.Diagnostics.Add(diagnostic);
}
descriptorBuilder.AddMetadata(ViewComponentTagHelperMetadata.Name, shortName);
descriptorBuilder.Metadata[ViewComponentTagHelperMetadata.Name] = shortName;
var descriptor = descriptorBuilder.Build();
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
// because there are two ways of setting values for the attribute.
builder.RequireAttribute(attributeBuilder =>
builder.Attribute(attributeBuilder =>
{
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 =>
{
attributeBuilder
.Name(lowerKebabName)
.SetPropertyName(parameter.Name)
.TypeName(typeName)
.DisplayName($"{simpleName} {containingDisplayName}.{parameter.Name}");
attributeBuilder.Name = lowerKebabName;
attributeBuilder.TypeName = typeName;
attributeBuilder.DisplayName = $"{simpleName} {containingDisplayName}.{parameter.Name}";
attributeBuilder.SetPropertyName(parameter.Name);
if (parameter.Type.TypeKind == TypeKind.Enum)
{
attributeBuilder.AsEnum();
attributeBuilder.IsEnum = true;
}
else
{

View File

@ -7,23 +7,24 @@ namespace Microsoft.AspNetCore.Razor.Language
{
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 BoundAttributeDescriptorBuilder Name(string name);
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);
public abstract RazorDiagnosticCollection Diagnostics { get; }
}
}

View File

@ -7,7 +7,7 @@ namespace Microsoft.AspNetCore.Razor.Language
{
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)
{
@ -19,9 +19,7 @@ namespace Microsoft.AspNetCore.Razor.Language
throw new ArgumentNullException(nameof(propertyName));
}
builder.AddMetadata(TagHelperMetadata.Common.PropertyName, propertyName);
return builder;
builder.Metadata[TagHelperMetadata.Common.PropertyName] = propertyName;
}
public static string GetPropertyName(this BoundAttributeDescriptorBuilder builder)
@ -38,5 +36,20 @@ namespace Microsoft.AspNetCore.Razor.Language
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 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 HashSet<RazorDiagnostic> _diagnostics;
private DefaultRazorDiagnosticCollection _diagnostics;
public DefaultBoundAttributeDescriptorBuilder(DefaultTagHelperDescriptorBuilder parent, string kind)
{
@ -50,70 +42,35 @@ namespace Microsoft.AspNetCore.Razor.Language
_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 BoundAttributeDescriptorBuilder Name(string name)
public override RazorDiagnosticCollection Diagnostics
{
_name = name;
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)
get
{
throw new ArgumentNullException(nameof(displayName));
if (_diagnostics == null)
{
_diagnostics = new DefaultRazorDiagnosticCollection();
}
return _diagnostics;
}
_displayName = displayName;
return this;
}
public BoundAttributeDescriptor Build()
@ -127,15 +84,15 @@ namespace Microsoft.AspNetCore.Razor.Language
var descriptor = new DefaultBoundAttributeDescriptor(
_kind,
_name,
_typeName,
_isEnum,
_hasIndexer,
_indexerNamePrefix,
_indexerValueTypeName,
_documentation,
Name,
TypeName,
IsEnum,
IsDictionary,
IndexerAttributeNamePrefix,
IndexerValueTypeName,
Documentation,
GetDisplayName(),
new Dictionary<string, string>(_metadata),
new Dictionary<string, string>(Metadata),
diagnostics.ToArray());
return descriptor;
@ -143,28 +100,28 @@ namespace Microsoft.AspNetCore.Razor.Language
private string GetDisplayName()
{
if (_displayName != null)
if (DisplayName != null)
{
return _displayName;
return DisplayName;
}
var parentTypeName = _parent.GetTypeName();
var propertyName = this.GetPropertyName();
if (_typeName != null &&
if (TypeName != null &&
propertyName != null &&
parentTypeName != null)
{
// 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 _name;
return Name;
}
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.
const string DataDashPrefix = "data-";
if (string.IsNullOrWhiteSpace(_name))
if (string.IsNullOrWhiteSpace(Name))
{
if (_indexerNamePrefix == null)
if (IndexerAttributeNamePrefix == null)
{
var diagnostic = RazorDiagnosticFactory.CreateTagHelper_InvalidBoundAttributeNullOrWhitespace(
_parent.GetDisplayName(),
@ -186,24 +143,24 @@ namespace Microsoft.AspNetCore.Razor.Language
}
else
{
if (_name.StartsWith(DataDashPrefix, StringComparison.OrdinalIgnoreCase))
if (Name.StartsWith(DataDashPrefix, StringComparison.OrdinalIgnoreCase))
{
var diagnostic = RazorDiagnosticFactory.CreateTagHelper_InvalidBoundAttributeNameStartsWith(
_parent.GetDisplayName(),
GetDisplayName(),
_name);
Name);
yield return diagnostic;
}
foreach (var character in _name)
foreach (var character in Name)
{
if (char.IsWhiteSpace(character) || HtmlConventions.InvalidNonWhitespaceHtmlCharacters.Contains(character))
{
var diagnostic = RazorDiagnosticFactory.CreateTagHelper_InvalidBoundAttributeName(
_parent.GetDisplayName(),
GetDisplayName(),
_name,
Name,
character);
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(
_parent.GetDisplayName(),
GetDisplayName(),
_indexerNamePrefix);
IndexerAttributeNamePrefix);
yield return diagnostic;
}
else if (_indexerNamePrefix.Length > 0 && string.IsNullOrWhiteSpace(_indexerNamePrefix))
else if (IndexerAttributeNamePrefix.Length > 0 && string.IsNullOrWhiteSpace(IndexerAttributeNamePrefix))
{
var diagnostic = RazorDiagnosticFactory.CreateTagHelper_InvalidBoundAttributeNullOrWhitespace(
_parent.GetDisplayName(),
@ -232,14 +189,14 @@ namespace Microsoft.AspNetCore.Razor.Language
}
else
{
foreach (var character in _indexerNamePrefix)
foreach (var character in IndexerAttributeNamePrefix)
{
if (char.IsWhiteSpace(character) || HtmlConventions.InvalidNonWhitespaceHtmlCharacters.Contains(character))
{
var diagnostic = RazorDiagnosticFactory.CreateTagHelper_InvalidBoundAttributePrefix(
_parent.GetDisplayName(),
GetDisplayName(),
_indexerNamePrefix,
IndexerAttributeNamePrefix,
character);
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
{
private string _name;
private RequiredAttributeDescriptor.NameComparisonMode _nameComparison;
private string _value;
private RequiredAttributeDescriptor.ValueComparisonMode _valueComparison;
private HashSet<RazorDiagnostic> _diagnostics;
private DefaultRazorDiagnosticCollection _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;
}
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;
return _diagnostics;
}
}
public RequiredAttributeDescriptor Build()
@ -60,12 +41,12 @@ namespace Microsoft.AspNetCore.Razor.Language
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(
_name,
_nameComparison,
_value,
_valueComparison,
Name,
NameComparisonMode,
Value,
ValueComparisonMode,
displayName,
diagnostics?.ToArray() ?? Array.Empty<RazorDiagnostic>());
@ -74,7 +55,7 @@ namespace Microsoft.AspNetCore.Razor.Language
private IEnumerable<RazorDiagnostic> Validate()
{
if (string.IsNullOrWhiteSpace(_name))
if (string.IsNullOrWhiteSpace(Name))
{
var diagnostic = RazorDiagnosticFactory.CreateTagHelper_InvalidTargetedAttributeNameNullOrWhitespace();
@ -82,24 +63,16 @@ namespace Microsoft.AspNetCore.Razor.Language
}
else
{
foreach (var character in _name)
foreach (var character in Name)
{
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;
}
}
}
}
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
{
// Required values
private readonly string _kind;
private readonly string _name;
private readonly string _assemblyName;
private readonly Dictionary<string, string> _metadata;
private string _displayName;
private string _documentation;
private string _tagOutputHint;
private HashSet<string> _allowedChildTags;
private List<DefaultBoundAttributeDescriptorBuilder> _attributeBuilders;
private List<DefaultTagMatchingRuleDescriptorBuilder> _tagMatchingRuleBuilders;
private HashSet<RazorDiagnostic> _diagnostics;
private DefaultRazorDiagnosticCollection _diagnostics;
public DefaultTagHelperDescriptorBuilder(string kind, string name, string assemblyName)
{
_kind = kind;
_name = name;
_assemblyName = assemblyName;
Kind = kind;
Name = name;
AssemblyName = assemblyName;
_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 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)
{
@ -43,13 +95,12 @@ namespace Microsoft.AspNetCore.Razor.Language
EnsureAttributeBuilders();
var builder = new DefaultBoundAttributeDescriptorBuilder(this, _kind);
var builder = new DefaultBoundAttributeDescriptorBuilder(this, Kind);
configure(builder);
_attributeBuilders.Add(builder);
return this;
}
public override TagHelperDescriptorBuilder TagMatchingRule(Action<TagMatchingRuleDescriptorBuilder> configure)
public override void TagMatchingRule(Action<TagMatchingRuleDescriptorBuilder> configure)
{
if (configure == null)
{
@ -61,57 +112,6 @@ namespace Microsoft.AspNetCore.Razor.Language
var builder = new DefaultTagMatchingRuleDescriptorBuilder();
configure(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()
@ -148,12 +148,12 @@ namespace Microsoft.AspNetCore.Razor.Language
}
var descriptor = new DefaultTagHelperDescriptor(
_kind,
_name,
_assemblyName,
Kind,
Name,
AssemblyName,
GetDisplayName(),
_documentation,
_tagOutputHint,
Documentation,
TagOutputHint,
tagMatchingRules,
attributes,
_allowedChildTags?.ToArray() ?? Array.Empty<string>(),
@ -165,8 +165,8 @@ namespace Microsoft.AspNetCore.Razor.Language
public override void Reset()
{
_documentation = null;
_tagOutputHint = null;
Documentation = null;
TagOutputHint = null;
_allowedChildTags?.Clear();
_attributeBuilders?.Clear();
_tagMatchingRuleBuilders?.Clear();
@ -176,12 +176,12 @@ namespace Microsoft.AspNetCore.Razor.Language
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()
@ -227,21 +227,5 @@ namespace Microsoft.AspNetCore.Razor.Language
_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
{
private string _tagName;
private string _parentTag;
private TagStructure _tagStructure;
private List<DefaultRequiredAttributeDescriptorBuilder> _requiredAttributeBuilders;
private HashSet<RazorDiagnostic> _diagnostics;
private DefaultRazorDiagnosticCollection _diagnostics;
internal DefaultTagMatchingRuleDescriptorBuilder()
{
}
public override TagMatchingRuleDescriptorBuilder RequireTagName(string tagName)
{
_tagName = tagName;
public override string TagName { get; set; }
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)
{
_tagStructure = tagStructure;
return this;
}
public override TagMatchingRuleDescriptorBuilder RequireAttribute(Action<RequiredAttributeDescriptorBuilder> configure)
public override void Attribute(Action<RequiredAttributeDescriptorBuilder> configure)
{
if (configure == null)
{
@ -53,16 +58,6 @@ namespace Microsoft.AspNetCore.Razor.Language
var builder = new DefaultRequiredAttributeDescriptorBuilder();
configure(builder);
_requiredAttributeBuilders.Add(builder);
return this;
}
public override TagMatchingRuleDescriptorBuilder AddDiagnostic(RazorDiagnostic diagnostic)
{
EnsureDiagnostics();
_diagnostics.Add(diagnostic);
return this;
}
public TagMatchingRuleDescriptor Build()
@ -87,9 +82,9 @@ namespace Microsoft.AspNetCore.Razor.Language
}
var rule = new DefaultTagMatchingRuleDescriptor(
_tagName,
_parentTag,
_tagStructure,
TagName,
ParentTag,
TagStructure,
requiredAttributes,
diagnostics.ToArray());
@ -98,42 +93,42 @@ namespace Microsoft.AspNetCore.Razor.Language
private IEnumerable<RazorDiagnostic> Validate()
{
if (string.IsNullOrWhiteSpace(_tagName))
if (string.IsNullOrWhiteSpace(TagName))
{
var diagnostic = RazorDiagnosticFactory.CreateTagHelper_InvalidTargetedTagNameNullOrWhitespace();
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))
{
var diagnostic = RazorDiagnosticFactory.CreateTagHelper_InvalidTargetedTagName(_tagName, character);
var diagnostic = RazorDiagnosticFactory.CreateTagHelper_InvalidTargetedTagName(TagName, character);
yield return diagnostic;
}
}
}
if (_parentTag != null)
if (ParentTag != null)
{
if (string.IsNullOrWhiteSpace(_parentTag))
if (string.IsNullOrWhiteSpace(ParentTag))
{
var diagnostic = RazorDiagnosticFactory.CreateTagHelper_InvalidTargetedParentTagNameNullOrWhitespace();
AddDiagnostic(diagnostic);
yield return diagnostic;
}
else
{
foreach (var character in _parentTag)
foreach (var character in ParentTag)
{
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>();
}
}
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 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);
}
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 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 TagHelperDescriptorBuilder AddMetadata(string key, string value);
public abstract TagHelperDescriptorBuilder AddDiagnostic(RazorDiagnostic diagnostic);
public abstract TagHelperDescriptorBuilder DisplayName(string displayName);
public abstract void TagMatchingRule(Action<TagMatchingRuleDescriptorBuilder> configure);
public abstract TagHelperDescriptor Build();

View File

@ -7,7 +7,7 @@ namespace Microsoft.AspNetCore.Razor.Language
{
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)
{
@ -19,9 +19,7 @@ namespace Microsoft.AspNetCore.Razor.Language
throw new ArgumentNullException(nameof(typeName));
}
builder.AddMetadata(TagHelperMetadata.Common.TypeName, typeName);
return builder;
builder.Metadata[TagHelperMetadata.Common.TypeName] = typeName;
}
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.
using System;
using System.Collections.Generic;
namespace Microsoft.AspNetCore.Razor.Language
{
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 =>
{
var htmlCasedName = HtmlConventions.ToHtmlCase(name);
ruleBuilder.RequireTagName(htmlCasedName);
ruleBuilder.TagName = htmlCasedName;
});
return;
@ -101,13 +101,13 @@ namespace Microsoft.CodeAnalysis.Razor
descriptorBuilder.TagMatchingRule(ruleBuilder =>
{
var tagName = HtmlTargetElementAttribute_Tag(targetElementAttribute);
ruleBuilder.RequireTagName(tagName);
ruleBuilder.TagName = tagName;
var parentTag = HtmlTargetElementAttribute_ParentTag(targetElementAttribute);
ruleBuilder.RequireParentTag(parentTag);
ruleBuilder.ParentTag = parentTag;
var tagStructure = HtmlTargetElementAttribute_TagStructure(targetElementAttribute);
ruleBuilder.RequireTagStructure(tagStructure);
ruleBuilder.TagStructure = tagStructure;
var requiredAttributeString = HtmlTargetElementAttribute_Attributes(targetElementAttribute);
RequiredAttributeParser.AddRequiredAttributes(requiredAttributeString, ruleBuilder);
@ -140,13 +140,13 @@ namespace Microsoft.CodeAnalysis.Razor
return;
}
builder.AllowChildTag((string)restrictChildrenAttribute.ConstructorArguments[0].Value);
builder.AllowedChildTags.Add((string)restrictChildrenAttribute.ConstructorArguments[0].Value);
if (restrictChildrenAttribute.ConstructorArguments.Length == 2)
{
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))
{
builder.Documentation(xml);
builder.Documentation = xml;
}
}
@ -177,7 +177,7 @@ namespace Microsoft.CodeAnalysis.Razor
if (outputElementHintAttribute != null)
{
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 typeName = GetFullName(property.Type);
builder
.TypeName(typeName)
.SetPropertyName(property.Name);
builder.TypeName = typeName;
builder.SetPropertyName(property.Name);
if (hasPublicSetter)
{
builder.Name(attributeName);
builder.Name = attributeName;
if (property.Type.TypeKind == TypeKind.Enum)
{
builder.AsEnum();
builder.IsEnum = true;
}
if (DesignTime)
@ -227,7 +226,7 @@ namespace Microsoft.CodeAnalysis.Razor
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.
var diagnostic = RazorDiagnosticFactory.CreateTagHelper_InvalidAttributeNameNullOrEmpty(GetFullName(containingType), property.Name);
builder.AddDiagnostic(diagnostic);
builder.Diagnostics.Add(diagnostic);
}
ConfigureDictionaryBoundAttribute(builder, property, containingType, attributeNameAttribute, attributeName, hasPublicSetter);
}
private void ConfigureDictionaryBoundAttribute(
BoundAttributeDescriptorBuilder builder,
IPropertySymbol property,
INamedTypeSymbol containingType,
AttributeData attributeNameAttribute,
string attributeName,
BoundAttributeDescriptorBuilder builder,
IPropertySymbol property,
INamedTypeSymbol containingType,
AttributeData attributeNameAttribute,
string attributeName,
bool hasPublicSetter)
{
string dictionaryAttributePrefix = null;
@ -291,7 +290,7 @@ namespace Microsoft.CodeAnalysis.Razor
// DictionaryAttributePrefix is not supported unless associated with an
// IDictionary<string, TValue> property.
var diagnostic = RazorDiagnosticFactory.CreateTagHelper_InvalidAttributePrefixNotNull(GetFullName(containingType), property.Name);
builder.AddDiagnostic(diagnostic);
builder.Diagnostics.Add(diagnostic);
}
return;
@ -301,7 +300,7 @@ namespace Microsoft.CodeAnalysis.Razor
// Must set DictionaryAttributePrefix when using HtmlAttributeNameAttribute with a dictionary property
// that lacks a public setter.
var diagnostic = RazorDiagnosticFactory.CreateTagHelper_InvalidAttributePrefixNull(GetFullName(containingType), property.Name);
builder.AddDiagnostic(diagnostic);
builder.Diagnostics.Add(diagnostic);
return;
}

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -162,7 +162,7 @@ __InputTagHelper.FooProp = 42;
.Name("bound")
.PropertyName("FooProp")
.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));
@ -253,11 +253,11 @@ __InputTagHelper.FooProp[""bound""] = 42;
{
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();

View File

@ -394,7 +394,7 @@ __tagHelperExecutionContext.AddTagHelperAttribute(""bound"", __InputTagHelper.Fo
.Name("bound")
.PropertyName("FooProp")
.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));
@ -489,11 +489,11 @@ __tagHelperExecutionContext.AddTagHelperAttribute(""foo-bound"", __InputTagHelpe
{
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();

View File

@ -482,11 +482,11 @@ namespace Microsoft.AspNetCore.Razor.Language
{
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();

View File

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

View File

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

View File

@ -110,11 +110,11 @@ namespace Microsoft.AspNetCore.Razor.Language.IntegrationTests
{
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();

View File

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

View File

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

View File

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

View File

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

View File

@ -15,7 +15,7 @@ namespace Microsoft.AspNetCore.Razor.Language
{
// Arrange
var divTagHelper = TagHelperDescriptorBuilder.Create("DivTagHelper", "SomeAssembly")
.TagMatchingRule(rule => rule.RequireTagName("div"))
.TagMatchingRuleDescriptor(rule => rule.RequireTagName("div"))
.Build();
var expectedDescriptors = new[] { divTagHelper };
var expectedAttributes = new[]
@ -44,17 +44,17 @@ namespace Microsoft.AspNetCore.Razor.Language
get
{
var strongPDivParent = TagHelperDescriptorBuilder.Create("StrongTagHelper", "SomeAssembly")
.TagMatchingRule(rule =>
.TagMatchingRuleDescriptor(rule =>
rule
.RequireTagName("strong")
.RequireParentTag("p"))
.TagMatchingRule(rule =>
.TagMatchingRuleDescriptor(rule =>
rule
.RequireTagName("strong")
.RequireParentTag("div"))
.Build();
var catchAllPParent = TagHelperDescriptorBuilder.Create("CatchAllTagHelper", "SomeAssembly")
.TagMatchingRule(rule =>
.TagMatchingRuleDescriptor(rule =>
rule
.RequireTagName("*")
.RequireParentTag("p"))
@ -120,45 +120,45 @@ namespace Microsoft.AspNetCore.Razor.Language
get
{
var divDescriptor = TagHelperDescriptorBuilder.Create("DivTagHelper", "SomeAssembly")
.TagMatchingRule(rule =>
.TagMatchingRuleDescriptor(rule =>
rule
.RequireTagName("div")
.RequireAttribute(attribute => attribute.Name("style")))
.RequireAttributeDescriptor(attribute => attribute.Name("style")))
.Build();
var inputDescriptor = TagHelperDescriptorBuilder.Create("InputTagHelper", "SomeAssembly")
.TagMatchingRule(rule =>
.TagMatchingRuleDescriptor(rule =>
rule
.RequireTagName("input")
.RequireAttribute(attribute => attribute.Name("class"))
.RequireAttribute(attribute => attribute.Name("style")))
.RequireAttributeDescriptor(attribute => attribute.Name("class"))
.RequireAttributeDescriptor(attribute => attribute.Name("style")))
.Build();
var inputWildcardPrefixDescriptor = TagHelperDescriptorBuilder.Create("InputWildCardAttribute", "SomeAssembly")
.TagMatchingRule(rule =>
.TagMatchingRuleDescriptor(rule =>
rule
.RequireTagName("input")
.RequireAttribute(attribute =>
.RequireAttributeDescriptor(attribute =>
attribute
.Name("nodashprefix")
.NameComparisonMode(RequiredAttributeDescriptor.NameComparisonMode.PrefixMatch)))
.Build();
var catchAllDescriptor = TagHelperDescriptorBuilder.Create("CatchAllTagHelper", "SomeAssembly")
.TagMatchingRule(rule =>
.TagMatchingRuleDescriptor(rule =>
rule
.RequireTagName(TagHelperMatchingConventions.ElementCatchAllName)
.RequireAttribute(attribute => attribute.Name("class")))
.RequireAttributeDescriptor(attribute => attribute.Name("class")))
.Build();
var catchAllDescriptor2 = TagHelperDescriptorBuilder.Create("CatchAllTagHelper2", "SomeAssembly")
.TagMatchingRule(rule =>
.TagMatchingRuleDescriptor(rule =>
rule
.RequireTagName(TagHelperMatchingConventions.ElementCatchAllName)
.RequireAttribute(attribute => attribute.Name("custom"))
.RequireAttribute(attribute => attribute.Name("class")))
.RequireAttributeDescriptor(attribute => attribute.Name("custom"))
.RequireAttributeDescriptor(attribute => attribute.Name("class")))
.Build();
var catchAllWildcardPrefixDescriptor = TagHelperDescriptorBuilder.Create("CatchAllWildCardAttribute", "SomeAssembly")
.TagMatchingRule(rule =>
.TagMatchingRuleDescriptor(rule =>
rule
.RequireTagName(TagHelperMatchingConventions.ElementCatchAllName)
.RequireAttribute(attribute =>
.RequireAttributeDescriptor(attribute =>
attribute
.Name("prefix-")
.NameComparisonMode(RequiredAttributeDescriptor.NameComparisonMode.PrefixMatch)))
@ -283,7 +283,7 @@ namespace Microsoft.AspNetCore.Razor.Language
{
// Arrange
var catchAllDescriptor = TagHelperDescriptorBuilder.Create("foo1", "SomeAssembly")
.TagMatchingRule(rule => rule.RequireTagName(TagHelperMatchingConventions.ElementCatchAllName))
.TagMatchingRuleDescriptor(rule => rule.RequireTagName(TagHelperMatchingConventions.ElementCatchAllName))
.Build();
var descriptors = new[] { catchAllDescriptor };
var tagHelperBinder = new TagHelperBinder("th", descriptors);
@ -303,7 +303,7 @@ namespace Microsoft.AspNetCore.Razor.Language
{
// Arrange
var catchAllDescriptor = TagHelperDescriptorBuilder.Create("foo1", "SomeAssembly")
.TagMatchingRule(rule => rule.RequireTagName(TagHelperMatchingConventions.ElementCatchAllName))
.TagMatchingRuleDescriptor(rule => rule.RequireTagName(TagHelperMatchingConventions.ElementCatchAllName))
.Build();
var descriptors = new[] { catchAllDescriptor };
var tagHelperBinder = new TagHelperBinder("th:", descriptors);
@ -330,7 +330,7 @@ namespace Microsoft.AspNetCore.Razor.Language
{
// Arrange
var divDescriptor = TagHelperDescriptorBuilder.Create("foo1", "SomeAssembly")
.TagMatchingRule(rule => rule.RequireTagName("div"))
.TagMatchingRuleDescriptor(rule => rule.RequireTagName("div"))
.Build();
var descriptors = new[] { divDescriptor };
var tagHelperBinder = new TagHelperBinder("th:", descriptors);
@ -353,7 +353,7 @@ namespace Microsoft.AspNetCore.Razor.Language
{
// Arrange
var divDescriptor = TagHelperDescriptorBuilder.Create("foo1", "SomeAssembly")
.TagMatchingRule(rule => rule.RequireTagName(tagName))
.TagMatchingRuleDescriptor(rule => rule.RequireTagName(tagName))
.Build();
var descriptors = new[] { divDescriptor };
var tagHelperBinder = new TagHelperBinder("th:", descriptors);
@ -373,10 +373,10 @@ namespace Microsoft.AspNetCore.Razor.Language
{
// Arrange
var divDescriptor = TagHelperDescriptorBuilder.Create("foo1", "SomeAssembly")
.TagMatchingRule(rule => rule.RequireTagName("div"))
.TagMatchingRuleDescriptor(rule => rule.RequireTagName("div"))
.Build();
var spanDescriptor = TagHelperDescriptorBuilder.Create("foo2", "SomeAssembly")
.TagMatchingRule(rule => rule.RequireTagName("span"))
.TagMatchingRuleDescriptor(rule => rule.RequireTagName("span"))
.Build();
var descriptors = new TagHelperDescriptor[] { divDescriptor, spanDescriptor };
var tagHelperBinder = new TagHelperBinder(null, descriptors);
@ -396,13 +396,13 @@ namespace Microsoft.AspNetCore.Razor.Language
{
// Arrange
var divDescriptor = TagHelperDescriptorBuilder.Create("foo1", "SomeAssembly")
.TagMatchingRule(rule => rule.RequireTagName("div"))
.TagMatchingRuleDescriptor(rule => rule.RequireTagName("div"))
.Build();
var spanDescriptor = TagHelperDescriptorBuilder.Create("foo2", "SomeAssembly")
.TagMatchingRule(rule => rule.RequireTagName("span"))
.TagMatchingRuleDescriptor(rule => rule.RequireTagName("span"))
.Build();
var catchAllDescriptor = TagHelperDescriptorBuilder.Create("foo3", "SomeAssembly")
.TagMatchingRule(rule => rule.RequireTagName(TagHelperMatchingConventions.ElementCatchAllName))
.TagMatchingRuleDescriptor(rule => rule.RequireTagName(TagHelperMatchingConventions.ElementCatchAllName))
.Build();
var descriptors = new TagHelperDescriptor[] { divDescriptor, spanDescriptor, catchAllDescriptor };
var tagHelperBinder = new TagHelperBinder(null, descriptors);
@ -434,7 +434,7 @@ namespace Microsoft.AspNetCore.Razor.Language
{
// Arrange
var divDescriptor = TagHelperDescriptorBuilder.Create("foo1", "SomeAssembly")
.TagMatchingRule(rule => rule.RequireTagName("div"))
.TagMatchingRuleDescriptor(rule => rule.RequireTagName("div"))
.Build();
var descriptors = new TagHelperDescriptor[] { divDescriptor, divDescriptor };
var tagHelperBinder = new TagHelperBinder(null, descriptors);
@ -455,12 +455,12 @@ namespace Microsoft.AspNetCore.Razor.Language
{
// Arrange
var multiRuleDescriptor = TagHelperDescriptorBuilder.Create("foo", "SomeAssembly")
.TagMatchingRule(rule => rule
.TagMatchingRuleDescriptor(rule => rule
.RequireTagName(TagHelperMatchingConventions.ElementCatchAllName)
.RequireParentTag("body"))
.TagMatchingRule(rule => rule
.TagMatchingRuleDescriptor(rule => rule
.RequireTagName("div"))
.TagMatchingRule(rule => rule
.TagMatchingRuleDescriptor(rule => rule
.RequireTagName("span"))
.Build();
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));
}
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),
TagHelperDescriptorBuilder.Create(typeof(EnumTagHelper).FullName, AssemblyName)
.TypeName(typeof(EnumTagHelper).FullName)
.TagMatchingRule(ruleBuilder => ruleBuilder.RequireTagName("enum"))
.BindAttribute(builder =>
.TagMatchingRuleDescriptor(ruleBuilder => ruleBuilder.RequireTagName("enum"))
.BoundAttributeDescriptor(builder =>
builder
.Name("non-enum-property")
.PropertyName(nameof(EnumTagHelper.NonEnumProperty))
.TypeName(typeof(int).FullName))
.BindAttribute(builder =>
.BoundAttributeDescriptor(builder =>
builder
.Name("enum-property")
.PropertyName(nameof(EnumTagHelper.EnumProperty))
@ -342,14 +342,14 @@ namespace Microsoft.CodeAnalysis.Razor.Workspaces
typeof(MultiEnumTagHelper),
TagHelperDescriptorBuilder.Create(typeof(MultiEnumTagHelper).FullName, AssemblyName)
.TypeName(typeof(MultiEnumTagHelper).FullName)
.TagMatchingRule(ruleBuilder => ruleBuilder.RequireTagName("p"))
.TagMatchingRule(ruleBuilder => ruleBuilder.RequireTagName("input"))
.BindAttribute(builder =>
.TagMatchingRuleDescriptor(ruleBuilder => ruleBuilder.RequireTagName("p"))
.TagMatchingRuleDescriptor(ruleBuilder => ruleBuilder.RequireTagName("input"))
.BoundAttributeDescriptor(builder =>
builder
.Name("non-enum-property")
.PropertyName(nameof(MultiEnumTagHelper.NonEnumProperty))
.TypeName(typeof(int).FullName))
.BindAttribute(builder =>
.BoundAttributeDescriptor(builder =>
builder
.Name("enum-property")
.PropertyName(nameof(MultiEnumTagHelper.EnumProperty))
@ -361,19 +361,19 @@ namespace Microsoft.CodeAnalysis.Razor.Workspaces
typeof(NestedEnumTagHelper),
TagHelperDescriptorBuilder.Create(typeof(NestedEnumTagHelper).FullName, AssemblyName)
.TypeName(typeof(NestedEnumTagHelper).FullName)
.TagMatchingRule(ruleBuilder => ruleBuilder.RequireTagName("nested-enum"))
.BindAttribute(builder =>
.TagMatchingRuleDescriptor(ruleBuilder => ruleBuilder.RequireTagName("nested-enum"))
.BoundAttributeDescriptor(builder =>
builder
.Name("non-enum-property")
.PropertyName(nameof(NestedEnumTagHelper.NonEnumProperty))
.TypeName(typeof(int).FullName))
.BindAttribute(builder =>
.BoundAttributeDescriptor(builder =>
builder
.Name("enum-property")
.PropertyName(nameof(NestedEnumTagHelper.EnumProperty))
.TypeName(typeof(CustomEnum).FullName)
.AsEnum())
.BindAttribute(builder =>
.BoundAttributeDescriptor(builder =>
builder
.Name("nested-enum-property")
.PropertyName(nameof(NestedEnumTagHelper.NestedEnumProperty))
@ -413,23 +413,23 @@ namespace Microsoft.CodeAnalysis.Razor.Workspaces
typeof(RequiredParentTagHelper),
TagHelperDescriptorBuilder.Create(typeof(RequiredParentTagHelper).FullName, AssemblyName)
.TypeName(typeof(RequiredParentTagHelper).FullName)
.TagMatchingRule(builder => builder.RequireTagName("input").RequireParentTag("div"))
.TagMatchingRuleDescriptor(builder => builder.RequireTagName("input").RequireParentTag("div"))
.Build()
},
{
typeof(MultiSpecifiedRequiredParentTagHelper),
TagHelperDescriptorBuilder.Create(typeof(MultiSpecifiedRequiredParentTagHelper).FullName, AssemblyName)
.TypeName(typeof(MultiSpecifiedRequiredParentTagHelper).FullName)
.TagMatchingRule(builder => builder.RequireTagName("p").RequireParentTag("div"))
.TagMatchingRule(builder => builder.RequireTagName("input").RequireParentTag("section"))
.TagMatchingRuleDescriptor(builder => builder.RequireTagName("p").RequireParentTag("div"))
.TagMatchingRuleDescriptor(builder => builder.RequireTagName("input").RequireParentTag("section"))
.Build()
},
{
typeof(MultiWithUnspecifiedRequiredParentTagHelper),
TagHelperDescriptorBuilder.Create(typeof(MultiWithUnspecifiedRequiredParentTagHelper).FullName, AssemblyName)
.TypeName(typeof(MultiWithUnspecifiedRequiredParentTagHelper).FullName)
.TagMatchingRule(builder => builder.RequireTagName("p"))
.TagMatchingRule(builder => builder.RequireTagName("input").RequireParentTag("div"))
.TagMatchingRuleDescriptor(builder => builder.RequireTagName("p"))
.TagMatchingRuleDescriptor(builder => builder.RequireTagName("input").RequireParentTag("div"))
.Build()
},
};
@ -464,7 +464,7 @@ namespace Microsoft.CodeAnalysis.Razor.Workspaces
typeof(RestrictChildrenTagHelper),
TagHelperDescriptorBuilder.Create(typeof(RestrictChildrenTagHelper).FullName, AssemblyName)
.TypeName(typeof(RestrictChildrenTagHelper).FullName)
.TagMatchingRule(builder => builder.RequireTagName("restrict-children"))
.TagMatchingRuleDescriptor(builder => builder.RequireTagName("restrict-children"))
.AllowChildTag("p")
.Build()
},
@ -472,7 +472,7 @@ namespace Microsoft.CodeAnalysis.Razor.Workspaces
typeof(DoubleRestrictChildrenTagHelper),
TagHelperDescriptorBuilder.Create(typeof(DoubleRestrictChildrenTagHelper).FullName, AssemblyName)
.TypeName(typeof(DoubleRestrictChildrenTagHelper).FullName)
.TagMatchingRule(builder => builder.RequireTagName("double-restrict-children"))
.TagMatchingRuleDescriptor(builder => builder.RequireTagName("double-restrict-children"))
.AllowChildTag("p")
.AllowChildTag("strong")
.Build()
@ -481,8 +481,8 @@ namespace Microsoft.CodeAnalysis.Razor.Workspaces
typeof(MultiTargetRestrictChildrenTagHelper),
TagHelperDescriptorBuilder.Create(typeof(MultiTargetRestrictChildrenTagHelper).FullName, AssemblyName)
.TypeName(typeof(MultiTargetRestrictChildrenTagHelper).FullName)
.TagMatchingRule(builder => builder.RequireTagName("p"))
.TagMatchingRule(builder => builder.RequireTagName("div"))
.TagMatchingRuleDescriptor(builder => builder.RequireTagName("p"))
.TagMatchingRuleDescriptor(builder => builder.RequireTagName("div"))
.AllowChildTag("p")
.AllowChildTag("strong")
.Build()
@ -520,7 +520,7 @@ namespace Microsoft.CodeAnalysis.Razor.Workspaces
typeof(TagStructureTagHelper),
TagHelperDescriptorBuilder.Create(typeof(TagStructureTagHelper).FullName, AssemblyName)
.TypeName(typeof(TagStructureTagHelper).FullName)
.TagMatchingRule(builder => builder
.TagMatchingRuleDescriptor(builder => builder
.RequireTagName("input")
.RequireTagStructure(TagStructure.WithoutEndTag))
.Build()
@ -529,10 +529,10 @@ namespace Microsoft.CodeAnalysis.Razor.Workspaces
typeof(MultiSpecifiedTagStructureTagHelper),
TagHelperDescriptorBuilder.Create(typeof(MultiSpecifiedTagStructureTagHelper).FullName, AssemblyName)
.TypeName(typeof(MultiSpecifiedTagStructureTagHelper).FullName)
.TagMatchingRule(builder => builder
.TagMatchingRuleDescriptor(builder => builder
.RequireTagName("p")
.RequireTagStructure(TagStructure.NormalOrSelfClosing))
.TagMatchingRule(builder => builder
.TagMatchingRuleDescriptor(builder => builder
.RequireTagName("input")
.RequireTagStructure(TagStructure.WithoutEndTag))
.Build()
@ -541,9 +541,9 @@ namespace Microsoft.CodeAnalysis.Razor.Workspaces
typeof(MultiWithUnspecifiedTagStructureTagHelper),
TagHelperDescriptorBuilder.Create(typeof(MultiWithUnspecifiedTagStructureTagHelper).FullName, AssemblyName)
.TypeName(typeof(MultiWithUnspecifiedTagStructureTagHelper).FullName)
.TagMatchingRule(builder => builder
.TagMatchingRuleDescriptor(builder => builder
.RequireTagName("p"))
.TagMatchingRule(builder => builder
.TagMatchingRuleDescriptor(builder => builder
.RequireTagName("input")
.RequireTagStructure(TagStructure.WithoutEndTag))
.Build()
@ -761,7 +761,7 @@ namespace Microsoft.CodeAnalysis.Razor.Workspaces
AssemblyName,
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
.RequireAttribute(attribute => attribute.Name("class"))
.RequireAttribute(attribute => attribute.Name("style"));
.RequireAttributeDescriptor(attribute => attribute.Name("class"))
.RequireAttributeDescriptor(attribute => attribute.Name("style"));
},
})
},
@ -788,12 +788,12 @@ namespace Microsoft.CodeAnalysis.Razor.Workspaces
AssemblyName,
ruleBuilders: new Action<TagMatchingRuleDescriptorBuilder>[]
{
builder => builder.RequireAttribute(attribute => attribute.Name("custom")),
builder => builder.RequireAttributeDescriptor(attribute => attribute.Name("custom")),
builder =>
{
builder
.RequireAttribute(attribute => attribute.Name("class"))
.RequireAttribute(attribute => attribute.Name("style"));
.RequireAttributeDescriptor(attribute => attribute.Name("class"))
.RequireAttributeDescriptor(attribute => attribute.Name("style"));
},
})
},
@ -805,7 +805,7 @@ namespace Microsoft.CodeAnalysis.Razor.Workspaces
AssemblyName,
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,
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,
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
.RequireTagName("div")
.RequireAttribute(attribute => attribute.Name("class")),
.RequireAttributeDescriptor(attribute => attribute.Name("class")),
builder => builder
.RequireTagName("input")
.RequireAttribute(attribute => attribute.Name("class")),
.RequireAttributeDescriptor(attribute => attribute.Name("class")),
})
},
{
@ -854,8 +854,8 @@ namespace Microsoft.CodeAnalysis.Razor.Workspaces
AssemblyName,
ruleBuilders: new Action<TagMatchingRuleDescriptorBuilder>[]
{
builder => builder.RequireAttribute(attribute => attribute.Name("style")),
builder => builder.RequireAttribute(attribute => attribute.Name("class")),
builder => builder.RequireAttributeDescriptor(attribute => attribute.Name("style")),
builder => builder.RequireAttributeDescriptor(attribute => attribute.Name("class")),
})
},
{
@ -867,8 +867,8 @@ namespace Microsoft.CodeAnalysis.Razor.Workspaces
ruleBuilders: new Action<TagMatchingRuleDescriptorBuilder>[]
{
builder => builder
.RequireAttribute(attribute => attribute.Name("class"))
.RequireAttribute(attribute => attribute.Name("style")),
.RequireAttributeDescriptor(attribute => attribute.Name("class"))
.RequireAttributeDescriptor(attribute => attribute.Name("style")),
})
},
{
@ -881,12 +881,12 @@ namespace Microsoft.CodeAnalysis.Razor.Workspaces
{
builder => builder
.RequireTagName("div")
.RequireAttribute(attribute => attribute.Name("class"))
.RequireAttribute(attribute => attribute.Name("style")),
.RequireAttributeDescriptor(attribute => attribute.Name("class"))
.RequireAttributeDescriptor(attribute => attribute.Name("style")),
builder => builder
.RequireTagName("input")
.RequireAttribute(attribute => attribute.Name("class"))
.RequireAttribute(attribute => attribute.Name("style")),
.RequireAttributeDescriptor(attribute => attribute.Name("class"))
.RequireAttributeDescriptor(attribute => attribute.Name("style")),
})
},
{
@ -898,7 +898,7 @@ namespace Microsoft.CodeAnalysis.Razor.Workspaces
ruleBuilders: new Action<TagMatchingRuleDescriptorBuilder>[]
{
builder => builder
.RequireAttribute(attribute => attribute
.RequireAttributeDescriptor(attribute => attribute
.Name("class")
.NameComparisonMode(RequiredAttributeDescriptor.NameComparisonMode.PrefixMatch)),
})
@ -912,10 +912,10 @@ namespace Microsoft.CodeAnalysis.Razor.Workspaces
ruleBuilders: new Action<TagMatchingRuleDescriptorBuilder>[]
{
builder => builder
.RequireAttribute(attribute => attribute
.RequireAttributeDescriptor(attribute => attribute
.Name("class")
.NameComparisonMode(RequiredAttributeDescriptor.NameComparisonMode.PrefixMatch))
.RequireAttribute(attribute => attribute
.RequireAttributeDescriptor(attribute => attribute
.Name("style")
.NameComparisonMode(RequiredAttributeDescriptor.NameComparisonMode.PrefixMatch)),
})
@ -1786,7 +1786,7 @@ namespace Microsoft.CodeAnalysis.Razor.Workspaces
.Name("dictionary-property")
.PropertyName(nameof(DefaultValidHtmlAttributePrefix.DictionaryProperty))
.TypeName($"{dictionaryNamespace}<System.String, System.String>")
.AsDictionary("dictionary-property-", typeof(string).FullName);
.AsDictionaryAttribute("dictionary-property-", typeof(string).FullName);
}),
},
Enumerable.Empty<RazorDiagnostic>()
@ -1801,7 +1801,7 @@ namespace Microsoft.CodeAnalysis.Razor.Workspaces
.Name("valid-name")
.PropertyName(nameof(SingleValidHtmlAttributePrefix.DictionaryProperty))
.TypeName($"{dictionaryNamespace}<System.String, System.String>")
.AsDictionary("valid-name-", typeof(string).FullName);
.AsDictionaryAttribute("valid-name-", typeof(string).FullName);
}),
},
Enumerable.Empty<RazorDiagnostic>()
@ -1816,7 +1816,7 @@ namespace Microsoft.CodeAnalysis.Razor.Workspaces
.Name("valid-name1")
.PropertyName(nameof(MultipleValidHtmlAttributePrefix.DictionaryProperty))
.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 =>
{
@ -1824,7 +1824,7 @@ namespace Microsoft.CodeAnalysis.Razor.Workspaces
.Name("valid-name2")
.PropertyName(nameof(MultipleValidHtmlAttributePrefix.DictionarySubclassProperty))
.TypeName(typeof(DictionarySubclass).FullName)
.AsDictionary("valid-prefix2-", typeof(string).FullName);
.AsDictionaryAttribute("valid-prefix2-", typeof(string).FullName);
}),
CreateAttributeFor(typeof(MultipleValidHtmlAttributePrefix), attribute =>
{
@ -1832,7 +1832,7 @@ namespace Microsoft.CodeAnalysis.Razor.Workspaces
.Name("valid-name3")
.PropertyName(nameof(MultipleValidHtmlAttributePrefix.DictionaryWithoutParameterlessConstructorProperty))
.TypeName(typeof(DictionaryWithoutParameterlessConstructor).FullName)
.AsDictionary("valid-prefix3-", typeof(string).FullName);
.AsDictionaryAttribute("valid-prefix3-", typeof(string).FullName);
}),
CreateAttributeFor(typeof(MultipleValidHtmlAttributePrefix), attribute =>
{
@ -1840,7 +1840,7 @@ namespace Microsoft.CodeAnalysis.Razor.Workspaces
.Name("valid-name4")
.PropertyName(nameof(MultipleValidHtmlAttributePrefix.GenericDictionarySubclassProperty))
.TypeName(typeof(GenericDictionarySubclass<object>).Namespace + ".GenericDictionarySubclass<System.Object>")
.AsDictionary("valid-prefix4-", typeof(object).FullName);
.AsDictionaryAttribute("valid-prefix4-", typeof(object).FullName);
}),
CreateAttributeFor(typeof(MultipleValidHtmlAttributePrefix), attribute =>
{
@ -1848,7 +1848,7 @@ namespace Microsoft.CodeAnalysis.Razor.Workspaces
.Name("valid-name5")
.PropertyName(nameof(MultipleValidHtmlAttributePrefix.SortedDictionaryProperty))
.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 =>
{
@ -1862,14 +1862,14 @@ namespace Microsoft.CodeAnalysis.Razor.Workspaces
attribute
.PropertyName(nameof(MultipleValidHtmlAttributePrefix.GetOnlyDictionaryProperty))
.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 =>
{
attribute
.PropertyName(nameof(MultipleValidHtmlAttributePrefix.GetOnlyDictionaryPropertyWithAttributePrefix))
.TypeName($"{dictionaryNamespace}<System.String, System.String>")
.AsDictionary("valid-prefix6", typeof(string).FullName);
.AsDictionaryAttribute("valid-prefix6", typeof(string).FullName);
}),
},
Enumerable.Empty<RazorDiagnostic>()
@ -1913,7 +1913,7 @@ namespace Microsoft.CodeAnalysis.Razor.Workspaces
.Name("valid-name2")
.PropertyName(nameof(MultipleInvalidHtmlAttributePrefix.DictionaryOfIntProperty))
.TypeName($"{typeof(Dictionary<,>).Namespace}.Dictionary<System.Int32, System.String>")
.AsDictionary("valid-prefix2-", typeof(string).FullName)
.AsDictionaryAttribute("valid-prefix2-", typeof(string).FullName)
.AddDiagnostic(
RazorDiagnosticFactory.CreateTagHelper_InvalidAttributePrefixNotNull(
typeof(MultipleInvalidHtmlAttributePrefix).FullName,
@ -1947,7 +1947,7 @@ namespace Microsoft.CodeAnalysis.Razor.Workspaces
.Name("valid-name5")
.PropertyName(nameof(MultipleInvalidHtmlAttributePrefix.DictionaryOfIntSubclassProperty))
.TypeName(typeof(DictionaryOfIntSubclass).FullName)
.AsDictionary("valid-prefix5-", typeof(string).FullName)
.AsDictionaryAttribute("valid-prefix5-", typeof(string).FullName)
.AddDiagnostic(
RazorDiagnosticFactory.CreateTagHelper_InvalidAttributePrefixNotNull(
typeof(MultipleInvalidHtmlAttributePrefix).FullName,
@ -1958,7 +1958,7 @@ namespace Microsoft.CodeAnalysis.Razor.Workspaces
attribute
.PropertyName(nameof(MultipleInvalidHtmlAttributePrefix.GetOnlyDictionaryAttributePrefix))
.TypeName($"{dictionaryNamespace}<System.Int32, System.String>")
.AsDictionary("valid-prefix6", typeof(string).FullName)
.AsDictionaryAttribute("valid-prefix6", typeof(string).FullName)
.AddDiagnostic(
RazorDiagnosticFactory.CreateTagHelper_InvalidAttributePrefixNotNull(
typeof(MultipleInvalidHtmlAttributePrefix).FullName,
@ -1969,7 +1969,7 @@ namespace Microsoft.CodeAnalysis.Razor.Workspaces
attribute
.PropertyName(nameof(MultipleInvalidHtmlAttributePrefix.GetOnlyDictionaryPropertyWithAttributeName))
.TypeName($"{dictionaryNamespace}<System.String, System.Object>")
.AsDictionary("invalid-name7-", typeof(object).FullName)
.AsDictionaryAttribute("invalid-name7-", typeof(object).FullName)
.AddDiagnostic(
RazorDiagnosticFactory.CreateTagHelper_InvalidAttributePrefixNull(
typeof(MultipleInvalidHtmlAttributePrefix).FullName,
@ -2035,8 +2035,8 @@ namespace Microsoft.CodeAnalysis.Razor.Workspaces
typeof(MultipleDescriptorTagHelperWithOutputElementHint),
TagHelperDescriptorBuilder.Create(typeof(MultipleDescriptorTagHelperWithOutputElementHint).FullName, AssemblyName)
.TypeName(typeof(MultipleDescriptorTagHelperWithOutputElementHint).FullName)
.TagMatchingRule(builder => builder.RequireTagName("a"))
.TagMatchingRule(builder => builder.RequireTagName("p"))
.TagMatchingRuleDescriptor(builder => builder.RequireTagName("a"))
.TagMatchingRuleDescriptor(builder => builder.RequireTagName("p"))
.TagOutputHint("div")
.Build()
},
@ -2044,14 +2044,14 @@ namespace Microsoft.CodeAnalysis.Razor.Workspaces
typeof(InheritedOutputElementHintTagHelper),
TagHelperDescriptorBuilder.Create(typeof(InheritedOutputElementHintTagHelper).FullName, AssemblyName)
.TypeName(typeof(InheritedOutputElementHintTagHelper).FullName)
.TagMatchingRule(builder => builder.RequireTagName("inherited-output-element-hint"))
.TagMatchingRuleDescriptor(builder => builder.RequireTagName("inherited-output-element-hint"))
.Build()
},
{
typeof(OutputElementHintTagHelper),
TagHelperDescriptorBuilder.Create(typeof(OutputElementHintTagHelper).FullName, AssemblyName)
.TypeName(typeof(OutputElementHintTagHelper).FullName)
.TagMatchingRule(builder => builder.RequireTagName("output-element-hint"))
.TagMatchingRuleDescriptor(builder => builder.RequireTagName("output-element-hint"))
.TagOutputHint("hinted-value")
.Build()
},
@ -2059,7 +2059,7 @@ namespace Microsoft.CodeAnalysis.Razor.Workspaces
typeof(OverriddenOutputElementHintTagHelper),
TagHelperDescriptorBuilder.Create(typeof(OverriddenOutputElementHintTagHelper).FullName, AssemblyName)
.TypeName(typeof(OverriddenOutputElementHintTagHelper).FullName)
.TagMatchingRule(builder => builder.RequireTagName("overridden-output-element-hint"))
.TagMatchingRuleDescriptor(builder => builder.RequireTagName("overridden-output-element-hint"))
.TagOutputHint("overridden")
.Build()
},
@ -2330,7 +2330,7 @@ namespace Microsoft.CodeAnalysis.Razor.Workspaces
{
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)
{
builder.TagMatchingRule(innerRuleBuilder =>
builder.TagMatchingRuleDescriptor(innerRuleBuilder =>
{
innerRuleBuilder.RequireTagName(tagName);
ruleBuilder(innerRuleBuilder);
@ -2347,7 +2347,7 @@ namespace Microsoft.CodeAnalysis.Razor.Workspaces
}
else
{
builder.TagMatchingRule(ruleBuilder => ruleBuilder.RequireTagName(tagName));
builder.TagMatchingRuleDescriptor(ruleBuilder => ruleBuilder.RequireTagName(tagName));
}
var descriptor = builder.Build();

View File

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

View File

@ -20,7 +20,7 @@ namespace Microsoft.VisualStudio.LanguageServices.Razor
var documentDescriptors = new[]
{
TagHelperDescriptorBuilder.Create("TestType", "TestAssembly")
.TagMatchingRule(rule => rule.RequireTagName("*"))
.TagMatchingRuleDescriptor(rule => rule.RequireTagName("*"))
.Build()
};
var documentContext = TagHelperDocumentContext.Create(string.Empty, documentDescriptors);
@ -40,29 +40,29 @@ namespace Microsoft.VisualStudio.LanguageServices.Razor
var documentDescriptors = new[]
{
TagHelperDescriptorBuilder.Create("TestType", "TestAssembly")
.TagMatchingRule(rule =>
.TagMatchingRuleDescriptor(rule =>
rule
.RequireTagName("a")
.RequireAttribute(attribute => attribute.Name("asp-for")))
.BindAttribute(attribute =>
.RequireAttributeDescriptor(attribute => attribute.Name("asp-for")))
.BoundAttributeDescriptor(attribute =>
attribute
.Name("asp-for")
.TypeName(typeof(string).FullName)
.SetPropertyName("AspFor"))
.BindAttribute(attribute =>
.PropertyName("AspFor"))
.BoundAttributeDescriptor(attribute =>
attribute
.Name("asp-route")
.TypeName(typeof(IDictionary<string, string>).Namespace + "IDictionary<string, string>")
.SetPropertyName("AspRoute")
.AsDictionary("asp-route-", typeof(string).FullName))
.PropertyName("AspRoute")
.AsDictionaryAttribute("asp-route-", typeof(string).FullName))
.Build(),
TagHelperDescriptorBuilder.Create("TestType", "TestAssembly")
.TagMatchingRule(rule => rule.RequireTagName("input"))
.BindAttribute(attribute =>
.TagMatchingRuleDescriptor(rule => rule.RequireTagName("input"))
.BoundAttributeDescriptor(attribute =>
attribute
.Name("asp-for")
.TypeName(typeof(string).FullName)
.SetPropertyName("AspFor"))
.PropertyName("AspFor"))
.Build(),
};
var documentContext = TagHelperDocumentContext.Create(string.Empty, documentDescriptors);
@ -89,18 +89,18 @@ namespace Microsoft.VisualStudio.LanguageServices.Razor
var documentDescriptors = new[]
{
TagHelperDescriptorBuilder.Create("TestType", "TestAssembly")
.TagMatchingRule(rule => rule.RequireTagName("a"))
.BindAttribute(attribute =>
.TagMatchingRuleDescriptor(rule => rule.RequireTagName("a"))
.BoundAttributeDescriptor(attribute =>
attribute
.Name("asp-for")
.TypeName(typeof(string).FullName)
.SetPropertyName("AspFor"))
.BindAttribute(attribute =>
.PropertyName("AspFor"))
.BoundAttributeDescriptor(attribute =>
attribute
.Name("asp-route")
.TypeName(typeof(IDictionary<string, string>).Namespace + "IDictionary<string, string>")
.SetPropertyName("AspRoute")
.AsDictionary("asp-route-", typeof(string).FullName))
.PropertyName("AspRoute")
.AsDictionaryAttribute("asp-route-", typeof(string).FullName))
.Build()
};
var expectedAttributeDescriptors = new[]
@ -125,17 +125,17 @@ namespace Microsoft.VisualStudio.LanguageServices.Razor
var documentDescriptors = new[]
{
TagHelperDescriptorBuilder.Create("TestType", "TestAssembly")
.TagMatchingRule(rule => rule.RequireTagName("input"))
.BindAttribute(attribute =>
.TagMatchingRuleDescriptor(rule => rule.RequireTagName("input"))
.BoundAttributeDescriptor(attribute =>
attribute
.Name("asp-for")
.TypeName(typeof(string).FullName)
.SetPropertyName("AspFor"))
.BindAttribute(attribute =>
.PropertyName("AspFor"))
.BoundAttributeDescriptor(attribute =>
attribute
.Name("asp-extra")
.TypeName(typeof(string).FullName)
.SetPropertyName("AspExtra"))
.PropertyName("AspExtra"))
.Build()
};
var expectedAttributeDescriptors = new[]
@ -160,7 +160,7 @@ namespace Microsoft.VisualStudio.LanguageServices.Razor
var documentDescriptors = new[]
{
TagHelperDescriptorBuilder.Create("TestType", "TestAssembly")
.TagMatchingRule(rule => rule.RequireTagName("*"))
.TagMatchingRuleDescriptor(rule => rule.RequireTagName("*"))
.Build()
};
var documentContext = TagHelperDocumentContext.Create(string.Empty, documentDescriptors);
@ -180,7 +180,7 @@ namespace Microsoft.VisualStudio.LanguageServices.Razor
var documentDescriptors = new[]
{
TagHelperDescriptorBuilder.Create("TestType", "TestAssembly")
.TagMatchingRule(rule => rule.RequireTagName("strong"))
.TagMatchingRuleDescriptor(rule => rule.RequireTagName("strong"))
.Build()
};
var documentContext = TagHelperDocumentContext.Create(string.Empty, documentDescriptors);
@ -200,7 +200,7 @@ namespace Microsoft.VisualStudio.LanguageServices.Razor
var expectedDescriptors = new[]
{
TagHelperDescriptorBuilder.Create("TestType", "TestAssembly")
.TagMatchingRule(
.TagMatchingRuleDescriptor(
rule => rule
.RequireTagName("a")
.RequireParentTag("div"))
@ -210,7 +210,7 @@ namespace Microsoft.VisualStudio.LanguageServices.Razor
{
expectedDescriptors[0],
TagHelperDescriptorBuilder.Create("TestType2", "TestAssembly")
.TagMatchingRule(
.TagMatchingRuleDescriptor(
rule => rule
.RequireTagName("strong")
.RequireParentTag("div"))
@ -233,14 +233,14 @@ namespace Microsoft.VisualStudio.LanguageServices.Razor
var expectedDescriptors = new[]
{
TagHelperDescriptorBuilder.Create("TestType", "TestAssembly")
.TagMatchingRule(rule => rule.RequireTagName("strong"))
.TagMatchingRuleDescriptor(rule => rule.RequireTagName("strong"))
.Build()
};
var documentDescriptors = new[]
{
expectedDescriptors[0],
TagHelperDescriptorBuilder.Create("TestType2", "TestAssembly")
.TagMatchingRule(rule => rule.RequireTagName("thstrong"))
.TagMatchingRuleDescriptor(rule => rule.RequireTagName("thstrong"))
.Build()
};
var documentContext = TagHelperDocumentContext.Create("th", documentDescriptors);
@ -260,7 +260,7 @@ namespace Microsoft.VisualStudio.LanguageServices.Razor
var expectedDescriptors = new[]
{
TagHelperDescriptorBuilder.Create("TestType", "TestAssembly")
.TagMatchingRule(
.TagMatchingRuleDescriptor(
rule => rule
.RequireTagName("strong")
.RequireParentTag("div"))
@ -270,7 +270,7 @@ namespace Microsoft.VisualStudio.LanguageServices.Razor
{
expectedDescriptors[0],
TagHelperDescriptorBuilder.Create("TestType2", "TestAssembly")
.TagMatchingRule(
.TagMatchingRuleDescriptor(
rule => rule
.RequireTagName("strong")
.RequireParentTag("p"))
@ -293,7 +293,7 @@ namespace Microsoft.VisualStudio.LanguageServices.Razor
var documentDescriptors = new[]
{
TagHelperDescriptorBuilder.Create("TestType", "TestAssembly")
.TagMatchingRule(rule => rule.RequireTagName("div"))
.TagMatchingRuleDescriptor(rule => rule.RequireTagName("div"))
.Build()
};
var documentContext = TagHelperDocumentContext.Create(string.Empty, documentDescriptors);
@ -313,10 +313,10 @@ namespace Microsoft.VisualStudio.LanguageServices.Razor
var documentDescriptors = new[]
{
TagHelperDescriptorBuilder.Create("DivTagHelper", "TestAssembly")
.TagMatchingRule(rule => rule.RequireTagName("div"))
.TagMatchingRuleDescriptor(rule => rule.RequireTagName("div"))
.Build(),
TagHelperDescriptorBuilder.Create("PTagHelper", "TestAssembly")
.TagMatchingRule(rule => rule
.TagMatchingRuleDescriptor(rule => rule
.RequireTagName("p")
.RequireParentTag("body"))
.Build()
@ -339,7 +339,7 @@ namespace Microsoft.VisualStudio.LanguageServices.Razor
var documentDescriptors = new[]
{
TagHelperDescriptorBuilder.Create("TestType", "TestAssembly")
.TagMatchingRule(rule => rule.RequireTagName("div"))
.TagMatchingRuleDescriptor(rule => rule.RequireTagName("div"))
.Build()
};
var documentContext = TagHelperDocumentContext.Create(string.Empty, documentDescriptors);
@ -359,7 +359,7 @@ namespace Microsoft.VisualStudio.LanguageServices.Razor
var expectedDescriptors = new[]
{
TagHelperDescriptorBuilder.Create("TestType", "TestAssembly")
.TagMatchingRule(
.TagMatchingRuleDescriptor(
rule => rule
.RequireTagName("p")
.RequireParentTag("div"))
@ -369,7 +369,7 @@ namespace Microsoft.VisualStudio.LanguageServices.Razor
{
expectedDescriptors[0],
TagHelperDescriptorBuilder.Create("TestType2", "TestAssembly")
.TagMatchingRule(
.TagMatchingRuleDescriptor(
rule => rule
.RequireTagName("strong")
.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
.Name("test-attribute")
.SetPropertyName("TestAttribute")
.PropertyName("TestAttribute")
.TypeName("string"),
},
ruleBuilders: new Action<TagMatchingRuleDescriptorBuilder>[]
{
builder => builder
.RequireAttribute(attribute => attribute
.RequireAttributeDescriptor(attribute => attribute
.Name("required-attribute-one")
.NameComparisonMode(RequiredAttributeDescriptor.NameComparisonMode.PrefixMatch))
.RequireAttribute(attribute => attribute
.RequireAttributeDescriptor(attribute => attribute
.Name("required-attribute-two")
.NameComparisonMode(RequiredAttributeDescriptor.NameComparisonMode.FullMatch)
.Value("something")
@ -67,16 +67,16 @@ namespace Microsoft.VisualStudio.LanguageServices.Razor
{
builder => builder
.Name("test-attribute")
.SetPropertyName("TestAttribute")
.PropertyName("TestAttribute")
.TypeName("string"),
},
ruleBuilders: new Action<TagMatchingRuleDescriptorBuilder>[]
{
builder => builder
.RequireAttribute(attribute => attribute
.RequireAttributeDescriptor(attribute => attribute
.Name("required-attribute-one")
.NameComparisonMode(RequiredAttributeDescriptor.NameComparisonMode.PrefixMatch))
.RequireAttribute(attribute => attribute
.RequireAttributeDescriptor(attribute => attribute
.Name("required-attribute-two")
.NameComparisonMode(RequiredAttributeDescriptor.NameComparisonMode.FullMatch)
.Value("something")
@ -112,20 +112,20 @@ namespace Microsoft.VisualStudio.LanguageServices.Razor
{
builder => builder
.Name("test-attribute")
.SetPropertyName("TestAttribute")
.PropertyName("TestAttribute")
.TypeName("SomeEnum")
.AsEnum()
.Documentation("Summary"),
builder => builder
.Name("test-attribute2")
.SetPropertyName("TestAttribute2")
.PropertyName("TestAttribute2")
.TypeName("SomeDictionary")
.AsDictionary("dict-prefix-", "string"),
.AsDictionaryAttribute("dict-prefix-", "string"),
},
ruleBuilders: new Action<TagMatchingRuleDescriptorBuilder>[]
{
builder => builder
.RequireAttribute(attribute => attribute
.RequireAttributeDescriptor(attribute => attribute
.Name("required-attribute-one")
.NameComparisonMode(RequiredAttributeDescriptor.NameComparisonMode.PrefixMatch))
},
@ -160,7 +160,7 @@ namespace Microsoft.VisualStudio.LanguageServices.Razor
{
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)
{
builder.TagMatchingRule(innerRuleBuilder => {
builder.TagMatchingRuleDescriptor(innerRuleBuilder => {
innerRuleBuilder.RequireTagName(tagName);
ruleBuilder(innerRuleBuilder);
});
@ -176,7 +176,7 @@ namespace Microsoft.VisualStudio.LanguageServices.Razor
}
else
{
builder.TagMatchingRule(ruleBuilder => ruleBuilder.RequireTagName(tagName));
builder.TagMatchingRuleDescriptor(ruleBuilder => ruleBuilder.RequireTagName(tagName));
}
configureAction?.Invoke(builder);