Ejemplo n.º 1
0
        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);
            }
        }
Ejemplo n.º 2
0
 public override void VisitMarkupMinimizedAttributeBlock(MarkupMinimizedAttributeBlockSyntax node)
 {
     WriteBlock(node, FormattingBlockKind.Markup, n =>
     {
         var mergedAttributePrefix = SyntaxUtilities.MergeTextLiterals(node.NamePrefix, node.Name);
         Visit(mergedAttributePrefix);
     });
 }
Ejemplo n.º 3
0
 public override void VisitMarkupMinimizedAttributeBlock(MarkupMinimizedAttributeBlockSyntax node)
 {
     WriteBlock(node, BlockKindInternal.Markup, n =>
     {
         var mergedAttributePrefix = MergeTextLiteralSpans(node.NamePrefix, node.Name);
         Visit(mergedAttributePrefix);
     });
 }
Ejemplo n.º 4
0
        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);
        }
Ejemplo n.º 5
0
            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);
            }
Ejemplo n.º 6
0
 public override void VisitMarkupMinimizedAttributeBlock(MarkupMinimizedAttributeBlockSyntax node)
 {
     Visit(node.NamePrefix);
     AddSemanticRange(node.Name, RazorSemanticTokensLegend.MarkupAttribute);
 }
Ejemplo n.º 7
0
 public override void VisitMarkupMinimizedAttributeBlock(MarkupMinimizedAttributeBlockSyntax node)
 {
     AddSemanticRange(node.Name, SyntaxKind.MarkupAttributeBlock);
     base.VisitMarkupMinimizedAttributeBlock(node);
 }