示例#1
0
 public override void VisitMarkupTextLiteral(MarkupTextLiteralSyntax node)
 {
     if (!node.ContainsOnlyWhitespace())
     {
         AddSemanticRange(node, RazorSemanticTokensLegend.MarkupTextLiteral);
     }
 }
        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);
        }
示例#3
0
        public override void VisitMarkupTextLiteral(MarkupTextLiteralSyntax node)
        {
            if (node.Parent is MarkupLiteralAttributeValueSyntax)
            {
                base.VisitMarkupTextLiteral(node);
                return;
            }

            WriteSpan(node, FormattingSpanKind.Markup);
            base.VisitMarkupTextLiteral(node);
        }
示例#4
0
            public override SyntaxNode VisitMarkupTextLiteral(MarkupTextLiteralSyntax node)
            {
                var tagParent        = node.FirstAncestorOrSelf <SyntaxNode>(n => n is MarkupStartTagSyntax || n is MarkupEndTagSyntax);
                var isPartofTagBlock = tagParent != null;

                if (!isPartofTagBlock)
                {
                    ValidateParentAllowsContent(node);
                }

                return(base.VisitMarkupTextLiteral(node));
            }
示例#5
0
            public override SyntaxNode VisitMarkupTextLiteral(MarkupTextLiteralSyntax node)
            {
                if (!_tryParseResult.IsBoundNonStringAttribute)
                {
                    return(base.VisitMarkupTextLiteral(node));
                }

                _rewriteAsMarkup = true;
                node             = (MarkupTextLiteralSyntax)ConfigureNonStringAttribute(node);
                var tokens = new SyntaxList <SyntaxToken>(node.LiteralTokens);
                var value  = SyntaxFactory.CSharpExpressionLiteral(tokens);

                return(value.WithSpanContext(node.GetSpanContext()));
            }
示例#6
0
 public override void VisitMarkupTextLiteral(MarkupTextLiteralSyntax node)
 {
     WriteNode(node, isHtml: true, base.VisitMarkupTextLiteral);
 }
 public override void VisitMarkupTextLiteral(MarkupTextLiteralSyntax node)
 {
     // Don't return anything for MarkupTextLiterals. It translates to "text" on the VS side, which is the default color anyway
 }
示例#8
0
            public override void VisitMarkupTextLiteral(MarkupTextLiteralSyntax node)
            {
                var context = node.GetSpanContext();

                if (context != null && context.ChunkGenerator == SpanChunkGenerator.Null)
                {
                    base.VisitMarkupTextLiteral(node);
                    return;
                }

                if (node.LiteralTokens.Count == 1)
                {
                    var token = node.LiteralTokens[0];
                    if (token != null &&
                        token.Kind == SyntaxKind.Marker &&
                        token.Content.Length == 0)
                    {
                        // We don't want to create IR nodes for marker tokens.
                        base.VisitMarkupTextLiteral(node);
                        return;
                    }
                }

                var source          = BuildSourceSpanFromNode(node);
                var currentChildren = _builder.Current.Children;

                if (currentChildren.Count > 0 && currentChildren[currentChildren.Count - 1] is HtmlContentIntermediateNode)
                {
                    var existingHtmlContent = (HtmlContentIntermediateNode)currentChildren[currentChildren.Count - 1];

                    if (existingHtmlContent.Source == null && source == null)
                    {
                        Combine(existingHtmlContent, node);
                        base.VisitMarkupTextLiteral(node);
                        return;
                    }

                    if (source != null &&
                        existingHtmlContent.Source != null &&
                        existingHtmlContent.Source.Value.FilePath == source.Value.FilePath &&
                        existingHtmlContent.Source.Value.AbsoluteIndex + existingHtmlContent.Source.Value.Length == source.Value.AbsoluteIndex)
                    {
                        Combine(existingHtmlContent, node);
                        base.VisitMarkupTextLiteral(node);
                        return;
                    }
                }

                var contentNode = new HtmlContentIntermediateNode()
                {
                    Source = source
                };

                _builder.Push(contentNode);

                _builder.Add(new IntermediateToken()
                {
                    Content = node.GetContent(),
                    Kind    = TokenKind.Html,
                    Source  = source,
                });

                _builder.Pop();

                base.VisitMarkupTextLiteral(node);
            }
示例#9
0
 public override void VisitMarkupTextLiteral(MarkupTextLiteralSyntax node)
 {
     AddSemanticRange(node, RazorSemanticTokensLegend.MarkupTextLiteral);
 }