Merge branch 'rel/vs15.7' into dev
This commit is contained in:
commit
6270c1f47e
|
|
@ -60,7 +60,12 @@ namespace Microsoft.AspNetCore.Mvc.Razor.Extensions.Version1_X
|
||||||
WriteTargetElementString(context.CodeWriter, node.TagHelper);
|
WriteTargetElementString(context.CodeWriter, node.TagHelper);
|
||||||
|
|
||||||
// Initialize declaration.
|
// Initialize declaration.
|
||||||
using (context.CodeWriter.BuildClassDeclaration(PublicModifiers, node.ClassName, TagHelperTypeName, interfaces: null))
|
using (context.CodeWriter.BuildClassDeclaration(
|
||||||
|
PublicModifiers,
|
||||||
|
node.ClassName,
|
||||||
|
TagHelperTypeName,
|
||||||
|
interfaces: null,
|
||||||
|
typeParameters: null))
|
||||||
{
|
{
|
||||||
// Add view component helper.
|
// Add view component helper.
|
||||||
context.CodeWriter.WriteVariableDeclaration(
|
context.CodeWriter.WriteVariableDeclaration(
|
||||||
|
|
|
||||||
|
|
@ -112,11 +112,13 @@ namespace Microsoft.AspNetCore.Mvc.Razor.Extensions
|
||||||
var leadingDirectiveCodeDocument = RazorCodeDocument.Create(codeDocument.Source);
|
var leadingDirectiveCodeDocument = RazorCodeDocument.Create(codeDocument.Source);
|
||||||
LeadingDirectiveParsingEngine.Engine.Process(leadingDirectiveCodeDocument);
|
LeadingDirectiveParsingEngine.Engine.Process(leadingDirectiveCodeDocument);
|
||||||
|
|
||||||
var documentIRNode = leadingDirectiveCodeDocument.GetDocumentIntermediateNode();
|
var leadingDirectiveDocumentNode = leadingDirectiveCodeDocument.GetDocumentIntermediateNode();
|
||||||
if (!PageDirective.TryGetPageDirective(documentIRNode, out var _))
|
if (!PageDirective.TryGetPageDirective(leadingDirectiveDocumentNode, out var _))
|
||||||
{
|
{
|
||||||
// The page directive is not the leading directive. Add an error.
|
// The page directive is not the leading directive. Add an error.
|
||||||
pageDirective.DirectiveNode.Diagnostics.Add(
|
// Note: Adding the error to the top-level document node because the directive node will be removed by a later optimization pass.
|
||||||
|
var originalDocumentNode = codeDocument.GetDocumentIntermediateNode();
|
||||||
|
originalDocumentNode.Diagnostics.Add(
|
||||||
RazorExtensionsDiagnosticFactory.CreatePageDirective_MustExistAtTheTopOfFile(pageDirective.DirectiveNode.Source.Value));
|
RazorExtensionsDiagnosticFactory.CreatePageDirective_MustExistAtTheTopOfFile(pageDirective.DirectiveNode.Source.Value));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -60,7 +60,12 @@ namespace Microsoft.AspNetCore.Mvc.Razor.Extensions
|
||||||
WriteTargetElementString(context.CodeWriter, node.TagHelper);
|
WriteTargetElementString(context.CodeWriter, node.TagHelper);
|
||||||
|
|
||||||
// Initialize declaration.
|
// Initialize declaration.
|
||||||
using (context.CodeWriter.BuildClassDeclaration(PublicModifiers, node.ClassName, TagHelperTypeName, interfaces: null))
|
using (context.CodeWriter.BuildClassDeclaration(
|
||||||
|
PublicModifiers,
|
||||||
|
node.ClassName,
|
||||||
|
TagHelperTypeName,
|
||||||
|
interfaces: null,
|
||||||
|
typeParameters: null))
|
||||||
{
|
{
|
||||||
// Add view component helper.
|
// Add view component helper.
|
||||||
context.CodeWriter.WriteVariableDeclaration(
|
context.CodeWriter.WriteVariableDeclaration(
|
||||||
|
|
|
||||||
|
|
@ -374,7 +374,8 @@ namespace Microsoft.AspNetCore.Razor.Language.CodeGeneration
|
||||||
IList<string> modifiers,
|
IList<string> modifiers,
|
||||||
string name,
|
string name,
|
||||||
string baseType,
|
string baseType,
|
||||||
IEnumerable<string> interfaces)
|
IList<string> interfaces,
|
||||||
|
IList<string> typeParameters)
|
||||||
{
|
{
|
||||||
for (var i = 0; i < modifiers.Count; i++)
|
for (var i = 0; i < modifiers.Count; i++)
|
||||||
{
|
{
|
||||||
|
|
@ -385,8 +386,15 @@ namespace Microsoft.AspNetCore.Razor.Language.CodeGeneration
|
||||||
writer.Write("class ");
|
writer.Write("class ");
|
||||||
writer.Write(name);
|
writer.Write(name);
|
||||||
|
|
||||||
|
if (typeParameters != null && typeParameters.Count > 0)
|
||||||
|
{
|
||||||
|
writer.Write("<");
|
||||||
|
writer.Write(string.Join(", ", typeParameters));
|
||||||
|
writer.Write(">");
|
||||||
|
}
|
||||||
|
|
||||||
var hasBaseType = !string.IsNullOrEmpty(baseType);
|
var hasBaseType = !string.IsNullOrEmpty(baseType);
|
||||||
var hasInterfaces = interfaces != null && interfaces.Count() > 0;
|
var hasInterfaces = interfaces != null && interfaces.Count > 0;
|
||||||
|
|
||||||
if (hasBaseType || hasInterfaces)
|
if (hasBaseType || hasInterfaces)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -78,8 +78,8 @@ namespace Microsoft.AspNetCore.Razor.Language.CodeGeneration
|
||||||
{
|
{
|
||||||
algorithmId = "{8829d00f-11b8-4213-878b-770e8597ac16}";
|
algorithmId = "{8829d00f-11b8-4213-878b-770e8597ac16}";
|
||||||
}
|
}
|
||||||
else if (string.Equals(algorithm, HashAlgorithmName.SHA1.Name, StringComparison.Ordinal) ||
|
else if (string.Equals(algorithm, HashAlgorithmName.SHA1.Name, StringComparison.Ordinal) ||
|
||||||
|
|
||||||
// In 2.0, we didn't actually expose the name of the algorithm, so it's possible we could get null here.
|
// In 2.0, we didn't actually expose the name of the algorithm, so it's possible we could get null here.
|
||||||
// If that's the case, we just assume SHA1 since that's the only thing we supported in 2.0.
|
// If that's the case, we just assume SHA1 since that's the only thing we supported in 2.0.
|
||||||
algorithm == null)
|
algorithm == null)
|
||||||
|
|
@ -88,7 +88,7 @@ namespace Microsoft.AspNetCore.Razor.Language.CodeGeneration
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
var supportedAlgorithms = string.Join(" ", new string[]
|
var supportedAlgorithms = string.Join(" ", new string[]
|
||||||
{
|
{
|
||||||
HashAlgorithmName.SHA1.Name,
|
HashAlgorithmName.SHA1.Name,
|
||||||
HashAlgorithmName.SHA256.Name
|
HashAlgorithmName.SHA256.Name
|
||||||
|
|
@ -143,7 +143,12 @@ namespace Microsoft.AspNetCore.Razor.Language.CodeGeneration
|
||||||
|
|
||||||
public override void VisitClassDeclaration(ClassDeclarationIntermediateNode node)
|
public override void VisitClassDeclaration(ClassDeclarationIntermediateNode node)
|
||||||
{
|
{
|
||||||
using (Context.CodeWriter.BuildClassDeclaration(node.Modifiers, node.ClassName, node.BaseType, node.Interfaces))
|
using (Context.CodeWriter.BuildClassDeclaration(
|
||||||
|
node.Modifiers,
|
||||||
|
node.ClassName,
|
||||||
|
node.BaseType,
|
||||||
|
node.Interfaces,
|
||||||
|
node.TypeParameters.Select(p => p.ParameterName).ToArray()))
|
||||||
{
|
{
|
||||||
VisitDefault(node);
|
VisitDefault(node);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -16,7 +16,9 @@ namespace Microsoft.AspNetCore.Razor.Language.Intermediate
|
||||||
|
|
||||||
public string BaseType { get; set; }
|
public string BaseType { get; set; }
|
||||||
|
|
||||||
public IList<string> Interfaces { get; set; }
|
public IList<string> Interfaces { get; set; } = new List<string>();
|
||||||
|
|
||||||
|
public IList<TypeParameter> TypeParameters { get; set; } = new List<TypeParameter>();
|
||||||
|
|
||||||
public override void Accept(IntermediateNodeVisitor visitor)
|
public override void Accept(IntermediateNodeVisitor visitor)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,10 @@
|
||||||
|
// 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.Intermediate
|
||||||
|
{
|
||||||
|
public sealed class TypeParameter
|
||||||
|
{
|
||||||
|
public string ParameterName { get; set; }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -931,7 +931,9 @@ namespace Microsoft.AspNetCore.Razor.Language.Legacy
|
||||||
{
|
{
|
||||||
// First, determine if this is a 'data-' attribute (since those can't use conditional attributes)
|
// First, determine if this is a 'data-' attribute (since those can't use conditional attributes)
|
||||||
var name = string.Concat(nameSymbols.Select(s => s.Content));
|
var name = string.Concat(nameSymbols.Select(s => s.Content));
|
||||||
var attributeCanBeConditional = !name.StartsWith("data-", StringComparison.OrdinalIgnoreCase);
|
var attributeCanBeConditional =
|
||||||
|
Context.FeatureFlags.EXPERIMENTAL_AllowConditionalDataDashAttributes ||
|
||||||
|
!name.StartsWith("data-", StringComparison.OrdinalIgnoreCase);
|
||||||
|
|
||||||
// Accept the whitespace and name
|
// Accept the whitespace and name
|
||||||
Accept(whitespace);
|
Accept(whitespace);
|
||||||
|
|
|
||||||
|
|
@ -23,6 +23,7 @@ namespace Microsoft.AspNetCore.Razor.Language.Legacy
|
||||||
|
|
||||||
Source = new SeekableTextReader(chars, source.FilePath);
|
Source = new SeekableTextReader(chars, source.FilePath);
|
||||||
DesignTimeMode = options.DesignTime;
|
DesignTimeMode = options.DesignTime;
|
||||||
|
FeatureFlags = options.FeatureFlags;
|
||||||
ParseLeadingDirectives = options.ParseLeadingDirectives;
|
ParseLeadingDirectives = options.ParseLeadingDirectives;
|
||||||
Builder = new SyntaxTreeBuilder();
|
Builder = new SyntaxTreeBuilder();
|
||||||
ErrorSink = new ErrorSink();
|
ErrorSink = new ErrorSink();
|
||||||
|
|
@ -33,6 +34,8 @@ namespace Microsoft.AspNetCore.Razor.Language.Legacy
|
||||||
|
|
||||||
public ErrorSink ErrorSink { get; set; }
|
public ErrorSink ErrorSink { get; set; }
|
||||||
|
|
||||||
|
public RazorParserFeatureFlags FeatureFlags { get; }
|
||||||
|
|
||||||
public HashSet<string> SeenDirectives { get; }
|
public HashSet<string> SeenDirectives { get; }
|
||||||
|
|
||||||
public ITextDocument Source { get; }
|
public ITextDocument Source { get; }
|
||||||
|
|
|
||||||
|
|
@ -9,6 +9,7 @@ namespace Microsoft.AspNetCore.Razor.Language
|
||||||
{
|
{
|
||||||
var allowMinimizedBooleanTagHelperAttributes = false;
|
var allowMinimizedBooleanTagHelperAttributes = false;
|
||||||
var allowHtmlCommentsInTagHelpers = false;
|
var allowHtmlCommentsInTagHelpers = false;
|
||||||
|
var experimental_AllowConditionalDataDashAttributes = false;
|
||||||
|
|
||||||
if (version.CompareTo(RazorLanguageVersion.Version_2_1) >= 0)
|
if (version.CompareTo(RazorLanguageVersion.Version_2_1) >= 0)
|
||||||
{
|
{
|
||||||
|
|
@ -17,24 +18,40 @@ namespace Microsoft.AspNetCore.Razor.Language
|
||||||
allowHtmlCommentsInTagHelpers = true;
|
allowHtmlCommentsInTagHelpers = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
return new DefaultRazorParserFeatureFlags(allowMinimizedBooleanTagHelperAttributes, allowHtmlCommentsInTagHelpers);
|
if (version.CompareTo(RazorLanguageVersion.Experimental) >= 0)
|
||||||
|
{
|
||||||
|
experimental_AllowConditionalDataDashAttributes = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return new DefaultRazorParserFeatureFlags(
|
||||||
|
allowMinimizedBooleanTagHelperAttributes,
|
||||||
|
allowHtmlCommentsInTagHelpers,
|
||||||
|
experimental_AllowConditionalDataDashAttributes);
|
||||||
}
|
}
|
||||||
|
|
||||||
public abstract bool AllowMinimizedBooleanTagHelperAttributes { get; }
|
public abstract bool AllowMinimizedBooleanTagHelperAttributes { get; }
|
||||||
|
|
||||||
public abstract bool AllowHtmlCommentsInTagHelpers { get; }
|
public abstract bool AllowHtmlCommentsInTagHelpers { get; }
|
||||||
|
|
||||||
|
public abstract bool EXPERIMENTAL_AllowConditionalDataDashAttributes { get; }
|
||||||
|
|
||||||
private class DefaultRazorParserFeatureFlags : RazorParserFeatureFlags
|
private class DefaultRazorParserFeatureFlags : RazorParserFeatureFlags
|
||||||
{
|
{
|
||||||
public DefaultRazorParserFeatureFlags(bool allowMinimizedBooleanTagHelperAttributes, bool allowHtmlCommentsInTagHelpers)
|
public DefaultRazorParserFeatureFlags(
|
||||||
|
bool allowMinimizedBooleanTagHelperAttributes,
|
||||||
|
bool allowHtmlCommentsInTagHelpers,
|
||||||
|
bool experimental_AllowConditionalDataDashAttributes)
|
||||||
{
|
{
|
||||||
AllowMinimizedBooleanTagHelperAttributes = allowMinimizedBooleanTagHelperAttributes;
|
AllowMinimizedBooleanTagHelperAttributes = allowMinimizedBooleanTagHelperAttributes;
|
||||||
AllowHtmlCommentsInTagHelpers = allowHtmlCommentsInTagHelpers;
|
AllowHtmlCommentsInTagHelpers = allowHtmlCommentsInTagHelpers;
|
||||||
|
EXPERIMENTAL_AllowConditionalDataDashAttributes = experimental_AllowConditionalDataDashAttributes;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override bool AllowMinimizedBooleanTagHelperAttributes { get; }
|
public override bool AllowMinimizedBooleanTagHelperAttributes { get; }
|
||||||
|
|
||||||
public override bool AllowHtmlCommentsInTagHelpers { get; }
|
public override bool AllowHtmlCommentsInTagHelpers { get; }
|
||||||
|
|
||||||
|
public override bool EXPERIMENTAL_AllowConditionalDataDashAttributes { get; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -290,6 +290,14 @@ public class AllTagHelper : {typeof(TagHelper).FullName}
|
||||||
|
|
||||||
RunRuntimeTest(compilation);
|
RunRuntimeTest(compilation);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void RazorPageWithNoLeadingPageDirective_Runtime()
|
||||||
|
{
|
||||||
|
var compilation = BaseCompilation;
|
||||||
|
|
||||||
|
RunRuntimeTest(compilation);
|
||||||
|
}
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region DesignTime
|
#region DesignTime
|
||||||
|
|
@ -577,6 +585,14 @@ public class AllTagHelper : {typeof(TagHelper).FullName}
|
||||||
|
|
||||||
RunDesignTimeTest(compilation);
|
RunDesignTimeTest(compilation);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void RazorPageWithNoLeadingPageDirective_DesignTime()
|
||||||
|
{
|
||||||
|
var compilation = BaseCompilation;
|
||||||
|
|
||||||
|
RunDesignTimeTest(compilation);
|
||||||
|
}
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
private void RunRuntimeTest(
|
private void RunRuntimeTest(
|
||||||
|
|
|
||||||
|
|
@ -68,9 +68,8 @@ namespace Microsoft.AspNetCore.Mvc.Razor.Extensions
|
||||||
visitor.Visit(irDocument);
|
visitor.Visit(irDocument);
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
var pageDirectives = irDocument.FindDirectiveReferences(PageDirective.Directive);
|
var documentNode = codeDocument.GetDocumentIntermediateNode();
|
||||||
var directive = Assert.Single(pageDirectives);
|
var diagnostic = Assert.Single(documentNode.Diagnostics);
|
||||||
var diagnostic = Assert.Single(directive.Node.Diagnostics);
|
|
||||||
Assert.Equal(expectedDiagnostic, diagnostic);
|
Assert.Equal(expectedDiagnostic, diagnostic);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -98,9 +97,8 @@ namespace Microsoft.AspNetCore.Mvc.Razor.Extensions
|
||||||
visitor.Visit(irDocument);
|
visitor.Visit(irDocument);
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
var pageDirectives = irDocument.FindDirectiveReferences(PageDirective.Directive);
|
var documentNode = codeDocument.GetDocumentIntermediateNode();
|
||||||
var directive = Assert.Single(pageDirectives);
|
Assert.Empty(documentNode.Diagnostics);
|
||||||
Assert.Empty(directive.Node.Diagnostics);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,2 @@
|
||||||
|
<div>Some text here.</div>
|
||||||
|
@page
|
||||||
|
|
@ -0,0 +1,42 @@
|
||||||
|
// <auto-generated/>
|
||||||
|
#pragma warning disable 1591
|
||||||
|
namespace AspNetCore
|
||||||
|
{
|
||||||
|
#line hidden
|
||||||
|
using TModel = global::System.Object;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using Microsoft.AspNetCore.Mvc;
|
||||||
|
using Microsoft.AspNetCore.Mvc.Rendering;
|
||||||
|
using Microsoft.AspNetCore.Mvc.ViewFeatures;
|
||||||
|
public class TestFiles_IntegrationTests_CodeGenerationIntegrationTest_RazorPageWithNoLeadingPageDirective : global::Microsoft.AspNetCore.Mvc.RazorPages.Page
|
||||||
|
{
|
||||||
|
#pragma warning disable 219
|
||||||
|
private void __RazorDirectiveTokenHelpers__() {
|
||||||
|
}
|
||||||
|
#pragma warning restore 219
|
||||||
|
#pragma warning disable 0414
|
||||||
|
private static System.Object __o = null;
|
||||||
|
#pragma warning restore 0414
|
||||||
|
#pragma warning disable 1998
|
||||||
|
public async override global::System.Threading.Tasks.Task ExecuteAsync()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
#pragma warning restore 1998
|
||||||
|
[global::Microsoft.AspNetCore.Mvc.Razor.Internal.RazorInjectAttribute]
|
||||||
|
public global::Microsoft.AspNetCore.Mvc.ViewFeatures.IModelExpressionProvider ModelExpressionProvider { get; private set; }
|
||||||
|
[global::Microsoft.AspNetCore.Mvc.Razor.Internal.RazorInjectAttribute]
|
||||||
|
public global::Microsoft.AspNetCore.Mvc.IUrlHelper Url { get; private set; }
|
||||||
|
[global::Microsoft.AspNetCore.Mvc.Razor.Internal.RazorInjectAttribute]
|
||||||
|
public global::Microsoft.AspNetCore.Mvc.IViewComponentHelper Component { get; private set; }
|
||||||
|
[global::Microsoft.AspNetCore.Mvc.Razor.Internal.RazorInjectAttribute]
|
||||||
|
public global::Microsoft.AspNetCore.Mvc.Rendering.IJsonHelper Json { get; private set; }
|
||||||
|
[global::Microsoft.AspNetCore.Mvc.Razor.Internal.RazorInjectAttribute]
|
||||||
|
public global::Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper<TestFiles_IntegrationTests_CodeGenerationIntegrationTest_RazorPageWithNoLeadingPageDirective> Html { get; private set; }
|
||||||
|
public global::Microsoft.AspNetCore.Mvc.ViewFeatures.ViewDataDictionary<TestFiles_IntegrationTests_CodeGenerationIntegrationTest_RazorPageWithNoLeadingPageDirective> ViewData => (global::Microsoft.AspNetCore.Mvc.ViewFeatures.ViewDataDictionary<TestFiles_IntegrationTests_CodeGenerationIntegrationTest_RazorPageWithNoLeadingPageDirective>)PageContext?.ViewData;
|
||||||
|
public TestFiles_IntegrationTests_CodeGenerationIntegrationTest_RazorPageWithNoLeadingPageDirective Model => ViewData.Model;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#pragma warning restore 1591
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
TestFiles/IntegrationTests/CodeGenerationIntegrationTest/RazorPageWithNoLeadingPageDirective.cshtml(2,1): Error RZ3906: The '@page' directive must precede all other elements defined in a Razor file.
|
||||||
|
|
@ -0,0 +1,46 @@
|
||||||
|
Document -
|
||||||
|
NamespaceDeclaration - - AspNetCore
|
||||||
|
UsingDirective - - TModel = global::System.Object
|
||||||
|
UsingDirective - (1:0,1 [12] ) - System
|
||||||
|
UsingDirective - (16:1,1 [32] ) - System.Collections.Generic
|
||||||
|
UsingDirective - (51:2,1 [17] ) - System.Linq
|
||||||
|
UsingDirective - (71:3,1 [28] ) - System.Threading.Tasks
|
||||||
|
UsingDirective - (102:4,1 [30] ) - Microsoft.AspNetCore.Mvc
|
||||||
|
UsingDirective - (135:5,1 [40] ) - Microsoft.AspNetCore.Mvc.Rendering
|
||||||
|
UsingDirective - (178:6,1 [43] ) - Microsoft.AspNetCore.Mvc.ViewFeatures
|
||||||
|
ClassDeclaration - - public - TestFiles_IntegrationTests_CodeGenerationIntegrationTest_RazorPageWithNoLeadingPageDirective - global::Microsoft.AspNetCore.Mvc.RazorPages.Page -
|
||||||
|
DesignTimeDirective -
|
||||||
|
DirectiveToken - (231:7,8 [62] ) - global::Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper<TModel>
|
||||||
|
DirectiveToken - (294:7,71 [4] ) - Html
|
||||||
|
DirectiveToken - (308:8,8 [54] ) - global::Microsoft.AspNetCore.Mvc.Rendering.IJsonHelper
|
||||||
|
DirectiveToken - (363:8,63 [4] ) - Json
|
||||||
|
DirectiveToken - (377:9,8 [53] ) - global::Microsoft.AspNetCore.Mvc.IViewComponentHelper
|
||||||
|
DirectiveToken - (431:9,62 [9] ) - Component
|
||||||
|
DirectiveToken - (450:10,8 [43] ) - global::Microsoft.AspNetCore.Mvc.IUrlHelper
|
||||||
|
DirectiveToken - (494:10,52 [3] ) - Url
|
||||||
|
DirectiveToken - (507:11,8 [70] ) - global::Microsoft.AspNetCore.Mvc.ViewFeatures.IModelExpressionProvider
|
||||||
|
DirectiveToken - (578:11,79 [23] ) - ModelExpressionProvider
|
||||||
|
DirectiveToken - (617:12,14 [96] ) - Microsoft.AspNetCore.Mvc.Razor.TagHelpers.UrlResolutionTagHelper, Microsoft.AspNetCore.Mvc.Razor
|
||||||
|
DirectiveToken - (729:13,14 [87] ) - Microsoft.AspNetCore.Mvc.Razor.TagHelpers.HeadTagHelper, Microsoft.AspNetCore.Mvc.Razor
|
||||||
|
DirectiveToken - (832:14,14 [87] ) - Microsoft.AspNetCore.Mvc.Razor.TagHelpers.BodyTagHelper, Microsoft.AspNetCore.Mvc.Razor
|
||||||
|
CSharpCode -
|
||||||
|
IntermediateToken - - CSharp - #pragma warning disable 0414
|
||||||
|
CSharpCode -
|
||||||
|
IntermediateToken - - CSharp - private static System.Object __o = null;
|
||||||
|
CSharpCode -
|
||||||
|
IntermediateToken - - CSharp - #pragma warning restore 0414
|
||||||
|
MethodDeclaration - - public async override - global::System.Threading.Tasks.Task - ExecuteAsync
|
||||||
|
HtmlContent - (0:0,0 [28] RazorPageWithNoLeadingPageDirective.cshtml)
|
||||||
|
IntermediateToken - (0:0,0 [5] RazorPageWithNoLeadingPageDirective.cshtml) - Html - <div>
|
||||||
|
IntermediateToken - (5:0,5 [15] RazorPageWithNoLeadingPageDirective.cshtml) - Html - Some text here.
|
||||||
|
IntermediateToken - (20:0,20 [6] RazorPageWithNoLeadingPageDirective.cshtml) - Html - </div>
|
||||||
|
IntermediateToken - (26:0,26 [2] RazorPageWithNoLeadingPageDirective.cshtml) - Html - \n
|
||||||
|
Inject -
|
||||||
|
Inject -
|
||||||
|
Inject -
|
||||||
|
Inject -
|
||||||
|
Inject -
|
||||||
|
CSharpCode -
|
||||||
|
IntermediateToken - - CSharp - public global::Microsoft.AspNetCore.Mvc.ViewFeatures.ViewDataDictionary<TestFiles_IntegrationTests_CodeGenerationIntegrationTest_RazorPageWithNoLeadingPageDirective> ViewData => (global::Microsoft.AspNetCore.Mvc.ViewFeatures.ViewDataDictionary<TestFiles_IntegrationTests_CodeGenerationIntegrationTest_RazorPageWithNoLeadingPageDirective>)PageContext?.ViewData;
|
||||||
|
CSharpCode -
|
||||||
|
IntermediateToken - - CSharp - public TestFiles_IntegrationTests_CodeGenerationIntegrationTest_RazorPageWithNoLeadingPageDirective Model => ViewData.Model;
|
||||||
|
|
@ -0,0 +1,41 @@
|
||||||
|
#pragma checksum "TestFiles/IntegrationTests/CodeGenerationIntegrationTest/RazorPageWithNoLeadingPageDirective.cshtml" "{ff1816ec-aa5e-4d10-87f7-6f4963833460}" "1d35b023a80ffd4cbf92549aae24d6c47f4af7e5"
|
||||||
|
// <auto-generated/>
|
||||||
|
#pragma warning disable 1591
|
||||||
|
[assembly: global::Microsoft.AspNetCore.Razor.Hosting.RazorCompiledItemAttribute(typeof(AspNetCore.TestFiles_IntegrationTests_CodeGenerationIntegrationTest_RazorPageWithNoLeadingPageDirective), @"mvc.1.0.razor-page", @"/TestFiles/IntegrationTests/CodeGenerationIntegrationTest/RazorPageWithNoLeadingPageDirective.cshtml")]
|
||||||
|
[assembly:global::Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure.RazorPageAttribute(@"/TestFiles/IntegrationTests/CodeGenerationIntegrationTest/RazorPageWithNoLeadingPageDirective.cshtml", typeof(AspNetCore.TestFiles_IntegrationTests_CodeGenerationIntegrationTest_RazorPageWithNoLeadingPageDirective), null)]
|
||||||
|
namespace AspNetCore
|
||||||
|
{
|
||||||
|
#line hidden
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using Microsoft.AspNetCore.Mvc;
|
||||||
|
using Microsoft.AspNetCore.Mvc.Rendering;
|
||||||
|
using Microsoft.AspNetCore.Mvc.ViewFeatures;
|
||||||
|
[global::Microsoft.AspNetCore.Razor.Hosting.RazorSourceChecksumAttribute(@"SHA1", @"1d35b023a80ffd4cbf92549aae24d6c47f4af7e5", @"/TestFiles/IntegrationTests/CodeGenerationIntegrationTest/RazorPageWithNoLeadingPageDirective.cshtml")]
|
||||||
|
public class TestFiles_IntegrationTests_CodeGenerationIntegrationTest_RazorPageWithNoLeadingPageDirective : global::Microsoft.AspNetCore.Mvc.RazorPages.Page
|
||||||
|
{
|
||||||
|
#pragma warning disable 1998
|
||||||
|
public async override global::System.Threading.Tasks.Task ExecuteAsync()
|
||||||
|
{
|
||||||
|
BeginContext(0, 28, true);
|
||||||
|
WriteLiteral("<div>Some text here.</div>\r\n");
|
||||||
|
EndContext();
|
||||||
|
}
|
||||||
|
#pragma warning restore 1998
|
||||||
|
[global::Microsoft.AspNetCore.Mvc.Razor.Internal.RazorInjectAttribute]
|
||||||
|
public global::Microsoft.AspNetCore.Mvc.ViewFeatures.IModelExpressionProvider ModelExpressionProvider { get; private set; }
|
||||||
|
[global::Microsoft.AspNetCore.Mvc.Razor.Internal.RazorInjectAttribute]
|
||||||
|
public global::Microsoft.AspNetCore.Mvc.IUrlHelper Url { get; private set; }
|
||||||
|
[global::Microsoft.AspNetCore.Mvc.Razor.Internal.RazorInjectAttribute]
|
||||||
|
public global::Microsoft.AspNetCore.Mvc.IViewComponentHelper Component { get; private set; }
|
||||||
|
[global::Microsoft.AspNetCore.Mvc.Razor.Internal.RazorInjectAttribute]
|
||||||
|
public global::Microsoft.AspNetCore.Mvc.Rendering.IJsonHelper Json { get; private set; }
|
||||||
|
[global::Microsoft.AspNetCore.Mvc.Razor.Internal.RazorInjectAttribute]
|
||||||
|
public global::Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper<TestFiles_IntegrationTests_CodeGenerationIntegrationTest_RazorPageWithNoLeadingPageDirective> Html { get; private set; }
|
||||||
|
public global::Microsoft.AspNetCore.Mvc.ViewFeatures.ViewDataDictionary<TestFiles_IntegrationTests_CodeGenerationIntegrationTest_RazorPageWithNoLeadingPageDirective> ViewData => (global::Microsoft.AspNetCore.Mvc.ViewFeatures.ViewDataDictionary<TestFiles_IntegrationTests_CodeGenerationIntegrationTest_RazorPageWithNoLeadingPageDirective>)PageContext?.ViewData;
|
||||||
|
public TestFiles_IntegrationTests_CodeGenerationIntegrationTest_RazorPageWithNoLeadingPageDirective Model => ViewData.Model;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#pragma warning restore 1591
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
TestFiles/IntegrationTests/CodeGenerationIntegrationTest/RazorPageWithNoLeadingPageDirective.cshtml(2,1): Error RZ3906: The '@page' directive must precede all other elements defined in a Razor file.
|
||||||
|
|
@ -0,0 +1,33 @@
|
||||||
|
Document -
|
||||||
|
RazorCompiledItemAttribute -
|
||||||
|
CSharpCode -
|
||||||
|
IntermediateToken - - CSharp - [assembly:global::Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure.RazorPageAttribute(@"/TestFiles/IntegrationTests/CodeGenerationIntegrationTest/RazorPageWithNoLeadingPageDirective.cshtml", typeof(AspNetCore.TestFiles_IntegrationTests_CodeGenerationIntegrationTest_RazorPageWithNoLeadingPageDirective), null)]
|
||||||
|
NamespaceDeclaration - - AspNetCore
|
||||||
|
UsingDirective - (1:0,1 [14] ) - System
|
||||||
|
UsingDirective - (16:1,1 [34] ) - System.Collections.Generic
|
||||||
|
UsingDirective - (51:2,1 [19] ) - System.Linq
|
||||||
|
UsingDirective - (71:3,1 [30] ) - System.Threading.Tasks
|
||||||
|
UsingDirective - (102:4,1 [32] ) - Microsoft.AspNetCore.Mvc
|
||||||
|
UsingDirective - (135:5,1 [42] ) - Microsoft.AspNetCore.Mvc.Rendering
|
||||||
|
UsingDirective - (178:6,1 [45] ) - Microsoft.AspNetCore.Mvc.ViewFeatures
|
||||||
|
RazorSourceChecksumAttribute -
|
||||||
|
ClassDeclaration - - public - TestFiles_IntegrationTests_CodeGenerationIntegrationTest_RazorPageWithNoLeadingPageDirective - global::Microsoft.AspNetCore.Mvc.RazorPages.Page -
|
||||||
|
MethodDeclaration - - public async override - global::System.Threading.Tasks.Task - ExecuteAsync
|
||||||
|
CSharpCode -
|
||||||
|
IntermediateToken - - CSharp - BeginContext(0, 28, true);
|
||||||
|
HtmlContent - (0:0,0 [28] RazorPageWithNoLeadingPageDirective.cshtml)
|
||||||
|
IntermediateToken - (0:0,0 [5] RazorPageWithNoLeadingPageDirective.cshtml) - Html - <div>
|
||||||
|
IntermediateToken - (5:0,5 [15] RazorPageWithNoLeadingPageDirective.cshtml) - Html - Some text here.
|
||||||
|
IntermediateToken - (20:0,20 [6] RazorPageWithNoLeadingPageDirective.cshtml) - Html - </div>
|
||||||
|
IntermediateToken - (26:0,26 [2] RazorPageWithNoLeadingPageDirective.cshtml) - Html - \n
|
||||||
|
CSharpCode -
|
||||||
|
IntermediateToken - - CSharp - EndContext();
|
||||||
|
Inject -
|
||||||
|
Inject -
|
||||||
|
Inject -
|
||||||
|
Inject -
|
||||||
|
Inject -
|
||||||
|
CSharpCode -
|
||||||
|
IntermediateToken - - CSharp - public global::Microsoft.AspNetCore.Mvc.ViewFeatures.ViewDataDictionary<TestFiles_IntegrationTests_CodeGenerationIntegrationTest_RazorPageWithNoLeadingPageDirective> ViewData => (global::Microsoft.AspNetCore.Mvc.ViewFeatures.ViewDataDictionary<TestFiles_IntegrationTests_CodeGenerationIntegrationTest_RazorPageWithNoLeadingPageDirective>)PageContext?.ViewData;
|
||||||
|
CSharpCode -
|
||||||
|
IntermediateToken - - CSharp - public TestFiles_IntegrationTests_CodeGenerationIntegrationTest_RazorPageWithNoLeadingPageDirective Model => ViewData.Model;
|
||||||
|
|
@ -218,6 +218,11 @@ namespace TestNamespace
|
||||||
},
|
},
|
||||||
BaseType = "TestBase",
|
BaseType = "TestBase",
|
||||||
Interfaces = new List<string> { "IFoo", "IBar", },
|
Interfaces = new List<string> { "IFoo", "IBar", },
|
||||||
|
TypeParameters = new List<TypeParameter>
|
||||||
|
{
|
||||||
|
new TypeParameter() { ParameterName = "TKey", },
|
||||||
|
new TypeParameter() { ParameterName = "TValue", },
|
||||||
|
},
|
||||||
ClassName = "TestClass",
|
ClassName = "TestClass",
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
@ -236,7 +241,7 @@ namespace TestNamespace
|
||||||
@"#pragma checksum ""test.cshtml"" ""{ff1816ec-aa5e-4d10-87f7-6f4963833460}"" ""da39a3ee5e6b4b0d3255bfef95601890afd80709""
|
@"#pragma checksum ""test.cshtml"" ""{ff1816ec-aa5e-4d10-87f7-6f4963833460}"" ""da39a3ee5e6b4b0d3255bfef95601890afd80709""
|
||||||
// <auto-generated/>
|
// <auto-generated/>
|
||||||
#pragma warning disable 1591
|
#pragma warning disable 1591
|
||||||
internal class TestClass : TestBase, IFoo, IBar
|
internal class TestClass<TKey, TValue> : TestBase, IFoo, IBar
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
#pragma warning restore 1591
|
#pragma warning restore 1591
|
||||||
|
|
|
||||||
|
|
@ -2,6 +2,7 @@
|
||||||
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
|
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
|
||||||
|
|
||||||
using System.IO;
|
using System.IO;
|
||||||
|
using Microsoft.AspNetCore.Razor.Language.Intermediate;
|
||||||
using Xunit;
|
using Xunit;
|
||||||
|
|
||||||
namespace Microsoft.AspNetCore.Razor.Language.IntegrationTests
|
namespace Microsoft.AspNetCore.Razor.Language.IntegrationTests
|
||||||
|
|
@ -66,6 +67,7 @@ namespace Microsoft.AspNetCore.Razor.Language.IntegrationTests
|
||||||
|
|
||||||
engine.ConfigureClass((document, @class) =>
|
engine.ConfigureClass((document, @class) =>
|
||||||
{
|
{
|
||||||
|
@class.TypeParameters = new[] { new TypeParameter() { ParameterName = "TValue", }, };
|
||||||
@class.Interfaces = new[] { "global::System.IDisposable" };
|
@class.Interfaces = new[] { "global::System.IDisposable" };
|
||||||
@class.BaseType = "CustomBaseType";
|
@class.BaseType = "CustomBaseType";
|
||||||
});
|
});
|
||||||
|
|
|
||||||
|
|
@ -1957,7 +1957,7 @@ namespace Microsoft.AspNetCore.Razor.Language.Legacy
|
||||||
Block expected,
|
Block expected,
|
||||||
params RazorDiagnostic[] expectedErrors)
|
params RazorDiagnostic[] expectedErrors)
|
||||||
{
|
{
|
||||||
var result = ParseCodeBlock(document, descriptors, designTime: false);
|
var result = ParseCodeBlock(RazorLanguageVersion.Latest, document, descriptors, designTime: false);
|
||||||
|
|
||||||
EvaluateResults(result, expected, expectedErrors);
|
EvaluateResults(result, expected, expectedErrors);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -9,9 +9,13 @@ namespace Microsoft.AspNetCore.Razor.Language.Legacy
|
||||||
{
|
{
|
||||||
internal abstract ISet<string> KeywordSet { get; }
|
internal abstract ISet<string> KeywordSet { get; }
|
||||||
|
|
||||||
internal override RazorSyntaxTree ParseBlock(string document, IEnumerable<DirectiveDescriptor> directives, bool designTime)
|
internal override RazorSyntaxTree ParseBlock(
|
||||||
|
RazorLanguageVersion version,
|
||||||
|
string document,
|
||||||
|
IEnumerable<DirectiveDescriptor> directives,
|
||||||
|
bool designTime)
|
||||||
{
|
{
|
||||||
return ParseCodeBlock(document, directives, designTime);
|
return ParseCodeBlock(version, document, directives, designTime);
|
||||||
}
|
}
|
||||||
|
|
||||||
internal void ImplicitExpressionTest(string input, params RazorDiagnostic[] errors)
|
internal void ImplicitExpressionTest(string input, params RazorDiagnostic[] errors)
|
||||||
|
|
|
||||||
|
|
@ -559,6 +559,30 @@ namespace Microsoft.AspNetCore.Razor.Language.Legacy
|
||||||
Assert.Equal(rewritten.Children.Count(), results.Root.Children.Count());
|
Assert.Equal(rewritten.Children.Count(), results.Root.Children.Count());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void ConditionalAttributesAreEnabledForDataAttributesWithExperimentalFlag()
|
||||||
|
{
|
||||||
|
ParseBlockTest(
|
||||||
|
RazorLanguageVersion.Experimental,
|
||||||
|
"<span data-foo='@foo'></span>",
|
||||||
|
new MarkupBlock(
|
||||||
|
new MarkupTagBlock(
|
||||||
|
Factory.Markup("<span"),
|
||||||
|
new MarkupBlock(
|
||||||
|
new AttributeBlockChunkGenerator("data-foo", new LocationTagged<string>(" data-foo='", 5, 0, 5), new LocationTagged<string>("'", 20, 0, 20)),
|
||||||
|
Factory.Markup(" data-foo='").With(SpanChunkGenerator.Null),
|
||||||
|
new MarkupBlock(new DynamicAttributeBlockChunkGenerator(new LocationTagged<string>(string.Empty, 16, 0, 16), 16, 0, 16),
|
||||||
|
new ExpressionBlock(
|
||||||
|
Factory.CodeTransition(),
|
||||||
|
Factory.Code("foo")
|
||||||
|
.AsImplicitExpression(CSharpCodeParser.DefaultKeywords)
|
||||||
|
.Accepts(AcceptedCharactersInternal.NonWhiteSpace))),
|
||||||
|
Factory.Markup("'").With(SpanChunkGenerator.Null)),
|
||||||
|
Factory.Markup(">").Accepts(AcceptedCharactersInternal.None)),
|
||||||
|
new MarkupTagBlock(
|
||||||
|
Factory.Markup("</span>").Accepts(AcceptedCharactersInternal.None))));
|
||||||
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void ConditionalAttributesAreDisabledForDataAttributesInBlock()
|
public void ConditionalAttributesAreDisabledForDataAttributesInBlock()
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -1,16 +1,19 @@
|
||||||
// Copyright (c) .NET Foundation. All rights reserved.
|
// 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.
|
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
|
||||||
|
|
||||||
|
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
|
||||||
namespace Microsoft.AspNetCore.Razor.Language.Legacy
|
namespace Microsoft.AspNetCore.Razor.Language.Legacy
|
||||||
{
|
{
|
||||||
public abstract class MarkupParserTestBase : CodeParserTestBase
|
public abstract class MarkupParserTestBase : CodeParserTestBase
|
||||||
{
|
{
|
||||||
internal override RazorSyntaxTree ParseBlock(string document, IEnumerable<DirectiveDescriptor> directives, bool designTime)
|
internal override RazorSyntaxTree ParseBlock(
|
||||||
|
RazorLanguageVersion version,
|
||||||
|
string document,
|
||||||
|
IEnumerable<DirectiveDescriptor> directives,
|
||||||
|
bool designTime)
|
||||||
{
|
{
|
||||||
return ParseHtmlBlock(document, directives, designTime);
|
return ParseHtmlBlock(version, document, directives, designTime);
|
||||||
}
|
}
|
||||||
|
|
||||||
internal virtual void SingleSpanDocumentTest(string document, BlockKindInternal blockKind, SpanKindInternal spanType)
|
internal virtual void SingleSpanDocumentTest(string document, BlockKindInternal blockKind, SpanKindInternal spanType)
|
||||||
|
|
|
||||||
|
|
@ -3962,7 +3962,7 @@ namespace Microsoft.AspNetCore.Razor.Language.Legacy
|
||||||
.Build(),
|
.Build(),
|
||||||
};
|
};
|
||||||
|
|
||||||
var featureFlags = new TestRazorParserFeatureFlags(allowMinimizedBooleanTagHelperAttributes: false, allowHtmlCommentsInTagHelper: false);
|
var featureFlags = new TestRazorParserFeatureFlags();
|
||||||
|
|
||||||
var expectedOutput = new MarkupBlock(
|
var expectedOutput = new MarkupBlock(
|
||||||
new MarkupTagHelperBlock(
|
new MarkupTagHelperBlock(
|
||||||
|
|
@ -3994,15 +3994,21 @@ namespace Microsoft.AspNetCore.Razor.Language.Legacy
|
||||||
|
|
||||||
private class TestRazorParserFeatureFlags : RazorParserFeatureFlags
|
private class TestRazorParserFeatureFlags : RazorParserFeatureFlags
|
||||||
{
|
{
|
||||||
public TestRazorParserFeatureFlags(bool allowMinimizedBooleanTagHelperAttributes, bool allowHtmlCommentsInTagHelper)
|
public TestRazorParserFeatureFlags(
|
||||||
|
bool allowMinimizedBooleanTagHelperAttributes = false,
|
||||||
|
bool allowHtmlCommentsInTagHelper = false,
|
||||||
|
bool experimental_AllowConditionalDataDashAttributes = false)
|
||||||
{
|
{
|
||||||
AllowMinimizedBooleanTagHelperAttributes = allowMinimizedBooleanTagHelperAttributes;
|
AllowMinimizedBooleanTagHelperAttributes = allowMinimizedBooleanTagHelperAttributes;
|
||||||
AllowHtmlCommentsInTagHelpers = allowHtmlCommentsInTagHelper;
|
AllowHtmlCommentsInTagHelpers = allowHtmlCommentsInTagHelper;
|
||||||
|
EXPERIMENTAL_AllowConditionalDataDashAttributes = experimental_AllowConditionalDataDashAttributes;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override bool AllowMinimizedBooleanTagHelperAttributes { get; }
|
public override bool AllowMinimizedBooleanTagHelperAttributes { get; }
|
||||||
|
|
||||||
public override bool AllowHtmlCommentsInTagHelpers { get; }
|
public override bool AllowHtmlCommentsInTagHelpers { get; }
|
||||||
|
|
||||||
|
public override bool EXPERIMENTAL_AllowConditionalDataDashAttributes { get; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,7 @@ namespace Razor
|
||||||
{
|
{
|
||||||
#line hidden
|
#line hidden
|
||||||
[global::Microsoft.AspNetCore.Razor.Hosting.RazorSourceChecksumAttribute(@"SHA1", @"38aa8e26c5d2a85c61d8e93fe69dd326fe82671b", @"/TestFiles/IntegrationTests/RazorTemplateEngineIntegrationTest/GenerateCodeWithConfigureClass.cshtml")]
|
[global::Microsoft.AspNetCore.Razor.Hosting.RazorSourceChecksumAttribute(@"SHA1", @"38aa8e26c5d2a85c61d8e93fe69dd326fe82671b", @"/TestFiles/IntegrationTests/RazorTemplateEngineIntegrationTest/GenerateCodeWithConfigureClass.cshtml")]
|
||||||
protected internal class MyClass : CustomBaseType, global::System.IDisposable
|
protected internal class MyClass<TValue> : CustomBaseType, global::System.IDisposable
|
||||||
{
|
{
|
||||||
#pragma warning disable 1998
|
#pragma warning disable 1998
|
||||||
public async override global::System.Threading.Tasks.Task ExecuteAsync()
|
public async override global::System.Threading.Tasks.Task ExecuteAsync()
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,7 @@
|
||||||
// Copyright (c) .NET Foundation. All rights reserved.
|
// 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.
|
// 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.Collections.Generic;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
|
|
@ -12,7 +13,7 @@ using Microsoft.AspNetCore.Razor.Language.Intermediate;
|
||||||
namespace Microsoft.AspNetCore.Razor.Language.IntegrationTests
|
namespace Microsoft.AspNetCore.Razor.Language.IntegrationTests
|
||||||
{
|
{
|
||||||
// Serializes single IR nodes (shallow).
|
// Serializes single IR nodes (shallow).
|
||||||
public class IntermediateNodeWriter :
|
public class IntermediateNodeWriter :
|
||||||
IntermediateNodeVisitor,
|
IntermediateNodeVisitor,
|
||||||
IExtensionIntermediateNodeVisitor<SectionIntermediateNode>
|
IExtensionIntermediateNodeVisitor<SectionIntermediateNode>
|
||||||
{
|
{
|
||||||
|
|
@ -32,7 +33,21 @@ namespace Microsoft.AspNetCore.Razor.Language.IntegrationTests
|
||||||
|
|
||||||
public override void VisitClassDeclaration(ClassDeclarationIntermediateNode node)
|
public override void VisitClassDeclaration(ClassDeclarationIntermediateNode node)
|
||||||
{
|
{
|
||||||
WriteContentNode(node, string.Join(" ", node.Modifiers), node.ClassName, node.BaseType, string.Join(", ", node.Interfaces ?? new List<string>()));
|
var entries = new List<string>()
|
||||||
|
{
|
||||||
|
string.Join(" ", node.Modifiers),
|
||||||
|
node.ClassName,
|
||||||
|
node.BaseType,
|
||||||
|
string.Join(", ", node.Interfaces ?? Array.Empty<string>())
|
||||||
|
};
|
||||||
|
|
||||||
|
// Avoid adding the type parameters to the baseline if they aren't present.
|
||||||
|
if (node.TypeParameters != null && node.TypeParameters.Count > 0)
|
||||||
|
{
|
||||||
|
entries.Add(string.Join(", ", node.TypeParameters));
|
||||||
|
}
|
||||||
|
|
||||||
|
WriteContentNode(node, entries.ToArray());
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void VisitCSharpExpressionAttributeValue(CSharpExpressionAttributeValueIntermediateNode node)
|
public override void VisitCSharpExpressionAttributeValue(CSharpExpressionAttributeValueIntermediateNode node)
|
||||||
|
|
|
||||||
|
|
@ -32,23 +32,43 @@ namespace Microsoft.AspNetCore.Razor.Language.Legacy
|
||||||
|
|
||||||
internal RazorSyntaxTree ParseBlock(string document, bool designTime)
|
internal RazorSyntaxTree ParseBlock(string document, bool designTime)
|
||||||
{
|
{
|
||||||
return ParseBlock(document, null, designTime);
|
return ParseBlock(RazorLanguageVersion.Latest, document, designTime);
|
||||||
}
|
}
|
||||||
|
|
||||||
internal abstract RazorSyntaxTree ParseBlock(string document, IEnumerable<DirectiveDescriptor> directives, bool designTime);
|
internal RazorSyntaxTree ParseBlock(RazorLanguageVersion version, string document, bool designTime)
|
||||||
|
|
||||||
internal virtual RazorSyntaxTree ParseDocument(string document, bool designTime = false)
|
|
||||||
{
|
{
|
||||||
return ParseDocument(document, null, designTime);
|
return ParseBlock(version, document, null, designTime);
|
||||||
}
|
}
|
||||||
|
|
||||||
internal virtual RazorSyntaxTree ParseDocument(string document, IEnumerable<DirectiveDescriptor> directives, bool designTime = false)
|
internal RazorSyntaxTree ParseBlock(string document, IEnumerable<DirectiveDescriptor> directives, bool designTime)
|
||||||
|
{
|
||||||
|
return ParseBlock(RazorLanguageVersion.Latest, document, directives, designTime);
|
||||||
|
}
|
||||||
|
|
||||||
|
internal abstract RazorSyntaxTree ParseBlock(RazorLanguageVersion version, string document, IEnumerable<DirectiveDescriptor> directives, bool designTime);
|
||||||
|
|
||||||
|
internal RazorSyntaxTree ParseDocument(string document, bool designTime = false)
|
||||||
|
{
|
||||||
|
return ParseDocument(RazorLanguageVersion.Latest, document, designTime);
|
||||||
|
}
|
||||||
|
|
||||||
|
internal RazorSyntaxTree ParseDocument(RazorLanguageVersion version, string document, bool designTime = false)
|
||||||
|
{
|
||||||
|
return ParseDocument(version, document, null, designTime);
|
||||||
|
}
|
||||||
|
|
||||||
|
internal RazorSyntaxTree ParseDocument(string document, IEnumerable<DirectiveDescriptor> directives, bool designTime = false)
|
||||||
|
{
|
||||||
|
return ParseDocument(RazorLanguageVersion.Latest, document, directives, designTime);
|
||||||
|
}
|
||||||
|
|
||||||
|
internal virtual RazorSyntaxTree ParseDocument(RazorLanguageVersion version, string document, IEnumerable<DirectiveDescriptor> directives, bool designTime = false)
|
||||||
{
|
{
|
||||||
directives = directives ?? Array.Empty<DirectiveDescriptor>();
|
directives = directives ?? Array.Empty<DirectiveDescriptor>();
|
||||||
|
|
||||||
var source = TestRazorSourceDocument.Create(document, filePath: null);
|
var source = TestRazorSourceDocument.Create(document, filePath: null);
|
||||||
|
|
||||||
var options = CreateParserOptions(directives, designTime);
|
var options = CreateParserOptions(version, directives, designTime);
|
||||||
var context = new ParserContext(source, options);
|
var context = new ParserContext(source, options);
|
||||||
|
|
||||||
var codeParser = new CSharpCodeParser(directives, context);
|
var codeParser = new CSharpCodeParser(directives, context);
|
||||||
|
|
@ -73,12 +93,12 @@ namespace Microsoft.AspNetCore.Razor.Language.Legacy
|
||||||
return syntaxTree;
|
return syntaxTree;
|
||||||
}
|
}
|
||||||
|
|
||||||
internal virtual RazorSyntaxTree ParseHtmlBlock(string document, IEnumerable<DirectiveDescriptor> directives, bool designTime = false)
|
internal virtual RazorSyntaxTree ParseHtmlBlock(RazorLanguageVersion version, string document, IEnumerable<DirectiveDescriptor> directives, bool designTime = false)
|
||||||
{
|
{
|
||||||
directives = directives ?? Array.Empty<DirectiveDescriptor>();
|
directives = directives ?? Array.Empty<DirectiveDescriptor>();
|
||||||
|
|
||||||
var source = TestRazorSourceDocument.Create(document, filePath: null);
|
var source = TestRazorSourceDocument.Create(document, filePath: null);
|
||||||
var options = CreateParserOptions(directives, designTime);
|
var options = CreateParserOptions(version, directives, designTime);
|
||||||
var context = new ParserContext(source, options);
|
var context = new ParserContext(source, options);
|
||||||
|
|
||||||
var parser = new HtmlMarkupParser(context);
|
var parser = new HtmlMarkupParser(context);
|
||||||
|
|
@ -95,12 +115,13 @@ namespace Microsoft.AspNetCore.Razor.Language.Legacy
|
||||||
return RazorSyntaxTree.Create(root, source, diagnostics, options);
|
return RazorSyntaxTree.Create(root, source, diagnostics, options);
|
||||||
}
|
}
|
||||||
|
|
||||||
internal virtual RazorSyntaxTree ParseCodeBlock(string document, bool designTime = false)
|
internal RazorSyntaxTree ParseCodeBlock(string document, bool designTime = false)
|
||||||
{
|
{
|
||||||
return ParseCodeBlock(document, Enumerable.Empty<DirectiveDescriptor>(), designTime);
|
return ParseCodeBlock(RazorLanguageVersion.Latest, document, Enumerable.Empty<DirectiveDescriptor>(), designTime);
|
||||||
}
|
}
|
||||||
|
|
||||||
internal virtual RazorSyntaxTree ParseCodeBlock(
|
internal virtual RazorSyntaxTree ParseCodeBlock(
|
||||||
|
RazorLanguageVersion version,
|
||||||
string document,
|
string document,
|
||||||
IEnumerable<DirectiveDescriptor> directives,
|
IEnumerable<DirectiveDescriptor> directives,
|
||||||
bool designTime)
|
bool designTime)
|
||||||
|
|
@ -108,7 +129,7 @@ namespace Microsoft.AspNetCore.Razor.Language.Legacy
|
||||||
directives = directives ?? Array.Empty<DirectiveDescriptor>();
|
directives = directives ?? Array.Empty<DirectiveDescriptor>();
|
||||||
|
|
||||||
var source = TestRazorSourceDocument.Create(document, filePath: null);
|
var source = TestRazorSourceDocument.Create(document, filePath: null);
|
||||||
var options = CreateParserOptions(directives, designTime);
|
var options = CreateParserOptions(version, directives, designTime);
|
||||||
var context = new ParserContext(source, options);
|
var context = new ParserContext(source, options);
|
||||||
|
|
||||||
var parser = new CSharpCodeParser(directives, context);
|
var parser = new CSharpCodeParser(directives, context);
|
||||||
|
|
@ -152,6 +173,11 @@ namespace Microsoft.AspNetCore.Razor.Language.Legacy
|
||||||
ParseBlockTest(document, null, designTime, expectedErrors);
|
ParseBlockTest(document, null, designTime, expectedErrors);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
internal virtual void ParseBlockTest(RazorLanguageVersion version, string document, Block expectedRoot)
|
||||||
|
{
|
||||||
|
ParseBlockTest(version, document, expectedRoot, false, null);
|
||||||
|
}
|
||||||
|
|
||||||
internal virtual void ParseBlockTest(string document, Block expectedRoot)
|
internal virtual void ParseBlockTest(string document, Block expectedRoot)
|
||||||
{
|
{
|
||||||
ParseBlockTest(document, expectedRoot, false, null);
|
ParseBlockTest(document, expectedRoot, false, null);
|
||||||
|
|
@ -182,9 +208,19 @@ namespace Microsoft.AspNetCore.Razor.Language.Legacy
|
||||||
ParseBlockTest(document, null, expected, designTime, expectedErrors);
|
ParseBlockTest(document, null, expected, designTime, expectedErrors);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
internal virtual void ParseBlockTest(RazorLanguageVersion version, string document, Block expected, bool designTime, params RazorDiagnostic[] expectedErrors)
|
||||||
|
{
|
||||||
|
ParseBlockTest(version, document, null, expected, designTime, expectedErrors);
|
||||||
|
}
|
||||||
|
|
||||||
internal virtual void ParseBlockTest(string document, IEnumerable<DirectiveDescriptor> directives, Block expected, bool designTime, params RazorDiagnostic[] expectedErrors)
|
internal virtual void ParseBlockTest(string document, IEnumerable<DirectiveDescriptor> directives, Block expected, bool designTime, params RazorDiagnostic[] expectedErrors)
|
||||||
{
|
{
|
||||||
var result = ParseBlock(document, directives, designTime);
|
ParseBlockTest(RazorLanguageVersion.Latest, document, directives, expected, designTime, expectedErrors);
|
||||||
|
}
|
||||||
|
|
||||||
|
internal virtual void ParseBlockTest(RazorLanguageVersion version, string document, IEnumerable<DirectiveDescriptor> directives, Block expected, bool designTime, params RazorDiagnostic[] expectedErrors)
|
||||||
|
{
|
||||||
|
var result = ParseBlock(version, document, directives, designTime);
|
||||||
|
|
||||||
if (FixupSpans)
|
if (FixupSpans)
|
||||||
{
|
{
|
||||||
|
|
@ -604,24 +640,16 @@ namespace Microsoft.AspNetCore.Razor.Language.Legacy
|
||||||
return block.Build();
|
return block.Build();
|
||||||
}
|
}
|
||||||
|
|
||||||
private static RazorParserOptions CreateParserOptions(IEnumerable<DirectiveDescriptor> directives, bool designTime)
|
private static RazorParserOptions CreateParserOptions(
|
||||||
|
RazorLanguageVersion version,
|
||||||
|
IEnumerable<DirectiveDescriptor> directives,
|
||||||
|
bool designTime)
|
||||||
{
|
{
|
||||||
if (designTime)
|
return new DefaultRazorParserOptions(
|
||||||
{
|
directives.ToArray(),
|
||||||
return RazorParserOptions.CreateDesignTime(ConfigureOptions);
|
designTime,
|
||||||
}
|
parseLeadingDirectives: false,
|
||||||
else
|
version: version);
|
||||||
{
|
|
||||||
return RazorParserOptions.Create(ConfigureOptions);
|
|
||||||
}
|
|
||||||
|
|
||||||
void ConfigureOptions(RazorParserOptionsBuilder builder)
|
|
||||||
{
|
|
||||||
foreach (var directive in directives)
|
|
||||||
{
|
|
||||||
builder.Directives.Add(directive);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private class IgnoreOutputBlock : Block
|
private class IgnoreOutputBlock : Block
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue