diff --git a/src/Microsoft.AspNetCore.Razor.Language/CodeGeneration/CSharpRenderingContext.cs b/src/Microsoft.AspNetCore.Razor.Language/CodeGeneration/CSharpRenderingContext.cs index 2088b1e918..9fc1be0207 100644 --- a/src/Microsoft.AspNetCore.Razor.Language/CodeGeneration/CSharpRenderingContext.cs +++ b/src/Microsoft.AspNetCore.Razor.Language/CodeGeneration/CSharpRenderingContext.cs @@ -24,7 +24,7 @@ namespace Microsoft.AspNetCore.Razor.Language.CodeGeneration internal RazorSourceDocument SourceDocument => CodeDocument?.Source; - internal RazorParserOptions Options { get; set; } + internal RazorCodeGenerationOptions Options { get; set; } internal TagHelperRenderingContext TagHelperRenderingContext { get; set; } diff --git a/src/Microsoft.AspNetCore.Razor.Language/CodeGeneration/CodeTarget.cs b/src/Microsoft.AspNetCore.Razor.Language/CodeGeneration/CodeTarget.cs index 9a0f889c4c..e52dedb3d6 100644 --- a/src/Microsoft.AspNetCore.Razor.Language/CodeGeneration/CodeTarget.cs +++ b/src/Microsoft.AspNetCore.Razor.Language/CodeGeneration/CodeTarget.cs @@ -7,7 +7,7 @@ namespace Microsoft.AspNetCore.Razor.Language.CodeGeneration { public abstract class CodeTarget { - public static CodeTarget CreateDefault(RazorCodeDocument codeDocument, RazorParserOptions options) + public static CodeTarget CreateDefault(RazorCodeDocument codeDocument, RazorCodeGenerationOptions options) { if (codeDocument == null) { @@ -24,7 +24,7 @@ namespace Microsoft.AspNetCore.Razor.Language.CodeGeneration public static CodeTarget CreateDefault( RazorCodeDocument codeDocument, - RazorParserOptions options, + RazorCodeGenerationOptions options, Action configure) { if (codeDocument == null) @@ -39,7 +39,7 @@ namespace Microsoft.AspNetCore.Razor.Language.CodeGeneration var builder = new DefaultCodeTargetBuilder(codeDocument, options); - if (builder.Options.DesignTimeMode) + if (builder.Options.DesignTime) { AddDesignTimeDefaults(builder); } @@ -58,7 +58,7 @@ namespace Microsoft.AspNetCore.Razor.Language.CodeGeneration public static CodeTarget CreateEmpty( RazorCodeDocument codeDocument, - RazorParserOptions options, + RazorCodeGenerationOptions options, Action configure) { if (codeDocument == null) diff --git a/src/Microsoft.AspNetCore.Razor.Language/CodeGeneration/DefaultCodeTarget.cs b/src/Microsoft.AspNetCore.Razor.Language/CodeGeneration/DefaultCodeTarget.cs index 106736f244..65452f5fdc 100644 --- a/src/Microsoft.AspNetCore.Razor.Language/CodeGeneration/DefaultCodeTarget.cs +++ b/src/Microsoft.AspNetCore.Razor.Language/CodeGeneration/DefaultCodeTarget.cs @@ -1,7 +1,6 @@ // Copyright (c) .NET Foundation. All rights reserved. // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. -using System; using System.Collections.Generic; using System.Linq; @@ -9,9 +8,9 @@ namespace Microsoft.AspNetCore.Razor.Language.CodeGeneration { internal class DefaultCodeTarget : CodeTarget { - private readonly RazorParserOptions _options; + private readonly RazorCodeGenerationOptions _options; - public DefaultCodeTarget(RazorParserOptions options, IEnumerable extensions) + public DefaultCodeTarget(RazorCodeGenerationOptions options, IEnumerable extensions) { _options = options; Extensions = extensions.ToArray(); diff --git a/src/Microsoft.AspNetCore.Razor.Language/CodeGeneration/DefaultCodeTargetBuilder.cs b/src/Microsoft.AspNetCore.Razor.Language/CodeGeneration/DefaultCodeTargetBuilder.cs index 736e348828..84168507ff 100644 --- a/src/Microsoft.AspNetCore.Razor.Language/CodeGeneration/DefaultCodeTargetBuilder.cs +++ b/src/Microsoft.AspNetCore.Razor.Language/CodeGeneration/DefaultCodeTargetBuilder.cs @@ -8,7 +8,7 @@ namespace Microsoft.AspNetCore.Razor.Language.CodeGeneration { internal class DefaultCodeTargetBuilder : ICodeTargetBuilder { - public DefaultCodeTargetBuilder(RazorCodeDocument codeDocument, RazorParserOptions options) + public DefaultCodeTargetBuilder(RazorCodeDocument codeDocument, RazorCodeGenerationOptions options) { CodeDocument = codeDocument; Options = options; @@ -18,7 +18,7 @@ namespace Microsoft.AspNetCore.Razor.Language.CodeGeneration public RazorCodeDocument CodeDocument { get; } - public RazorParserOptions Options { get; } + public RazorCodeGenerationOptions Options { get; } public ICollection TargetExtensions { get; } diff --git a/src/Microsoft.AspNetCore.Razor.Language/CodeGeneration/DefaultDocumentWriter.cs b/src/Microsoft.AspNetCore.Razor.Language/CodeGeneration/DefaultDocumentWriter.cs index 9d806b6d14..40f12281a7 100644 --- a/src/Microsoft.AspNetCore.Razor.Language/CodeGeneration/DefaultDocumentWriter.cs +++ b/src/Microsoft.AspNetCore.Razor.Language/CodeGeneration/DefaultDocumentWriter.cs @@ -38,8 +38,8 @@ namespace Microsoft.AspNetCore.Razor.Language.CodeGeneration _context.RenderChildren = visitor.RenderChildren; _context.RenderNode = visitor.Visit; - _context.BasicWriter = _context.Options.DesignTimeMode ? (BasicWriter)new DesignTimeBasicWriter() : new RuntimeBasicWriter(); - _context.TagHelperWriter = _context.Options.DesignTimeMode ? (TagHelperWriter)new DesignTimeTagHelperWriter() : new RuntimeTagHelperWriter(); + _context.BasicWriter = _context.Options.DesignTime ? (BasicWriter)new DesignTimeBasicWriter() : new RuntimeBasicWriter(); + _context.TagHelperWriter = _context.Options.DesignTime ? (TagHelperWriter)new DesignTimeTagHelperWriter() : new RuntimeTagHelperWriter(); visitor.VisitDocument(node); _context.RenderChildren = null; diff --git a/src/Microsoft.AspNetCore.Razor.Language/CodeGeneration/ICodeTargetBuilder.cs b/src/Microsoft.AspNetCore.Razor.Language/CodeGeneration/ICodeTargetBuilder.cs index b87b535bad..e85779a88a 100644 --- a/src/Microsoft.AspNetCore.Razor.Language/CodeGeneration/ICodeTargetBuilder.cs +++ b/src/Microsoft.AspNetCore.Razor.Language/CodeGeneration/ICodeTargetBuilder.cs @@ -9,7 +9,7 @@ namespace Microsoft.AspNetCore.Razor.Language.CodeGeneration { RazorCodeDocument CodeDocument { get; } - RazorParserOptions Options { get; } + RazorCodeGenerationOptions Options { get; } ICollection TargetExtensions { get; } diff --git a/src/Microsoft.AspNetCore.Razor.Language/DefaultDirectiveIRPass.cs b/src/Microsoft.AspNetCore.Razor.Language/DefaultDirectiveIRPass.cs index 4321896633..a81056ce9d 100644 --- a/src/Microsoft.AspNetCore.Razor.Language/DefaultDirectiveIRPass.cs +++ b/src/Microsoft.AspNetCore.Razor.Language/DefaultDirectiveIRPass.cs @@ -15,7 +15,7 @@ namespace Microsoft.AspNetCore.Razor.Language { var parserOptions = irDocument.Options; - var designTime = parserOptions.DesignTimeMode; + var designTime = parserOptions.DesignTime; var walker = new DirectiveWalker(); walker.VisitDocument(irDocument); diff --git a/src/Microsoft.AspNetCore.Razor.Language/DefaultRazorCSharpDocument.cs b/src/Microsoft.AspNetCore.Razor.Language/DefaultRazorCSharpDocument.cs index 299b22b96c..09f6c83cbe 100644 --- a/src/Microsoft.AspNetCore.Razor.Language/DefaultRazorCSharpDocument.cs +++ b/src/Microsoft.AspNetCore.Razor.Language/DefaultRazorCSharpDocument.cs @@ -11,9 +11,11 @@ namespace Microsoft.AspNetCore.Razor.Language private readonly string _generatedCode; private readonly RazorDiagnostic[] _diagnostics; private readonly LineMapping[] _lineMappings; + private readonly RazorCodeGenerationOptions _options; public DefaultRazorCSharpDocument( string generatedCode, + RazorCodeGenerationOptions options, RazorDiagnostic[] diagnostics, LineMapping[] lineMappings) { @@ -22,7 +24,14 @@ namespace Microsoft.AspNetCore.Razor.Language throw new ArgumentNullException(nameof(generatedCode)); } + if (options == null) + { + throw new ArgumentNullException(nameof(options)); + } + _generatedCode = generatedCode; + _options = options; + _diagnostics = diagnostics ?? Array.Empty(); _lineMappings = lineMappings ?? Array.Empty(); } @@ -32,5 +41,7 @@ namespace Microsoft.AspNetCore.Razor.Language public override string GeneratedCode => _generatedCode; public override IReadOnlyList LineMappings => _lineMappings; + + public override RazorCodeGenerationOptions Options => _options; } } diff --git a/src/Microsoft.AspNetCore.Razor.Language/DefaultRazorCSharpLoweringPhase.cs b/src/Microsoft.AspNetCore.Razor.Language/DefaultRazorCSharpLoweringPhase.cs index 3a6407e8c1..c9c9271845 100644 --- a/src/Microsoft.AspNetCore.Razor.Language/DefaultRazorCSharpLoweringPhase.cs +++ b/src/Microsoft.AspNetCore.Razor.Language/DefaultRazorCSharpLoweringPhase.cs @@ -70,6 +70,7 @@ namespace Microsoft.AspNetCore.Razor.Language var csharpDocument = RazorCSharpDocument.Create( renderingContext.Writer.GenerateCode(), + irDocument.Options, diagnostics, renderingContext.LineMappings); codeDocument.SetCSharpDocument(csharpDocument); diff --git a/src/Microsoft.AspNetCore.Razor.Language/DefaultRazorCodeGenerationOptions.cs b/src/Microsoft.AspNetCore.Razor.Language/DefaultRazorCodeGenerationOptions.cs new file mode 100644 index 0000000000..b2a4a42a7b --- /dev/null +++ b/src/Microsoft.AspNetCore.Razor.Language/DefaultRazorCodeGenerationOptions.cs @@ -0,0 +1,23 @@ +// Copyright (c) .NET Foundation. All rights reserved. +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +using System; + +namespace Microsoft.AspNetCore.Razor.Language +{ + internal class DefaultRazorCodeGenerationOptions : RazorCodeGenerationOptions + { + public DefaultRazorCodeGenerationOptions(bool indentWithTabs, int indentSize, bool designTime) + { + IndentWithTabs = indentWithTabs; + IndentSize = indentSize; + DesignTime = designTime; + } + + public override bool DesignTime { get; } + + public override bool IndentWithTabs { get; } + + public override int IndentSize { get; } + } +} diff --git a/src/Microsoft.AspNetCore.Razor.Language/DefaultRazorCodeGenerationOptionsBuilder.cs b/src/Microsoft.AspNetCore.Razor.Language/DefaultRazorCodeGenerationOptionsBuilder.cs new file mode 100644 index 0000000000..4d313b3ac5 --- /dev/null +++ b/src/Microsoft.AspNetCore.Razor.Language/DefaultRazorCodeGenerationOptionsBuilder.cs @@ -0,0 +1,19 @@ +// Copyright (c) .NET Foundation. All rights reserved. +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +namespace Microsoft.AspNetCore.Razor.Language +{ + internal class DefaultRazorCodeGenerationOptionsBuilder : RazorCodeGenerationOptionsBuilder + { + public override bool DesignTime { get; set; } + + public override int IndentSize { get; set; } = 4; + + public override bool IndentWithTabs { get; set; } + + public override RazorCodeGenerationOptions Build() + { + return new DefaultRazorCodeGenerationOptions(IndentWithTabs, IndentSize, DesignTime); + } + } +} diff --git a/src/Microsoft.AspNetCore.Razor.Language/DefaultRazorDirectiveFeature.cs b/src/Microsoft.AspNetCore.Razor.Language/DefaultRazorDirectiveFeature.cs index bad74c8ecc..3e93506c72 100644 --- a/src/Microsoft.AspNetCore.Razor.Language/DefaultRazorDirectiveFeature.cs +++ b/src/Microsoft.AspNetCore.Razor.Language/DefaultRazorDirectiveFeature.cs @@ -12,7 +12,7 @@ namespace Microsoft.AspNetCore.Razor.Language public int Order => 100; - void IRazorParserOptionsFeature.Configure(RazorParserOptions options) + void IRazorParserOptionsFeature.Configure(RazorParserOptionsBuilder options) { if (options == null) { diff --git a/src/Microsoft.AspNetCore.Razor.Language/DefaultRazorIRLoweringPhase.cs b/src/Microsoft.AspNetCore.Razor.Language/DefaultRazorIRLoweringPhase.cs index 8e480f0579..ae0e4e5ff1 100644 --- a/src/Microsoft.AspNetCore.Razor.Language/DefaultRazorIRLoweringPhase.cs +++ b/src/Microsoft.AspNetCore.Razor.Language/DefaultRazorIRLoweringPhase.cs @@ -13,6 +13,13 @@ namespace Microsoft.AspNetCore.Razor.Language { internal class DefaultRazorIRLoweringPhase : RazorEnginePhaseBase, IRazorIRLoweringPhase { + private IRazorCodeGenerationOptionsFeature[] _optionsCallbacks; + + protected override void OnIntialized() + { + _optionsCallbacks = Engine.Features.OfType().OrderBy(f => f.Order).ToArray(); + } + protected override void ExecuteCore(RazorCodeDocument codeDocument) { var syntaxTree = codeDocument.GetSyntaxTree(); @@ -24,7 +31,7 @@ namespace Microsoft.AspNetCore.Razor.Language var document = new DocumentIRNode(); var builder = RazorIRBuilder.Create(document); - document.Options = syntaxTree.Options; + document.Options = CreateCodeGenerationOptions(); var checksum = ChecksumIRNode.Create(codeDocument.Source); builder.Insert(0, checksum); @@ -72,6 +79,17 @@ namespace Microsoft.AspNetCore.Razor.Language codeDocument.SetIRDocument(document); } + private RazorCodeGenerationOptions CreateCodeGenerationOptions() + { + var builder = new DefaultRazorCodeGenerationOptionsBuilder(); + for (var i = 0; i < _optionsCallbacks.Length; i++) + { + _optionsCallbacks[i].Configure(builder); + } + + return builder.Build(); + } + private class LoweringVisitor : ParserVisitor { protected readonly RazorIRBuilder _builder; diff --git a/src/Microsoft.AspNetCore.Razor.Language/DefaultRazorParserOptions.cs b/src/Microsoft.AspNetCore.Razor.Language/DefaultRazorParserOptions.cs new file mode 100644 index 0000000000..9f2825499a --- /dev/null +++ b/src/Microsoft.AspNetCore.Razor.Language/DefaultRazorParserOptions.cs @@ -0,0 +1,29 @@ +// Copyright (c) .NET Foundation. All rights reserved. +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +using System; +using System.Collections.Generic; + +namespace Microsoft.AspNetCore.Razor.Language +{ + internal class DefaultRazorParserOptions : RazorParserOptions + { + public DefaultRazorParserOptions(DirectiveDescriptor[] directives, bool designTime, bool parseOnlyLeadingDirectives) + { + if (directives == null) + { + throw new ArgumentNullException(nameof(directives)); + } + + Directives = directives; + DesignTime = designTime; + ParseOnlyLeadingDirectives = parseOnlyLeadingDirectives; + } + + public override bool DesignTime { get; } + + public override IReadOnlyCollection Directives { get; } + + public override bool ParseOnlyLeadingDirectives { get; } + } +} diff --git a/src/Microsoft.AspNetCore.Razor.Language/DefaultRazorParserOptionsBuilder.cs b/src/Microsoft.AspNetCore.Razor.Language/DefaultRazorParserOptionsBuilder.cs new file mode 100644 index 0000000000..6fd2a00f07 --- /dev/null +++ b/src/Microsoft.AspNetCore.Razor.Language/DefaultRazorParserOptionsBuilder.cs @@ -0,0 +1,22 @@ +// Copyright (c) .NET Foundation. All rights reserved. +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +using System.Collections.Generic; +using System.Linq; + +namespace Microsoft.AspNetCore.Razor.Language +{ + internal class DefaultRazorParserOptionsBuilder : RazorParserOptionsBuilder + { + public override bool DesignTime { get; set; } + + public override ICollection Directives { get; } = new List(); + + public override bool ParseOnlyLeadingDirectives { get; set; } + + public override RazorParserOptions Build() + { + return new DefaultRazorParserOptions(Directives.ToArray(), DesignTime, ParseOnlyLeadingDirectives); + } + } +} diff --git a/src/Microsoft.AspNetCore.Razor.Language/DefaultRazorParsingPhase.cs b/src/Microsoft.AspNetCore.Razor.Language/DefaultRazorParsingPhase.cs index f0fbae6fff..6f66cc538d 100644 --- a/src/Microsoft.AspNetCore.Razor.Language/DefaultRazorParsingPhase.cs +++ b/src/Microsoft.AspNetCore.Razor.Language/DefaultRazorParsingPhase.cs @@ -16,12 +16,14 @@ namespace Microsoft.AspNetCore.Razor.Language protected override void ExecuteCore(RazorCodeDocument codeDocument) { - var options = RazorParserOptions.CreateDefaultOptions(); + var builder = new DefaultRazorParserOptionsBuilder(); for (var i = 0; i < _parserOptionsCallbacks.Length; i++) { - _parserOptionsCallbacks[i].Configure(options); + _parserOptionsCallbacks[i].Configure(builder); } + var options = builder.Build(); + var syntaxTree = RazorSyntaxTree.Parse(codeDocument.Source, options); codeDocument.SetSyntaxTree(syntaxTree); diff --git a/src/Microsoft.AspNetCore.Razor.Language/DesignTimeOptionsFeature.cs b/src/Microsoft.AspNetCore.Razor.Language/DesignTimeOptionsFeature.cs new file mode 100644 index 0000000000..d7133a4bd4 --- /dev/null +++ b/src/Microsoft.AspNetCore.Razor.Language/DesignTimeOptionsFeature.cs @@ -0,0 +1,32 @@ +// Copyright (c) .NET Foundation. All rights reserved. +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +using System; + +namespace Microsoft.AspNetCore.Razor.Language +{ + internal class DesignTimeOptionsFeature : RazorEngineFeatureBase, IRazorParserOptionsFeature, IRazorCodeGenerationOptionsFeature + { + public int Order { get; set; } + + public void Configure(RazorParserOptionsBuilder options) + { + if (options == null) + { + throw new ArgumentNullException(nameof(options)); + } + + options.DesignTime = true; + } + + public void Configure(RazorCodeGenerationOptionsBuilder options) + { + if (options == null) + { + throw new ArgumentNullException(nameof(options)); + } + + options.DesignTime = true; + } + } +} diff --git a/src/Microsoft.AspNetCore.Razor.Language/DesignTimeParserOptionsFeature.cs b/src/Microsoft.AspNetCore.Razor.Language/DesignTimeParserOptionsFeature.cs deleted file mode 100644 index 736ad20313..0000000000 --- a/src/Microsoft.AspNetCore.Razor.Language/DesignTimeParserOptionsFeature.cs +++ /dev/null @@ -1,15 +0,0 @@ -// Copyright (c) .NET Foundation. All rights reserved. -// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. - -namespace Microsoft.AspNetCore.Razor.Language -{ - internal class DesignTimeParserOptionsFeature : RazorEngineFeatureBase, IRazorParserOptionsFeature - { - public int Order { get; set; } - - public void Configure(RazorParserOptions options) - { - options.DesignTimeMode = true; - } - } -} diff --git a/src/Microsoft.AspNetCore.Razor.Language/DocumentClassifierPassBase.cs b/src/Microsoft.AspNetCore.Razor.Language/DocumentClassifierPassBase.cs index fa871044e0..bf1f105951 100644 --- a/src/Microsoft.AspNetCore.Razor.Language/DocumentClassifierPassBase.cs +++ b/src/Microsoft.AspNetCore.Razor.Language/DocumentClassifierPassBase.cs @@ -19,7 +19,6 @@ namespace Microsoft.AspNetCore.Razor.Language protected override void OnInitialized() { var feature = Engine.Features.OfType(); - TargetExtensions = feature.FirstOrDefault()?.TargetExtensions.ToArray() ?? EmptyExtensionArray; } @@ -82,7 +81,7 @@ namespace Microsoft.AspNetCore.Razor.Language protected abstract bool IsMatch(RazorCodeDocument codeDocument, DocumentIRNode irDocument); - private CodeTarget CreateTarget(RazorCodeDocument codeDocument, RazorParserOptions options) + private CodeTarget CreateTarget(RazorCodeDocument codeDocument, RazorCodeGenerationOptions options) { return CodeTarget.CreateDefault(codeDocument, options, (builder) => { diff --git a/src/Microsoft.AspNetCore.Razor.Language/Extensions/TemplateTargetExtension.cs b/src/Microsoft.AspNetCore.Razor.Language/Extensions/TemplateTargetExtension.cs index c0b6f386a2..4035e74cc1 100644 --- a/src/Microsoft.AspNetCore.Razor.Language/Extensions/TemplateTargetExtension.cs +++ b/src/Microsoft.AspNetCore.Razor.Language/Extensions/TemplateTargetExtension.cs @@ -28,14 +28,14 @@ namespace Microsoft.AspNetCore.Razor.Language.Extensions using (context.Writer.BuildAsyncLambda(endLine: false, parameterNames: TemplateWriterName)) { - if (!context.Options.DesignTimeMode) + if (!context.Options.DesignTime) { context.Writer.WriteMethodInvocation(PushWriterMethod, TemplateWriterName); } context.RenderChildren(node); - if (!context.Options.DesignTimeMode) + if (!context.Options.DesignTime) { context.Writer.WriteMethodInvocation(PopWriterMethod); } diff --git a/src/Microsoft.AspNetCore.Razor.Language/IRazorCodeGenerationOptionsFeature.cs b/src/Microsoft.AspNetCore.Razor.Language/IRazorCodeGenerationOptionsFeature.cs new file mode 100644 index 0000000000..4181a9e6d9 --- /dev/null +++ b/src/Microsoft.AspNetCore.Razor.Language/IRazorCodeGenerationOptionsFeature.cs @@ -0,0 +1,12 @@ +// Copyright(c) .NET Foundation.All rights reserved. +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +namespace Microsoft.AspNetCore.Razor.Language +{ + public interface IRazorCodeGenerationOptionsFeature : IRazorEngineFeature + { + int Order { get; } + + void Configure(RazorCodeGenerationOptionsBuilder options); + } +} diff --git a/src/Microsoft.AspNetCore.Razor.Language/IRazorParserOptionsFeature.cs b/src/Microsoft.AspNetCore.Razor.Language/IRazorParserOptionsFeature.cs index 6c6cf2ab59..f96fdfd518 100644 --- a/src/Microsoft.AspNetCore.Razor.Language/IRazorParserOptionsFeature.cs +++ b/src/Microsoft.AspNetCore.Razor.Language/IRazorParserOptionsFeature.cs @@ -7,6 +7,6 @@ namespace Microsoft.AspNetCore.Razor.Language { int Order { get; } - void Configure(RazorParserOptions options); + void Configure(RazorParserOptionsBuilder options); } } diff --git a/src/Microsoft.AspNetCore.Razor.Language/Intermediate/AddTagHelperHtmlAttributeIRNode.cs b/src/Microsoft.AspNetCore.Razor.Language/Intermediate/AddTagHelperHtmlAttributeIRNode.cs index 594378a6a5..cd2e8ea435 100644 --- a/src/Microsoft.AspNetCore.Razor.Language/Intermediate/AddTagHelperHtmlAttributeIRNode.cs +++ b/src/Microsoft.AspNetCore.Razor.Language/Intermediate/AddTagHelperHtmlAttributeIRNode.cs @@ -9,7 +9,7 @@ namespace Microsoft.AspNetCore.Razor.Language.Intermediate { public sealed class AddTagHelperHtmlAttributeIRNode : RazorIRNode { - public override ItemCollection Annotations => ReadonlyItemCollection.Empty; + public override ItemCollection Annotations => ReadOnlyItemCollection.Empty; public override IList Children { get; } = new List(); diff --git a/src/Microsoft.AspNetCore.Razor.Language/Intermediate/CSharpAttributeValueIRNode.cs b/src/Microsoft.AspNetCore.Razor.Language/Intermediate/CSharpAttributeValueIRNode.cs index 4512e75248..b9e36ec07a 100644 --- a/src/Microsoft.AspNetCore.Razor.Language/Intermediate/CSharpAttributeValueIRNode.cs +++ b/src/Microsoft.AspNetCore.Razor.Language/Intermediate/CSharpAttributeValueIRNode.cs @@ -8,7 +8,7 @@ namespace Microsoft.AspNetCore.Razor.Language.Intermediate { public sealed class CSharpAttributeValueIRNode : RazorIRNode { - public override ItemCollection Annotations => ReadonlyItemCollection.Empty; + public override ItemCollection Annotations => ReadOnlyItemCollection.Empty; public override IList Children { get; } = new List(); diff --git a/src/Microsoft.AspNetCore.Razor.Language/Intermediate/ChecksumIRNode.cs b/src/Microsoft.AspNetCore.Razor.Language/Intermediate/ChecksumIRNode.cs index 4622b8e074..cc3935c646 100644 --- a/src/Microsoft.AspNetCore.Razor.Language/Intermediate/ChecksumIRNode.cs +++ b/src/Microsoft.AspNetCore.Razor.Language/Intermediate/ChecksumIRNode.cs @@ -9,7 +9,7 @@ namespace Microsoft.AspNetCore.Razor.Language.Intermediate { public sealed class ChecksumIRNode : RazorIRNode { - public override ItemCollection Annotations => ReadonlyItemCollection.Empty; + public override ItemCollection Annotations => ReadOnlyItemCollection.Empty; public override IList Children => EmptyArray; diff --git a/src/Microsoft.AspNetCore.Razor.Language/Intermediate/CreateTagHelperIRNode.cs b/src/Microsoft.AspNetCore.Razor.Language/Intermediate/CreateTagHelperIRNode.cs index 707b876c3a..c6982894e8 100644 --- a/src/Microsoft.AspNetCore.Razor.Language/Intermediate/CreateTagHelperIRNode.cs +++ b/src/Microsoft.AspNetCore.Razor.Language/Intermediate/CreateTagHelperIRNode.cs @@ -8,7 +8,7 @@ namespace Microsoft.AspNetCore.Razor.Language.Intermediate { public sealed class CreateTagHelperIRNode : RazorIRNode { - public override ItemCollection Annotations => ReadonlyItemCollection.Empty; + public override ItemCollection Annotations => ReadOnlyItemCollection.Empty; public override IList Children { get; } = EmptyArray; diff --git a/src/Microsoft.AspNetCore.Razor.Language/Intermediate/DeclareTagHelperFieldsIRNode.cs b/src/Microsoft.AspNetCore.Razor.Language/Intermediate/DeclareTagHelperFieldsIRNode.cs index 6cf1b5f609..c4866b893c 100644 --- a/src/Microsoft.AspNetCore.Razor.Language/Intermediate/DeclareTagHelperFieldsIRNode.cs +++ b/src/Microsoft.AspNetCore.Razor.Language/Intermediate/DeclareTagHelperFieldsIRNode.cs @@ -8,7 +8,7 @@ namespace Microsoft.AspNetCore.Razor.Language.Intermediate { public sealed class DeclareTagHelperFieldsIRNode : RazorIRNode { - public override ItemCollection Annotations => ReadonlyItemCollection.Empty; + public override ItemCollection Annotations => ReadOnlyItemCollection.Empty; public override IList Children { get; } = EmptyArray; diff --git a/src/Microsoft.AspNetCore.Razor.Language/Intermediate/DirectiveTokenIRNode.cs b/src/Microsoft.AspNetCore.Razor.Language/Intermediate/DirectiveTokenIRNode.cs index 9bfe6c3152..6c40a1935d 100644 --- a/src/Microsoft.AspNetCore.Razor.Language/Intermediate/DirectiveTokenIRNode.cs +++ b/src/Microsoft.AspNetCore.Razor.Language/Intermediate/DirectiveTokenIRNode.cs @@ -8,7 +8,7 @@ namespace Microsoft.AspNetCore.Razor.Language.Intermediate { public sealed class DirectiveTokenIRNode : RazorIRNode { - public override ItemCollection Annotations => ReadonlyItemCollection.Empty; + public override ItemCollection Annotations => ReadOnlyItemCollection.Empty; public override IList Children { get; } = EmptyArray; diff --git a/src/Microsoft.AspNetCore.Razor.Language/Intermediate/DocumentIRNode.cs b/src/Microsoft.AspNetCore.Razor.Language/Intermediate/DocumentIRNode.cs index 4a0afc1774..99e409b03e 100644 --- a/src/Microsoft.AspNetCore.Razor.Language/Intermediate/DocumentIRNode.cs +++ b/src/Microsoft.AspNetCore.Razor.Language/Intermediate/DocumentIRNode.cs @@ -28,7 +28,7 @@ namespace Microsoft.AspNetCore.Razor.Language.Intermediate public string DocumentKind { get; set; } - public RazorParserOptions Options { get; set; } + public RazorCodeGenerationOptions Options { get; set; } public override RazorIRNode Parent { get; set; } diff --git a/src/Microsoft.AspNetCore.Razor.Language/Intermediate/ExecuteTagHelpersIRNode.cs b/src/Microsoft.AspNetCore.Razor.Language/Intermediate/ExecuteTagHelpersIRNode.cs index 352cc725e8..d25c1eb2bc 100644 --- a/src/Microsoft.AspNetCore.Razor.Language/Intermediate/ExecuteTagHelpersIRNode.cs +++ b/src/Microsoft.AspNetCore.Razor.Language/Intermediate/ExecuteTagHelpersIRNode.cs @@ -8,7 +8,7 @@ namespace Microsoft.AspNetCore.Razor.Language.Intermediate { public sealed class ExecuteTagHelpersIRNode : RazorIRNode { - public override ItemCollection Annotations => ReadonlyItemCollection.Empty; + public override ItemCollection Annotations => ReadOnlyItemCollection.Empty; public override IList Children { get; } = new List(); diff --git a/src/Microsoft.AspNetCore.Razor.Language/Intermediate/HtmlAttributeIRNode.cs b/src/Microsoft.AspNetCore.Razor.Language/Intermediate/HtmlAttributeIRNode.cs index f71bfae016..b9a43f4d39 100644 --- a/src/Microsoft.AspNetCore.Razor.Language/Intermediate/HtmlAttributeIRNode.cs +++ b/src/Microsoft.AspNetCore.Razor.Language/Intermediate/HtmlAttributeIRNode.cs @@ -8,7 +8,7 @@ namespace Microsoft.AspNetCore.Razor.Language.Intermediate { public sealed class HtmlAttributeIRNode : RazorIRNode { - public override ItemCollection Annotations => ReadonlyItemCollection.Empty; + public override ItemCollection Annotations => ReadOnlyItemCollection.Empty; public override IList Children { get; } = new List(); diff --git a/src/Microsoft.AspNetCore.Razor.Language/Intermediate/HtmlAttributeValueIRNode.cs b/src/Microsoft.AspNetCore.Razor.Language/Intermediate/HtmlAttributeValueIRNode.cs index bd19cb0894..7173328f89 100644 --- a/src/Microsoft.AspNetCore.Razor.Language/Intermediate/HtmlAttributeValueIRNode.cs +++ b/src/Microsoft.AspNetCore.Razor.Language/Intermediate/HtmlAttributeValueIRNode.cs @@ -8,7 +8,7 @@ namespace Microsoft.AspNetCore.Razor.Language.Intermediate { public sealed class HtmlAttributeValueIRNode : RazorIRNode { - public override ItemCollection Annotations => ReadonlyItemCollection.Empty; + public override ItemCollection Annotations => ReadOnlyItemCollection.Empty; public override IList Children { get; } = EmptyArray; diff --git a/src/Microsoft.AspNetCore.Razor.Language/Intermediate/HtmlContentIRNode.cs b/src/Microsoft.AspNetCore.Razor.Language/Intermediate/HtmlContentIRNode.cs index 86da14dd12..20e1aac356 100644 --- a/src/Microsoft.AspNetCore.Razor.Language/Intermediate/HtmlContentIRNode.cs +++ b/src/Microsoft.AspNetCore.Razor.Language/Intermediate/HtmlContentIRNode.cs @@ -8,7 +8,7 @@ namespace Microsoft.AspNetCore.Razor.Language.Intermediate { public sealed class HtmlContentIRNode : RazorIRNode { - public override ItemCollection Annotations => ReadonlyItemCollection.Empty; + public override ItemCollection Annotations => ReadOnlyItemCollection.Empty; public override IList Children { get; } = new List(); diff --git a/src/Microsoft.AspNetCore.Razor.Language/Intermediate/InitializeTagHelperStructureIRNode.cs b/src/Microsoft.AspNetCore.Razor.Language/Intermediate/InitializeTagHelperStructureIRNode.cs index e302497a24..403367ec20 100644 --- a/src/Microsoft.AspNetCore.Razor.Language/Intermediate/InitializeTagHelperStructureIRNode.cs +++ b/src/Microsoft.AspNetCore.Razor.Language/Intermediate/InitializeTagHelperStructureIRNode.cs @@ -8,7 +8,7 @@ namespace Microsoft.AspNetCore.Razor.Language.Intermediate { public sealed class InitializeTagHelperStructureIRNode : RazorIRNode { - public override ItemCollection Annotations => ReadonlyItemCollection.Empty; + public override ItemCollection Annotations => ReadOnlyItemCollection.Empty; public override IList Children { get; } = new List(); diff --git a/src/Microsoft.AspNetCore.Razor.Language/Intermediate/RazorIRToken.cs b/src/Microsoft.AspNetCore.Razor.Language/Intermediate/RazorIRToken.cs index 2c01d5e4b1..a047db998f 100644 --- a/src/Microsoft.AspNetCore.Razor.Language/Intermediate/RazorIRToken.cs +++ b/src/Microsoft.AspNetCore.Razor.Language/Intermediate/RazorIRToken.cs @@ -8,7 +8,7 @@ namespace Microsoft.AspNetCore.Razor.Language.Intermediate { public sealed class RazorIRToken : RazorIRNode { - public override ItemCollection Annotations => ReadonlyItemCollection.Empty; + public override ItemCollection Annotations => ReadOnlyItemCollection.Empty; public override IList Children => RazorIRNode.EmptyArray; diff --git a/src/Microsoft.AspNetCore.Razor.Language/Intermediate/SetTagHelperPropertyIRNode.cs b/src/Microsoft.AspNetCore.Razor.Language/Intermediate/SetTagHelperPropertyIRNode.cs index 750860f7a6..7a0698ac05 100644 --- a/src/Microsoft.AspNetCore.Razor.Language/Intermediate/SetTagHelperPropertyIRNode.cs +++ b/src/Microsoft.AspNetCore.Razor.Language/Intermediate/SetTagHelperPropertyIRNode.cs @@ -9,7 +9,7 @@ namespace Microsoft.AspNetCore.Razor.Language.Intermediate { public sealed class SetTagHelperPropertyIRNode : RazorIRNode { - public override ItemCollection Annotations => ReadonlyItemCollection.Empty; + public override ItemCollection Annotations => ReadOnlyItemCollection.Empty; public override IList Children { get; } = new List(); diff --git a/src/Microsoft.AspNetCore.Razor.Language/Intermediate/UsingStatementIRNode.cs b/src/Microsoft.AspNetCore.Razor.Language/Intermediate/UsingStatementIRNode.cs index 85bcc51830..9d5fadcfca 100644 --- a/src/Microsoft.AspNetCore.Razor.Language/Intermediate/UsingStatementIRNode.cs +++ b/src/Microsoft.AspNetCore.Razor.Language/Intermediate/UsingStatementIRNode.cs @@ -8,7 +8,7 @@ namespace Microsoft.AspNetCore.Razor.Language.Intermediate { public sealed class UsingStatementIRNode : RazorIRNode { - public override ItemCollection Annotations => ReadonlyItemCollection.Empty; + public override ItemCollection Annotations => ReadOnlyItemCollection.Empty; public override IList Children { get; } = EmptyArray; diff --git a/src/Microsoft.AspNetCore.Razor.Language/Legacy/CSharpCodeParser.cs b/src/Microsoft.AspNetCore.Razor.Language/Legacy/CSharpCodeParser.cs index 3d575bb71d..7eee70f941 100644 --- a/src/Microsoft.AspNetCore.Razor.Language/Legacy/CSharpCodeParser.cs +++ b/src/Microsoft.AspNetCore.Razor.Language/Legacy/CSharpCodeParser.cs @@ -81,7 +81,7 @@ namespace Microsoft.AspNetCore.Razor.Language.Legacy } public CSharpCodeParser(IEnumerable directiveDescriptors, ParserContext context) - : base(context.StopParsingAfterFirstDirective ? FirstDirectiveCSharpLanguageCharacteristics.Instance : CSharpLanguageCharacteristics.Instance, context) + : base(context.ParseOnlyLeadingDirectives ? FirstDirectiveCSharpLanguageCharacteristics.Instance : CSharpLanguageCharacteristics.Instance, context) { Keywords = new HashSet(); SetUpKeywords(); diff --git a/src/Microsoft.AspNetCore.Razor.Language/Legacy/CSharpCodeWriter.cs b/src/Microsoft.AspNetCore.Razor.Language/Legacy/CSharpCodeWriter.cs index 0333fd5f95..84cda5424e 100644 --- a/src/Microsoft.AspNetCore.Razor.Language/Legacy/CSharpCodeWriter.cs +++ b/src/Microsoft.AspNetCore.Razor.Language/Legacy/CSharpCodeWriter.cs @@ -76,17 +76,17 @@ namespace Microsoft.AspNetCore.Razor.Language.Legacy var basePadding = CalculatePadding(); var resolvedPadding = Math.Max(basePadding - offset, 0); - if (context.Options.IsIndentingWithTabs) + if (context.Options.IndentWithTabs) { // Avoid writing directly to the StringBuilder here, that will throw off the manual indexing // done by the base class. - var tabs = resolvedPadding / context.Options.TabSize; + var tabs = resolvedPadding / context.Options.IndentSize; for (var i = 0; i < tabs; i++) { Write("\t"); } - var spaces = resolvedPadding % context.Options.TabSize; + var spaces = resolvedPadding % context.Options.IndentSize; for (var i = 0; i < spaces; i++) { Write(" "); @@ -114,7 +114,7 @@ namespace Microsoft.AspNetCore.Razor.Language.Legacy } else if (@char == '\t') { - spaceCount += context.Options.TabSize; + spaceCount += context.Options.IndentSize; } else { diff --git a/src/Microsoft.AspNetCore.Razor.Language/Legacy/HtmlMarkupParser.cs b/src/Microsoft.AspNetCore.Razor.Language/Legacy/HtmlMarkupParser.cs index 4ac8b37773..6c6aba95b8 100644 --- a/src/Microsoft.AspNetCore.Razor.Language/Legacy/HtmlMarkupParser.cs +++ b/src/Microsoft.AspNetCore.Razor.Language/Legacy/HtmlMarkupParser.cs @@ -38,7 +38,7 @@ namespace Microsoft.AspNetCore.Razor.Language.Legacy }; public HtmlMarkupParser(ParserContext context) - : base(context.StopParsingAfterFirstDirective ? FirstDirectiveHtmlLanguageCharacteristics.Instance : HtmlLanguageCharacteristics.Instance, context) + : base(context.ParseOnlyLeadingDirectives ? FirstDirectiveHtmlLanguageCharacteristics.Instance : HtmlLanguageCharacteristics.Instance, context) { } diff --git a/src/Microsoft.AspNetCore.Razor.Language/Legacy/ParserContext.cs b/src/Microsoft.AspNetCore.Razor.Language/Legacy/ParserContext.cs index a7e78ca8c9..80de5cba27 100644 --- a/src/Microsoft.AspNetCore.Razor.Language/Legacy/ParserContext.cs +++ b/src/Microsoft.AspNetCore.Razor.Language/Legacy/ParserContext.cs @@ -17,8 +17,8 @@ namespace Microsoft.AspNetCore.Razor.Language.Legacy } Source = source; - DesignTimeMode = options.DesignTimeMode; - StopParsingAfterFirstDirective = options.StopParsingAfterFirstDirective; + DesignTimeMode = options.DesignTime; + ParseOnlyLeadingDirectives = options.ParseOnlyLeadingDirectives; Builder = new SyntaxTreeBuilder(); ErrorSink = new ErrorSink(); } @@ -31,7 +31,7 @@ namespace Microsoft.AspNetCore.Razor.Language.Legacy public bool DesignTimeMode { get; } - public bool StopParsingAfterFirstDirective { get; } + public bool ParseOnlyLeadingDirectives { get; } public bool WhiteSpaceIsSignificantToAncestorBlock { get; set; } diff --git a/src/Microsoft.AspNetCore.Razor.Language/Legacy/RazorParser.cs b/src/Microsoft.AspNetCore.Razor.Language/Legacy/RazorParser.cs index bf9026cd19..edc019caf0 100644 --- a/src/Microsoft.AspNetCore.Razor.Language/Legacy/RazorParser.cs +++ b/src/Microsoft.AspNetCore.Razor.Language/Legacy/RazorParser.cs @@ -9,7 +9,7 @@ namespace Microsoft.AspNetCore.Razor.Language.Legacy internal class RazorParser { public RazorParser() - : this(RazorParserOptions.CreateDefaultOptions()) + : this(RazorParserOptions.CreateDefault()) { } diff --git a/src/Microsoft.AspNetCore.Razor.Language/RazorCSharpDocument.cs b/src/Microsoft.AspNetCore.Razor.Language/RazorCSharpDocument.cs index f2981dfae8..516cea2a4d 100644 --- a/src/Microsoft.AspNetCore.Razor.Language/RazorCSharpDocument.cs +++ b/src/Microsoft.AspNetCore.Razor.Language/RazorCSharpDocument.cs @@ -15,23 +15,31 @@ namespace Microsoft.AspNetCore.Razor.Language public abstract IReadOnlyList Diagnostics { get; } - public static RazorCSharpDocument Create(string generatedCode, IEnumerable diagnostics) + public abstract RazorCodeGenerationOptions Options { get; } + + public static RazorCSharpDocument Create(string generatedCode, RazorCodeGenerationOptions options, IEnumerable diagnostics) { if (generatedCode == null) { throw new ArgumentNullException(nameof(generatedCode)); } + if (options == null) + { + throw new ArgumentNullException(nameof(options)); + } + if (diagnostics == null) { throw new ArgumentNullException(nameof(diagnostics)); } - return new DefaultRazorCSharpDocument(generatedCode, diagnostics.ToArray(), lineMappings: null); + return new DefaultRazorCSharpDocument(generatedCode, options, diagnostics.ToArray(), lineMappings: null); } public static RazorCSharpDocument Create( string generatedCode, + RazorCodeGenerationOptions options, IEnumerable diagnostics, IEnumerable lineMappings) { @@ -40,6 +48,11 @@ namespace Microsoft.AspNetCore.Razor.Language throw new ArgumentNullException(nameof(generatedCode)); } + if (options == null) + { + throw new ArgumentNullException(nameof(options)); + } + if (diagnostics == null) { throw new ArgumentNullException(nameof(diagnostics)); @@ -50,7 +63,7 @@ namespace Microsoft.AspNetCore.Razor.Language throw new ArgumentNullException(nameof(lineMappings)); } - return new DefaultRazorCSharpDocument(generatedCode, diagnostics.ToArray(), lineMappings.ToArray()); + return new DefaultRazorCSharpDocument(generatedCode, options, diagnostics.ToArray(), lineMappings.ToArray()); } } } diff --git a/src/Microsoft.AspNetCore.Razor.Language/RazorCodeGenerationOptions.cs b/src/Microsoft.AspNetCore.Razor.Language/RazorCodeGenerationOptions.cs new file mode 100644 index 0000000000..b4c3448dbc --- /dev/null +++ b/src/Microsoft.AspNetCore.Razor.Language/RazorCodeGenerationOptions.cs @@ -0,0 +1,24 @@ +// Copyright (c) .NET Foundation. All rights reserved. +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +namespace Microsoft.AspNetCore.Razor.Language +{ + public abstract class RazorCodeGenerationOptions + { + public static RazorCodeGenerationOptions Create(bool indentWithTabs, int indentSize, bool designTime) + { + return new DefaultRazorCodeGenerationOptions(indentWithTabs, indentSize, designTime); + } + + public static RazorCodeGenerationOptions CreateDefault() + { + return new DefaultRazorCodeGenerationOptions(indentWithTabs: false, indentSize: 4, designTime: false); + } + + public abstract bool DesignTime { get; } + + public abstract bool IndentWithTabs { get; } + + public abstract int IndentSize { get; } + } +} diff --git a/src/Microsoft.AspNetCore.Razor.Language/RazorCodeGenerationOptionsBuilder.cs b/src/Microsoft.AspNetCore.Razor.Language/RazorCodeGenerationOptionsBuilder.cs new file mode 100644 index 0000000000..7e1c3fc29d --- /dev/null +++ b/src/Microsoft.AspNetCore.Razor.Language/RazorCodeGenerationOptionsBuilder.cs @@ -0,0 +1,16 @@ +// Copyright (c) .NET Foundation. All rights reserved. +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +namespace Microsoft.AspNetCore.Razor.Language +{ + public abstract class RazorCodeGenerationOptionsBuilder + { + public abstract bool DesignTime { get; set; } + + public abstract int IndentSize { get; set; } + + public abstract bool IndentWithTabs { get; set; } + + public abstract RazorCodeGenerationOptions Build(); + } +} diff --git a/src/Microsoft.AspNetCore.Razor.Language/RazorEngine.cs b/src/Microsoft.AspNetCore.Razor.Language/RazorEngine.cs index f9ac0a605a..93d624cde6 100644 --- a/src/Microsoft.AspNetCore.Razor.Language/RazorEngine.cs +++ b/src/Microsoft.AspNetCore.Razor.Language/RazorEngine.cs @@ -108,7 +108,7 @@ namespace Microsoft.AspNetCore.Razor.Language internal static void AddDesignTimeDefaults(IRazorEngineBuilder builder) { // Configure options - builder.Features.Add(new DesignTimeParserOptionsFeature()); + builder.Features.Add(new DesignTimeOptionsFeature()); // IR Passes builder.Features.Add(new RazorDesignTimeIRPass()); diff --git a/src/Microsoft.AspNetCore.Razor.Language/RazorParserOptions.cs b/src/Microsoft.AspNetCore.Razor.Language/RazorParserOptions.cs index 805775a0a6..3b3a923130 100644 --- a/src/Microsoft.AspNetCore.Razor.Language/RazorParserOptions.cs +++ b/src/Microsoft.AspNetCore.Razor.Language/RazorParserOptions.cs @@ -1,30 +1,43 @@ // Copyright (c) .NET Foundation. All rights reserved. // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +using System; using System.Collections.Generic; +using System.Linq; namespace Microsoft.AspNetCore.Razor.Language { - public sealed class RazorParserOptions + public abstract class RazorParserOptions { - public static RazorParserOptions CreateDefaultOptions() + public static RazorParserOptions Create(IEnumerable directives, bool designTime) { - return new RazorParserOptions(); + if (directives == null) + { + throw new ArgumentNullException(nameof(directives)); + } + + return new DefaultRazorParserOptions(directives.ToArray(), designTime, parseOnlyLeadingDirectives: false); } - private RazorParserOptions() + public static RazorParserOptions Create(IEnumerable directives, bool designTime, bool parseOnlyLeadingDirectives) { - Directives = new List(); + if (directives == null) + { + throw new ArgumentNullException(nameof(directives)); + } + + return new DefaultRazorParserOptions(directives.ToArray(), designTime, parseOnlyLeadingDirectives); } - public bool DesignTimeMode { get; set; } + public static RazorParserOptions CreateDefault() + { + return new DefaultRazorParserOptions(Array.Empty(), designTime: false, parseOnlyLeadingDirectives: false); + } - public int TabSize { get; set; } = 4; + public abstract bool DesignTime { get; } - public bool IsIndentingWithTabs { get; set; } + public abstract IReadOnlyCollection Directives { get; } - public bool StopParsingAfterFirstDirective { get; set; } - - public ICollection Directives { get; } + public abstract bool ParseOnlyLeadingDirectives { get; } } } diff --git a/src/Microsoft.AspNetCore.Razor.Language/RazorParserOptionsBuilder.cs b/src/Microsoft.AspNetCore.Razor.Language/RazorParserOptionsBuilder.cs new file mode 100644 index 0000000000..183284c2dc --- /dev/null +++ b/src/Microsoft.AspNetCore.Razor.Language/RazorParserOptionsBuilder.cs @@ -0,0 +1,18 @@ +// Copyright (c) .NET Foundation. All rights reserved. +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +using System.Collections.Generic; + +namespace Microsoft.AspNetCore.Razor.Language +{ + public abstract class RazorParserOptionsBuilder + { + public abstract bool DesignTime { get; set; } + + public abstract ICollection Directives { get; } + + public abstract bool ParseOnlyLeadingDirectives { get; set; } + + public abstract RazorParserOptions Build(); + } +} diff --git a/src/Microsoft.AspNetCore.Razor.Language/RazorSyntaxTree.cs b/src/Microsoft.AspNetCore.Razor.Language/RazorSyntaxTree.cs index 05e868c9c7..55a32ba1d3 100644 --- a/src/Microsoft.AspNetCore.Razor.Language/RazorSyntaxTree.cs +++ b/src/Microsoft.AspNetCore.Razor.Language/RazorSyntaxTree.cs @@ -55,7 +55,7 @@ namespace Microsoft.AspNetCore.Razor.Language throw new ArgumentNullException(nameof(source)); } - var parser = new RazorParser(options ?? RazorParserOptions.CreateDefaultOptions()); + var parser = new RazorParser(options ?? RazorParserOptions.CreateDefault()); return parser.Parse(source); } diff --git a/src/Microsoft.AspNetCore.Razor.Language/ReadonlyItemCollection.cs b/src/Microsoft.AspNetCore.Razor.Language/ReadonlyItemCollection.cs index 9d6e78e09e..ca7e841955 100644 --- a/src/Microsoft.AspNetCore.Razor.Language/ReadonlyItemCollection.cs +++ b/src/Microsoft.AspNetCore.Razor.Language/ReadonlyItemCollection.cs @@ -5,9 +5,9 @@ using System; namespace Microsoft.AspNetCore.Razor.Language { - internal class ReadonlyItemCollection : ItemCollection + internal class ReadOnlyItemCollection : ItemCollection { - public static readonly ItemCollection Empty = new ReadonlyItemCollection(); + public static readonly ItemCollection Empty = new ReadOnlyItemCollection(); public override object this[object key] { diff --git a/test/Microsoft.AspNetCore.Razor.Language.Test/CodeGeneration/CodeTargetTest.cs b/test/Microsoft.AspNetCore.Razor.Language.Test/CodeGeneration/CodeTargetTest.cs index 9f4f371ce7..3554864d1f 100644 --- a/test/Microsoft.AspNetCore.Razor.Language.Test/CodeGeneration/CodeTargetTest.cs +++ b/test/Microsoft.AspNetCore.Razor.Language.Test/CodeGeneration/CodeTargetTest.cs @@ -13,7 +13,7 @@ namespace Microsoft.AspNetCore.Razor.Language.CodeGeneration { // Arrange var codeDocument = TestRazorCodeDocument.CreateEmpty(); - var options = RazorParserOptions.CreateDefaultOptions(); + var options = RazorCodeGenerationOptions.CreateDefault(); // Act var target = CodeTarget.CreateDefault(codeDocument, options); @@ -30,7 +30,7 @@ namespace Microsoft.AspNetCore.Razor.Language.CodeGeneration Action @delegate = (b) => { wasCalled = true; }; var codeDocument = TestRazorCodeDocument.CreateEmpty(); - var options = RazorParserOptions.CreateDefaultOptions(); + var options = RazorCodeGenerationOptions.CreateDefault(); // Act CodeTarget.CreateDefault(codeDocument, options, @delegate); @@ -44,7 +44,7 @@ namespace Microsoft.AspNetCore.Razor.Language.CodeGeneration { // Arrange var codeDocument = TestRazorCodeDocument.CreateEmpty(); - var options = RazorParserOptions.CreateDefaultOptions(); + var options = RazorCodeGenerationOptions.CreateDefault(); // Act CodeTarget.CreateDefault(codeDocument, options, configure: null); @@ -57,7 +57,7 @@ namespace Microsoft.AspNetCore.Razor.Language.CodeGeneration { // Arrange var codeDocument = TestRazorCodeDocument.CreateEmpty(); - var options = RazorParserOptions.CreateDefaultOptions(); + var options = RazorCodeGenerationOptions.CreateDefault(); // Act CodeTarget.CreateDefault(codeDocument, options, configure: null); diff --git a/test/Microsoft.AspNetCore.Razor.Language.Test/CodeGeneration/DefaultCodeTargetBuilderTest.cs b/test/Microsoft.AspNetCore.Razor.Language.Test/CodeGeneration/DefaultCodeTargetBuilderTest.cs index 3600e81397..95f124300a 100644 --- a/test/Microsoft.AspNetCore.Razor.Language.Test/CodeGeneration/DefaultCodeTargetBuilderTest.cs +++ b/test/Microsoft.AspNetCore.Razor.Language.Test/CodeGeneration/DefaultCodeTargetBuilderTest.cs @@ -12,7 +12,7 @@ namespace Microsoft.AspNetCore.Razor.Language.CodeGeneration { // Arrange var codeDocument = TestRazorCodeDocument.CreateEmpty(); - var options = RazorParserOptions.CreateDefaultOptions(); + var options = RazorCodeGenerationOptions.CreateDefault(); var builder = new DefaultCodeTargetBuilder(codeDocument, options); diff --git a/test/Microsoft.AspNetCore.Razor.Language.Test/CodeGeneration/DefaultCodeTargetTest.cs b/test/Microsoft.AspNetCore.Razor.Language.Test/CodeGeneration/DefaultCodeTargetTest.cs index f45cf6d135..d661e5f487 100644 --- a/test/Microsoft.AspNetCore.Razor.Language.Test/CodeGeneration/DefaultCodeTargetTest.cs +++ b/test/Microsoft.AspNetCore.Razor.Language.Test/CodeGeneration/DefaultCodeTargetTest.cs @@ -12,7 +12,7 @@ namespace Microsoft.AspNetCore.Razor.Language.CodeGeneration public void Constructor_CreatesDefensiveCopy() { // Arrange - var options = RazorParserOptions.CreateDefaultOptions(); + var options = RazorCodeGenerationOptions.CreateDefault(); var extensions = new ICodeTargetExtension[] { @@ -31,7 +31,7 @@ namespace Microsoft.AspNetCore.Razor.Language.CodeGeneration public void CreateWriter_CreatesDefaultDocumentWriter() { // Arrange - var options = RazorParserOptions.CreateDefaultOptions(); + var options = RazorCodeGenerationOptions.CreateDefault(); var target = new DefaultCodeTarget(options, Enumerable.Empty()); @@ -46,7 +46,7 @@ namespace Microsoft.AspNetCore.Razor.Language.CodeGeneration public void HasExtension_ReturnsTrue_WhenExtensionFound() { // Arrange - var options = RazorParserOptions.CreateDefaultOptions(); + var options = RazorCodeGenerationOptions.CreateDefault(); var extensions = new ICodeTargetExtension[] { @@ -67,7 +67,7 @@ namespace Microsoft.AspNetCore.Razor.Language.CodeGeneration public void HasExtension_ReturnsFalse_WhenExtensionNotFound() { // Arrange - var options = RazorParserOptions.CreateDefaultOptions(); + var options = RazorCodeGenerationOptions.CreateDefault(); var extensions = new ICodeTargetExtension[] { @@ -88,7 +88,7 @@ namespace Microsoft.AspNetCore.Razor.Language.CodeGeneration public void GetExtension_ReturnsExtension_WhenExtensionFound() { // Arrange - var options = RazorParserOptions.CreateDefaultOptions(); + var options = RazorCodeGenerationOptions.CreateDefault(); var extensions = new ICodeTargetExtension[] { @@ -109,7 +109,7 @@ namespace Microsoft.AspNetCore.Razor.Language.CodeGeneration public void GetExtension_ReturnsFirstMatch_WhenExtensionFound() { // Arrange - var options = RazorParserOptions.CreateDefaultOptions(); + var options = RazorCodeGenerationOptions.CreateDefault(); var extensions = new ICodeTargetExtension[] { @@ -133,7 +133,7 @@ namespace Microsoft.AspNetCore.Razor.Language.CodeGeneration public void GetExtension_ReturnsNull_WhenExtensionNotFound() { // Arrange - var options = RazorParserOptions.CreateDefaultOptions(); + var options = RazorCodeGenerationOptions.CreateDefault(); var extensions = new ICodeTargetExtension[] { diff --git a/test/Microsoft.AspNetCore.Razor.Language.Test/CodeGeneration/DefaultDocumentWriterTest.cs b/test/Microsoft.AspNetCore.Razor.Language.Test/CodeGeneration/DefaultDocumentWriterTest.cs index 376832dd6f..89cad549c2 100644 --- a/test/Microsoft.AspNetCore.Razor.Language.Test/CodeGeneration/DefaultDocumentWriterTest.cs +++ b/test/Microsoft.AspNetCore.Razor.Language.Test/CodeGeneration/DefaultDocumentWriterTest.cs @@ -14,7 +14,7 @@ namespace Microsoft.AspNetCore.Razor.Language.CodeGeneration { // Arrange var codeDocument = TestRazorCodeDocument.CreateEmpty(); - var options = RazorParserOptions.CreateDefaultOptions(); + var options = RazorCodeGenerationOptions.CreateDefault(); var target = CodeTarget.CreateDefault(codeDocument, options); var context = new CSharpRenderingContext() @@ -52,7 +52,7 @@ namespace Microsoft.AspNetCore.Razor.Language.CodeGeneration { // Arrange var codeDocument = TestRazorCodeDocument.CreateEmpty(); - var options = RazorParserOptions.CreateDefaultOptions(); + var options = RazorCodeGenerationOptions.CreateDefault(); var target = CodeTarget.CreateDefault(codeDocument, options); var context = new CSharpRenderingContext() @@ -91,7 +91,7 @@ namespace Microsoft.AspNetCore.Razor.Language.CodeGeneration { // Arrange var codeDocument = TestRazorCodeDocument.CreateEmpty(); - var options = RazorParserOptions.CreateDefaultOptions(); + var options = RazorCodeGenerationOptions.CreateDefault(); var target = CodeTarget.CreateDefault(codeDocument, options); var context = new CSharpRenderingContext() @@ -132,7 +132,7 @@ internal virtual async string TestMethod() { // Arrange var codeDocument = TestRazorCodeDocument.CreateEmpty(); - var options = RazorParserOptions.CreateDefaultOptions(); + var options = RazorCodeGenerationOptions.CreateDefault(); var target = CodeTarget.CreateDefault(codeDocument, options); var context = new CSharpRenderingContext() @@ -169,7 +169,7 @@ internal virtual async string TestMethod() { // Arrange var codeDocument = TestRazorCodeDocument.CreateEmpty(); - var options = RazorParserOptions.CreateDefaultOptions(); + var options = RazorCodeGenerationOptions.CreateDefault(); var target = CodeTarget.CreateDefault(codeDocument, options); var context = new CSharpRenderingContext() diff --git a/test/Microsoft.AspNetCore.Razor.Language.Test/CodeGeneration/DesignTimeBasicWriterTest.cs b/test/Microsoft.AspNetCore.Razor.Language.Test/CodeGeneration/DesignTimeBasicWriterTest.cs index cdb41fa265..3a694af26b 100644 --- a/test/Microsoft.AspNetCore.Razor.Language.Test/CodeGeneration/DesignTimeBasicWriterTest.cs +++ b/test/Microsoft.AspNetCore.Razor.Language.Test/CodeGeneration/DesignTimeBasicWriterTest.cs @@ -115,7 +115,7 @@ using System; var context = new CSharpRenderingContext() { - Options = RazorParserOptions.CreateDefaultOptions(), + Options = RazorCodeGenerationOptions.CreateDefault(), Writer = new Legacy.CSharpCodeWriter(), }; @@ -194,7 +194,7 @@ __o = i++; var context = new CSharpRenderingContext() { - Options = RazorParserOptions.CreateDefaultOptions(), + Options = RazorCodeGenerationOptions.CreateDefault(), CodeDocument = RazorCodeDocument.Create(sourceDocument), Writer = new Legacy.CSharpCodeWriter(), }; @@ -270,7 +270,7 @@ __o = i++; var context = new CSharpRenderingContext() { Writer = new Legacy.CSharpCodeWriter(), - Options = RazorParserOptions.CreateDefaultOptions(), + Options = RazorCodeGenerationOptions.CreateDefault(), }; var node = new CSharpStatementIRNode() @@ -336,7 +336,7 @@ __o = i++; var context = new CSharpRenderingContext() { Writer = new Legacy.CSharpCodeWriter(), - Options = RazorParserOptions.CreateDefaultOptions(), + Options = RazorCodeGenerationOptions.CreateDefault(), }; var node = new CSharpStatementIRNode() @@ -375,7 +375,7 @@ if (true) { } var context = new CSharpRenderingContext() { Writer = new Legacy.CSharpCodeWriter(), - Options = RazorParserOptions.CreateDefaultOptions(), + Options = RazorCodeGenerationOptions.CreateDefault(), }; var node = new CSharpStatementIRNode() diff --git a/test/Microsoft.AspNetCore.Razor.Language.Test/CodeGeneration/DesignTimeTagHelperWriterTest.cs b/test/Microsoft.AspNetCore.Razor.Language.Test/CodeGeneration/DesignTimeTagHelperWriterTest.cs index 09fb1eba77..bd2d5345b5 100644 --- a/test/Microsoft.AspNetCore.Razor.Language.Test/CodeGeneration/DesignTimeTagHelperWriterTest.cs +++ b/test/Microsoft.AspNetCore.Razor.Language.Test/CodeGeneration/DesignTimeTagHelperWriterTest.cs @@ -195,7 +195,7 @@ __InputTagHelper.FooProp[""bound""] = 42; private static CSharpRenderingContext GetCSharpRenderingContext(TagHelperWriter writer, RazorCodeDocument codeDocument = null) { - var options = RazorParserOptions.CreateDefaultOptions(); + var options = RazorCodeGenerationOptions.CreateDefault(); var codeWriter = new Legacy.CSharpCodeWriter(); var context = new CSharpRenderingContext() { diff --git a/test/Microsoft.AspNetCore.Razor.Language.Test/CodeGeneration/LiteralRuntimeBasicWriterTest.cs b/test/Microsoft.AspNetCore.Razor.Language.Test/CodeGeneration/LiteralRuntimeBasicWriterTest.cs index 16edb5ffac..27979f2473 100644 --- a/test/Microsoft.AspNetCore.Razor.Language.Test/CodeGeneration/LiteralRuntimeBasicWriterTest.cs +++ b/test/Microsoft.AspNetCore.Razor.Language.Test/CodeGeneration/LiteralRuntimeBasicWriterTest.cs @@ -16,7 +16,7 @@ namespace Microsoft.AspNetCore.Razor.Language.CodeGeneration var context = new CSharpRenderingContext() { - Options = RazorParserOptions.CreateDefaultOptions(), + Options = RazorCodeGenerationOptions.CreateDefault(), Writer = new Legacy.CSharpCodeWriter(), }; diff --git a/test/Microsoft.AspNetCore.Razor.Language.Test/CodeGeneration/RuntimeBasicWriterTest.cs b/test/Microsoft.AspNetCore.Razor.Language.Test/CodeGeneration/RuntimeBasicWriterTest.cs index 1edcc08c36..74736f8196 100644 --- a/test/Microsoft.AspNetCore.Razor.Language.Test/CodeGeneration/RuntimeBasicWriterTest.cs +++ b/test/Microsoft.AspNetCore.Razor.Language.Test/CodeGeneration/RuntimeBasicWriterTest.cs @@ -169,7 +169,7 @@ using System; var context = new CSharpRenderingContext() { - Options = RazorParserOptions.CreateDefaultOptions(), + Options = RazorCodeGenerationOptions.CreateDefault(), Writer = new Legacy.CSharpCodeWriter(), }; @@ -254,7 +254,7 @@ Test(i++); var context = new CSharpRenderingContext() { - Options = RazorParserOptions.CreateDefaultOptions(), + Options = RazorCodeGenerationOptions.CreateDefault(), CodeDocument = RazorCodeDocument.Create(sourceDocument), Writer = new Legacy.CSharpCodeWriter(), }; @@ -361,7 +361,7 @@ Test(i++); var context = new CSharpRenderingContext() { Writer = new Legacy.CSharpCodeWriter(), - Options = RazorParserOptions.CreateDefaultOptions(), + Options = RazorCodeGenerationOptions.CreateDefault(), }; var node = new CSharpStatementIRNode() @@ -400,7 +400,7 @@ if (true) { } var context = new CSharpRenderingContext() { Writer = new Legacy.CSharpCodeWriter(), - Options = RazorParserOptions.CreateDefaultOptions(), + Options = RazorCodeGenerationOptions.CreateDefault(), }; var node = new CSharpStatementIRNode() @@ -437,7 +437,7 @@ if (true) { } var context = new CSharpRenderingContext() { Writer = new Legacy.CSharpCodeWriter(), - Options = RazorParserOptions.CreateDefaultOptions(), + Options = RazorCodeGenerationOptions.CreateDefault(), }; var node = new HtmlContentIRNode(); @@ -467,7 +467,7 @@ if (true) { } var context = new CSharpRenderingContext() { Writer = new Legacy.CSharpCodeWriter(), - Options = RazorParserOptions.CreateDefaultOptions(), + Options = RazorCodeGenerationOptions.CreateDefault(), }; @@ -601,7 +601,7 @@ WriteAttributeValue("" "", 27, false, 28, 6, false); private static CSharpRenderingContext GetCSharpRenderingContext(BasicWriter writer) { - var options = RazorParserOptions.CreateDefaultOptions(); + var options = RazorCodeGenerationOptions.CreateDefault(); var codeWriter = new Legacy.CSharpCodeWriter(); var context = new CSharpRenderingContext() { diff --git a/test/Microsoft.AspNetCore.Razor.Language.Test/CodeGeneration/RuntimeTagHelperWriterTest.cs b/test/Microsoft.AspNetCore.Razor.Language.Test/CodeGeneration/RuntimeTagHelperWriterTest.cs index 60fc980da0..0ee980b9cf 100644 --- a/test/Microsoft.AspNetCore.Razor.Language.Test/CodeGeneration/RuntimeTagHelperWriterTest.cs +++ b/test/Microsoft.AspNetCore.Razor.Language.Test/CodeGeneration/RuntimeTagHelperWriterTest.cs @@ -430,7 +430,7 @@ __tagHelperExecutionContext.AddTagHelperAttribute(""foo-bound"", __InputTagHelpe private static CSharpRenderingContext GetCSharpRenderingContext(TagHelperWriter writer, RazorCodeDocument codeDocument = null) { - var options = RazorParserOptions.CreateDefaultOptions(); + var options = RazorCodeGenerationOptions.CreateDefault(); var codeWriter = new Legacy.CSharpCodeWriter(); var context = new CSharpRenderingContext() { diff --git a/test/Microsoft.AspNetCore.Razor.Language.Test/CodeGeneration/TagHelperHtmlAttributeRuntimeBasicWriterTest.cs b/test/Microsoft.AspNetCore.Razor.Language.Test/CodeGeneration/TagHelperHtmlAttributeRuntimeBasicWriterTest.cs index 5e7ffdcaa4..09f86684a9 100644 --- a/test/Microsoft.AspNetCore.Razor.Language.Test/CodeGeneration/TagHelperHtmlAttributeRuntimeBasicWriterTest.cs +++ b/test/Microsoft.AspNetCore.Razor.Language.Test/CodeGeneration/TagHelperHtmlAttributeRuntimeBasicWriterTest.cs @@ -92,7 +92,7 @@ AddHtmlAttributeValue("" "", 27, false, 28, 6, false); private static CSharpRenderingContext GetCSharpRenderingContext(BasicWriter writer) { - var options = RazorParserOptions.CreateDefaultOptions(); + var options = RazorCodeGenerationOptions.CreateDefault(); var codeWriter = new Legacy.CSharpCodeWriter(); var context = new CSharpRenderingContext() { diff --git a/test/Microsoft.AspNetCore.Razor.Language.Test/DefaultDocumentClassifierPassTest.cs b/test/Microsoft.AspNetCore.Razor.Language.Test/DefaultDocumentClassifierPassTest.cs index 55acd3b8ab..b87fee45fe 100644 --- a/test/Microsoft.AspNetCore.Razor.Language.Test/DefaultDocumentClassifierPassTest.cs +++ b/test/Microsoft.AspNetCore.Razor.Language.Test/DefaultDocumentClassifierPassTest.cs @@ -19,7 +19,7 @@ namespace Microsoft.AspNetCore.Razor.Language var irDocument = new DocumentIRNode() { DocumentKind = "ignore", - Options = RazorParserOptions.CreateDefaultOptions(), + Options = RazorCodeGenerationOptions.CreateDefault(), }; var pass = new DefaultDocumentClassifierPass(); @@ -39,7 +39,7 @@ namespace Microsoft.AspNetCore.Razor.Language // Arrange var irDocument = new DocumentIRNode() { - Options = RazorParserOptions.CreateDefaultOptions(), + Options = RazorCodeGenerationOptions.CreateDefault(), }; var pass = new DefaultDocumentClassifierPass(); diff --git a/test/Microsoft.AspNetCore.Razor.Language.Test/DefaultRazorCSharpLoweringPhaseTest.cs b/test/Microsoft.AspNetCore.Razor.Language.Test/DefaultRazorCSharpLoweringPhaseTest.cs index 405cb56172..661a7add50 100644 --- a/test/Microsoft.AspNetCore.Razor.Language.Test/DefaultRazorCSharpLoweringPhaseTest.cs +++ b/test/Microsoft.AspNetCore.Razor.Language.Test/DefaultRazorCSharpLoweringPhaseTest.cs @@ -83,7 +83,7 @@ namespace Microsoft.AspNetCore.Razor.Language var engine = RazorEngine.CreateEmpty(b => b.Phases.Add(phase)); var codeDocument = TestRazorCodeDocument.Create("

(); + callback + .Setup(c => c.Configure(It.IsAny())) + .Callback(o => + { + o.DesignTime = true; + o.IndentSize = 17; + o.IndentWithTabs = true; + }); + + // Act + var irDocument = Lower(codeDocument, builder: b => + { + b.Features.Add(callback.Object); + }); + + // Assert + Assert.NotNull(irDocument.Options); + Assert.True(irDocument.Options.DesignTime); + Assert.Equal(17, irDocument.Options.IndentSize); + Assert.True(irDocument.Options.IndentWithTabs); } [Fact] diff --git a/test/Microsoft.AspNetCore.Razor.Language.Test/DefaultRazorParsingPhaseTest.cs b/test/Microsoft.AspNetCore.Razor.Language.Test/DefaultRazorParsingPhaseTest.cs index 0628dc7ae4..66eed77388 100644 --- a/test/Microsoft.AspNetCore.Razor.Language.Test/DefaultRazorParsingPhaseTest.cs +++ b/test/Microsoft.AspNetCore.Razor.Language.Test/DefaultRazorParsingPhaseTest.cs @@ -78,7 +78,7 @@ namespace Microsoft.AspNetCore.Razor.Language { public int Order { get; } - public void Configure(RazorParserOptions options) + public void Configure(RazorParserOptionsBuilder options) { options.Directives.Add(DirectiveDescriptor.CreateDirective("test", DirectiveKind.SingleLine)); } diff --git a/test/Microsoft.AspNetCore.Razor.Language.Test/DocumentClassifierPassBaseTest.cs b/test/Microsoft.AspNetCore.Razor.Language.Test/DocumentClassifierPassBaseTest.cs index 863522173b..39951de8d8 100644 --- a/test/Microsoft.AspNetCore.Razor.Language.Test/DocumentClassifierPassBaseTest.cs +++ b/test/Microsoft.AspNetCore.Razor.Language.Test/DocumentClassifierPassBaseTest.cs @@ -20,7 +20,7 @@ namespace Microsoft.AspNetCore.Razor.Language var irDocument = new DocumentIRNode() { DocumentKind = "ignore", - Options = RazorParserOptions.CreateDefaultOptions(), + Options = RazorCodeGenerationOptions.CreateDefault(), }; var pass = new TestDocumentClassifierPass(); @@ -40,7 +40,7 @@ namespace Microsoft.AspNetCore.Razor.Language // Arrange var irDocument = new DocumentIRNode() { - Options = RazorParserOptions.CreateDefaultOptions(), + Options = RazorCodeGenerationOptions.CreateDefault(), }; var pass = new TestDocumentClassifierPass() @@ -63,7 +63,7 @@ namespace Microsoft.AspNetCore.Razor.Language // Arrange var irDocument = new DocumentIRNode() { - Options = RazorParserOptions.CreateDefaultOptions(), + Options = RazorCodeGenerationOptions.CreateDefault(), }; var expected = new ICodeTargetExtension[] @@ -98,7 +98,7 @@ namespace Microsoft.AspNetCore.Razor.Language // Arrange var irDocument = new DocumentIRNode() { - Options = RazorParserOptions.CreateDefaultOptions(), + Options = RazorCodeGenerationOptions.CreateDefault(), }; var pass = new TestDocumentClassifierPass(); @@ -123,7 +123,7 @@ namespace Microsoft.AspNetCore.Razor.Language // Arrange var irDocument = new DocumentIRNode() { - Options = RazorParserOptions.CreateDefaultOptions(), + Options = RazorCodeGenerationOptions.CreateDefault(), }; var builder = RazorIRBuilder.Create(irDocument); @@ -148,7 +148,7 @@ namespace Microsoft.AspNetCore.Razor.Language // Arrange var irDocument = new DocumentIRNode() { - Options = RazorParserOptions.CreateDefaultOptions(), + Options = RazorCodeGenerationOptions.CreateDefault(), }; var builder = RazorIRBuilder.Create(irDocument); @@ -174,7 +174,7 @@ namespace Microsoft.AspNetCore.Razor.Language // Arrange var irDocument = new DocumentIRNode() { - Options = RazorParserOptions.CreateDefaultOptions(), + Options = RazorCodeGenerationOptions.CreateDefault(), }; var builder = RazorIRBuilder.Create(irDocument); @@ -201,7 +201,7 @@ namespace Microsoft.AspNetCore.Razor.Language // Arrange var irDocument = new DocumentIRNode() { - Options = RazorParserOptions.CreateDefaultOptions(), + Options = RazorCodeGenerationOptions.CreateDefault(), }; var builder = RazorIRBuilder.Create(irDocument); @@ -230,7 +230,7 @@ namespace Microsoft.AspNetCore.Razor.Language // Arrange var irDocument = new DocumentIRNode() { - Options = RazorParserOptions.CreateDefaultOptions(), + Options = RazorCodeGenerationOptions.CreateDefault(), }; var builder = RazorIRBuilder.Create(irDocument); @@ -265,7 +265,7 @@ namespace Microsoft.AspNetCore.Razor.Language // Arrange var irDocument = new DocumentIRNode() { - Options = RazorParserOptions.CreateDefaultOptions(), + Options = RazorCodeGenerationOptions.CreateDefault(), }; var builder = RazorIRBuilder.Create(irDocument); diff --git a/test/Microsoft.AspNetCore.Razor.Language.Test/Extensions/TemplateTargetExtensionTest.cs b/test/Microsoft.AspNetCore.Razor.Language.Test/Extensions/TemplateTargetExtensionTest.cs index 6c4af44428..9e016850a9 100644 --- a/test/Microsoft.AspNetCore.Razor.Language.Test/Extensions/TemplateTargetExtensionTest.cs +++ b/test/Microsoft.AspNetCore.Razor.Language.Test/Extensions/TemplateTargetExtensionTest.cs @@ -27,7 +27,7 @@ namespace Microsoft.AspNetCore.Razor.Language.Extensions BasicWriter = new RuntimeBasicWriter(), TagHelperWriter = new RuntimeTagHelperWriter(), Writer = new CSharpCodeWriter(), - Options = RazorParserOptions.CreateDefaultOptions() + Options = RazorCodeGenerationOptions.CreateDefault(), }; context.RenderChildren = (n) => diff --git a/test/Microsoft.AspNetCore.Razor.Language.Test/Legacy/ParserTestBase.cs b/test/Microsoft.AspNetCore.Razor.Language.Test/Legacy/ParserTestBase.cs index 92b29759a8..58a093b944 100644 --- a/test/Microsoft.AspNetCore.Razor.Language.Test/Legacy/ParserTestBase.cs +++ b/test/Microsoft.AspNetCore.Razor.Language.Test/Legacy/ParserTestBase.cs @@ -37,8 +37,7 @@ namespace Microsoft.AspNetCore.Razor.Language.Legacy var source = TestRazorSourceDocument.Create(document); var reader = new SeekableTextReader(document, filePath: null); - var options = RazorParserOptions.CreateDefaultOptions(); - options.DesignTimeMode = designTime; + var options = RazorParserOptions.Create(Array.Empty(), designTime); var context = new ParserContext(reader, options); var codeParser = new CSharpCodeParser(context); @@ -69,8 +68,7 @@ namespace Microsoft.AspNetCore.Razor.Language.Legacy using (var reader = new SeekableTextReader(document, filePath: null)) { - var options = RazorParserOptions.CreateDefaultOptions(); - options.DesignTimeMode = designTime; + var options = RazorParserOptions.Create(Array.Empty(), designTime); var context = new ParserContext(reader, options); var parser = new HtmlMarkupParser(context); @@ -102,8 +100,7 @@ namespace Microsoft.AspNetCore.Razor.Language.Legacy using (var reader = new SeekableTextReader(document, filePath: null)) { - var options = RazorParserOptions.CreateDefaultOptions(); - options.DesignTimeMode = designTime; + var options = RazorParserOptions.Create(descriptors, designTime); var context = new ParserContext(reader, options); var parser = new CSharpCodeParser(descriptors, context); @@ -117,12 +114,6 @@ namespace Microsoft.AspNetCore.Razor.Language.Legacy var root = context.Builder.Build(); var diagnostics = context.ErrorSink.Errors?.Select(error => RazorDiagnostic.Create(error)); - options.Directives.Clear(); - foreach (var directive in descriptors) - { - options.Directives.Add(directive); - } - return RazorSyntaxTree.Create(root, source, diagnostics, options); } } diff --git a/test/Microsoft.AspNetCore.Razor.Language.Test/RazorCodeDocumentExtensionsTest.cs b/test/Microsoft.AspNetCore.Razor.Language.Test/RazorCodeDocumentExtensionsTest.cs index 5d7d697d38..6ac83b964d 100644 --- a/test/Microsoft.AspNetCore.Razor.Language.Test/RazorCodeDocumentExtensionsTest.cs +++ b/test/Microsoft.AspNetCore.Razor.Language.Test/RazorCodeDocumentExtensionsTest.cs @@ -93,7 +93,7 @@ namespace Microsoft.AspNetCore.Razor.Language // Arrange var codeDocument = TestRazorCodeDocument.CreateEmpty(); - var expected = RazorCSharpDocument.Create("", Array.Empty()); + var expected = RazorCSharpDocument.Create("", RazorCodeGenerationOptions.CreateDefault(), Array.Empty()); codeDocument.Items[typeof(RazorCSharpDocument)] = expected; // Act @@ -109,7 +109,7 @@ namespace Microsoft.AspNetCore.Razor.Language // Arrange var codeDocument = TestRazorCodeDocument.CreateEmpty(); - var expected = RazorCSharpDocument.Create("", Array.Empty()); + var expected = RazorCSharpDocument.Create("", RazorCodeGenerationOptions.CreateDefault(), Array.Empty()); // Act codeDocument.SetCSharpDocument(expected); diff --git a/test/Microsoft.AspNetCore.Razor.Language.Test/RazorEngineTest.cs b/test/Microsoft.AspNetCore.Razor.Language.Test/RazorEngineTest.cs index db1acb755e..25e7d9f90a 100644 --- a/test/Microsoft.AspNetCore.Razor.Language.Test/RazorEngineTest.cs +++ b/test/Microsoft.AspNetCore.Razor.Language.Test/RazorEngineTest.cs @@ -182,7 +182,7 @@ namespace Microsoft.AspNetCore.Razor.Language feature => Assert.IsType(feature), feature => Assert.IsType(feature), feature => Assert.IsType(feature), - feature => Assert.IsType(feature), + feature => Assert.IsType(feature), feature => Assert.IsType(feature)); } diff --git a/test/Microsoft.AspNetCore.Razor.Language.Test/RazorSyntaxTreeTest.cs b/test/Microsoft.AspNetCore.Razor.Language.Test/RazorSyntaxTreeTest.cs index 55480e00e0..559100f824 100644 --- a/test/Microsoft.AspNetCore.Razor.Language.Test/RazorSyntaxTreeTest.cs +++ b/test/Microsoft.AspNetCore.Razor.Language.Test/RazorSyntaxTreeTest.cs @@ -1,6 +1,7 @@ // Copyright (c) .NET Foundation. All rights reserved. // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +using System; using System.Collections.Generic; using Microsoft.AspNetCore.Razor.Language.Legacy; using Xunit; @@ -62,8 +63,7 @@ namespace Microsoft.AspNetCore.Razor.Language.Test { // Arrange var source = TestRazorSourceDocument.Create("\r\n \r\n @*SomeComment*@ \r\n @tagHelperPrefix \"SomePrefix\"\r\n\r\n@if (true) {\r\n @if(false) {

@something.
} \r\n}"); - var options = RazorParserOptions.CreateDefaultOptions(); - options.StopParsingAfterFirstDirective = true; + var options = RazorParserOptions.Create(Array.Empty(), designTime: false, parseOnlyLeadingDirectives: true); // Act var syntaxTree = RazorSyntaxTree.Parse(source, options);