예제 #1
0
        public static RazorSyntaxTree Rewrite(RazorSyntaxTree syntaxTree, string tagHelperPrefix, IEnumerable <TagHelperDescriptor> descriptors)
        {
            var errorSink = new ErrorSink();

            syntaxTree = MarkupElementRewriter.AddMarkupElements(syntaxTree);

            var rewriter = new Rewriter(
                syntaxTree.Source,
                tagHelperPrefix,
                descriptors,
                syntaxTree.Options.FeatureFlags,
                errorSink);

            var rewritten = rewriter.Visit(syntaxTree.Root);

            var errorList = new List <RazorDiagnostic>();

            errorList.AddRange(errorSink.Errors);
            errorList.AddRange(descriptors.SelectMany(d => d.GetAllDiagnostics()));

            var diagnostics = CombineErrors(syntaxTree.Diagnostics, errorList).OrderBy(error => error.Span.AbsoluteIndex);

            var newSyntaxTree = RazorSyntaxTree.Create(rewritten, syntaxTree.Source, diagnostics, syntaxTree.Options);

            newSyntaxTree = MarkupElementRewriter.RemoveMarkupElements(newSyntaxTree);

            return(newSyntaxTree);
        }
예제 #2
0
        private void RewriterTest(string input)
        {
            var syntaxTree = ParseDocument(input, designTime: false);
            var rewritten  = MarkupElementRewriter.AddMarkupElements(syntaxTree);

            BaselineTest(rewritten);

            var unrewritten = MarkupElementRewriter.RemoveMarkupElements(rewritten);

            Assert.Equal(syntaxTree.Root.SerializedValue, unrewritten.Root.SerializedValue);
        }