private static bool TryGetRequiredAttributeDescriptors( string requiredAttributes, ErrorSink errorSink, out IEnumerable<TagHelperRequiredAttributeDescriptor> descriptors) { var parser = new RequiredAttributeParser(requiredAttributes); return parser.TryParse(errorSink, out descriptors); }
private void AddTagMatchingRules(INamedTypeSymbol type, TagHelperDescriptorBuilder descriptorBuilder) { var targetElementAttributes = type .GetAttributes() .Where(attribute => SymbolEqualityComparer.Default.Equals(attribute.AttributeClass, _htmlTargetElementAttributeSymbol)); // If there isn't an attribute specifying the tag name derive it from the name if (!targetElementAttributes.Any()) { var name = type.Name; if (name.EndsWith(TagHelperNameEnding, StringComparison.OrdinalIgnoreCase)) { name = name.Substring(0, name.Length - TagHelperNameEnding.Length); } descriptorBuilder.TagMatchingRule(ruleBuilder => { var htmlCasedName = HtmlConventions.ToHtmlCase(name); ruleBuilder.TagName = htmlCasedName; }); return; } foreach (var targetElementAttribute in targetElementAttributes) { descriptorBuilder.TagMatchingRule(ruleBuilder => { var tagName = HtmlTargetElementAttribute_Tag(targetElementAttribute); ruleBuilder.TagName = tagName; var parentTag = HtmlTargetElementAttribute_ParentTag(targetElementAttribute); ruleBuilder.ParentTag = parentTag; var tagStructure = HtmlTargetElementAttribute_TagStructure(targetElementAttribute); ruleBuilder.TagStructure = tagStructure; var requiredAttributeString = HtmlTargetElementAttribute_Attributes(targetElementAttribute); RequiredAttributeParser.AddRequiredAttributes(requiredAttributeString, ruleBuilder); }); } }