private static TryParseResult TryParseMinimizedAttribute( string tagName, MarkupMinimizedAttributeBlockSyntax attributeBlock, IEnumerable <TagHelperDescriptor> descriptors, ErrorSink errorSink, HashSet <string> processedBoundAttributeNames) { // Have a name now. Able to determine correct isBoundNonStringAttribute value. var result = CreateTryParseResult(attributeBlock.Name.GetContent(), descriptors, processedBoundAttributeNames); result.AttributeStructure = AttributeStructure.Minimized; if (result.IsDirectiveAttribute) { // Directive attributes have a different syntax. result.RewrittenAttribute = RewriteToMinimizedDirectiveAttribute(attributeBlock, result); return(result); } else { var rewritten = SyntaxFactory.MarkupMinimizedTagHelperAttribute( attributeBlock.NamePrefix, attributeBlock.Name); rewritten = rewritten.WithTagHelperAttributeInfo( new TagHelperAttributeInfo(result.AttributeName, parameterName: null, result.AttributeStructure, result.IsBoundAttribute, isDirectiveAttribute: false)); result.RewrittenAttribute = rewritten; return(result); } }
public override void VisitMarkupMinimizedAttributeBlock(MarkupMinimizedAttributeBlockSyntax node) { WriteBlock(node, FormattingBlockKind.Markup, n => { var mergedAttributePrefix = SyntaxUtilities.MergeTextLiterals(node.NamePrefix, node.Name); Visit(mergedAttributePrefix); }); }
public override void VisitMarkupMinimizedAttributeBlock(MarkupMinimizedAttributeBlockSyntax node) { WriteBlock(node, BlockKindInternal.Markup, n => { var mergedAttributePrefix = MergeTextLiteralSpans(node.NamePrefix, node.Name); Visit(mergedAttributePrefix); }); }
private static MarkupMinimizedTagHelperDirectiveAttributeSyntax RewriteToMinimizedDirectiveAttribute( MarkupMinimizedAttributeBlockSyntax attributeBlock, TryParseResult result) { // // Consider, <Foo @bind:param /> // We're now going to rewrite @bind:param from a regular MarkupAttributeBlock to a MarkupTagHelperDirectiveAttribute. // We need to split the name "@bind:param" into four parts, // @ - Transition (MetaCode) // bind - Name (Text) // : - Colon (MetaCode) // param - ParameterName (Text) // var attributeName = result.AttributeName; var attributeNameSyntax = attributeBlock.Name; var transition = SyntaxFactory.RazorMetaCode( new SyntaxList <SyntaxToken>(SyntaxFactory.MissingToken(SyntaxKind.Transition))); RazorMetaCodeSyntax colon = null; MarkupTextLiteralSyntax parameterName = null; if (attributeName.StartsWith("@", StringComparison.Ordinal)) { attributeName = attributeName.Substring(1); var attributeNameToken = SyntaxFactory.Token(SyntaxKind.Text, attributeName); attributeNameSyntax = SyntaxFactory.MarkupTextLiteral().AddLiteralTokens(attributeNameToken); var transitionToken = SyntaxFactory.Token(SyntaxKind.Transition, "@"); transition = SyntaxFactory.RazorMetaCode(new SyntaxList <SyntaxToken>(transitionToken)); } if (attributeName.IndexOf(':') != -1) { var segments = attributeName.Split(new[] { ':' }, 2); var attributeNameToken = SyntaxFactory.Token(SyntaxKind.Text, segments[0]); attributeNameSyntax = SyntaxFactory.MarkupTextLiteral().AddLiteralTokens(attributeNameToken); var colonToken = SyntaxFactory.Token(SyntaxKind.Colon, ":"); colon = SyntaxFactory.RazorMetaCode(new SyntaxList <SyntaxToken>(colonToken)); var parameterNameToken = SyntaxFactory.Token(SyntaxKind.Text, segments[1]); parameterName = SyntaxFactory.MarkupTextLiteral().AddLiteralTokens(parameterNameToken); } var rewritten = SyntaxFactory.MarkupMinimizedTagHelperDirectiveAttribute( attributeBlock.NamePrefix, transition, attributeNameSyntax, colon, parameterName); rewritten = rewritten.WithTagHelperAttributeInfo( new TagHelperAttributeInfo(result.AttributeName, parameterName?.GetContent(), result.AttributeStructure, result.IsBoundAttribute, isDirectiveAttribute: true)); return(rewritten); }
public override void VisitMarkupMinimizedAttributeBlock(MarkupMinimizedAttributeBlockSyntax node) { var name = node.Name.GetContent(); if (name.StartsWith("data-", StringComparison.OrdinalIgnoreCase) && !_featureFlags.EXPERIMENTAL_AllowConditionalDataDashAttributes) { base.VisitMarkupMinimizedAttributeBlock(node); return; } // Minimized attributes are just html content. var literals = MergeLiterals( node.NamePrefix?.LiteralTokens, node.Name?.LiteralTokens); var literal = SyntaxFactory.MarkupTextLiteral(literals).Green.CreateRed(node.Parent, node.Position); Visit(literal); }
public override void VisitMarkupMinimizedAttributeBlock(MarkupMinimizedAttributeBlockSyntax node) { Visit(node.NamePrefix); AddSemanticRange(node.Name, RazorSemanticTokensLegend.MarkupAttribute); }
public override void VisitMarkupMinimizedAttributeBlock(MarkupMinimizedAttributeBlockSyntax node) { AddSemanticRange(node.Name, SyntaxKind.MarkupAttributeBlock); base.VisitMarkupMinimizedAttributeBlock(node); }