Modify tag helper infrastructure to configure case sensitivity (dotnet/aspnetcore-tooling#793)
* Modify tag helper infrastructure to configure case sensitivity
* Cleanup and added more tests
* More cleanup and added necessary diagnostics
* More feedback
* Added more tests
\n\nCommit migrated from 20b8286751
This commit is contained in:
parent
810e32ffc4
commit
7aeaa72f25
|
|
@ -52,7 +52,7 @@ namespace Microsoft.AspNetCore.Mvc.Razor.Extensions.Version1_X
|
||||||
var descriptor = factory.CreateDescriptor(viewComponent);
|
var descriptor = factory.CreateDescriptor(viewComponent);
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
Assert.Equal(expectedDescriptor, descriptor, TagHelperDescriptorComparer.CaseSensitive);
|
Assert.Equal(expectedDescriptor, descriptor, TagHelperDescriptorComparer.Default);
|
||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
|
|
@ -101,7 +101,7 @@ namespace Microsoft.AspNetCore.Mvc.Razor.Extensions.Version1_X
|
||||||
var descriptor = factory.CreateDescriptor(viewComponent);
|
var descriptor = factory.CreateDescriptor(viewComponent);
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
Assert.Equal(expectedDescriptor, descriptor, TagHelperDescriptorComparer.CaseSensitive);
|
Assert.Equal(expectedDescriptor, descriptor, TagHelperDescriptorComparer.Default);
|
||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
|
|
@ -142,7 +142,7 @@ namespace Microsoft.AspNetCore.Mvc.Razor.Extensions.Version1_X
|
||||||
var descriptor = factory.CreateDescriptor(viewComponent);
|
var descriptor = factory.CreateDescriptor(viewComponent);
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
Assert.Equal(expectedDescriptor, descriptor, TagHelperDescriptorComparer.CaseSensitive);
|
Assert.Equal(expectedDescriptor, descriptor, TagHelperDescriptorComparer.Default);
|
||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
|
|
|
||||||
|
|
@ -65,7 +65,7 @@ namespace Microsoft.AspNetCore.Mvc.Razor.Extensions.Version1_X
|
||||||
provider.Execute(context);
|
provider.Execute(context);
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
Assert.Single(context.Results, d => TagHelperDescriptorComparer.CaseSensitive.Equals(d, expectedDescriptor));
|
Assert.Single(context.Results, d => TagHelperDescriptorComparer.Default.Equals(d, expectedDescriptor));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -52,7 +52,7 @@ namespace Microsoft.AspNetCore.Mvc.Razor.Extensions.Version2_X
|
||||||
var descriptor = factory.CreateDescriptor(viewComponent);
|
var descriptor = factory.CreateDescriptor(viewComponent);
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
Assert.Equal(expectedDescriptor, descriptor, TagHelperDescriptorComparer.CaseSensitive);
|
Assert.Equal(expectedDescriptor, descriptor, TagHelperDescriptorComparer.Default);
|
||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
|
|
@ -101,7 +101,7 @@ namespace Microsoft.AspNetCore.Mvc.Razor.Extensions.Version2_X
|
||||||
var descriptor = factory.CreateDescriptor(viewComponent);
|
var descriptor = factory.CreateDescriptor(viewComponent);
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
Assert.Equal(expectedDescriptor, descriptor, TagHelperDescriptorComparer.CaseSensitive);
|
Assert.Equal(expectedDescriptor, descriptor, TagHelperDescriptorComparer.Default);
|
||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
|
|
@ -142,7 +142,7 @@ namespace Microsoft.AspNetCore.Mvc.Razor.Extensions.Version2_X
|
||||||
var descriptor = factory.CreateDescriptor(viewComponent);
|
var descriptor = factory.CreateDescriptor(viewComponent);
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
Assert.Equal(expectedDescriptor, descriptor, TagHelperDescriptorComparer.CaseSensitive);
|
Assert.Equal(expectedDescriptor, descriptor, TagHelperDescriptorComparer.Default);
|
||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
|
|
@ -184,7 +184,7 @@ namespace Microsoft.AspNetCore.Mvc.Razor.Extensions.Version2_X
|
||||||
var descriptor = factory.CreateDescriptor(viewComponent);
|
var descriptor = factory.CreateDescriptor(viewComponent);
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
Assert.Equal(expectedDescriptor, descriptor, TagHelperDescriptorComparer.CaseSensitive);
|
Assert.Equal(expectedDescriptor, descriptor, TagHelperDescriptorComparer.Default);
|
||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
|
|
@ -210,7 +210,7 @@ namespace Microsoft.AspNetCore.Mvc.Razor.Extensions.Version2_X
|
||||||
var descriptor = factory.CreateDescriptor(viewComponent);
|
var descriptor = factory.CreateDescriptor(viewComponent);
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
Assert.Equal(expectedDescriptor, descriptor, TagHelperDescriptorComparer.CaseSensitive);
|
Assert.Equal(expectedDescriptor, descriptor, TagHelperDescriptorComparer.Default);
|
||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
|
|
|
||||||
|
|
@ -66,7 +66,7 @@ namespace Microsoft.AspNetCore.Mvc.Razor.Extensions.Version2_X
|
||||||
provider.Execute(context);
|
provider.Execute(context);
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
Assert.Single(context.Results, d => TagHelperDescriptorComparer.CaseSensitive.Equals(d, expectedDescriptor));
|
Assert.Single(context.Results, d => TagHelperDescriptorComparer.Default.Equals(d, expectedDescriptor));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -52,7 +52,7 @@ namespace Microsoft.AspNetCore.Mvc.Razor.Extensions
|
||||||
var descriptor = factory.CreateDescriptor(viewComponent);
|
var descriptor = factory.CreateDescriptor(viewComponent);
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
Assert.Equal(expectedDescriptor, descriptor, TagHelperDescriptorComparer.CaseSensitive);
|
Assert.Equal(expectedDescriptor, descriptor, TagHelperDescriptorComparer.Default);
|
||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
|
|
@ -101,7 +101,7 @@ namespace Microsoft.AspNetCore.Mvc.Razor.Extensions
|
||||||
var descriptor = factory.CreateDescriptor(viewComponent);
|
var descriptor = factory.CreateDescriptor(viewComponent);
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
Assert.Equal(expectedDescriptor, descriptor, TagHelperDescriptorComparer.CaseSensitive);
|
Assert.Equal(expectedDescriptor, descriptor, TagHelperDescriptorComparer.Default);
|
||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
|
|
@ -142,7 +142,7 @@ namespace Microsoft.AspNetCore.Mvc.Razor.Extensions
|
||||||
var descriptor = factory.CreateDescriptor(viewComponent);
|
var descriptor = factory.CreateDescriptor(viewComponent);
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
Assert.Equal(expectedDescriptor, descriptor, TagHelperDescriptorComparer.CaseSensitive);
|
Assert.Equal(expectedDescriptor, descriptor, TagHelperDescriptorComparer.Default);
|
||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
|
|
@ -184,7 +184,7 @@ namespace Microsoft.AspNetCore.Mvc.Razor.Extensions
|
||||||
var descriptor = factory.CreateDescriptor(viewComponent);
|
var descriptor = factory.CreateDescriptor(viewComponent);
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
Assert.Equal(expectedDescriptor, descriptor, TagHelperDescriptorComparer.CaseSensitive);
|
Assert.Equal(expectedDescriptor, descriptor, TagHelperDescriptorComparer.Default);
|
||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
|
|
@ -210,7 +210,7 @@ namespace Microsoft.AspNetCore.Mvc.Razor.Extensions
|
||||||
var descriptor = factory.CreateDescriptor(viewComponent);
|
var descriptor = factory.CreateDescriptor(viewComponent);
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
Assert.Equal(expectedDescriptor, descriptor, TagHelperDescriptorComparer.CaseSensitive);
|
Assert.Equal(expectedDescriptor, descriptor, TagHelperDescriptorComparer.Default);
|
||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
|
|
|
||||||
|
|
@ -1,9 +1,6 @@
|
||||||
// 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.IO;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Reflection;
|
|
||||||
using Microsoft.AspNetCore.Razor.Language;
|
using Microsoft.AspNetCore.Razor.Language;
|
||||||
using Microsoft.CodeAnalysis;
|
using Microsoft.CodeAnalysis;
|
||||||
using Microsoft.CodeAnalysis.CSharp;
|
using Microsoft.CodeAnalysis.CSharp;
|
||||||
|
|
@ -66,7 +63,7 @@ namespace Microsoft.AspNetCore.Mvc.Razor.Extensions
|
||||||
provider.Execute(context);
|
provider.Execute(context);
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
Assert.Single(context.Results, d => TagHelperDescriptorComparer.CaseSensitive.Equals(d, expectedDescriptor));
|
Assert.Single(context.Results, d => TagHelperDescriptorComparer.Default.Equals(d, expectedDescriptor));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,6 @@
|
||||||
|
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
|
||||||
using Microsoft.Extensions.Internal;
|
using Microsoft.Extensions.Internal;
|
||||||
|
|
||||||
namespace Microsoft.AspNetCore.Razor.Language
|
namespace Microsoft.AspNetCore.Razor.Language
|
||||||
|
|
@ -16,27 +15,8 @@ namespace Microsoft.AspNetCore.Razor.Language
|
||||||
public static readonly AllowedChildTagDescriptorComparer Default =
|
public static readonly AllowedChildTagDescriptorComparer Default =
|
||||||
new AllowedChildTagDescriptorComparer();
|
new AllowedChildTagDescriptorComparer();
|
||||||
|
|
||||||
/// <summary>
|
private AllowedChildTagDescriptorComparer()
|
||||||
/// A default instance of the <see cref="AllowedChildTagDescriptorComparer"/> that does case-sensitive comparison.
|
|
||||||
/// </summary>
|
|
||||||
internal static readonly AllowedChildTagDescriptorComparer CaseSensitive =
|
|
||||||
new AllowedChildTagDescriptorComparer(caseSensitive: true);
|
|
||||||
|
|
||||||
private readonly StringComparer _stringComparer;
|
|
||||||
private readonly StringComparison _stringComparison;
|
|
||||||
|
|
||||||
private AllowedChildTagDescriptorComparer(bool caseSensitive = false)
|
|
||||||
{
|
{
|
||||||
if (caseSensitive)
|
|
||||||
{
|
|
||||||
_stringComparer = StringComparer.Ordinal;
|
|
||||||
_stringComparison = StringComparison.Ordinal;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
_stringComparer = StringComparer.OrdinalIgnoreCase;
|
|
||||||
_stringComparison = StringComparison.OrdinalIgnoreCase;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <inheritdoc />
|
/// <inheritdoc />
|
||||||
|
|
@ -55,7 +35,7 @@ namespace Microsoft.AspNetCore.Razor.Language
|
||||||
}
|
}
|
||||||
|
|
||||||
return
|
return
|
||||||
string.Equals(descriptorX.Name, descriptorY.Name, _stringComparison) &&
|
string.Equals(descriptorX.Name, descriptorY.Name, StringComparison.Ordinal) &&
|
||||||
string.Equals(descriptorX.DisplayName, descriptorY.DisplayName, StringComparison.Ordinal);
|
string.Equals(descriptorX.DisplayName, descriptorY.DisplayName, StringComparison.Ordinal);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -63,7 +43,7 @@ namespace Microsoft.AspNetCore.Razor.Language
|
||||||
public virtual int GetHashCode(AllowedChildTagDescriptor descriptor)
|
public virtual int GetHashCode(AllowedChildTagDescriptor descriptor)
|
||||||
{
|
{
|
||||||
var hash = HashCodeCombiner.Start();
|
var hash = HashCodeCombiner.Start();
|
||||||
hash.Add(descriptor.Name, _stringComparer);
|
hash.Add(descriptor.Name, StringComparer.Ordinal);
|
||||||
|
|
||||||
return hash.CombinedHash;
|
return hash.CombinedHash;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -43,6 +43,8 @@ namespace Microsoft.AspNetCore.Razor.Language
|
||||||
|
|
||||||
public string DisplayName { get; protected set; }
|
public string DisplayName { get; protected set; }
|
||||||
|
|
||||||
|
public bool CaseSensitive { get; protected set; }
|
||||||
|
|
||||||
public IReadOnlyList<RazorDiagnostic> Diagnostics { get; protected set; }
|
public IReadOnlyList<RazorDiagnostic> Diagnostics { get; protected set; }
|
||||||
|
|
||||||
public IReadOnlyDictionary<string, string> Metadata { get; protected set; }
|
public IReadOnlyDictionary<string, string> Metadata { get; protected set; }
|
||||||
|
|
|
||||||
|
|
@ -15,27 +15,8 @@ namespace Microsoft.AspNetCore.Razor.Language
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public static readonly BoundAttributeDescriptorComparer Default = new BoundAttributeDescriptorComparer();
|
public static readonly BoundAttributeDescriptorComparer Default = new BoundAttributeDescriptorComparer();
|
||||||
|
|
||||||
/// <summary>
|
private BoundAttributeDescriptorComparer()
|
||||||
/// A default instance of the <see cref="BoundAttributeDescriptorComparer"/> that does case-sensitive comparison.
|
|
||||||
/// </summary>
|
|
||||||
internal static readonly BoundAttributeDescriptorComparer CaseSensitive =
|
|
||||||
new BoundAttributeDescriptorComparer(caseSensitive: true);
|
|
||||||
|
|
||||||
private readonly StringComparer _stringComparer;
|
|
||||||
private readonly StringComparison _stringComparison;
|
|
||||||
|
|
||||||
private BoundAttributeDescriptorComparer(bool caseSensitive = false)
|
|
||||||
{
|
{
|
||||||
if (caseSensitive)
|
|
||||||
{
|
|
||||||
_stringComparer = StringComparer.Ordinal;
|
|
||||||
_stringComparison = StringComparison.Ordinal;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
_stringComparer = StringComparer.OrdinalIgnoreCase;
|
|
||||||
_stringComparison = StringComparison.OrdinalIgnoreCase;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public virtual bool Equals(BoundAttributeDescriptor descriptorX, BoundAttributeDescriptor descriptorY)
|
public virtual bool Equals(BoundAttributeDescriptor descriptorX, BoundAttributeDescriptor descriptorY)
|
||||||
|
|
@ -55,8 +36,9 @@ namespace Microsoft.AspNetCore.Razor.Language
|
||||||
descriptorX.IsIndexerStringProperty == descriptorY.IsIndexerStringProperty &&
|
descriptorX.IsIndexerStringProperty == descriptorY.IsIndexerStringProperty &&
|
||||||
descriptorX.IsEnum == descriptorY.IsEnum &&
|
descriptorX.IsEnum == descriptorY.IsEnum &&
|
||||||
descriptorX.HasIndexer == descriptorY.HasIndexer &&
|
descriptorX.HasIndexer == descriptorY.HasIndexer &&
|
||||||
string.Equals(descriptorX.Name, descriptorY.Name, _stringComparison) &&
|
descriptorX.CaseSensitive == descriptorY.CaseSensitive &&
|
||||||
string.Equals(descriptorX.IndexerNamePrefix, descriptorY.IndexerNamePrefix, _stringComparison) &&
|
string.Equals(descriptorX.Name, descriptorY.Name, StringComparison.Ordinal) &&
|
||||||
|
string.Equals(descriptorX.IndexerNamePrefix, descriptorY.IndexerNamePrefix, StringComparison.Ordinal) &&
|
||||||
string.Equals(descriptorX.TypeName, descriptorY.TypeName, StringComparison.Ordinal) &&
|
string.Equals(descriptorX.TypeName, descriptorY.TypeName, StringComparison.Ordinal) &&
|
||||||
string.Equals(descriptorX.IndexerTypeName, descriptorY.IndexerTypeName, StringComparison.Ordinal) &&
|
string.Equals(descriptorX.IndexerTypeName, descriptorY.IndexerTypeName, StringComparison.Ordinal) &&
|
||||||
string.Equals(descriptorX.Documentation, descriptorY.Documentation, StringComparison.Ordinal) &&
|
string.Equals(descriptorX.Documentation, descriptorY.Documentation, StringComparison.Ordinal) &&
|
||||||
|
|
@ -75,7 +57,7 @@ namespace Microsoft.AspNetCore.Razor.Language
|
||||||
|
|
||||||
var hash = HashCodeCombiner.Start();
|
var hash = HashCodeCombiner.Start();
|
||||||
hash.Add(descriptor.Kind);
|
hash.Add(descriptor.Kind);
|
||||||
hash.Add(descriptor.Name, _stringComparer);
|
hash.Add(descriptor.Name, StringComparer.Ordinal);
|
||||||
|
|
||||||
return hash.CombinedHash;
|
return hash.CombinedHash;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -30,6 +30,8 @@ namespace Microsoft.AspNetCore.Razor.Language
|
||||||
|
|
||||||
public string DisplayName { get; protected set; }
|
public string DisplayName { get; protected set; }
|
||||||
|
|
||||||
|
public bool CaseSensitive { get; protected set; }
|
||||||
|
|
||||||
public IReadOnlyList<RazorDiagnostic> Diagnostics { get; protected set; }
|
public IReadOnlyList<RazorDiagnostic> Diagnostics { get; protected set; }
|
||||||
|
|
||||||
public IReadOnlyDictionary<string, string> Metadata { get; protected set; }
|
public IReadOnlyDictionary<string, string> Metadata { get; protected set; }
|
||||||
|
|
|
||||||
|
|
@ -15,27 +15,8 @@ namespace Microsoft.AspNetCore.Razor.Language
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public static readonly BoundAttributeParameterDescriptorComparer Default = new BoundAttributeParameterDescriptorComparer();
|
public static readonly BoundAttributeParameterDescriptorComparer Default = new BoundAttributeParameterDescriptorComparer();
|
||||||
|
|
||||||
/// <summary>
|
private BoundAttributeParameterDescriptorComparer()
|
||||||
/// A default instance of the <see cref="BoundAttributeParameterDescriptorComparer"/> that does case-sensitive comparison.
|
|
||||||
/// </summary>
|
|
||||||
internal static readonly BoundAttributeParameterDescriptorComparer CaseSensitive =
|
|
||||||
new BoundAttributeParameterDescriptorComparer(caseSensitive: true);
|
|
||||||
|
|
||||||
private readonly StringComparer _stringComparer;
|
|
||||||
private readonly StringComparison _stringComparison;
|
|
||||||
|
|
||||||
private BoundAttributeParameterDescriptorComparer(bool caseSensitive = false)
|
|
||||||
{
|
{
|
||||||
if (caseSensitive)
|
|
||||||
{
|
|
||||||
_stringComparer = StringComparer.Ordinal;
|
|
||||||
_stringComparison = StringComparison.Ordinal;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
_stringComparer = StringComparer.OrdinalIgnoreCase;
|
|
||||||
_stringComparison = StringComparison.OrdinalIgnoreCase;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public virtual bool Equals(BoundAttributeParameterDescriptor descriptorX, BoundAttributeParameterDescriptor descriptorY)
|
public virtual bool Equals(BoundAttributeParameterDescriptor descriptorX, BoundAttributeParameterDescriptor descriptorY)
|
||||||
|
|
@ -53,7 +34,7 @@ namespace Microsoft.AspNetCore.Razor.Language
|
||||||
return
|
return
|
||||||
string.Equals(descriptorX.Kind, descriptorY.Kind, StringComparison.Ordinal) &&
|
string.Equals(descriptorX.Kind, descriptorY.Kind, StringComparison.Ordinal) &&
|
||||||
descriptorX.IsEnum == descriptorY.IsEnum &&
|
descriptorX.IsEnum == descriptorY.IsEnum &&
|
||||||
string.Equals(descriptorX.Name, descriptorY.Name, _stringComparison) &&
|
string.Equals(descriptorX.Name, descriptorY.Name, StringComparison.Ordinal) &&
|
||||||
string.Equals(descriptorX.TypeName, descriptorY.TypeName, StringComparison.Ordinal) &&
|
string.Equals(descriptorX.TypeName, descriptorY.TypeName, StringComparison.Ordinal) &&
|
||||||
string.Equals(descriptorX.Documentation, descriptorY.Documentation, StringComparison.Ordinal) &&
|
string.Equals(descriptorX.Documentation, descriptorY.Documentation, StringComparison.Ordinal) &&
|
||||||
string.Equals(descriptorX.DisplayName, descriptorY.DisplayName, StringComparison.Ordinal) &&
|
string.Equals(descriptorX.DisplayName, descriptorY.DisplayName, StringComparison.Ordinal) &&
|
||||||
|
|
@ -71,7 +52,7 @@ namespace Microsoft.AspNetCore.Razor.Language
|
||||||
|
|
||||||
var hash = HashCodeCombiner.Start();
|
var hash = HashCodeCombiner.Start();
|
||||||
hash.Add(descriptor.Kind);
|
hash.Add(descriptor.Kind);
|
||||||
hash.Add(descriptor.Name, _stringComparer);
|
hash.Add(descriptor.Name, StringComparer.Ordinal);
|
||||||
|
|
||||||
return hash.CombinedHash;
|
return hash.CombinedHash;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -421,5 +421,48 @@ namespace Microsoft.AspNetCore.Razor.Language.Components
|
||||||
{
|
{
|
||||||
return RazorDiagnostic.Create(RefSuppressFieldRequiredForGeneric, source ?? SourceSpan.Undefined);
|
return RazorDiagnostic.Create(RefSuppressFieldRequiredForGeneric, source ?? SourceSpan.Undefined);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static readonly RazorDiagnosticDescriptor ComponentNamesCannotStartWithLowerCase =
|
||||||
|
new RazorDiagnosticDescriptor(
|
||||||
|
$"{DiagnosticPrefix}10013",
|
||||||
|
() => "Component '{0}' starts with a lowercase character. Component names cannot start with a lowercase character.",
|
||||||
|
RazorDiagnosticSeverity.Error);
|
||||||
|
|
||||||
|
public static RazorDiagnostic Create_ComponentNamesCannotStartWithLowerCase(string componentName, SourceSpan? source = null)
|
||||||
|
{
|
||||||
|
return RazorDiagnostic.Create(
|
||||||
|
ComponentNamesCannotStartWithLowerCase,
|
||||||
|
source ?? SourceSpan.Undefined,
|
||||||
|
componentName);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static readonly RazorDiagnosticDescriptor UnexpectedMarkupElement =
|
||||||
|
new RazorDiagnosticDescriptor(
|
||||||
|
$"{DiagnosticPrefix}10014",
|
||||||
|
() => "Found markup element with unexpected name '{0}'. If this is intended to be a component, add a @using directive for its namespace.",
|
||||||
|
RazorDiagnosticSeverity.Warning);
|
||||||
|
|
||||||
|
public static RazorDiagnostic Create_UnexpectedMarkupElement(string elementName, SourceSpan? source = null)
|
||||||
|
{
|
||||||
|
return RazorDiagnostic.Create(
|
||||||
|
UnexpectedMarkupElement,
|
||||||
|
source ?? SourceSpan.Undefined,
|
||||||
|
elementName);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static readonly RazorDiagnosticDescriptor InconsistentStartAndEndTagName =
|
||||||
|
new RazorDiagnosticDescriptor(
|
||||||
|
$"{DiagnosticPrefix}10015",
|
||||||
|
() => "The start tag name '{0}' does not match the end tag name '{1}'. Components must have matching start and end tag names (case-sensitive).",
|
||||||
|
RazorDiagnosticSeverity.Error);
|
||||||
|
|
||||||
|
public static RazorDiagnostic Create_InconsistentStartAndEndTagName(string startTagName, string endTagName, SourceSpan? source = null)
|
||||||
|
{
|
||||||
|
return RazorDiagnostic.Create(
|
||||||
|
InconsistentStartAndEndTagName,
|
||||||
|
source ?? SourceSpan.Undefined,
|
||||||
|
startTagName,
|
||||||
|
endTagName);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -64,6 +64,14 @@ namespace Microsoft.AspNetCore.Razor.Language.Components
|
||||||
computedClass = $"AspNetCore_{checksum}";
|
computedClass = $"AspNetCore_{checksum}";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var documentNode = codeDocument.GetDocumentIntermediateNode();
|
||||||
|
if (char.IsLower(computedClass, 0))
|
||||||
|
{
|
||||||
|
// We don't allow component names to start with a lowercase character.
|
||||||
|
documentNode.Diagnostics.Add(
|
||||||
|
ComponentDiagnosticFactory.Create_ComponentNamesCannotStartWithLowerCase(computedClass, documentNode.Source));
|
||||||
|
}
|
||||||
|
|
||||||
if (MangleClassNames)
|
if (MangleClassNames)
|
||||||
{
|
{
|
||||||
computedClass = ComponentMetadata.MangleClassName(computedClass);
|
computedClass = ComponentMetadata.MangleClassName(computedClass);
|
||||||
|
|
@ -91,7 +99,6 @@ namespace Microsoft.AspNetCore.Razor.Language.Components
|
||||||
{
|
{
|
||||||
@class.BaseType = ComponentsApi.ComponentBase.FullTypeName;
|
@class.BaseType = ComponentsApi.ComponentBase.FullTypeName;
|
||||||
|
|
||||||
var documentNode = codeDocument.GetDocumentIntermediateNode();
|
|
||||||
var typeParamReferences = documentNode.FindDirectiveReferences(ComponentTypeParamDirective.Directive);
|
var typeParamReferences = documentNode.FindDirectiveReferences(ComponentTypeParamDirective.Directive);
|
||||||
for (var i = 0; i < typeParamReferences.Count; i++)
|
for (var i = 0; i < typeParamReferences.Count; i++)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -17,6 +17,7 @@ namespace Microsoft.AspNetCore.Razor.Language
|
||||||
string indexerTypeName,
|
string indexerTypeName,
|
||||||
string documentation,
|
string documentation,
|
||||||
string displayName,
|
string displayName,
|
||||||
|
bool caseSensitive,
|
||||||
BoundAttributeParameterDescriptor[] parameterDescriptors,
|
BoundAttributeParameterDescriptor[] parameterDescriptors,
|
||||||
Dictionary<string, string> metadata,
|
Dictionary<string, string> metadata,
|
||||||
RazorDiagnostic[] diagnostics)
|
RazorDiagnostic[] diagnostics)
|
||||||
|
|
@ -30,6 +31,7 @@ namespace Microsoft.AspNetCore.Razor.Language
|
||||||
IndexerTypeName = indexerTypeName;
|
IndexerTypeName = indexerTypeName;
|
||||||
Documentation = documentation;
|
Documentation = documentation;
|
||||||
DisplayName = displayName;
|
DisplayName = displayName;
|
||||||
|
CaseSensitive = caseSensitive;
|
||||||
BoundAttributeParameters = parameterDescriptors;
|
BoundAttributeParameters = parameterDescriptors;
|
||||||
|
|
||||||
Metadata = metadata;
|
Metadata = metadata;
|
||||||
|
|
|
||||||
|
|
@ -74,6 +74,8 @@ namespace Microsoft.AspNetCore.Razor.Language
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
internal bool CaseSensitive => _parent.CaseSensitive;
|
||||||
|
|
||||||
public override void BindAttributeParameter(Action<BoundAttributeParameterDescriptorBuilder> configure)
|
public override void BindAttributeParameter(Action<BoundAttributeParameterDescriptorBuilder> configure)
|
||||||
{
|
{
|
||||||
if (configure == null)
|
if (configure == null)
|
||||||
|
|
@ -101,7 +103,7 @@ namespace Microsoft.AspNetCore.Razor.Language
|
||||||
if (_attributeParameterBuilders != null)
|
if (_attributeParameterBuilders != null)
|
||||||
{
|
{
|
||||||
// Attribute parameters are case-sensitive.
|
// Attribute parameters are case-sensitive.
|
||||||
var parameterset = new HashSet<BoundAttributeParameterDescriptor>(BoundAttributeParameterDescriptorComparer.CaseSensitive);
|
var parameterset = new HashSet<BoundAttributeParameterDescriptor>(BoundAttributeParameterDescriptorComparer.Default);
|
||||||
for (var i = 0; i < _attributeParameterBuilders.Count; i++)
|
for (var i = 0; i < _attributeParameterBuilders.Count; i++)
|
||||||
{
|
{
|
||||||
parameterset.Add(_attributeParameterBuilders[i].Build());
|
parameterset.Add(_attributeParameterBuilders[i].Build());
|
||||||
|
|
@ -120,6 +122,7 @@ namespace Microsoft.AspNetCore.Razor.Language
|
||||||
IndexerValueTypeName,
|
IndexerValueTypeName,
|
||||||
Documentation,
|
Documentation,
|
||||||
GetDisplayName(),
|
GetDisplayName(),
|
||||||
|
CaseSensitive,
|
||||||
parameters,
|
parameters,
|
||||||
new Dictionary<string, string>(Metadata),
|
new Dictionary<string, string>(Metadata),
|
||||||
diagnostics.ToArray());
|
diagnostics.ToArray());
|
||||||
|
|
|
||||||
|
|
@ -14,6 +14,7 @@ namespace Microsoft.AspNetCore.Razor.Language
|
||||||
bool isEnum,
|
bool isEnum,
|
||||||
string documentation,
|
string documentation,
|
||||||
string displayName,
|
string displayName,
|
||||||
|
bool caseSensitive,
|
||||||
Dictionary<string, string> metadata,
|
Dictionary<string, string> metadata,
|
||||||
RazorDiagnostic[] diagnostics)
|
RazorDiagnostic[] diagnostics)
|
||||||
: base(kind)
|
: base(kind)
|
||||||
|
|
@ -23,6 +24,7 @@ namespace Microsoft.AspNetCore.Razor.Language
|
||||||
IsEnum = isEnum;
|
IsEnum = isEnum;
|
||||||
Documentation = documentation;
|
Documentation = documentation;
|
||||||
DisplayName = displayName;
|
DisplayName = displayName;
|
||||||
|
CaseSensitive = caseSensitive;
|
||||||
|
|
||||||
Metadata = metadata;
|
Metadata = metadata;
|
||||||
Diagnostics = diagnostics;
|
Diagnostics = diagnostics;
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,6 @@
|
||||||
// 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.Linq;
|
using System.Linq;
|
||||||
|
|
||||||
|
|
@ -48,6 +47,8 @@ namespace Microsoft.AspNetCore.Razor.Language
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
internal bool CaseSensitive => _parent.CaseSensitive;
|
||||||
|
|
||||||
public BoundAttributeParameterDescriptor Build()
|
public BoundAttributeParameterDescriptor Build()
|
||||||
{
|
{
|
||||||
var validationDiagnostics = Validate();
|
var validationDiagnostics = Validate();
|
||||||
|
|
@ -63,6 +64,7 @@ namespace Microsoft.AspNetCore.Razor.Language
|
||||||
IsEnum,
|
IsEnum,
|
||||||
Documentation,
|
Documentation,
|
||||||
GetDisplayName(),
|
GetDisplayName(),
|
||||||
|
CaseSensitive,
|
||||||
new Dictionary<string, string>(Metadata),
|
new Dictionary<string, string>(Metadata),
|
||||||
diagnostics.ToArray());
|
diagnostics.ToArray());
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1162,7 +1162,7 @@ namespace Microsoft.AspNetCore.Razor.Language
|
||||||
Source = BuildSourceSpanFromNode(node),
|
Source = BuildSourceSpanFromNode(node),
|
||||||
|
|
||||||
// Could be empty while the tag is being typed in.
|
// Could be empty while the tag is being typed in.
|
||||||
TagName = node.StartTag?.GetTagNameWithOptionalBang() ?? node.EndTag?.GetTagNameWithOptionalBang() ?? string.Empty,
|
TagName = node.StartTag?.Name?.Content ?? node.EndTag?.Name?.Content ?? string.Empty,
|
||||||
};
|
};
|
||||||
|
|
||||||
if (node.StartTag != null && node.EndTag != null && node.StartTag.IsVoidElement())
|
if (node.StartTag != null && node.EndTag != null && node.StartTag.IsVoidElement())
|
||||||
|
|
@ -1184,6 +1184,19 @@ namespace Microsoft.AspNetCore.Razor.Language
|
||||||
BuildSourceSpanFromNode(node.EndTag), node.EndTag.GetTagNameWithOptionalBang()));
|
BuildSourceSpanFromNode(node.EndTag), node.EndTag.GetTagNameWithOptionalBang()));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (node.StartTag != null && !_document.Options.SuppressPrimaryMethodBody)
|
||||||
|
{
|
||||||
|
// We only want this error during the second phase of the two phase compilation.
|
||||||
|
var startTagName = node.StartTag.GetTagNameWithOptionalBang();
|
||||||
|
if (startTagName != null && startTagName.Length > 0 && char.IsUpper(startTagName, 0))
|
||||||
|
{
|
||||||
|
// A markup element that starts with an uppercase character.
|
||||||
|
// It is most likely intended to be a component. Add a warning.
|
||||||
|
element.Diagnostics.Add(
|
||||||
|
ComponentDiagnosticFactory.Create_UnexpectedMarkupElement(startTagName, BuildSourceSpanFromNode(node.StartTag)));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
_builder.Push(element);
|
_builder.Push(element);
|
||||||
|
|
||||||
base.VisitMarkupElement(node);
|
base.VisitMarkupElement(node);
|
||||||
|
|
@ -1640,6 +1653,19 @@ namespace Microsoft.AspNetCore.Razor.Language
|
||||||
|
|
||||||
// We don't want to track attributes from a previous tag helper element.
|
// We don't want to track attributes from a previous tag helper element.
|
||||||
_renderedBoundAttributeNames.Clear();
|
_renderedBoundAttributeNames.Clear();
|
||||||
|
|
||||||
|
if (node.StartTag != null && node.EndTag != null)
|
||||||
|
{
|
||||||
|
var startTagName = node.StartTag.Name?.Content;
|
||||||
|
var endTagName = node.EndTag.Name?.Content;
|
||||||
|
if (!string.Equals(startTagName, endTagName, StringComparison.Ordinal))
|
||||||
|
{
|
||||||
|
// This is most likely a case mismatch in start and end tags. Otherwise the parser wouldn't have grouped them together.
|
||||||
|
// But we can't have case mismatch in start and end tags in components. Add a diagnostic.
|
||||||
|
tagHelperNode.Diagnostics.Add(
|
||||||
|
ComponentDiagnosticFactory.Create_InconsistentStartAndEndTagName(startTagName, endTagName, BuildSourceSpanFromNode(node.EndTag)));
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void VisitMarkupTagHelperStartTag(MarkupTagHelperStartTagSyntax node)
|
public override void VisitMarkupTagHelperStartTag(MarkupTagHelperStartTagSyntax node)
|
||||||
|
|
|
||||||
|
|
@ -10,6 +10,7 @@ namespace Microsoft.AspNetCore.Razor.Language
|
||||||
public DefaultRequiredAttributeDescriptor(
|
public DefaultRequiredAttributeDescriptor(
|
||||||
string name,
|
string name,
|
||||||
NameComparisonMode nameComparison,
|
NameComparisonMode nameComparison,
|
||||||
|
bool caseSensitive,
|
||||||
string value,
|
string value,
|
||||||
ValueComparisonMode valueComparison,
|
ValueComparisonMode valueComparison,
|
||||||
string displayName,
|
string displayName,
|
||||||
|
|
@ -18,6 +19,7 @@ namespace Microsoft.AspNetCore.Razor.Language
|
||||||
{
|
{
|
||||||
Name = name;
|
Name = name;
|
||||||
NameComparison = nameComparison;
|
NameComparison = nameComparison;
|
||||||
|
CaseSensitive = caseSensitive;
|
||||||
Value = value;
|
Value = value;
|
||||||
ValueComparison = valueComparison;
|
ValueComparison = valueComparison;
|
||||||
DisplayName = displayName;
|
DisplayName = displayName;
|
||||||
|
|
|
||||||
|
|
@ -9,9 +9,15 @@ namespace Microsoft.AspNetCore.Razor.Language
|
||||||
{
|
{
|
||||||
internal class DefaultRequiredAttributeDescriptorBuilder : RequiredAttributeDescriptorBuilder
|
internal class DefaultRequiredAttributeDescriptorBuilder : RequiredAttributeDescriptorBuilder
|
||||||
{
|
{
|
||||||
|
private DefaultTagMatchingRuleDescriptorBuilder _parent;
|
||||||
private RazorDiagnosticCollection _diagnostics;
|
private RazorDiagnosticCollection _diagnostics;
|
||||||
private readonly Dictionary<string, string> _metadata = new Dictionary<string, string>();
|
private readonly Dictionary<string, string> _metadata = new Dictionary<string, string>();
|
||||||
|
|
||||||
|
public DefaultRequiredAttributeDescriptorBuilder(DefaultTagMatchingRuleDescriptorBuilder parent)
|
||||||
|
{
|
||||||
|
_parent = parent;
|
||||||
|
}
|
||||||
|
|
||||||
public override string Name { get; set; }
|
public override string Name { get; set; }
|
||||||
|
|
||||||
public override RequiredAttributeDescriptor.NameComparisonMode NameComparisonMode { get; set; }
|
public override RequiredAttributeDescriptor.NameComparisonMode NameComparisonMode { get; set; }
|
||||||
|
|
@ -35,6 +41,8 @@ namespace Microsoft.AspNetCore.Razor.Language
|
||||||
|
|
||||||
public override IDictionary<string, string> Metadata => _metadata;
|
public override IDictionary<string, string> Metadata => _metadata;
|
||||||
|
|
||||||
|
internal bool CaseSensitive => _parent.CaseSensitive;
|
||||||
|
|
||||||
public RequiredAttributeDescriptor Build()
|
public RequiredAttributeDescriptor Build()
|
||||||
{
|
{
|
||||||
var validationDiagnostics = Validate();
|
var validationDiagnostics = Validate();
|
||||||
|
|
@ -48,6 +56,7 @@ namespace Microsoft.AspNetCore.Razor.Language
|
||||||
var rule = new DefaultRequiredAttributeDescriptor(
|
var rule = new DefaultRequiredAttributeDescriptor(
|
||||||
Name,
|
Name,
|
||||||
NameComparisonMode,
|
NameComparisonMode,
|
||||||
|
CaseSensitive,
|
||||||
Value,
|
Value,
|
||||||
ValueComparisonMode,
|
ValueComparisonMode,
|
||||||
displayName,
|
displayName,
|
||||||
|
|
|
||||||
|
|
@ -14,6 +14,7 @@ namespace Microsoft.AspNetCore.Razor.Language
|
||||||
string displayName,
|
string displayName,
|
||||||
string documentation,
|
string documentation,
|
||||||
string tagOutputHint,
|
string tagOutputHint,
|
||||||
|
bool caseSensitive,
|
||||||
TagMatchingRuleDescriptor[] tagMatchingRules,
|
TagMatchingRuleDescriptor[] tagMatchingRules,
|
||||||
BoundAttributeDescriptor[] attributeDescriptors,
|
BoundAttributeDescriptor[] attributeDescriptors,
|
||||||
AllowedChildTagDescriptor[] allowedChildTags,
|
AllowedChildTagDescriptor[] allowedChildTags,
|
||||||
|
|
@ -26,6 +27,7 @@ namespace Microsoft.AspNetCore.Razor.Language
|
||||||
DisplayName = displayName;
|
DisplayName = displayName;
|
||||||
Documentation = documentation;
|
Documentation = documentation;
|
||||||
TagOutputHint = tagOutputHint;
|
TagOutputHint = tagOutputHint;
|
||||||
|
CaseSensitive = caseSensitive;
|
||||||
TagMatchingRules = tagMatchingRules;
|
TagMatchingRules = tagMatchingRules;
|
||||||
BoundAttributes = attributeDescriptors;
|
BoundAttributes = attributeDescriptors;
|
||||||
AllowedChildTags = allowedChildTags;
|
AllowedChildTags = allowedChildTags;
|
||||||
|
|
|
||||||
|
|
@ -40,6 +40,8 @@ namespace Microsoft.AspNetCore.Razor.Language
|
||||||
|
|
||||||
public override string TagOutputHint { get; set; }
|
public override string TagOutputHint { get; set; }
|
||||||
|
|
||||||
|
public override bool CaseSensitive { get; set; }
|
||||||
|
|
||||||
public override string Documentation { get; set; }
|
public override string Documentation { get; set; }
|
||||||
|
|
||||||
public override IDictionary<string, string> Metadata => _metadata;
|
public override IDictionary<string, string> Metadata => _metadata;
|
||||||
|
|
@ -124,7 +126,7 @@ namespace Microsoft.AspNetCore.Razor.Language
|
||||||
|
|
||||||
EnsureTagMatchingRuleBuilders();
|
EnsureTagMatchingRuleBuilders();
|
||||||
|
|
||||||
var builder = new DefaultTagMatchingRuleDescriptorBuilder();
|
var builder = new DefaultTagMatchingRuleDescriptorBuilder(this);
|
||||||
configure(builder);
|
configure(builder);
|
||||||
_tagMatchingRuleBuilders.Add(builder);
|
_tagMatchingRuleBuilders.Add(builder);
|
||||||
}
|
}
|
||||||
|
|
@ -180,6 +182,7 @@ namespace Microsoft.AspNetCore.Razor.Language
|
||||||
GetDisplayName(),
|
GetDisplayName(),
|
||||||
Documentation,
|
Documentation,
|
||||||
TagOutputHint,
|
TagOutputHint,
|
||||||
|
CaseSensitive,
|
||||||
tagMatchingRules,
|
tagMatchingRules,
|
||||||
attributes,
|
attributes,
|
||||||
allowedChildTags,
|
allowedChildTags,
|
||||||
|
|
|
||||||
|
|
@ -9,12 +9,14 @@ namespace Microsoft.AspNetCore.Razor.Language
|
||||||
string tagName,
|
string tagName,
|
||||||
string parentTag,
|
string parentTag,
|
||||||
TagStructure tagStructure,
|
TagStructure tagStructure,
|
||||||
|
bool caseSensitive,
|
||||||
RequiredAttributeDescriptor[] attributes,
|
RequiredAttributeDescriptor[] attributes,
|
||||||
RazorDiagnostic[] diagnostics)
|
RazorDiagnostic[] diagnostics)
|
||||||
{
|
{
|
||||||
TagName = tagName;
|
TagName = tagName;
|
||||||
ParentTag = parentTag;
|
ParentTag = parentTag;
|
||||||
TagStructure = tagStructure;
|
TagStructure = tagStructure;
|
||||||
|
CaseSensitive = caseSensitive;
|
||||||
Attributes = attributes;
|
Attributes = attributes;
|
||||||
Diagnostics = diagnostics;
|
Diagnostics = diagnostics;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -4,17 +4,18 @@
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using Microsoft.AspNetCore.Razor.Language.Legacy;
|
|
||||||
|
|
||||||
namespace Microsoft.AspNetCore.Razor.Language
|
namespace Microsoft.AspNetCore.Razor.Language
|
||||||
{
|
{
|
||||||
internal class DefaultTagMatchingRuleDescriptorBuilder : TagMatchingRuleDescriptorBuilder
|
internal class DefaultTagMatchingRuleDescriptorBuilder : TagMatchingRuleDescriptorBuilder
|
||||||
{
|
{
|
||||||
|
private DefaultTagHelperDescriptorBuilder _parent;
|
||||||
private List<DefaultRequiredAttributeDescriptorBuilder> _requiredAttributeBuilders;
|
private List<DefaultRequiredAttributeDescriptorBuilder> _requiredAttributeBuilders;
|
||||||
private RazorDiagnosticCollection _diagnostics;
|
private RazorDiagnosticCollection _diagnostics;
|
||||||
|
|
||||||
internal DefaultTagMatchingRuleDescriptorBuilder()
|
internal DefaultTagMatchingRuleDescriptorBuilder(DefaultTagHelperDescriptorBuilder parent)
|
||||||
{
|
{
|
||||||
|
_parent = parent;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override string TagName { get; set; }
|
public override string TagName { get; set; }
|
||||||
|
|
@ -23,6 +24,8 @@ namespace Microsoft.AspNetCore.Razor.Language
|
||||||
|
|
||||||
public override TagStructure TagStructure { get; set; }
|
public override TagStructure TagStructure { get; set; }
|
||||||
|
|
||||||
|
internal bool CaseSensitive => _parent.CaseSensitive;
|
||||||
|
|
||||||
public override RazorDiagnosticCollection Diagnostics
|
public override RazorDiagnosticCollection Diagnostics
|
||||||
{
|
{
|
||||||
get
|
get
|
||||||
|
|
@ -55,7 +58,7 @@ namespace Microsoft.AspNetCore.Razor.Language
|
||||||
|
|
||||||
EnsureRequiredAttributeBuilders();
|
EnsureRequiredAttributeBuilders();
|
||||||
|
|
||||||
var builder = new DefaultRequiredAttributeDescriptorBuilder();
|
var builder = new DefaultRequiredAttributeDescriptorBuilder(this);
|
||||||
configure(builder);
|
configure(builder);
|
||||||
_requiredAttributeBuilders.Add(builder);
|
_requiredAttributeBuilders.Add(builder);
|
||||||
}
|
}
|
||||||
|
|
@ -85,6 +88,7 @@ namespace Microsoft.AspNetCore.Razor.Language
|
||||||
TagName,
|
TagName,
|
||||||
ParentTag,
|
ParentTag,
|
||||||
TagStructure,
|
TagStructure,
|
||||||
|
CaseSensitive,
|
||||||
requiredAttributes,
|
requiredAttributes,
|
||||||
diagnostics.ToArray());
|
diagnostics.ToArray());
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -13,6 +13,8 @@ namespace Microsoft.AspNetCore.Razor.Language
|
||||||
|
|
||||||
public NameComparisonMode NameComparison { get; protected set; }
|
public NameComparisonMode NameComparison { get; protected set; }
|
||||||
|
|
||||||
|
public bool CaseSensitive { get; protected set; }
|
||||||
|
|
||||||
public string Value { get; protected set; }
|
public string Value { get; protected set; }
|
||||||
|
|
||||||
public ValueComparisonMode ValueComparison { get; protected set; }
|
public ValueComparisonMode ValueComparison { get; protected set; }
|
||||||
|
|
|
||||||
|
|
@ -19,27 +19,8 @@ namespace Microsoft.AspNetCore.Razor.Language
|
||||||
public static readonly RequiredAttributeDescriptorComparer Default =
|
public static readonly RequiredAttributeDescriptorComparer Default =
|
||||||
new RequiredAttributeDescriptorComparer();
|
new RequiredAttributeDescriptorComparer();
|
||||||
|
|
||||||
/// <summary>
|
private RequiredAttributeDescriptorComparer()
|
||||||
/// A default instance of the <see cref="RequiredAttributeDescriptorComparer"/> that does case-sensitive comparison.
|
|
||||||
/// </summary>
|
|
||||||
internal static readonly RequiredAttributeDescriptorComparer CaseSensitive =
|
|
||||||
new RequiredAttributeDescriptorComparer(caseSensitive: true);
|
|
||||||
|
|
||||||
private readonly StringComparer _stringComparer;
|
|
||||||
private readonly StringComparison _stringComparison;
|
|
||||||
|
|
||||||
private RequiredAttributeDescriptorComparer(bool caseSensitive = false)
|
|
||||||
{
|
{
|
||||||
if (caseSensitive)
|
|
||||||
{
|
|
||||||
_stringComparer = StringComparer.Ordinal;
|
|
||||||
_stringComparison = StringComparison.Ordinal;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
_stringComparer = StringComparer.OrdinalIgnoreCase;
|
|
||||||
_stringComparison = StringComparison.OrdinalIgnoreCase;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <inheritdoc />
|
/// <inheritdoc />
|
||||||
|
|
@ -58,9 +39,10 @@ namespace Microsoft.AspNetCore.Razor.Language
|
||||||
}
|
}
|
||||||
|
|
||||||
return
|
return
|
||||||
|
descriptorX.CaseSensitive == descriptorY.CaseSensitive &&
|
||||||
descriptorX.NameComparison == descriptorY.NameComparison &&
|
descriptorX.NameComparison == descriptorY.NameComparison &&
|
||||||
descriptorX.ValueComparison == descriptorY.ValueComparison &&
|
descriptorX.ValueComparison == descriptorY.ValueComparison &&
|
||||||
string.Equals(descriptorX.Name, descriptorY.Name, _stringComparison) &&
|
string.Equals(descriptorX.Name, descriptorY.Name, StringComparison.Ordinal) &&
|
||||||
string.Equals(descriptorX.Value, descriptorY.Value, StringComparison.Ordinal) &&
|
string.Equals(descriptorX.Value, descriptorY.Value, StringComparison.Ordinal) &&
|
||||||
string.Equals(descriptorX.DisplayName, descriptorY.DisplayName, StringComparison.Ordinal);
|
string.Equals(descriptorX.DisplayName, descriptorY.DisplayName, StringComparison.Ordinal);
|
||||||
}
|
}
|
||||||
|
|
@ -68,8 +50,13 @@ namespace Microsoft.AspNetCore.Razor.Language
|
||||||
/// <inheritdoc />
|
/// <inheritdoc />
|
||||||
public virtual int GetHashCode(RequiredAttributeDescriptor descriptor)
|
public virtual int GetHashCode(RequiredAttributeDescriptor descriptor)
|
||||||
{
|
{
|
||||||
|
if (descriptor == null)
|
||||||
|
{
|
||||||
|
throw new ArgumentNullException(nameof(descriptor));
|
||||||
|
}
|
||||||
|
|
||||||
var hash = HashCodeCombiner.Start();
|
var hash = HashCodeCombiner.Start();
|
||||||
hash.Add(descriptor.Name, _stringComparer);
|
hash.Add(descriptor.Name, StringComparer.Ordinal);
|
||||||
|
|
||||||
return hash.CombinedHash;
|
return hash.CombinedHash;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -34,6 +34,8 @@ namespace Microsoft.AspNetCore.Razor.Language
|
||||||
|
|
||||||
public string TagOutputHint { get; protected set; }
|
public string TagOutputHint { get; protected set; }
|
||||||
|
|
||||||
|
public bool CaseSensitive { get; protected set; }
|
||||||
|
|
||||||
public IReadOnlyList<RazorDiagnostic> Diagnostics { get; protected set; }
|
public IReadOnlyList<RazorDiagnostic> Diagnostics { get; protected set; }
|
||||||
|
|
||||||
public IReadOnlyDictionary<string, string> Metadata { get; protected set; }
|
public IReadOnlyDictionary<string, string> Metadata { get; protected set; }
|
||||||
|
|
|
||||||
|
|
@ -52,6 +52,8 @@ namespace Microsoft.AspNetCore.Razor.Language
|
||||||
|
|
||||||
public abstract string TagOutputHint { get; set; }
|
public abstract string TagOutputHint { get; set; }
|
||||||
|
|
||||||
|
public virtual bool CaseSensitive { get; set; }
|
||||||
|
|
||||||
public abstract string Documentation { get; set; }
|
public abstract string Documentation { get; set; }
|
||||||
|
|
||||||
public abstract IDictionary<string, string> Metadata { get; }
|
public abstract IDictionary<string, string> Metadata { get; }
|
||||||
|
|
|
||||||
|
|
@ -15,36 +15,8 @@ namespace Microsoft.AspNetCore.Razor.Language
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public static readonly TagHelperDescriptorComparer Default = new TagHelperDescriptorComparer();
|
public static readonly TagHelperDescriptorComparer Default = new TagHelperDescriptorComparer();
|
||||||
|
|
||||||
/// <summary>
|
private TagHelperDescriptorComparer()
|
||||||
/// A default instance of the <see cref="TagHelperDescriptorComparer"/> that does case-sensitive comparison.
|
|
||||||
/// </summary>
|
|
||||||
internal static readonly TagHelperDescriptorComparer CaseSensitive =
|
|
||||||
new TagHelperDescriptorComparer(caseSensitive: true);
|
|
||||||
|
|
||||||
private readonly StringComparer _stringComparer;
|
|
||||||
private readonly StringComparison _stringComparison;
|
|
||||||
private readonly AllowedChildTagDescriptorComparer _AllowedChildTagDescriptorComparer;
|
|
||||||
private readonly BoundAttributeDescriptorComparer _boundAttributeComparer;
|
|
||||||
private readonly TagMatchingRuleDescriptorComparer _tagMatchingRuleComparer;
|
|
||||||
|
|
||||||
private TagHelperDescriptorComparer(bool caseSensitive = false)
|
|
||||||
{
|
{
|
||||||
if (caseSensitive)
|
|
||||||
{
|
|
||||||
_stringComparer = StringComparer.Ordinal;
|
|
||||||
_stringComparison = StringComparison.Ordinal;
|
|
||||||
_AllowedChildTagDescriptorComparer = AllowedChildTagDescriptorComparer.CaseSensitive;
|
|
||||||
_boundAttributeComparer = BoundAttributeDescriptorComparer.CaseSensitive;
|
|
||||||
_tagMatchingRuleComparer = TagMatchingRuleDescriptorComparer.CaseSensitive;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
_stringComparer = StringComparer.OrdinalIgnoreCase;
|
|
||||||
_stringComparison = StringComparison.OrdinalIgnoreCase;
|
|
||||||
_AllowedChildTagDescriptorComparer = AllowedChildTagDescriptorComparer.Default;
|
|
||||||
_boundAttributeComparer = BoundAttributeDescriptorComparer.Default;
|
|
||||||
_tagMatchingRuleComparer = TagMatchingRuleDescriptorComparer.Default;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public virtual bool Equals(TagHelperDescriptor descriptorX, TagHelperDescriptor descriptorY)
|
public virtual bool Equals(TagHelperDescriptor descriptorX, TagHelperDescriptor descriptorY)
|
||||||
|
|
@ -59,11 +31,6 @@ namespace Microsoft.AspNetCore.Razor.Language
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (descriptorX == null)
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!string.Equals(descriptorX.Kind, descriptorY.Kind, StringComparison.Ordinal))
|
if (!string.Equals(descriptorX.Kind, descriptorY.Kind, StringComparison.Ordinal))
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
|
|
@ -80,17 +47,17 @@ namespace Microsoft.AspNetCore.Razor.Language
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!Enumerable.SequenceEqual(
|
if (!Enumerable.SequenceEqual(
|
||||||
descriptorX.BoundAttributes.OrderBy(attribute => attribute.Name, _stringComparer),
|
descriptorX.BoundAttributes.OrderBy(attribute => attribute.Name, StringComparer.Ordinal),
|
||||||
descriptorY.BoundAttributes.OrderBy(attribute => attribute.Name, _stringComparer),
|
descriptorY.BoundAttributes.OrderBy(attribute => attribute.Name, StringComparer.Ordinal),
|
||||||
_boundAttributeComparer))
|
BoundAttributeDescriptorComparer.Default))
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!Enumerable.SequenceEqual(
|
if (!Enumerable.SequenceEqual(
|
||||||
descriptorX.TagMatchingRules.OrderBy(rule => rule.TagName, _stringComparer),
|
descriptorX.TagMatchingRules.OrderBy(rule => rule.TagName, StringComparer.Ordinal),
|
||||||
descriptorY.TagMatchingRules.OrderBy(rule => rule.TagName, _stringComparer),
|
descriptorY.TagMatchingRules.OrderBy(rule => rule.TagName, StringComparer.Ordinal),
|
||||||
_tagMatchingRuleComparer))
|
TagMatchingRuleDescriptorComparer.Default))
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
@ -99,9 +66,14 @@ namespace Microsoft.AspNetCore.Razor.Language
|
||||||
(descriptorX.AllowedChildTags != null &&
|
(descriptorX.AllowedChildTags != null &&
|
||||||
descriptorY.AllowedChildTags != null &&
|
descriptorY.AllowedChildTags != null &&
|
||||||
Enumerable.SequenceEqual(
|
Enumerable.SequenceEqual(
|
||||||
descriptorX.AllowedChildTags.OrderBy(childTag => childTag.Name, _stringComparer),
|
descriptorX.AllowedChildTags.OrderBy(childTag => childTag.Name, StringComparer.Ordinal),
|
||||||
descriptorY.AllowedChildTags.OrderBy(childTag => childTag.Name, _stringComparer),
|
descriptorY.AllowedChildTags.OrderBy(childTag => childTag.Name, StringComparer.Ordinal),
|
||||||
_AllowedChildTagDescriptorComparer))))
|
AllowedChildTagDescriptorComparer.Default))))
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (descriptorX.CaseSensitive != descriptorY.CaseSensitive)
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
@ -116,7 +88,7 @@ namespace Microsoft.AspNetCore.Razor.Language
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!string.Equals(descriptorX.TagOutputHint, descriptorY.TagOutputHint, _stringComparison))
|
if (!string.Equals(descriptorX.TagOutputHint, descriptorY.TagOutputHint, StringComparison.Ordinal))
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -5,6 +5,7 @@ using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Diagnostics;
|
using System.Diagnostics;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
|
using System.Security.Cryptography;
|
||||||
|
|
||||||
namespace Microsoft.AspNetCore.Razor.Language
|
namespace Microsoft.AspNetCore.Razor.Language
|
||||||
{
|
{
|
||||||
|
|
@ -81,7 +82,7 @@ namespace Microsoft.AspNetCore.Razor.Language
|
||||||
|
|
||||||
if (rule.TagName != ElementCatchAllName &&
|
if (rule.TagName != ElementCatchAllName &&
|
||||||
rule.TagName != null &&
|
rule.TagName != null &&
|
||||||
!string.Equals(tagNameWithoutPrefix, rule.TagName, StringComparison.OrdinalIgnoreCase))
|
!string.Equals(tagNameWithoutPrefix, rule.TagName, rule.CaseSensitive ? StringComparison.Ordinal : StringComparison.OrdinalIgnoreCase))
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
@ -96,7 +97,7 @@ namespace Microsoft.AspNetCore.Razor.Language
|
||||||
throw new ArgumentNullException(nameof(rule));
|
throw new ArgumentNullException(nameof(rule));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (rule.ParentTag != null && !string.Equals(parentTagNameWithoutPrefix, rule.ParentTag, StringComparison.OrdinalIgnoreCase))
|
if (rule.ParentTag != null && !string.Equals(parentTagNameWithoutPrefix, rule.ParentTag, rule.CaseSensitive ? StringComparison.Ordinal : StringComparison.OrdinalIgnoreCase))
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
@ -137,7 +138,7 @@ namespace Microsoft.AspNetCore.Razor.Language
|
||||||
{
|
{
|
||||||
return descriptor.IndexerNamePrefix != null &&
|
return descriptor.IndexerNamePrefix != null &&
|
||||||
!SatisfiesBoundAttributeName(name, descriptor) &&
|
!SatisfiesBoundAttributeName(name, descriptor) &&
|
||||||
name.StartsWith(descriptor.IndexerNamePrefix, StringComparison.OrdinalIgnoreCase);
|
name.StartsWith(descriptor.IndexerNamePrefix, descriptor.CaseSensitive ? StringComparison.Ordinal : StringComparison.OrdinalIgnoreCase);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static bool SatisfiesBoundAttributeWithParameter(string name, BoundAttributeDescriptor parent, BoundAttributeParameterDescriptor descriptor)
|
public static bool SatisfiesBoundAttributeWithParameter(string name, BoundAttributeDescriptor parent, BoundAttributeParameterDescriptor descriptor)
|
||||||
|
|
@ -146,7 +147,7 @@ namespace Microsoft.AspNetCore.Razor.Language
|
||||||
{
|
{
|
||||||
var satisfiesBoundAttributeName = SatisfiesBoundAttributeName(attributeName, parent);
|
var satisfiesBoundAttributeName = SatisfiesBoundAttributeName(attributeName, parent);
|
||||||
var satisfiesBoundAttributeIndexer = SatisfiesBoundAttributeIndexer(attributeName, parent);
|
var satisfiesBoundAttributeIndexer = SatisfiesBoundAttributeIndexer(attributeName, parent);
|
||||||
var matchesParameter = string.Equals(descriptor.Name, parameterName, StringComparison.Ordinal);
|
var matchesParameter = string.Equals(descriptor.Name, parameterName, descriptor.CaseSensitive ? StringComparison.Ordinal : StringComparison.OrdinalIgnoreCase);
|
||||||
return (satisfiesBoundAttributeName || satisfiesBoundAttributeIndexer) && matchesParameter;
|
return (satisfiesBoundAttributeName || satisfiesBoundAttributeIndexer) && matchesParameter;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -220,7 +221,7 @@ namespace Microsoft.AspNetCore.Razor.Language
|
||||||
|
|
||||||
private static bool SatisfiesBoundAttributeName(string name, BoundAttributeDescriptor descriptor)
|
private static bool SatisfiesBoundAttributeName(string name, BoundAttributeDescriptor descriptor)
|
||||||
{
|
{
|
||||||
return string.Equals(descriptor.Name, name, StringComparison.OrdinalIgnoreCase);
|
return string.Equals(descriptor.Name, name, descriptor.CaseSensitive ? StringComparison.Ordinal : StringComparison.OrdinalIgnoreCase);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Internal for testing
|
// Internal for testing
|
||||||
|
|
@ -229,13 +230,13 @@ namespace Microsoft.AspNetCore.Razor.Language
|
||||||
var nameMatches = false;
|
var nameMatches = false;
|
||||||
if (descriptor.NameComparison == RequiredAttributeDescriptor.NameComparisonMode.FullMatch)
|
if (descriptor.NameComparison == RequiredAttributeDescriptor.NameComparisonMode.FullMatch)
|
||||||
{
|
{
|
||||||
nameMatches = string.Equals(descriptor.Name, attributeName, StringComparison.OrdinalIgnoreCase);
|
nameMatches = string.Equals(descriptor.Name, attributeName, descriptor.CaseSensitive ? StringComparison.Ordinal : StringComparison.OrdinalIgnoreCase);
|
||||||
}
|
}
|
||||||
else if (descriptor.NameComparison == RequiredAttributeDescriptor.NameComparisonMode.PrefixMatch)
|
else if (descriptor.NameComparison == RequiredAttributeDescriptor.NameComparisonMode.PrefixMatch)
|
||||||
{
|
{
|
||||||
// attributeName cannot equal the Name if comparing as a PrefixMatch.
|
// attributeName cannot equal the Name if comparing as a PrefixMatch.
|
||||||
nameMatches = attributeName.Length != descriptor.Name.Length &&
|
nameMatches = attributeName.Length != descriptor.Name.Length &&
|
||||||
attributeName.StartsWith(descriptor.Name, StringComparison.OrdinalIgnoreCase);
|
attributeName.StartsWith(descriptor.Name, descriptor.CaseSensitive ? StringComparison.Ordinal : StringComparison.OrdinalIgnoreCase);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -19,6 +19,8 @@ namespace Microsoft.AspNetCore.Razor.Language
|
||||||
|
|
||||||
public TagStructure TagStructure { get; protected set; }
|
public TagStructure TagStructure { get; protected set; }
|
||||||
|
|
||||||
|
public bool CaseSensitive { get; protected set; }
|
||||||
|
|
||||||
public IReadOnlyList<RazorDiagnostic> Diagnostics { get; protected set; }
|
public IReadOnlyList<RazorDiagnostic> Diagnostics { get; protected set; }
|
||||||
|
|
||||||
public bool HasErrors
|
public bool HasErrors
|
||||||
|
|
|
||||||
|
|
@ -4,7 +4,6 @@
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using Microsoft.AspNetCore.Razor.Language.Legacy;
|
|
||||||
using Microsoft.Extensions.Internal;
|
using Microsoft.Extensions.Internal;
|
||||||
|
|
||||||
namespace Microsoft.AspNetCore.Razor.Language
|
namespace Microsoft.AspNetCore.Razor.Language
|
||||||
|
|
@ -16,30 +15,8 @@ namespace Microsoft.AspNetCore.Razor.Language
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public static readonly TagMatchingRuleDescriptorComparer Default = new TagMatchingRuleDescriptorComparer();
|
public static readonly TagMatchingRuleDescriptorComparer Default = new TagMatchingRuleDescriptorComparer();
|
||||||
|
|
||||||
/// <summary>
|
private TagMatchingRuleDescriptorComparer()
|
||||||
/// A default instance of the <see cref="TagMatchingRuleDescriptorComparer"/> that does case-sensitive comparison.
|
|
||||||
/// </summary>
|
|
||||||
internal static readonly TagMatchingRuleDescriptorComparer CaseSensitive =
|
|
||||||
new TagMatchingRuleDescriptorComparer(caseSensitive: true);
|
|
||||||
|
|
||||||
private readonly StringComparer _stringComparer;
|
|
||||||
private readonly StringComparison _stringComparison;
|
|
||||||
private readonly RequiredAttributeDescriptorComparer _requiredAttributeComparer;
|
|
||||||
|
|
||||||
private TagMatchingRuleDescriptorComparer(bool caseSensitive = false)
|
|
||||||
{
|
{
|
||||||
if (caseSensitive)
|
|
||||||
{
|
|
||||||
_stringComparer = StringComparer.Ordinal;
|
|
||||||
_stringComparison = StringComparison.Ordinal;
|
|
||||||
_requiredAttributeComparer = RequiredAttributeDescriptorComparer.CaseSensitive;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
_stringComparer = StringComparer.OrdinalIgnoreCase;
|
|
||||||
_stringComparison = StringComparison.OrdinalIgnoreCase;
|
|
||||||
_requiredAttributeComparer = RequiredAttributeDescriptorComparer.Default;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public virtual bool Equals(TagMatchingRuleDescriptor ruleX, TagMatchingRuleDescriptor ruleY)
|
public virtual bool Equals(TagMatchingRuleDescriptor ruleX, TagMatchingRuleDescriptor ruleY)
|
||||||
|
|
@ -55,10 +32,11 @@ namespace Microsoft.AspNetCore.Razor.Language
|
||||||
}
|
}
|
||||||
|
|
||||||
return
|
return
|
||||||
string.Equals(ruleX.TagName, ruleY.TagName, _stringComparison) &&
|
string.Equals(ruleX.TagName, ruleY.TagName, StringComparison.Ordinal) &&
|
||||||
string.Equals(ruleX.ParentTag, ruleY.ParentTag, _stringComparison) &&
|
string.Equals(ruleX.ParentTag, ruleY.ParentTag, StringComparison.Ordinal) &&
|
||||||
|
ruleX.CaseSensitive == ruleY.CaseSensitive &&
|
||||||
ruleX.TagStructure == ruleY.TagStructure &&
|
ruleX.TagStructure == ruleY.TagStructure &&
|
||||||
Enumerable.SequenceEqual(ruleX.Attributes, ruleY.Attributes, _requiredAttributeComparer);
|
Enumerable.SequenceEqual(ruleX.Attributes, ruleY.Attributes, RequiredAttributeDescriptorComparer.Default);
|
||||||
}
|
}
|
||||||
|
|
||||||
public virtual int GetHashCode(TagMatchingRuleDescriptor rule)
|
public virtual int GetHashCode(TagMatchingRuleDescriptor rule)
|
||||||
|
|
@ -69,7 +47,7 @@ namespace Microsoft.AspNetCore.Razor.Language
|
||||||
}
|
}
|
||||||
|
|
||||||
var hash = HashCodeCombiner.Start();
|
var hash = HashCodeCombiner.Start();
|
||||||
hash.Add(rule.TagName, _stringComparer);
|
hash.Add(rule.TagName, StringComparer.Ordinal);
|
||||||
|
|
||||||
return hash.CombinedHash;
|
return hash.CombinedHash;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -11,7 +11,9 @@ namespace Microsoft.AspNetCore.Razor.Language
|
||||||
public void Build_DisplayNameIsName_NameComparisonFullMatch()
|
public void Build_DisplayNameIsName_NameComparisonFullMatch()
|
||||||
{
|
{
|
||||||
// Arrange
|
// Arrange
|
||||||
var builder = new DefaultRequiredAttributeDescriptorBuilder();
|
var tagHelperBuilder = new DefaultTagHelperDescriptorBuilder(TagHelperConventions.DefaultKind, "TestTagHelper", "Test");
|
||||||
|
var tagMatchingRuleBuilder = new DefaultTagMatchingRuleDescriptorBuilder(tagHelperBuilder);
|
||||||
|
var builder = new DefaultRequiredAttributeDescriptorBuilder(tagMatchingRuleBuilder);
|
||||||
|
|
||||||
builder
|
builder
|
||||||
.Name("asp-action")
|
.Name("asp-action")
|
||||||
|
|
@ -28,7 +30,9 @@ namespace Microsoft.AspNetCore.Razor.Language
|
||||||
public void Build_DisplayNameIsNameWithDots_NameComparisonPrefixMatch()
|
public void Build_DisplayNameIsNameWithDots_NameComparisonPrefixMatch()
|
||||||
{
|
{
|
||||||
// Arrange
|
// Arrange
|
||||||
var builder = new DefaultRequiredAttributeDescriptorBuilder();
|
var tagHelperBuilder = new DefaultTagHelperDescriptorBuilder(TagHelperConventions.DefaultKind, "TestTagHelper", "Test");
|
||||||
|
var tagMatchingRuleBuilder = new DefaultTagMatchingRuleDescriptorBuilder(tagHelperBuilder);
|
||||||
|
var builder = new DefaultRequiredAttributeDescriptorBuilder(tagMatchingRuleBuilder);
|
||||||
|
|
||||||
builder
|
builder
|
||||||
.Name("asp-route-")
|
.Name("asp-route-")
|
||||||
|
|
|
||||||
|
|
@ -60,16 +60,16 @@ namespace Microsoft.AspNetCore.Razor.Language.Extensions
|
||||||
var create = Assert.IsType<DefaultTagHelperCreateIntermediateNode>(tagHelper.Children[1]);
|
var create = Assert.IsType<DefaultTagHelperCreateIntermediateNode>(tagHelper.Children[1]);
|
||||||
Assert.Equal("__TestTagHelper", create.FieldName);
|
Assert.Equal("__TestTagHelper", create.FieldName);
|
||||||
Assert.Equal("TestTagHelper", create.TypeName);
|
Assert.Equal("TestTagHelper", create.TypeName);
|
||||||
Assert.Equal(tagHelpers[0], create.TagHelper, TagHelperDescriptorComparer.CaseSensitive);
|
Assert.Equal(tagHelpers[0], create.TagHelper, TagHelperDescriptorComparer.Default);
|
||||||
|
|
||||||
var property = Assert.IsType<DefaultTagHelperPropertyIntermediateNode>(tagHelper.Children[2]);
|
var property = Assert.IsType<DefaultTagHelperPropertyIntermediateNode>(tagHelper.Children[2]);
|
||||||
Assert.Equal("foo", property.AttributeName);
|
Assert.Equal("foo", property.AttributeName);
|
||||||
Assert.Equal(AttributeStructure.DoubleQuotes, property.AttributeStructure);
|
Assert.Equal(AttributeStructure.DoubleQuotes, property.AttributeStructure);
|
||||||
Assert.Equal(tagHelpers[0].BoundAttributes[0], property.BoundAttribute, BoundAttributeDescriptorComparer.CaseSensitive);
|
Assert.Equal(tagHelpers[0].BoundAttributes[0], property.BoundAttribute, BoundAttributeDescriptorComparer.Default);
|
||||||
Assert.Equal("__TestTagHelper", property.FieldName);
|
Assert.Equal("__TestTagHelper", property.FieldName);
|
||||||
Assert.False(property.IsIndexerNameMatch);
|
Assert.False(property.IsIndexerNameMatch);
|
||||||
Assert.Equal("FooProp", property.PropertyName);
|
Assert.Equal("FooProp", property.PropertyName);
|
||||||
Assert.Equal(tagHelpers[0], property.TagHelper, TagHelperDescriptorComparer.CaseSensitive);
|
Assert.Equal(tagHelpers[0], property.TagHelper, TagHelperDescriptorComparer.Default);
|
||||||
|
|
||||||
var htmlAttribute = Assert.IsType<DefaultTagHelperHtmlAttributeIntermediateNode>(tagHelper.Children[3]);
|
var htmlAttribute = Assert.IsType<DefaultTagHelperHtmlAttributeIntermediateNode>(tagHelper.Children[3]);
|
||||||
Assert.Equal("attr", htmlAttribute.AttributeName);
|
Assert.Equal("attr", htmlAttribute.AttributeName);
|
||||||
|
|
|
||||||
|
|
@ -161,8 +161,10 @@ Some Content
|
||||||
</RenderChildContent>");
|
</RenderChildContent>");
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
var diagnostic = Assert.Single(generated.Diagnostics);
|
Assert.Collection(
|
||||||
Assert.Same(ComponentDiagnosticFactory.ChildContentMixedWithExplicitChildContent.Id, diagnostic.Id);
|
generated.Diagnostics,
|
||||||
|
d => Assert.Equal("RZ10014", d.Id),
|
||||||
|
d => Assert.Equal("RZ9996", d.Id));
|
||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
|
|
|
||||||
|
|
@ -998,6 +998,24 @@ namespace Test
|
||||||
CompileToAssembly(generated);
|
CompileToAssembly(generated);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void BuiltIn_BindToInputWithoutType_IsCaseSensitive()
|
||||||
|
{
|
||||||
|
// Arrange
|
||||||
|
|
||||||
|
// Act
|
||||||
|
var generated = CompileToCSharp(@"
|
||||||
|
<input @BIND=""@ParentValue"" />
|
||||||
|
@code {
|
||||||
|
public int ParentValue { get; set; } = 42;
|
||||||
|
}");
|
||||||
|
|
||||||
|
// Assert
|
||||||
|
AssertDocumentNodeMatchesBaseline(generated.CodeDocument);
|
||||||
|
AssertCSharpDocumentMatchesBaseline(generated.CodeDocument);
|
||||||
|
CompileToAssembly(generated);
|
||||||
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void BuiltIn_BindToInputText_WithFormat_WritesAttributes()
|
public void BuiltIn_BindToInputText_WithFormat_WritesAttributes()
|
||||||
{
|
{
|
||||||
|
|
@ -1829,12 +1847,12 @@ namespace Test3
|
||||||
@using static Test2.SomeComponent
|
@using static Test2.SomeComponent
|
||||||
@using Foo = Test3
|
@using Foo = Test3
|
||||||
<MyComponent />
|
<MyComponent />
|
||||||
<SomeComponent /> <!-- Not a component -->");
|
<SomeComponent /> <!-- Not a component -->", throwOnFailure: false);
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
AssertDocumentNodeMatchesBaseline(generated.CodeDocument);
|
AssertDocumentNodeMatchesBaseline(generated.CodeDocument);
|
||||||
AssertCSharpDocumentMatchesBaseline(generated.CodeDocument);
|
AssertCSharpDocumentMatchesBaseline(generated.CodeDocument);
|
||||||
var result = CompileToAssembly(generated);
|
CompileToAssembly(generated, throwOnFailure: false);
|
||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
|
|
@ -2650,6 +2668,25 @@ namespace Test
|
||||||
CompileToAssembly(generated);
|
CompileToAssembly(generated);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void EventHandler_AttributeNameIsCaseSensitive()
|
||||||
|
{
|
||||||
|
// Arrange
|
||||||
|
|
||||||
|
// Act
|
||||||
|
var generated = CompileToCSharp(@"
|
||||||
|
<input @onCLICK=""OnClick"" />
|
||||||
|
@code {
|
||||||
|
void OnClick(UIMouseEventArgs e) {
|
||||||
|
}
|
||||||
|
}");
|
||||||
|
|
||||||
|
// Assert
|
||||||
|
AssertDocumentNodeMatchesBaseline(generated.CodeDocument);
|
||||||
|
AssertCSharpDocumentMatchesBaseline(generated.CodeDocument);
|
||||||
|
CompileToAssembly(generated);
|
||||||
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region Generics
|
#region Generics
|
||||||
|
|
@ -3448,6 +3485,24 @@ namespace Test
|
||||||
CompileToAssembly(generated);
|
CompileToAssembly(generated);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void Element_WithKey_AttributeNameIsCaseSensitive()
|
||||||
|
{
|
||||||
|
// Arrange/Act
|
||||||
|
var generated = CompileToCSharp(@"
|
||||||
|
<elem attributebefore=""before"" @KEY=""someObject"" attributeafter=""after"">Hello</elem>
|
||||||
|
|
||||||
|
@code {
|
||||||
|
private object someObject = new object();
|
||||||
|
}
|
||||||
|
");
|
||||||
|
|
||||||
|
// Assert
|
||||||
|
AssertDocumentNodeMatchesBaseline(generated.CodeDocument);
|
||||||
|
AssertCSharpDocumentMatchesBaseline(generated.CodeDocument);
|
||||||
|
CompileToAssembly(generated);
|
||||||
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region Splat
|
#region Splat
|
||||||
|
|
@ -3616,6 +3671,24 @@ namespace Test
|
||||||
var generated = CompileToCSharp(@"
|
var generated = CompileToCSharp(@"
|
||||||
<MyComponent Value=""18"" @attributes=""@(someAttributes)"" />
|
<MyComponent Value=""18"" @attributes=""@(someAttributes)"" />
|
||||||
|
|
||||||
|
@code {
|
||||||
|
private Dictionary<string, object> someAttributes = new Dictionary<string, object>();
|
||||||
|
}
|
||||||
|
");
|
||||||
|
|
||||||
|
// Assert
|
||||||
|
AssertDocumentNodeMatchesBaseline(generated.CodeDocument);
|
||||||
|
AssertCSharpDocumentMatchesBaseline(generated.CodeDocument);
|
||||||
|
CompileToAssembly(generated);
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void Element_WithSplat_AttributeNameIsCaseSensitive()
|
||||||
|
{
|
||||||
|
// Arrange/Act
|
||||||
|
var generated = CompileToCSharp(@"
|
||||||
|
<elem attributebefore=""before"" @ATTributes=""someAttributes"" attributeafter=""after"">Hello</elem>
|
||||||
|
|
||||||
@code {
|
@code {
|
||||||
private Dictionary<string, object> someAttributes = new Dictionary<string, object>();
|
private Dictionary<string, object> someAttributes = new Dictionary<string, object>();
|
||||||
}
|
}
|
||||||
|
|
@ -3773,6 +3846,19 @@ namespace Test
|
||||||
CompileToAssembly(generated);
|
CompileToAssembly(generated);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void Element_WithRef_AttributeNameIsCaseSensitive()
|
||||||
|
{
|
||||||
|
// Arrange/Act
|
||||||
|
var generated = CompileToCSharp(@"
|
||||||
|
<elem attributebefore=""before"" @rEF=""myElem"" attributeafter=""after"">Hello</elem>");
|
||||||
|
|
||||||
|
// Assert
|
||||||
|
AssertDocumentNodeMatchesBaseline(generated.CodeDocument);
|
||||||
|
AssertCSharpDocumentMatchesBaseline(generated.CodeDocument);
|
||||||
|
CompileToAssembly(generated);
|
||||||
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region Templates
|
#region Templates
|
||||||
|
|
@ -4430,6 +4516,29 @@ namespace New.Test
|
||||||
Assert.Same(ComponentDiagnosticFactory.DuplicateMarkupAttributeDirective.Id, diagnostic.Id);
|
Assert.Same(ComponentDiagnosticFactory.DuplicateMarkupAttributeDirective.Id, diagnostic.Id);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void DuplicateMarkupAttributes_DifferentCasing_IsAnError_BindValue()
|
||||||
|
{
|
||||||
|
// Arrange
|
||||||
|
|
||||||
|
// Act
|
||||||
|
var generated = CompileToCSharp(@"
|
||||||
|
<div>
|
||||||
|
<input type=""text"" Value=""17"" @bind=""@text""></input>
|
||||||
|
</div>
|
||||||
|
@functions {
|
||||||
|
private string text = ""hi"";
|
||||||
|
}
|
||||||
|
");
|
||||||
|
|
||||||
|
// Assert
|
||||||
|
AssertDocumentNodeMatchesBaseline(generated.CodeDocument);
|
||||||
|
AssertCSharpDocumentMatchesBaseline(generated.CodeDocument);
|
||||||
|
|
||||||
|
var diagnostic = Assert.Single(generated.Diagnostics);
|
||||||
|
Assert.Same(ComponentDiagnosticFactory.DuplicateMarkupAttributeDirective.Id, diagnostic.Id);
|
||||||
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void DuplicateMarkupAttributes_IsAnError_BindOnInput()
|
public void DuplicateMarkupAttributes_IsAnError_BindOnInput()
|
||||||
{
|
{
|
||||||
|
|
@ -4871,6 +4980,81 @@ namespace Test
|
||||||
CompileToAssembly(generated);
|
CompileToAssembly(generated);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void Component_MatchingIsCaseSensitive()
|
||||||
|
{
|
||||||
|
// Arrange
|
||||||
|
AdditionalSyntaxTrees.Add(Parse(@"
|
||||||
|
using Microsoft.AspNetCore.Components;
|
||||||
|
|
||||||
|
namespace Test
|
||||||
|
{
|
||||||
|
public class MyComponent : ComponentBase
|
||||||
|
{
|
||||||
|
[Parameter] public int IntProperty { get; set; }
|
||||||
|
[Parameter] public bool BoolProperty { get; set; }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
"));
|
||||||
|
|
||||||
|
// Act
|
||||||
|
var generated = CompileToCSharp(@"
|
||||||
|
<MyComponent />
|
||||||
|
<mycomponent />
|
||||||
|
<MyComponent intproperty='1' BoolProperty='true' />");
|
||||||
|
|
||||||
|
// Assert
|
||||||
|
AssertDocumentNodeMatchesBaseline(generated.CodeDocument);
|
||||||
|
AssertCSharpDocumentMatchesBaseline(generated.CodeDocument);
|
||||||
|
CompileToAssembly(generated);
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void Component_MultipleComponentsDifferByCase()
|
||||||
|
{
|
||||||
|
// Arrange
|
||||||
|
AdditionalSyntaxTrees.Add(Parse(@"
|
||||||
|
using Microsoft.AspNetCore.Components;
|
||||||
|
|
||||||
|
namespace Test
|
||||||
|
{
|
||||||
|
public class MyComponent : ComponentBase
|
||||||
|
{
|
||||||
|
[Parameter] public int IntProperty { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public class Mycomponent : ComponentBase
|
||||||
|
{
|
||||||
|
[Parameter] public int IntProperty { get; set; }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
"));
|
||||||
|
|
||||||
|
// Act
|
||||||
|
var generated = CompileToCSharp(@"
|
||||||
|
<MyComponent IntProperty='1' />
|
||||||
|
<Mycomponent IntProperty='2' />");
|
||||||
|
|
||||||
|
// Assert
|
||||||
|
AssertDocumentNodeMatchesBaseline(generated.CodeDocument);
|
||||||
|
AssertCSharpDocumentMatchesBaseline(generated.CodeDocument);
|
||||||
|
CompileToAssembly(generated);
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void ElementWithUppercaseTagName_CanHideWarningWithBang()
|
||||||
|
{
|
||||||
|
// Arrange & Act
|
||||||
|
var generated = CompileToCSharp(@"
|
||||||
|
<!NotAComponent />
|
||||||
|
<!DefinitelyNotAComponent></!DefinitelyNotAComponent>");
|
||||||
|
|
||||||
|
// Assert
|
||||||
|
AssertDocumentNodeMatchesBaseline(generated.CodeDocument);
|
||||||
|
AssertCSharpDocumentMatchesBaseline(generated.CodeDocument);
|
||||||
|
CompileToAssembly(generated);
|
||||||
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -9,6 +9,8 @@ namespace Microsoft.AspNetCore.Razor.Language.IntegrationTests
|
||||||
{
|
{
|
||||||
internal override string FileKind => FileKinds.Component;
|
internal override string FileKind => FileKinds.Component;
|
||||||
|
|
||||||
|
internal override bool UseTwoPhaseCompilation => true;
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void RejectsEndTagWithNoStartTag()
|
public void RejectsEndTagWithNoStartTag()
|
||||||
{
|
{
|
||||||
|
|
@ -125,5 +127,79 @@ namespace Test
|
||||||
"Component attributes do not support complex content (mixed C# and markup). Attribute: '@key', text: 'Foo @Text'",
|
"Component attributes do not support complex content (mixed C# and markup). Attribute: '@key', text: 'Foo @Text'",
|
||||||
diagnostic.GetMessage());
|
diagnostic.GetMessage());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void Component_StartsWithLowerCase_ReportsError()
|
||||||
|
{
|
||||||
|
// Arrange & Act
|
||||||
|
var generated = CompileToCSharp("lowerCase.razor", @"
|
||||||
|
<input type=""text"" @bind=""Text"" />
|
||||||
|
@functions {
|
||||||
|
public string Text { get; set; } = ""text"";
|
||||||
|
}", throwOnFailure: false);
|
||||||
|
|
||||||
|
// Assert
|
||||||
|
var diagnostic = Assert.Single(generated.Diagnostics);
|
||||||
|
Assert.Equal("RZ10013", diagnostic.Id);
|
||||||
|
Assert.Equal(
|
||||||
|
"Component 'lowerCase' starts with a lowercase character. Component names cannot start with a lowercase character.",
|
||||||
|
diagnostic.GetMessage());
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void Element_DoesNotStartWithLowerCase_ReportsWarning()
|
||||||
|
{
|
||||||
|
// Arrange & Act
|
||||||
|
var generated = CompileToCSharp(@"
|
||||||
|
<PossibleComponent></PossibleComponent>
|
||||||
|
|
||||||
|
@functions {
|
||||||
|
public string Text { get; set; } = ""text"";
|
||||||
|
}");
|
||||||
|
|
||||||
|
// Assert
|
||||||
|
var diagnostic = Assert.Single(generated.Diagnostics);
|
||||||
|
Assert.Equal("RZ10014", diagnostic.Id);
|
||||||
|
Assert.Equal(RazorDiagnosticSeverity.Warning, diagnostic.Severity);
|
||||||
|
Assert.Equal(
|
||||||
|
"Found markup element with unexpected name 'PossibleComponent'. If this is intended to be a component, add a @using directive for its namespace.",
|
||||||
|
diagnostic.GetMessage());
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void Element_DoesNotStartWithLowerCase_OverrideWithBang_NoWarning()
|
||||||
|
{
|
||||||
|
// Arrange & Act
|
||||||
|
var generated = CompileToCSharp(@"
|
||||||
|
<!PossibleComponent></!PossibleComponent>");
|
||||||
|
|
||||||
|
// Assert
|
||||||
|
Assert.Empty(generated.Diagnostics);
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void Component_StartAndEndTagCaseMismatch_ReportsError()
|
||||||
|
{
|
||||||
|
// Arrange & Act
|
||||||
|
AdditionalSyntaxTrees.Add(Parse(@"
|
||||||
|
using Microsoft.AspNetCore.Components;
|
||||||
|
|
||||||
|
namespace Test
|
||||||
|
{
|
||||||
|
public class MyComponent : ComponentBase
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
||||||
|
"));
|
||||||
|
var generated = CompileToCSharp(@"
|
||||||
|
<MyComponent></mycomponent>");
|
||||||
|
|
||||||
|
// Assert
|
||||||
|
var diagnostic = Assert.Single(generated.Diagnostics);
|
||||||
|
Assert.Equal("RZ10015", diagnostic.Id);
|
||||||
|
Assert.Equal(
|
||||||
|
"The start tag name 'MyComponent' does not match the end tag name 'mycomponent'. Components must have matching start and end tag names (case-sensitive).",
|
||||||
|
diagnostic.GetMessage());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -9,6 +9,8 @@ namespace Microsoft.AspNetCore.Razor.Language.IntegrationTests
|
||||||
{
|
{
|
||||||
internal override string FileKind => FileKinds.Component;
|
internal override string FileKind => FileKinds.Component;
|
||||||
|
|
||||||
|
internal override bool UseTwoPhaseCompilation => true;
|
||||||
|
|
||||||
// Razor doesn't parse this as a template, we don't need much special handling for
|
// Razor doesn't parse this as a template, we don't need much special handling for
|
||||||
// it because it will just be invalid in general.
|
// it because it will just be invalid in general.
|
||||||
[Fact]
|
[Fact]
|
||||||
|
|
@ -17,7 +19,7 @@ namespace Microsoft.AspNetCore.Razor.Language.IntegrationTests
|
||||||
// Arrange
|
// Arrange
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
var generated = CompileToCSharp(@"<div attr=""@<div></div>"" />");
|
var generated = CompileToCSharp(@"<div attr=""@<div></div>"" />", throwOnFailure: false);
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
var diagnostic = Assert.Single(generated.Diagnostics);
|
var diagnostic = Assert.Single(generated.Diagnostics);
|
||||||
|
|
@ -55,11 +57,13 @@ namespace Test
|
||||||
"));
|
"));
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
var generated = CompileToCSharp(@"<MyComponent attr=""@<div></div>"" />");
|
var generated = CompileToCSharp(@"<MyComponent attr=""@<div></div>"" />", throwOnFailure: false);
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
var diagnostic = Assert.Single(generated.Diagnostics);
|
Assert.Collection(
|
||||||
Assert.Equal("RZ1005", diagnostic.Id);
|
generated.Diagnostics,
|
||||||
|
d => Assert.Equal("RZ9986", d.Id),
|
||||||
|
d => Assert.Equal("RZ1005", d.Id));
|
||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
|
|
|
||||||
|
|
@ -1880,5 +1880,57 @@ namespace Microsoft.AspNetCore.Razor.Language.Legacy
|
||||||
{
|
{
|
||||||
RunParseTreeRewriterTest("<input>Foo</input>");
|
RunParseTreeRewriterTest("<input>Foo</input>");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static TagHelperDescriptor[] CaseSensitive_Descriptors = new TagHelperDescriptor[]
|
||||||
|
{
|
||||||
|
TagHelperDescriptorBuilder.Create("pTagHelper", "SomeAssembly")
|
||||||
|
.SetCaseSensitive()
|
||||||
|
.BoundAttributeDescriptor(attribute =>
|
||||||
|
attribute
|
||||||
|
.Name("bound")
|
||||||
|
.PropertyName("Bound")
|
||||||
|
.TypeName(typeof(bool).FullName))
|
||||||
|
.TagMatchingRuleDescriptor(rule =>
|
||||||
|
rule
|
||||||
|
.RequireTagName("p")
|
||||||
|
.RequireAttributeDescriptor(attribute => attribute.Name("class")))
|
||||||
|
.Build(),
|
||||||
|
TagHelperDescriptorBuilder.Create("catchAllTagHelper", "SomeAssembly")
|
||||||
|
.TagMatchingRuleDescriptor(rule =>
|
||||||
|
rule
|
||||||
|
.RequireTagName("*")
|
||||||
|
.RequireAttributeDescriptor(attribute => attribute.Name("catchAll")))
|
||||||
|
.Build(),
|
||||||
|
};
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void HandlesCaseSensitiveTagHelpersCorrectly1()
|
||||||
|
{
|
||||||
|
EvaluateData(CaseSensitive_Descriptors, "<p class='foo' catchAll></p>");
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void HandlesCaseSensitiveTagHelpersCorrectly2()
|
||||||
|
{
|
||||||
|
EvaluateData(CaseSensitive_Descriptors, "<p CLASS='foo' CATCHAll></p>");
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void HandlesCaseSensitiveTagHelpersCorrectly3()
|
||||||
|
{
|
||||||
|
EvaluateData(CaseSensitive_Descriptors, "<P class='foo' CATCHAll></P>");
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void HandlesCaseSensitiveTagHelpersCorrectly4()
|
||||||
|
{
|
||||||
|
EvaluateData(CaseSensitive_Descriptors, "<P class='foo'></P>");
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void HandlesCaseSensitiveTagHelpersCorrectly5()
|
||||||
|
{
|
||||||
|
EvaluateData(CaseSensitive_Descriptors, "<p Class='foo'></p>");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -32,12 +32,12 @@ namespace Microsoft.AspNetCore.Razor.Language
|
||||||
parentIsTagHelper: false);
|
parentIsTagHelper: false);
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
Assert.Equal(expectedDescriptors, bindingResult.Descriptors, TagHelperDescriptorComparer.CaseSensitive);
|
Assert.Equal(expectedDescriptors, bindingResult.Descriptors, TagHelperDescriptorComparer.Default);
|
||||||
Assert.Equal("th:div", bindingResult.TagName);
|
Assert.Equal("th:div", bindingResult.TagName);
|
||||||
Assert.Equal("body", bindingResult.ParentTagName);
|
Assert.Equal("body", bindingResult.ParentTagName);
|
||||||
Assert.Equal(expectedAttributes, bindingResult.Attributes);
|
Assert.Equal(expectedAttributes, bindingResult.Attributes);
|
||||||
Assert.Equal("th:", bindingResult.TagHelperPrefix);
|
Assert.Equal("th:", bindingResult.TagHelperPrefix);
|
||||||
Assert.Equal(divTagHelper.TagMatchingRules, bindingResult.Mappings[divTagHelper], TagMatchingRuleDescriptorComparer.CaseSensitive);
|
Assert.Equal(divTagHelper.TagMatchingRules, bindingResult.Mappings[divTagHelper], TagMatchingRuleDescriptorComparer.Default);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static TheoryData RequiredParentData
|
public static TheoryData RequiredParentData
|
||||||
|
|
@ -114,7 +114,7 @@ namespace Microsoft.AspNetCore.Razor.Language
|
||||||
parentIsTagHelper: false);
|
parentIsTagHelper: false);
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
Assert.Equal((IEnumerable<TagHelperDescriptor>)expectedDescriptors, bindingResult.Descriptors, TagHelperDescriptorComparer.CaseSensitive);
|
Assert.Equal((IEnumerable<TagHelperDescriptor>)expectedDescriptors, bindingResult.Descriptors, TagHelperDescriptorComparer.Default);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static TheoryData RequiredAttributeData
|
public static TheoryData RequiredAttributeData
|
||||||
|
|
@ -277,7 +277,7 @@ namespace Microsoft.AspNetCore.Razor.Language
|
||||||
var bindingResult = tagHelperBinder.GetBinding(tagName, providedAttributes, parentTagName: "p", parentIsTagHelper: false);
|
var bindingResult = tagHelperBinder.GetBinding(tagName, providedAttributes, parentTagName: "p", parentIsTagHelper: false);
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
Assert.Equal((IEnumerable<TagHelperDescriptor>)expectedDescriptors, bindingResult?.Descriptors, TagHelperDescriptorComparer.CaseSensitive);
|
Assert.Equal((IEnumerable<TagHelperDescriptor>)expectedDescriptors, bindingResult?.Descriptors, TagHelperDescriptorComparer.Default);
|
||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
|
|
@ -598,5 +598,59 @@ namespace Microsoft.AspNetCore.Razor.Language
|
||||||
// Assert
|
// Assert
|
||||||
Assert.False(bindingResult.IsAttributeMatch);
|
Assert.False(bindingResult.IsAttributeMatch);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void GetBinding_CaseSensitiveRule_CaseMismatch_ReturnsNull()
|
||||||
|
{
|
||||||
|
// Arrange
|
||||||
|
var divTagHelper = TagHelperDescriptorBuilder.Create("DivTagHelper", "SomeAssembly")
|
||||||
|
.TagMatchingRuleDescriptor(rule => rule.RequireTagName("div"))
|
||||||
|
.SetCaseSensitive()
|
||||||
|
.Build();
|
||||||
|
var expectedDescriptors = new[] { divTagHelper };
|
||||||
|
var expectedAttributes = new[]
|
||||||
|
{
|
||||||
|
new KeyValuePair<string, string>("class", "something")
|
||||||
|
};
|
||||||
|
var tagHelperBinder = new TagHelperBinder("th:", expectedDescriptors);
|
||||||
|
|
||||||
|
// Act
|
||||||
|
var bindingResult = tagHelperBinder.GetBinding(
|
||||||
|
tagName: "th:Div",
|
||||||
|
attributes: expectedAttributes,
|
||||||
|
parentTagName: "body",
|
||||||
|
parentIsTagHelper: false);
|
||||||
|
|
||||||
|
// Assert
|
||||||
|
Assert.Null(bindingResult);
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void GetBinding_CaseSensitiveRequiredAttribute_CaseMismatch_ReturnsNull()
|
||||||
|
{
|
||||||
|
// Arrange
|
||||||
|
var divTagHelper = TagHelperDescriptorBuilder.Create("DivTagHelper", "SomeAssembly")
|
||||||
|
.TagMatchingRuleDescriptor(rule => rule
|
||||||
|
.RequireTagName("div")
|
||||||
|
.RequireAttributeDescriptor(attribute => attribute.Name("class")))
|
||||||
|
.SetCaseSensitive()
|
||||||
|
.Build();
|
||||||
|
var expectedDescriptors = new[] { divTagHelper };
|
||||||
|
var expectedAttributes = new[]
|
||||||
|
{
|
||||||
|
new KeyValuePair<string, string>("CLASS", "something")
|
||||||
|
};
|
||||||
|
var tagHelperBinder = new TagHelperBinder(null, expectedDescriptors);
|
||||||
|
|
||||||
|
// Act
|
||||||
|
var bindingResult = tagHelperBinder.GetBinding(
|
||||||
|
tagName: "div",
|
||||||
|
attributes: expectedAttributes,
|
||||||
|
parentTagName: "body",
|
||||||
|
parentIsTagHelper: false);
|
||||||
|
|
||||||
|
// Assert
|
||||||
|
Assert.Null(bindingResult);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -140,8 +140,10 @@ namespace Microsoft.AspNetCore.Razor.Language
|
||||||
bool expectedResult)
|
bool expectedResult)
|
||||||
{
|
{
|
||||||
// Arrange
|
// Arrange
|
||||||
|
var tagHelperBuilder = new DefaultTagHelperDescriptorBuilder(TagHelperConventions.DefaultKind, "TestTagHelper", "Test");
|
||||||
|
var tagMatchingRuleBuilder = new DefaultTagMatchingRuleDescriptorBuilder(tagHelperBuilder);
|
||||||
|
var builder = new DefaultRequiredAttributeDescriptorBuilder(tagMatchingRuleBuilder);
|
||||||
|
|
||||||
var builder = new DefaultRequiredAttributeDescriptorBuilder();
|
|
||||||
configure(builder);
|
configure(builder);
|
||||||
|
|
||||||
var requiredAttibute = builder.Build();
|
var requiredAttibute = builder.Build();
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,44 @@
|
||||||
|
// <auto-generated/>
|
||||||
|
#pragma warning disable 1591
|
||||||
|
namespace Test
|
||||||
|
{
|
||||||
|
#line hidden
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using Microsoft.AspNetCore.Components;
|
||||||
|
public class TestComponent : Microsoft.AspNetCore.Components.ComponentBase
|
||||||
|
{
|
||||||
|
#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
|
||||||
|
protected override void BuildRenderTree(Microsoft.AspNetCore.Components.RenderTree.RenderTreeBuilder builder)
|
||||||
|
{
|
||||||
|
__o =
|
||||||
|
#nullable restore
|
||||||
|
#line 1 "x:\dir\subdir\Test\TestComponent.cshtml"
|
||||||
|
ParentValue
|
||||||
|
|
||||||
|
#line default
|
||||||
|
#line hidden
|
||||||
|
#nullable disable
|
||||||
|
;
|
||||||
|
}
|
||||||
|
#pragma warning restore 1998
|
||||||
|
#nullable restore
|
||||||
|
#line 2 "x:\dir\subdir\Test\TestComponent.cshtml"
|
||||||
|
|
||||||
|
public int ParentValue { get; set; } = 42;
|
||||||
|
|
||||||
|
#line default
|
||||||
|
#line hidden
|
||||||
|
#nullable disable
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#pragma warning restore 1591
|
||||||
|
|
@ -0,0 +1,24 @@
|
||||||
|
Document -
|
||||||
|
NamespaceDeclaration - - Test
|
||||||
|
UsingDirective - (3:1,1 [12] ) - System
|
||||||
|
UsingDirective - (18:2,1 [32] ) - System.Collections.Generic
|
||||||
|
UsingDirective - (53:3,1 [17] ) - System.Linq
|
||||||
|
UsingDirective - (73:4,1 [28] ) - System.Threading.Tasks
|
||||||
|
UsingDirective - (104:5,1 [37] ) - Microsoft.AspNetCore.Components
|
||||||
|
ClassDeclaration - - public - TestComponent - Microsoft.AspNetCore.Components.ComponentBase -
|
||||||
|
DesignTimeDirective -
|
||||||
|
CSharpCode -
|
||||||
|
IntermediateToken - - CSharp - #pragma warning disable 0414
|
||||||
|
CSharpCode -
|
||||||
|
IntermediateToken - - CSharp - private static System.Object __o = null;
|
||||||
|
CSharpCode -
|
||||||
|
IntermediateToken - - CSharp - #pragma warning restore 0414
|
||||||
|
MethodDeclaration - - protected override - void - BuildRenderTree
|
||||||
|
MarkupElement - (0:0,0 [30] x:\dir\subdir\Test\TestComponent.cshtml) - input
|
||||||
|
HtmlAttribute - (6:0,6 [21] x:\dir\subdir\Test\TestComponent.cshtml) - @BIND=" - "
|
||||||
|
CSharpExpressionAttributeValue - (14:0,14 [12] x:\dir\subdir\Test\TestComponent.cshtml) -
|
||||||
|
IntermediateToken - (15:0,15 [11] x:\dir\subdir\Test\TestComponent.cshtml) - CSharp - ParentValue
|
||||||
|
HtmlContent - (30:0,30 [2] x:\dir\subdir\Test\TestComponent.cshtml)
|
||||||
|
IntermediateToken - (30:0,30 [2] x:\dir\subdir\Test\TestComponent.cshtml) - Html - \n
|
||||||
|
CSharpCode - (39:1,7 [50] x:\dir\subdir\Test\TestComponent.cshtml)
|
||||||
|
IntermediateToken - (39:1,7 [50] x:\dir\subdir\Test\TestComponent.cshtml) - CSharp - \n public int ParentValue { get; set; } = 42;\n
|
||||||
|
|
@ -0,0 +1,14 @@
|
||||||
|
Source Location: (15:0,15 [11] x:\dir\subdir\Test\TestComponent.cshtml)
|
||||||
|
|ParentValue|
|
||||||
|
Generated Location: (878:25,15 [11] )
|
||||||
|
|ParentValue|
|
||||||
|
|
||||||
|
Source Location: (39:1,7 [50] x:\dir\subdir\Test\TestComponent.cshtml)
|
||||||
|
|
|
||||||
|
public int ParentValue { get; set; } = 42;
|
||||||
|
|
|
||||||
|
Generated Location: (1082:35,7 [50] )
|
||||||
|
|
|
||||||
|
public int ParentValue { get; set; } = 42;
|
||||||
|
|
|
||||||
|
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
x:\dir\subdir\Test\TestComponent.cshtml(4,1): Warning RZ10014: Found markup element with unexpected name 'SomeComponent'. If this is intended to be a component, add a @using directive for its namespace.
|
||||||
|
|
@ -0,0 +1,57 @@
|
||||||
|
// <auto-generated/>
|
||||||
|
#pragma warning disable 1591
|
||||||
|
namespace Test
|
||||||
|
{
|
||||||
|
#line hidden
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using Microsoft.AspNetCore.Components;
|
||||||
|
public class TestComponent : Microsoft.AspNetCore.Components.ComponentBase
|
||||||
|
{
|
||||||
|
#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
|
||||||
|
protected override void BuildRenderTree(Microsoft.AspNetCore.Components.RenderTree.RenderTreeBuilder builder)
|
||||||
|
{
|
||||||
|
builder.AddAttribute(-1, "ChildContent", (Microsoft.AspNetCore.Components.RenderFragment)((builder2) => {
|
||||||
|
}
|
||||||
|
));
|
||||||
|
#nullable restore
|
||||||
|
#line 1 "x:\dir\subdir\Test\TestComponent.cshtml"
|
||||||
|
__o = typeof(MyComponent);
|
||||||
|
|
||||||
|
#line default
|
||||||
|
#line hidden
|
||||||
|
#nullable disable
|
||||||
|
__o = "";
|
||||||
|
__o = Microsoft.AspNetCore.Components.RuntimeHelpers.TypeCheck<System.Boolean>(
|
||||||
|
#nullable restore
|
||||||
|
#line 3 "x:\dir\subdir\Test\TestComponent.cshtml"
|
||||||
|
true
|
||||||
|
|
||||||
|
#line default
|
||||||
|
#line hidden
|
||||||
|
#nullable disable
|
||||||
|
);
|
||||||
|
builder.AddAttribute(-1, "ChildContent", (Microsoft.AspNetCore.Components.RenderFragment)((builder2) => {
|
||||||
|
}
|
||||||
|
));
|
||||||
|
#nullable restore
|
||||||
|
#line 3 "x:\dir\subdir\Test\TestComponent.cshtml"
|
||||||
|
__o = typeof(MyComponent);
|
||||||
|
|
||||||
|
#line default
|
||||||
|
#line hidden
|
||||||
|
#nullable disable
|
||||||
|
}
|
||||||
|
#pragma warning restore 1998
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#pragma warning restore 1591
|
||||||
|
|
@ -0,0 +1,28 @@
|
||||||
|
Document -
|
||||||
|
NamespaceDeclaration - - Test
|
||||||
|
UsingDirective - (3:1,1 [12] ) - System
|
||||||
|
UsingDirective - (18:2,1 [32] ) - System.Collections.Generic
|
||||||
|
UsingDirective - (53:3,1 [17] ) - System.Linq
|
||||||
|
UsingDirective - (73:4,1 [28] ) - System.Threading.Tasks
|
||||||
|
UsingDirective - (104:5,1 [37] ) - Microsoft.AspNetCore.Components
|
||||||
|
ClassDeclaration - - public - TestComponent - Microsoft.AspNetCore.Components.ComponentBase -
|
||||||
|
DesignTimeDirective -
|
||||||
|
CSharpCode -
|
||||||
|
IntermediateToken - - CSharp - #pragma warning disable 0414
|
||||||
|
CSharpCode -
|
||||||
|
IntermediateToken - - CSharp - private static System.Object __o = null;
|
||||||
|
CSharpCode -
|
||||||
|
IntermediateToken - - CSharp - #pragma warning restore 0414
|
||||||
|
MethodDeclaration - - protected override - void - BuildRenderTree
|
||||||
|
Component - (0:0,0 [15] x:\dir\subdir\Test\TestComponent.cshtml) - MyComponent
|
||||||
|
HtmlContent - (15:0,15 [2] x:\dir\subdir\Test\TestComponent.cshtml)
|
||||||
|
IntermediateToken - (15:0,15 [2] x:\dir\subdir\Test\TestComponent.cshtml) - Html - \n
|
||||||
|
MarkupElement - (17:1,0 [15] x:\dir\subdir\Test\TestComponent.cshtml) - mycomponent
|
||||||
|
HtmlContent - (32:1,15 [2] x:\dir\subdir\Test\TestComponent.cshtml)
|
||||||
|
IntermediateToken - (32:1,15 [2] x:\dir\subdir\Test\TestComponent.cshtml) - Html - \n
|
||||||
|
Component - (34:2,0 [51] x:\dir\subdir\Test\TestComponent.cshtml) - MyComponent
|
||||||
|
ComponentAttribute - - intproperty - AttributeStructure.SingleQuotes
|
||||||
|
HtmlContent - (60:2,26 [1] x:\dir\subdir\Test\TestComponent.cshtml)
|
||||||
|
IntermediateToken - (60:2,26 [1] x:\dir\subdir\Test\TestComponent.cshtml) - Html - 1
|
||||||
|
ComponentAttribute - (77:2,43 [4] x:\dir\subdir\Test\TestComponent.cshtml) - BoolProperty - AttributeStructure.SingleQuotes
|
||||||
|
IntermediateToken - (77:2,43 [4] x:\dir\subdir\Test\TestComponent.cshtml) - CSharp - true
|
||||||
|
|
@ -0,0 +1,5 @@
|
||||||
|
Source Location: (77:2,43 [4] x:\dir\subdir\Test\TestComponent.cshtml)
|
||||||
|
|true|
|
||||||
|
Generated Location: (1301:36,43 [4] )
|
||||||
|
|true|
|
||||||
|
|
||||||
|
|
@ -0,0 +1,65 @@
|
||||||
|
// <auto-generated/>
|
||||||
|
#pragma warning disable 1591
|
||||||
|
namespace Test
|
||||||
|
{
|
||||||
|
#line hidden
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using Microsoft.AspNetCore.Components;
|
||||||
|
public class TestComponent : Microsoft.AspNetCore.Components.ComponentBase
|
||||||
|
{
|
||||||
|
#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
|
||||||
|
protected override void BuildRenderTree(Microsoft.AspNetCore.Components.RenderTree.RenderTreeBuilder builder)
|
||||||
|
{
|
||||||
|
__o = Microsoft.AspNetCore.Components.RuntimeHelpers.TypeCheck<System.Int32>(
|
||||||
|
#nullable restore
|
||||||
|
#line 1 "x:\dir\subdir\Test\TestComponent.cshtml"
|
||||||
|
1
|
||||||
|
|
||||||
|
#line default
|
||||||
|
#line hidden
|
||||||
|
#nullable disable
|
||||||
|
);
|
||||||
|
builder.AddAttribute(-1, "ChildContent", (Microsoft.AspNetCore.Components.RenderFragment)((builder2) => {
|
||||||
|
}
|
||||||
|
));
|
||||||
|
#nullable restore
|
||||||
|
#line 1 "x:\dir\subdir\Test\TestComponent.cshtml"
|
||||||
|
__o = typeof(MyComponent);
|
||||||
|
|
||||||
|
#line default
|
||||||
|
#line hidden
|
||||||
|
#nullable disable
|
||||||
|
__o = Microsoft.AspNetCore.Components.RuntimeHelpers.TypeCheck<System.Int32>(
|
||||||
|
#nullable restore
|
||||||
|
#line 2 "x:\dir\subdir\Test\TestComponent.cshtml"
|
||||||
|
2
|
||||||
|
|
||||||
|
#line default
|
||||||
|
#line hidden
|
||||||
|
#nullable disable
|
||||||
|
);
|
||||||
|
builder.AddAttribute(-1, "ChildContent", (Microsoft.AspNetCore.Components.RenderFragment)((builder2) => {
|
||||||
|
}
|
||||||
|
));
|
||||||
|
#nullable restore
|
||||||
|
#line 2 "x:\dir\subdir\Test\TestComponent.cshtml"
|
||||||
|
__o = typeof(Mycomponent);
|
||||||
|
|
||||||
|
#line default
|
||||||
|
#line hidden
|
||||||
|
#nullable disable
|
||||||
|
}
|
||||||
|
#pragma warning restore 1998
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#pragma warning restore 1591
|
||||||
|
|
@ -0,0 +1,24 @@
|
||||||
|
Document -
|
||||||
|
NamespaceDeclaration - - Test
|
||||||
|
UsingDirective - (3:1,1 [12] ) - System
|
||||||
|
UsingDirective - (18:2,1 [32] ) - System.Collections.Generic
|
||||||
|
UsingDirective - (53:3,1 [17] ) - System.Linq
|
||||||
|
UsingDirective - (73:4,1 [28] ) - System.Threading.Tasks
|
||||||
|
UsingDirective - (104:5,1 [37] ) - Microsoft.AspNetCore.Components
|
||||||
|
ClassDeclaration - - public - TestComponent - Microsoft.AspNetCore.Components.ComponentBase -
|
||||||
|
DesignTimeDirective -
|
||||||
|
CSharpCode -
|
||||||
|
IntermediateToken - - CSharp - #pragma warning disable 0414
|
||||||
|
CSharpCode -
|
||||||
|
IntermediateToken - - CSharp - private static System.Object __o = null;
|
||||||
|
CSharpCode -
|
||||||
|
IntermediateToken - - CSharp - #pragma warning restore 0414
|
||||||
|
MethodDeclaration - - protected override - void - BuildRenderTree
|
||||||
|
Component - (0:0,0 [31] x:\dir\subdir\Test\TestComponent.cshtml) - MyComponent
|
||||||
|
ComponentAttribute - (26:0,26 [1] x:\dir\subdir\Test\TestComponent.cshtml) - IntProperty - AttributeStructure.SingleQuotes
|
||||||
|
IntermediateToken - (26:0,26 [1] x:\dir\subdir\Test\TestComponent.cshtml) - CSharp - 1
|
||||||
|
HtmlContent - (31:0,31 [2] x:\dir\subdir\Test\TestComponent.cshtml)
|
||||||
|
IntermediateToken - (31:0,31 [2] x:\dir\subdir\Test\TestComponent.cshtml) - Html - \n
|
||||||
|
Component - (33:1,0 [31] x:\dir\subdir\Test\TestComponent.cshtml) - Mycomponent
|
||||||
|
ComponentAttribute - (59:1,26 [1] x:\dir\subdir\Test\TestComponent.cshtml) - IntProperty - AttributeStructure.SingleQuotes
|
||||||
|
IntermediateToken - (59:1,26 [1] x:\dir\subdir\Test\TestComponent.cshtml) - CSharp - 2
|
||||||
|
|
@ -0,0 +1,10 @@
|
||||||
|
Source Location: (26:0,26 [1] x:\dir\subdir\Test\TestComponent.cshtml)
|
||||||
|
|1|
|
||||||
|
Generated Location: (960:25,26 [1] )
|
||||||
|
|1|
|
||||||
|
|
||||||
|
Source Location: (59:1,26 [1] x:\dir\subdir\Test\TestComponent.cshtml)
|
||||||
|
|2|
|
||||||
|
Generated Location: (1515:44,26 [1] )
|
||||||
|
|2|
|
||||||
|
|
||||||
|
|
@ -0,0 +1,45 @@
|
||||||
|
// <auto-generated/>
|
||||||
|
#pragma warning disable 1591
|
||||||
|
namespace Test
|
||||||
|
{
|
||||||
|
#line hidden
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using Microsoft.AspNetCore.Components;
|
||||||
|
public class TestComponent : Microsoft.AspNetCore.Components.ComponentBase
|
||||||
|
{
|
||||||
|
#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
|
||||||
|
protected override void BuildRenderTree(Microsoft.AspNetCore.Components.RenderTree.RenderTreeBuilder builder)
|
||||||
|
{
|
||||||
|
__o = Microsoft.AspNetCore.Components.BindMethods.GetValue(
|
||||||
|
#nullable restore
|
||||||
|
#line 2 "x:\dir\subdir\Test\TestComponent.cshtml"
|
||||||
|
text
|
||||||
|
|
||||||
|
#line default
|
||||||
|
#line hidden
|
||||||
|
#nullable disable
|
||||||
|
);
|
||||||
|
__o = Microsoft.AspNetCore.Components.EventCallback.Factory.CreateBinder(this, __value => text = __value, text);
|
||||||
|
}
|
||||||
|
#pragma warning restore 1998
|
||||||
|
#nullable restore
|
||||||
|
#line 4 "x:\dir\subdir\Test\TestComponent.cshtml"
|
||||||
|
|
||||||
|
private string text = "hi";
|
||||||
|
|
||||||
|
#line default
|
||||||
|
#line hidden
|
||||||
|
#nullable disable
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#pragma warning restore 1591
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
x:\dir\subdir\Test\TestComponent.cshtml(2,3): Error RZ10008: The attribute 'Value' is used two or more times for this element. Attributes must be unique (case-insensitive). The attribute 'Value' is used by the '@bind' directive attribute.
|
||||||
|
|
@ -0,0 +1,44 @@
|
||||||
|
Document -
|
||||||
|
NamespaceDeclaration - - Test
|
||||||
|
UsingDirective - (3:1,1 [12] ) - System
|
||||||
|
UsingDirective - (18:2,1 [32] ) - System.Collections.Generic
|
||||||
|
UsingDirective - (53:3,1 [17] ) - System.Linq
|
||||||
|
UsingDirective - (73:4,1 [28] ) - System.Threading.Tasks
|
||||||
|
UsingDirective - (104:5,1 [37] ) - Microsoft.AspNetCore.Components
|
||||||
|
ClassDeclaration - - public - TestComponent - Microsoft.AspNetCore.Components.ComponentBase -
|
||||||
|
DesignTimeDirective -
|
||||||
|
CSharpCode -
|
||||||
|
IntermediateToken - - CSharp - #pragma warning disable 0414
|
||||||
|
CSharpCode -
|
||||||
|
IntermediateToken - - CSharp - private static System.Object __o = null;
|
||||||
|
CSharpCode -
|
||||||
|
IntermediateToken - - CSharp - #pragma warning restore 0414
|
||||||
|
MethodDeclaration - - protected override - void - BuildRenderTree
|
||||||
|
MarkupElement - (0:0,0 [69] x:\dir\subdir\Test\TestComponent.cshtml) - div
|
||||||
|
HtmlContent - (5:0,5 [4] x:\dir\subdir\Test\TestComponent.cshtml)
|
||||||
|
IntermediateToken - (5:0,5 [4] x:\dir\subdir\Test\TestComponent.cshtml) - Html - \n
|
||||||
|
MarkupElement - (9:1,2 [52] x:\dir\subdir\Test\TestComponent.cshtml) - input
|
||||||
|
HtmlAttribute - - type=" - "
|
||||||
|
HtmlAttributeValue - (22:1,15 [4] x:\dir\subdir\Test\TestComponent.cshtml) -
|
||||||
|
IntermediateToken - (22:1,15 [4] x:\dir\subdir\Test\TestComponent.cshtml) - Html - text
|
||||||
|
HtmlAttribute - - Value=" - "
|
||||||
|
HtmlAttributeValue - (35:1,28 [2] x:\dir\subdir\Test\TestComponent.cshtml) -
|
||||||
|
IntermediateToken - (35:1,28 [2] x:\dir\subdir\Test\TestComponent.cshtml) - Html - 17
|
||||||
|
HtmlAttribute - (46:1,39 [5] x:\dir\subdir\Test\TestComponent.cshtml) - value=" - "
|
||||||
|
CSharpExpressionAttributeValue - -
|
||||||
|
IntermediateToken - - CSharp - Microsoft.AspNetCore.Components.BindMethods.GetValue(
|
||||||
|
IntermediateToken - (47:1,40 [4] x:\dir\subdir\Test\TestComponent.cshtml) - CSharp - text
|
||||||
|
IntermediateToken - - CSharp - )
|
||||||
|
HtmlAttribute - (46:1,39 [5] x:\dir\subdir\Test\TestComponent.cshtml) - onchange=" - "
|
||||||
|
CSharpExpressionAttributeValue - -
|
||||||
|
IntermediateToken - - CSharp - Microsoft.AspNetCore.Components.EventCallback.Factory.CreateBinder(this, __value => text = __value,
|
||||||
|
IntermediateToken - - CSharp - text
|
||||||
|
IntermediateToken - - CSharp - )
|
||||||
|
HtmlContent - (61:1,54 [2] x:\dir\subdir\Test\TestComponent.cshtml)
|
||||||
|
IntermediateToken - (61:1,54 [2] x:\dir\subdir\Test\TestComponent.cshtml) - Html - \n
|
||||||
|
HtmlContent - (69:2,6 [2] x:\dir\subdir\Test\TestComponent.cshtml)
|
||||||
|
IntermediateToken - (69:2,6 [2] x:\dir\subdir\Test\TestComponent.cshtml) - Html - \n
|
||||||
|
HtmlContent - (119:5,1 [2] x:\dir\subdir\Test\TestComponent.cshtml)
|
||||||
|
IntermediateToken - (119:5,1 [2] x:\dir\subdir\Test\TestComponent.cshtml) - Html - \n
|
||||||
|
CSharpCode - (83:3,12 [35] x:\dir\subdir\Test\TestComponent.cshtml)
|
||||||
|
IntermediateToken - (83:3,12 [35] x:\dir\subdir\Test\TestComponent.cshtml) - CSharp - \n private string text = "hi";\n
|
||||||
|
|
@ -0,0 +1,14 @@
|
||||||
|
Source Location: (47:1,40 [4] x:\dir\subdir\Test\TestComponent.cshtml)
|
||||||
|
|text|
|
||||||
|
Generated Location: (956:25,40 [4] )
|
||||||
|
|text|
|
||||||
|
|
||||||
|
Source Location: (83:3,12 [35] x:\dir\subdir\Test\TestComponent.cshtml)
|
||||||
|
|
|
||||||
|
private string text = "hi";
|
||||||
|
|
|
||||||
|
Generated Location: (1285:36,12 [35] )
|
||||||
|
|
|
||||||
|
private string text = "hi";
|
||||||
|
|
|
||||||
|
|
||||||
|
|
@ -0,0 +1,27 @@
|
||||||
|
// <auto-generated/>
|
||||||
|
#pragma warning disable 1591
|
||||||
|
namespace Test
|
||||||
|
{
|
||||||
|
#line hidden
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using Microsoft.AspNetCore.Components;
|
||||||
|
public class TestComponent : Microsoft.AspNetCore.Components.ComponentBase
|
||||||
|
{
|
||||||
|
#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
|
||||||
|
protected override void BuildRenderTree(Microsoft.AspNetCore.Components.RenderTree.RenderTreeBuilder builder)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
#pragma warning restore 1998
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#pragma warning restore 1591
|
||||||
|
|
@ -0,0 +1,20 @@
|
||||||
|
Document -
|
||||||
|
NamespaceDeclaration - - Test
|
||||||
|
UsingDirective - (3:1,1 [12] ) - System
|
||||||
|
UsingDirective - (18:2,1 [32] ) - System.Collections.Generic
|
||||||
|
UsingDirective - (53:3,1 [17] ) - System.Linq
|
||||||
|
UsingDirective - (73:4,1 [28] ) - System.Threading.Tasks
|
||||||
|
UsingDirective - (104:5,1 [37] ) - Microsoft.AspNetCore.Components
|
||||||
|
ClassDeclaration - - public - TestComponent - Microsoft.AspNetCore.Components.ComponentBase -
|
||||||
|
DesignTimeDirective -
|
||||||
|
CSharpCode -
|
||||||
|
IntermediateToken - - CSharp - #pragma warning disable 0414
|
||||||
|
CSharpCode -
|
||||||
|
IntermediateToken - - CSharp - private static System.Object __o = null;
|
||||||
|
CSharpCode -
|
||||||
|
IntermediateToken - - CSharp - #pragma warning restore 0414
|
||||||
|
MethodDeclaration - - protected override - void - BuildRenderTree
|
||||||
|
MarkupElement - (0:0,0 [18] x:\dir\subdir\Test\TestComponent.cshtml) - NotAComponent
|
||||||
|
HtmlContent - (18:0,18 [2] x:\dir\subdir\Test\TestComponent.cshtml)
|
||||||
|
IntermediateToken - (18:0,18 [2] x:\dir\subdir\Test\TestComponent.cshtml) - Html - \n
|
||||||
|
MarkupElement - (20:1,0 [53] x:\dir\subdir\Test\TestComponent.cshtml) - DefinitelyNotAComponent
|
||||||
|
|
@ -0,0 +1,35 @@
|
||||||
|
// <auto-generated/>
|
||||||
|
#pragma warning disable 1591
|
||||||
|
namespace Test
|
||||||
|
{
|
||||||
|
#line hidden
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using Microsoft.AspNetCore.Components;
|
||||||
|
public class TestComponent : Microsoft.AspNetCore.Components.ComponentBase
|
||||||
|
{
|
||||||
|
#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
|
||||||
|
protected override void BuildRenderTree(Microsoft.AspNetCore.Components.RenderTree.RenderTreeBuilder builder)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
#pragma warning restore 1998
|
||||||
|
#nullable restore
|
||||||
|
#line 3 "x:\dir\subdir\Test\TestComponent.cshtml"
|
||||||
|
|
||||||
|
private object someObject = new object();
|
||||||
|
|
||||||
|
#line default
|
||||||
|
#line hidden
|
||||||
|
#nullable disable
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#pragma warning restore 1591
|
||||||
|
|
@ -0,0 +1,34 @@
|
||||||
|
Document -
|
||||||
|
NamespaceDeclaration - - Test
|
||||||
|
UsingDirective - (3:1,1 [12] ) - System
|
||||||
|
UsingDirective - (18:2,1 [32] ) - System.Collections.Generic
|
||||||
|
UsingDirective - (53:3,1 [17] ) - System.Linq
|
||||||
|
UsingDirective - (73:4,1 [28] ) - System.Threading.Tasks
|
||||||
|
UsingDirective - (104:5,1 [37] ) - Microsoft.AspNetCore.Components
|
||||||
|
ClassDeclaration - - public - TestComponent - Microsoft.AspNetCore.Components.ComponentBase -
|
||||||
|
DesignTimeDirective -
|
||||||
|
CSharpCode -
|
||||||
|
IntermediateToken - - CSharp - #pragma warning disable 0414
|
||||||
|
CSharpCode -
|
||||||
|
IntermediateToken - - CSharp - private static System.Object __o = null;
|
||||||
|
CSharpCode -
|
||||||
|
IntermediateToken - - CSharp - #pragma warning restore 0414
|
||||||
|
MethodDeclaration - - protected override - void - BuildRenderTree
|
||||||
|
MarkupElement - (0:0,0 [84] x:\dir\subdir\Test\TestComponent.cshtml) - elem
|
||||||
|
HtmlAttribute - (5:0,5 [25] x:\dir\subdir\Test\TestComponent.cshtml) - attributebefore=" - "
|
||||||
|
HtmlAttributeValue - (23:0,23 [6] x:\dir\subdir\Test\TestComponent.cshtml) -
|
||||||
|
IntermediateToken - (23:0,23 [6] x:\dir\subdir\Test\TestComponent.cshtml) - Html - before
|
||||||
|
HtmlAttribute - (30:0,30 [18] x:\dir\subdir\Test\TestComponent.cshtml) - @KEY=" - "
|
||||||
|
HtmlAttributeValue - (37:0,37 [10] x:\dir\subdir\Test\TestComponent.cshtml) -
|
||||||
|
IntermediateToken - (37:0,37 [10] x:\dir\subdir\Test\TestComponent.cshtml) - Html - someObject
|
||||||
|
HtmlAttribute - (48:0,48 [23] x:\dir\subdir\Test\TestComponent.cshtml) - attributeafter=" - "
|
||||||
|
HtmlAttributeValue - (65:0,65 [5] x:\dir\subdir\Test\TestComponent.cshtml) -
|
||||||
|
IntermediateToken - (65:0,65 [5] x:\dir\subdir\Test\TestComponent.cshtml) - Html - after
|
||||||
|
HtmlContent - (72:0,72 [5] x:\dir\subdir\Test\TestComponent.cshtml)
|
||||||
|
IntermediateToken - (72:0,72 [5] x:\dir\subdir\Test\TestComponent.cshtml) - Html - Hello
|
||||||
|
HtmlContent - (84:0,84 [4] x:\dir\subdir\Test\TestComponent.cshtml)
|
||||||
|
IntermediateToken - (84:0,84 [4] x:\dir\subdir\Test\TestComponent.cshtml) - Html - \n\n
|
||||||
|
HtmlContent - (145:4,1 [2] x:\dir\subdir\Test\TestComponent.cshtml)
|
||||||
|
IntermediateToken - (145:4,1 [2] x:\dir\subdir\Test\TestComponent.cshtml) - Html - \n
|
||||||
|
CSharpCode - (95:2,7 [49] x:\dir\subdir\Test\TestComponent.cshtml)
|
||||||
|
IntermediateToken - (95:2,7 [49] x:\dir\subdir\Test\TestComponent.cshtml) - CSharp - \n private object someObject = new object();\n
|
||||||
|
|
@ -0,0 +1,9 @@
|
||||||
|
Source Location: (95:2,7 [49] x:\dir\subdir\Test\TestComponent.cshtml)
|
||||||
|
|
|
||||||
|
private object someObject = new object();
|
||||||
|
|
|
||||||
|
Generated Location: (899:26,7 [49] )
|
||||||
|
|
|
||||||
|
private object someObject = new object();
|
||||||
|
|
|
||||||
|
|
||||||
|
|
@ -0,0 +1,27 @@
|
||||||
|
// <auto-generated/>
|
||||||
|
#pragma warning disable 1591
|
||||||
|
namespace Test
|
||||||
|
{
|
||||||
|
#line hidden
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using Microsoft.AspNetCore.Components;
|
||||||
|
public class TestComponent : Microsoft.AspNetCore.Components.ComponentBase
|
||||||
|
{
|
||||||
|
#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
|
||||||
|
protected override void BuildRenderTree(Microsoft.AspNetCore.Components.RenderTree.RenderTreeBuilder builder)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
#pragma warning restore 1998
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#pragma warning restore 1591
|
||||||
|
|
@ -0,0 +1,28 @@
|
||||||
|
Document -
|
||||||
|
NamespaceDeclaration - - Test
|
||||||
|
UsingDirective - (3:1,1 [12] ) - System
|
||||||
|
UsingDirective - (18:2,1 [32] ) - System.Collections.Generic
|
||||||
|
UsingDirective - (53:3,1 [17] ) - System.Linq
|
||||||
|
UsingDirective - (73:4,1 [28] ) - System.Threading.Tasks
|
||||||
|
UsingDirective - (104:5,1 [37] ) - Microsoft.AspNetCore.Components
|
||||||
|
ClassDeclaration - - public - TestComponent - Microsoft.AspNetCore.Components.ComponentBase -
|
||||||
|
DesignTimeDirective -
|
||||||
|
CSharpCode -
|
||||||
|
IntermediateToken - - CSharp - #pragma warning disable 0414
|
||||||
|
CSharpCode -
|
||||||
|
IntermediateToken - - CSharp - private static System.Object __o = null;
|
||||||
|
CSharpCode -
|
||||||
|
IntermediateToken - - CSharp - #pragma warning restore 0414
|
||||||
|
MethodDeclaration - - protected override - void - BuildRenderTree
|
||||||
|
MarkupElement - (0:0,0 [80] x:\dir\subdir\Test\TestComponent.cshtml) - elem
|
||||||
|
HtmlAttribute - (5:0,5 [25] x:\dir\subdir\Test\TestComponent.cshtml) - attributebefore=" - "
|
||||||
|
HtmlAttributeValue - (23:0,23 [6] x:\dir\subdir\Test\TestComponent.cshtml) -
|
||||||
|
IntermediateToken - (23:0,23 [6] x:\dir\subdir\Test\TestComponent.cshtml) - Html - before
|
||||||
|
HtmlAttribute - (30:0,30 [14] x:\dir\subdir\Test\TestComponent.cshtml) - @rEF=" - "
|
||||||
|
HtmlAttributeValue - (37:0,37 [6] x:\dir\subdir\Test\TestComponent.cshtml) -
|
||||||
|
IntermediateToken - (37:0,37 [6] x:\dir\subdir\Test\TestComponent.cshtml) - Html - myElem
|
||||||
|
HtmlAttribute - (44:0,44 [23] x:\dir\subdir\Test\TestComponent.cshtml) - attributeafter=" - "
|
||||||
|
HtmlAttributeValue - (61:0,61 [5] x:\dir\subdir\Test\TestComponent.cshtml) -
|
||||||
|
IntermediateToken - (61:0,61 [5] x:\dir\subdir\Test\TestComponent.cshtml) - Html - after
|
||||||
|
HtmlContent - (68:0,68 [5] x:\dir\subdir\Test\TestComponent.cshtml)
|
||||||
|
IntermediateToken - (68:0,68 [5] x:\dir\subdir\Test\TestComponent.cshtml) - Html - Hello
|
||||||
|
|
@ -0,0 +1,35 @@
|
||||||
|
// <auto-generated/>
|
||||||
|
#pragma warning disable 1591
|
||||||
|
namespace Test
|
||||||
|
{
|
||||||
|
#line hidden
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using Microsoft.AspNetCore.Components;
|
||||||
|
public class TestComponent : Microsoft.AspNetCore.Components.ComponentBase
|
||||||
|
{
|
||||||
|
#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
|
||||||
|
protected override void BuildRenderTree(Microsoft.AspNetCore.Components.RenderTree.RenderTreeBuilder builder)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
#pragma warning restore 1998
|
||||||
|
#nullable restore
|
||||||
|
#line 3 "x:\dir\subdir\Test\TestComponent.cshtml"
|
||||||
|
|
||||||
|
private Dictionary<string, object> someAttributes = new Dictionary<string, object>();
|
||||||
|
|
||||||
|
#line default
|
||||||
|
#line hidden
|
||||||
|
#nullable disable
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#pragma warning restore 1591
|
||||||
|
|
@ -0,0 +1,34 @@
|
||||||
|
Document -
|
||||||
|
NamespaceDeclaration - - Test
|
||||||
|
UsingDirective - (3:1,1 [12] ) - System
|
||||||
|
UsingDirective - (18:2,1 [32] ) - System.Collections.Generic
|
||||||
|
UsingDirective - (53:3,1 [17] ) - System.Linq
|
||||||
|
UsingDirective - (73:4,1 [28] ) - System.Threading.Tasks
|
||||||
|
UsingDirective - (104:5,1 [37] ) - Microsoft.AspNetCore.Components
|
||||||
|
ClassDeclaration - - public - TestComponent - Microsoft.AspNetCore.Components.ComponentBase -
|
||||||
|
DesignTimeDirective -
|
||||||
|
CSharpCode -
|
||||||
|
IntermediateToken - - CSharp - #pragma warning disable 0414
|
||||||
|
CSharpCode -
|
||||||
|
IntermediateToken - - CSharp - private static System.Object __o = null;
|
||||||
|
CSharpCode -
|
||||||
|
IntermediateToken - - CSharp - #pragma warning restore 0414
|
||||||
|
MethodDeclaration - - protected override - void - BuildRenderTree
|
||||||
|
MarkupElement - (0:0,0 [95] x:\dir\subdir\Test\TestComponent.cshtml) - elem
|
||||||
|
HtmlAttribute - (5:0,5 [25] x:\dir\subdir\Test\TestComponent.cshtml) - attributebefore=" - "
|
||||||
|
HtmlAttributeValue - (23:0,23 [6] x:\dir\subdir\Test\TestComponent.cshtml) -
|
||||||
|
IntermediateToken - (23:0,23 [6] x:\dir\subdir\Test\TestComponent.cshtml) - Html - before
|
||||||
|
HtmlAttribute - (30:0,30 [29] x:\dir\subdir\Test\TestComponent.cshtml) - @ATTributes=" - "
|
||||||
|
HtmlAttributeValue - (44:0,44 [14] x:\dir\subdir\Test\TestComponent.cshtml) -
|
||||||
|
IntermediateToken - (44:0,44 [14] x:\dir\subdir\Test\TestComponent.cshtml) - Html - someAttributes
|
||||||
|
HtmlAttribute - (59:0,59 [23] x:\dir\subdir\Test\TestComponent.cshtml) - attributeafter=" - "
|
||||||
|
HtmlAttributeValue - (76:0,76 [5] x:\dir\subdir\Test\TestComponent.cshtml) -
|
||||||
|
IntermediateToken - (76:0,76 [5] x:\dir\subdir\Test\TestComponent.cshtml) - Html - after
|
||||||
|
HtmlContent - (83:0,83 [5] x:\dir\subdir\Test\TestComponent.cshtml)
|
||||||
|
IntermediateToken - (83:0,83 [5] x:\dir\subdir\Test\TestComponent.cshtml) - Html - Hello
|
||||||
|
HtmlContent - (95:0,95 [4] x:\dir\subdir\Test\TestComponent.cshtml)
|
||||||
|
IntermediateToken - (95:0,95 [4] x:\dir\subdir\Test\TestComponent.cshtml) - Html - \n\n
|
||||||
|
HtmlContent - (200:4,1 [2] x:\dir\subdir\Test\TestComponent.cshtml)
|
||||||
|
IntermediateToken - (200:4,1 [2] x:\dir\subdir\Test\TestComponent.cshtml) - Html - \n
|
||||||
|
CSharpCode - (106:2,7 [93] x:\dir\subdir\Test\TestComponent.cshtml)
|
||||||
|
IntermediateToken - (106:2,7 [93] x:\dir\subdir\Test\TestComponent.cshtml) - CSharp - \n private Dictionary<string, object> someAttributes = new Dictionary<string, object>();\n
|
||||||
|
|
@ -0,0 +1,9 @@
|
||||||
|
Source Location: (106:2,7 [93] x:\dir\subdir\Test\TestComponent.cshtml)
|
||||||
|
|
|
||||||
|
private Dictionary<string, object> someAttributes = new Dictionary<string, object>();
|
||||||
|
|
|
||||||
|
Generated Location: (899:26,7 [93] )
|
||||||
|
|
|
||||||
|
private Dictionary<string, object> someAttributes = new Dictionary<string, object>();
|
||||||
|
|
|
||||||
|
|
||||||
|
|
@ -0,0 +1,36 @@
|
||||||
|
// <auto-generated/>
|
||||||
|
#pragma warning disable 1591
|
||||||
|
namespace Test
|
||||||
|
{
|
||||||
|
#line hidden
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using Microsoft.AspNetCore.Components;
|
||||||
|
public class TestComponent : Microsoft.AspNetCore.Components.ComponentBase
|
||||||
|
{
|
||||||
|
#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
|
||||||
|
protected override void BuildRenderTree(Microsoft.AspNetCore.Components.RenderTree.RenderTreeBuilder builder)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
#pragma warning restore 1998
|
||||||
|
#nullable restore
|
||||||
|
#line 2 "x:\dir\subdir\Test\TestComponent.cshtml"
|
||||||
|
|
||||||
|
void OnClick(UIMouseEventArgs e) {
|
||||||
|
}
|
||||||
|
|
||||||
|
#line default
|
||||||
|
#line hidden
|
||||||
|
#nullable disable
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#pragma warning restore 1591
|
||||||
|
|
@ -0,0 +1,24 @@
|
||||||
|
Document -
|
||||||
|
NamespaceDeclaration - - Test
|
||||||
|
UsingDirective - (3:1,1 [12] ) - System
|
||||||
|
UsingDirective - (18:2,1 [32] ) - System.Collections.Generic
|
||||||
|
UsingDirective - (53:3,1 [17] ) - System.Linq
|
||||||
|
UsingDirective - (73:4,1 [28] ) - System.Threading.Tasks
|
||||||
|
UsingDirective - (104:5,1 [37] ) - Microsoft.AspNetCore.Components
|
||||||
|
ClassDeclaration - - public - TestComponent - Microsoft.AspNetCore.Components.ComponentBase -
|
||||||
|
DesignTimeDirective -
|
||||||
|
CSharpCode -
|
||||||
|
IntermediateToken - - CSharp - #pragma warning disable 0414
|
||||||
|
CSharpCode -
|
||||||
|
IntermediateToken - - CSharp - private static System.Object __o = null;
|
||||||
|
CSharpCode -
|
||||||
|
IntermediateToken - - CSharp - #pragma warning restore 0414
|
||||||
|
MethodDeclaration - - protected override - void - BuildRenderTree
|
||||||
|
MarkupElement - (0:0,0 [28] x:\dir\subdir\Test\TestComponent.cshtml) - input
|
||||||
|
HtmlAttribute - (6:0,6 [19] x:\dir\subdir\Test\TestComponent.cshtml) - @onCLICK=" - "
|
||||||
|
HtmlAttributeValue - (17:0,17 [7] x:\dir\subdir\Test\TestComponent.cshtml) -
|
||||||
|
IntermediateToken - (17:0,17 [7] x:\dir\subdir\Test\TestComponent.cshtml) - Html - OnClick
|
||||||
|
HtmlContent - (28:0,28 [2] x:\dir\subdir\Test\TestComponent.cshtml)
|
||||||
|
IntermediateToken - (28:0,28 [2] x:\dir\subdir\Test\TestComponent.cshtml) - Html - \n
|
||||||
|
CSharpCode - (37:1,7 [49] x:\dir\subdir\Test\TestComponent.cshtml)
|
||||||
|
IntermediateToken - (37:1,7 [49] x:\dir\subdir\Test\TestComponent.cshtml) - CSharp - \n void OnClick(UIMouseEventArgs e) {\n }\n
|
||||||
|
|
@ -0,0 +1,11 @@
|
||||||
|
Source Location: (37:1,7 [49] x:\dir\subdir\Test\TestComponent.cshtml)
|
||||||
|
|
|
||||||
|
void OnClick(UIMouseEventArgs e) {
|
||||||
|
}
|
||||||
|
|
|
||||||
|
Generated Location: (899:26,7 [49] )
|
||||||
|
|
|
||||||
|
void OnClick(UIMouseEventArgs e) {
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
||||||
|
|
@ -0,0 +1,39 @@
|
||||||
|
// <auto-generated/>
|
||||||
|
#pragma warning disable 1591
|
||||||
|
namespace Test
|
||||||
|
{
|
||||||
|
#line hidden
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using Microsoft.AspNetCore.Components;
|
||||||
|
public class TestComponent : Microsoft.AspNetCore.Components.ComponentBase
|
||||||
|
{
|
||||||
|
#pragma warning disable 1998
|
||||||
|
protected override void BuildRenderTree(Microsoft.AspNetCore.Components.RenderTree.RenderTreeBuilder builder)
|
||||||
|
{
|
||||||
|
builder.OpenElement(0, "input");
|
||||||
|
builder.AddAttribute(1, "@BIND",
|
||||||
|
#nullable restore
|
||||||
|
#line 1 "x:\dir\subdir\Test\TestComponent.cshtml"
|
||||||
|
ParentValue
|
||||||
|
|
||||||
|
#line default
|
||||||
|
#line hidden
|
||||||
|
#nullable disable
|
||||||
|
);
|
||||||
|
builder.CloseElement();
|
||||||
|
}
|
||||||
|
#pragma warning restore 1998
|
||||||
|
#nullable restore
|
||||||
|
#line 2 "x:\dir\subdir\Test\TestComponent.cshtml"
|
||||||
|
|
||||||
|
public int ParentValue { get; set; } = 42;
|
||||||
|
|
||||||
|
#line default
|
||||||
|
#line hidden
|
||||||
|
#nullable disable
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#pragma warning restore 1591
|
||||||
|
|
@ -0,0 +1,15 @@
|
||||||
|
Document -
|
||||||
|
NamespaceDeclaration - - Test
|
||||||
|
UsingDirective - (3:1,1 [14] ) - System
|
||||||
|
UsingDirective - (18:2,1 [34] ) - System.Collections.Generic
|
||||||
|
UsingDirective - (53:3,1 [19] ) - System.Linq
|
||||||
|
UsingDirective - (73:4,1 [30] ) - System.Threading.Tasks
|
||||||
|
UsingDirective - (104:5,1 [39] ) - Microsoft.AspNetCore.Components
|
||||||
|
ClassDeclaration - - public - TestComponent - Microsoft.AspNetCore.Components.ComponentBase -
|
||||||
|
MethodDeclaration - - protected override - void - BuildRenderTree
|
||||||
|
MarkupElement - (0:0,0 [30] x:\dir\subdir\Test\TestComponent.cshtml) - input
|
||||||
|
HtmlAttribute - (6:0,6 [21] x:\dir\subdir\Test\TestComponent.cshtml) - @BIND=" - "
|
||||||
|
CSharpExpressionAttributeValue - (14:0,14 [12] x:\dir\subdir\Test\TestComponent.cshtml) -
|
||||||
|
IntermediateToken - (15:0,15 [11] x:\dir\subdir\Test\TestComponent.cshtml) - CSharp - ParentValue
|
||||||
|
CSharpCode - (39:1,7 [50] x:\dir\subdir\Test\TestComponent.cshtml)
|
||||||
|
IntermediateToken - (39:1,7 [50] x:\dir\subdir\Test\TestComponent.cshtml) - CSharp - \n public int ParentValue { get; set; } = 42;\n
|
||||||
|
|
@ -0,0 +1,9 @@
|
||||||
|
Source Location: (39:1,7 [50] x:\dir\subdir\Test\TestComponent.cshtml)
|
||||||
|
|
|
||||||
|
public int ParentValue { get; set; } = 42;
|
||||||
|
|
|
||||||
|
Generated Location: (925:30,7 [50] )
|
||||||
|
|
|
||||||
|
public int ParentValue { get; set; } = 42;
|
||||||
|
|
|
||||||
|
|
||||||
|
|
@ -29,7 +29,9 @@ using Foo = Test3;
|
||||||
{
|
{
|
||||||
builder.OpenComponent<Test.MyComponent>(0);
|
builder.OpenComponent<Test.MyComponent>(0);
|
||||||
builder.CloseComponent();
|
builder.CloseComponent();
|
||||||
builder.AddMarkupContent(1, "\r\n<SomeComponent></SomeComponent>");
|
builder.AddMarkupContent(1, "\r\n");
|
||||||
|
builder.OpenElement(2, "SomeComponent");
|
||||||
|
builder.CloseElement();
|
||||||
}
|
}
|
||||||
#pragma warning restore 1998
|
#pragma warning restore 1998
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
x:\dir\subdir\Test\TestComponent.cshtml(4,1): Warning RZ10014: Found markup element with unexpected name 'SomeComponent'. If this is intended to be a component, add a @using directive for its namespace.
|
||||||
|
|
@ -10,4 +10,6 @@ Document -
|
||||||
ClassDeclaration - - public - TestComponent - Microsoft.AspNetCore.Components.ComponentBase -
|
ClassDeclaration - - public - TestComponent - Microsoft.AspNetCore.Components.ComponentBase -
|
||||||
MethodDeclaration - - protected override - void - BuildRenderTree
|
MethodDeclaration - - protected override - void - BuildRenderTree
|
||||||
Component - (55:2,0 [15] x:\dir\subdir\Test\TestComponent.cshtml) - MyComponent
|
Component - (55:2,0 [15] x:\dir\subdir\Test\TestComponent.cshtml) - MyComponent
|
||||||
MarkupBlock - - \n<SomeComponent></SomeComponent>
|
HtmlContent - (70:2,15 [2] x:\dir\subdir\Test\TestComponent.cshtml)
|
||||||
|
IntermediateToken - (70:2,15 [2] x:\dir\subdir\Test\TestComponent.cshtml) - Html - \n
|
||||||
|
MarkupElement - (72:3,0 [17] x:\dir\subdir\Test\TestComponent.cshtml) - SomeComponent
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,35 @@
|
||||||
|
// <auto-generated/>
|
||||||
|
#pragma warning disable 1591
|
||||||
|
namespace Test
|
||||||
|
{
|
||||||
|
#line hidden
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using Microsoft.AspNetCore.Components;
|
||||||
|
public class TestComponent : Microsoft.AspNetCore.Components.ComponentBase
|
||||||
|
{
|
||||||
|
#pragma warning disable 1998
|
||||||
|
protected override void BuildRenderTree(Microsoft.AspNetCore.Components.RenderTree.RenderTreeBuilder builder)
|
||||||
|
{
|
||||||
|
builder.OpenComponent<Test.MyComponent>(0);
|
||||||
|
builder.CloseComponent();
|
||||||
|
builder.AddMarkupContent(1, "\r\n<mycomponent></mycomponent>\r\n");
|
||||||
|
builder.OpenComponent<Test.MyComponent>(2);
|
||||||
|
builder.AddAttribute(3, "intproperty", "1");
|
||||||
|
builder.AddAttribute(4, "BoolProperty", Microsoft.AspNetCore.Components.RuntimeHelpers.TypeCheck<System.Boolean>(
|
||||||
|
#nullable restore
|
||||||
|
#line 3 "x:\dir\subdir\Test\TestComponent.cshtml"
|
||||||
|
true
|
||||||
|
|
||||||
|
#line default
|
||||||
|
#line hidden
|
||||||
|
#nullable disable
|
||||||
|
));
|
||||||
|
builder.CloseComponent();
|
||||||
|
}
|
||||||
|
#pragma warning restore 1998
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#pragma warning restore 1591
|
||||||
|
|
@ -0,0 +1,17 @@
|
||||||
|
Document -
|
||||||
|
NamespaceDeclaration - - Test
|
||||||
|
UsingDirective - (3:1,1 [14] ) - System
|
||||||
|
UsingDirective - (18:2,1 [34] ) - System.Collections.Generic
|
||||||
|
UsingDirective - (53:3,1 [19] ) - System.Linq
|
||||||
|
UsingDirective - (73:4,1 [30] ) - System.Threading.Tasks
|
||||||
|
UsingDirective - (104:5,1 [39] ) - Microsoft.AspNetCore.Components
|
||||||
|
ClassDeclaration - - public - TestComponent - Microsoft.AspNetCore.Components.ComponentBase -
|
||||||
|
MethodDeclaration - - protected override - void - BuildRenderTree
|
||||||
|
Component - (0:0,0 [15] x:\dir\subdir\Test\TestComponent.cshtml) - MyComponent
|
||||||
|
MarkupBlock - - \n<mycomponent></mycomponent>\n
|
||||||
|
Component - (34:2,0 [51] x:\dir\subdir\Test\TestComponent.cshtml) - MyComponent
|
||||||
|
ComponentAttribute - - intproperty - AttributeStructure.SingleQuotes
|
||||||
|
HtmlContent - (60:2,26 [1] x:\dir\subdir\Test\TestComponent.cshtml)
|
||||||
|
IntermediateToken - (60:2,26 [1] x:\dir\subdir\Test\TestComponent.cshtml) - Html - 1
|
||||||
|
ComponentAttribute - (77:2,43 [4] x:\dir\subdir\Test\TestComponent.cshtml) - BoolProperty - AttributeStructure.SingleQuotes
|
||||||
|
IntermediateToken - (77:2,43 [4] x:\dir\subdir\Test\TestComponent.cshtml) - CSharp - true
|
||||||
|
|
@ -0,0 +1,43 @@
|
||||||
|
// <auto-generated/>
|
||||||
|
#pragma warning disable 1591
|
||||||
|
namespace Test
|
||||||
|
{
|
||||||
|
#line hidden
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using Microsoft.AspNetCore.Components;
|
||||||
|
public class TestComponent : Microsoft.AspNetCore.Components.ComponentBase
|
||||||
|
{
|
||||||
|
#pragma warning disable 1998
|
||||||
|
protected override void BuildRenderTree(Microsoft.AspNetCore.Components.RenderTree.RenderTreeBuilder builder)
|
||||||
|
{
|
||||||
|
builder.OpenComponent<Test.MyComponent>(0);
|
||||||
|
builder.AddAttribute(1, "IntProperty", Microsoft.AspNetCore.Components.RuntimeHelpers.TypeCheck<System.Int32>(
|
||||||
|
#nullable restore
|
||||||
|
#line 1 "x:\dir\subdir\Test\TestComponent.cshtml"
|
||||||
|
1
|
||||||
|
|
||||||
|
#line default
|
||||||
|
#line hidden
|
||||||
|
#nullable disable
|
||||||
|
));
|
||||||
|
builder.CloseComponent();
|
||||||
|
builder.AddMarkupContent(2, "\r\n");
|
||||||
|
builder.OpenComponent<Test.Mycomponent>(3);
|
||||||
|
builder.AddAttribute(4, "IntProperty", Microsoft.AspNetCore.Components.RuntimeHelpers.TypeCheck<System.Int32>(
|
||||||
|
#nullable restore
|
||||||
|
#line 2 "x:\dir\subdir\Test\TestComponent.cshtml"
|
||||||
|
2
|
||||||
|
|
||||||
|
#line default
|
||||||
|
#line hidden
|
||||||
|
#nullable disable
|
||||||
|
));
|
||||||
|
builder.CloseComponent();
|
||||||
|
}
|
||||||
|
#pragma warning restore 1998
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#pragma warning restore 1591
|
||||||
|
|
@ -0,0 +1,17 @@
|
||||||
|
Document -
|
||||||
|
NamespaceDeclaration - - Test
|
||||||
|
UsingDirective - (3:1,1 [14] ) - System
|
||||||
|
UsingDirective - (18:2,1 [34] ) - System.Collections.Generic
|
||||||
|
UsingDirective - (53:3,1 [19] ) - System.Linq
|
||||||
|
UsingDirective - (73:4,1 [30] ) - System.Threading.Tasks
|
||||||
|
UsingDirective - (104:5,1 [39] ) - Microsoft.AspNetCore.Components
|
||||||
|
ClassDeclaration - - public - TestComponent - Microsoft.AspNetCore.Components.ComponentBase -
|
||||||
|
MethodDeclaration - - protected override - void - BuildRenderTree
|
||||||
|
Component - (0:0,0 [31] x:\dir\subdir\Test\TestComponent.cshtml) - MyComponent
|
||||||
|
ComponentAttribute - (26:0,26 [1] x:\dir\subdir\Test\TestComponent.cshtml) - IntProperty - AttributeStructure.SingleQuotes
|
||||||
|
IntermediateToken - (26:0,26 [1] x:\dir\subdir\Test\TestComponent.cshtml) - CSharp - 1
|
||||||
|
HtmlContent - (31:0,31 [2] x:\dir\subdir\Test\TestComponent.cshtml)
|
||||||
|
IntermediateToken - (31:0,31 [2] x:\dir\subdir\Test\TestComponent.cshtml) - Html - \n
|
||||||
|
Component - (33:1,0 [31] x:\dir\subdir\Test\TestComponent.cshtml) - Mycomponent
|
||||||
|
ComponentAttribute - (59:1,26 [1] x:\dir\subdir\Test\TestComponent.cshtml) - IntProperty - AttributeStructure.SingleQuotes
|
||||||
|
IntermediateToken - (59:1,26 [1] x:\dir\subdir\Test\TestComponent.cshtml) - CSharp - 2
|
||||||
|
|
@ -0,0 +1,47 @@
|
||||||
|
// <auto-generated/>
|
||||||
|
#pragma warning disable 1591
|
||||||
|
namespace Test
|
||||||
|
{
|
||||||
|
#line hidden
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using Microsoft.AspNetCore.Components;
|
||||||
|
public class TestComponent : Microsoft.AspNetCore.Components.ComponentBase
|
||||||
|
{
|
||||||
|
#pragma warning disable 1998
|
||||||
|
protected override void BuildRenderTree(Microsoft.AspNetCore.Components.RenderTree.RenderTreeBuilder builder)
|
||||||
|
{
|
||||||
|
builder.OpenElement(0, "div");
|
||||||
|
builder.AddMarkupContent(1, "\r\n ");
|
||||||
|
builder.OpenElement(2, "input");
|
||||||
|
builder.AddAttribute(3, "type", "text");
|
||||||
|
builder.AddAttribute(4, "Value", "17");
|
||||||
|
builder.AddAttribute(5, "value", Microsoft.AspNetCore.Components.BindMethods.GetValue(
|
||||||
|
#nullable restore
|
||||||
|
#line 2 "x:\dir\subdir\Test\TestComponent.cshtml"
|
||||||
|
text
|
||||||
|
|
||||||
|
#line default
|
||||||
|
#line hidden
|
||||||
|
#nullable disable
|
||||||
|
));
|
||||||
|
builder.AddAttribute(6, "onchange", Microsoft.AspNetCore.Components.EventCallback.Factory.CreateBinder(this, __value => text = __value, text));
|
||||||
|
builder.SetUpdatesAttributeName("value");
|
||||||
|
builder.CloseElement();
|
||||||
|
builder.AddMarkupContent(7, "\r\n");
|
||||||
|
builder.CloseElement();
|
||||||
|
}
|
||||||
|
#pragma warning restore 1998
|
||||||
|
#nullable restore
|
||||||
|
#line 4 "x:\dir\subdir\Test\TestComponent.cshtml"
|
||||||
|
|
||||||
|
private string text = "hi";
|
||||||
|
|
||||||
|
#line default
|
||||||
|
#line hidden
|
||||||
|
#nullable disable
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#pragma warning restore 1591
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
x:\dir\subdir\Test\TestComponent.cshtml(2,3): Error RZ10008: The attribute 'Value' is used two or more times for this element. Attributes must be unique (case-insensitive). The attribute 'Value' is used by the '@bind' directive attribute.
|
||||||
|
|
@ -0,0 +1,33 @@
|
||||||
|
Document -
|
||||||
|
NamespaceDeclaration - - Test
|
||||||
|
UsingDirective - (3:1,1 [14] ) - System
|
||||||
|
UsingDirective - (18:2,1 [34] ) - System.Collections.Generic
|
||||||
|
UsingDirective - (53:3,1 [19] ) - System.Linq
|
||||||
|
UsingDirective - (73:4,1 [30] ) - System.Threading.Tasks
|
||||||
|
UsingDirective - (104:5,1 [39] ) - Microsoft.AspNetCore.Components
|
||||||
|
ClassDeclaration - - public - TestComponent - Microsoft.AspNetCore.Components.ComponentBase -
|
||||||
|
MethodDeclaration - - protected override - void - BuildRenderTree
|
||||||
|
MarkupElement - (0:0,0 [69] x:\dir\subdir\Test\TestComponent.cshtml) - div
|
||||||
|
HtmlContent - (5:0,5 [4] x:\dir\subdir\Test\TestComponent.cshtml)
|
||||||
|
IntermediateToken - (5:0,5 [4] x:\dir\subdir\Test\TestComponent.cshtml) - Html - \n
|
||||||
|
MarkupElement - (9:1,2 [52] x:\dir\subdir\Test\TestComponent.cshtml) - input
|
||||||
|
HtmlAttribute - - type=" - "
|
||||||
|
HtmlAttributeValue - (22:1,15 [4] x:\dir\subdir\Test\TestComponent.cshtml) -
|
||||||
|
IntermediateToken - (22:1,15 [4] x:\dir\subdir\Test\TestComponent.cshtml) - Html - text
|
||||||
|
HtmlAttribute - - Value=" - "
|
||||||
|
HtmlAttributeValue - (35:1,28 [2] x:\dir\subdir\Test\TestComponent.cshtml) -
|
||||||
|
IntermediateToken - (35:1,28 [2] x:\dir\subdir\Test\TestComponent.cshtml) - Html - 17
|
||||||
|
HtmlAttribute - (46:1,39 [5] x:\dir\subdir\Test\TestComponent.cshtml) - value=" - "
|
||||||
|
CSharpExpressionAttributeValue - -
|
||||||
|
IntermediateToken - - CSharp - Microsoft.AspNetCore.Components.BindMethods.GetValue(
|
||||||
|
IntermediateToken - (47:1,40 [4] x:\dir\subdir\Test\TestComponent.cshtml) - CSharp - text
|
||||||
|
IntermediateToken - - CSharp - )
|
||||||
|
HtmlAttribute - (46:1,39 [5] x:\dir\subdir\Test\TestComponent.cshtml) - onchange=" - "
|
||||||
|
CSharpExpressionAttributeValue - -
|
||||||
|
IntermediateToken - - CSharp - Microsoft.AspNetCore.Components.EventCallback.Factory.CreateBinder(this, __value => text = __value,
|
||||||
|
IntermediateToken - - CSharp - text
|
||||||
|
IntermediateToken - - CSharp - )
|
||||||
|
HtmlContent - (61:1,54 [2] x:\dir\subdir\Test\TestComponent.cshtml)
|
||||||
|
IntermediateToken - (61:1,54 [2] x:\dir\subdir\Test\TestComponent.cshtml) - Html - \n
|
||||||
|
CSharpCode - (83:3,12 [35] x:\dir\subdir\Test\TestComponent.cshtml)
|
||||||
|
IntermediateToken - (83:3,12 [35] x:\dir\subdir\Test\TestComponent.cshtml) - CSharp - \n private string text = "hi";\n
|
||||||
|
|
@ -0,0 +1,9 @@
|
||||||
|
Source Location: (83:3,12 [35] x:\dir\subdir\Test\TestComponent.cshtml)
|
||||||
|
|
|
||||||
|
private string text = "hi";
|
||||||
|
|
|
||||||
|
Generated Location: (1504:38,12 [35] )
|
||||||
|
|
|
||||||
|
private string text = "hi";
|
||||||
|
|
|
||||||
|
|
||||||
|
|
@ -0,0 +1,21 @@
|
||||||
|
// <auto-generated/>
|
||||||
|
#pragma warning disable 1591
|
||||||
|
namespace Test
|
||||||
|
{
|
||||||
|
#line hidden
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using Microsoft.AspNetCore.Components;
|
||||||
|
public class TestComponent : Microsoft.AspNetCore.Components.ComponentBase
|
||||||
|
{
|
||||||
|
#pragma warning disable 1998
|
||||||
|
protected override void BuildRenderTree(Microsoft.AspNetCore.Components.RenderTree.RenderTreeBuilder builder)
|
||||||
|
{
|
||||||
|
builder.AddMarkupContent(0, "<NotAComponent></NotAComponent>\r\n<DefinitelyNotAComponent></DefinitelyNotAComponent>");
|
||||||
|
}
|
||||||
|
#pragma warning restore 1998
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#pragma warning restore 1591
|
||||||
|
|
@ -0,0 +1,10 @@
|
||||||
|
Document -
|
||||||
|
NamespaceDeclaration - - Test
|
||||||
|
UsingDirective - (3:1,1 [14] ) - System
|
||||||
|
UsingDirective - (18:2,1 [34] ) - System.Collections.Generic
|
||||||
|
UsingDirective - (53:3,1 [19] ) - System.Linq
|
||||||
|
UsingDirective - (73:4,1 [30] ) - System.Threading.Tasks
|
||||||
|
UsingDirective - (104:5,1 [39] ) - Microsoft.AspNetCore.Components
|
||||||
|
ClassDeclaration - - public - TestComponent - Microsoft.AspNetCore.Components.ComponentBase -
|
||||||
|
MethodDeclaration - - protected override - void - BuildRenderTree
|
||||||
|
MarkupBlock - - <NotAComponent></NotAComponent>\n<DefinitelyNotAComponent></DefinitelyNotAComponent>
|
||||||
|
|
@ -0,0 +1,29 @@
|
||||||
|
// <auto-generated/>
|
||||||
|
#pragma warning disable 1591
|
||||||
|
namespace Test
|
||||||
|
{
|
||||||
|
#line hidden
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using Microsoft.AspNetCore.Components;
|
||||||
|
public class TestComponent : Microsoft.AspNetCore.Components.ComponentBase
|
||||||
|
{
|
||||||
|
#pragma warning disable 1998
|
||||||
|
protected override void BuildRenderTree(Microsoft.AspNetCore.Components.RenderTree.RenderTreeBuilder builder)
|
||||||
|
{
|
||||||
|
builder.AddMarkupContent(0, "<elem attributebefore=\"before\" @KEY=\"someObject\" attributeafter=\"after\">Hello</elem>");
|
||||||
|
}
|
||||||
|
#pragma warning restore 1998
|
||||||
|
#nullable restore
|
||||||
|
#line 3 "x:\dir\subdir\Test\TestComponent.cshtml"
|
||||||
|
|
||||||
|
private object someObject = new object();
|
||||||
|
|
||||||
|
#line default
|
||||||
|
#line hidden
|
||||||
|
#nullable disable
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#pragma warning restore 1591
|
||||||
|
|
@ -0,0 +1,12 @@
|
||||||
|
Document -
|
||||||
|
NamespaceDeclaration - - Test
|
||||||
|
UsingDirective - (3:1,1 [14] ) - System
|
||||||
|
UsingDirective - (18:2,1 [34] ) - System.Collections.Generic
|
||||||
|
UsingDirective - (53:3,1 [19] ) - System.Linq
|
||||||
|
UsingDirective - (73:4,1 [30] ) - System.Threading.Tasks
|
||||||
|
UsingDirective - (104:5,1 [39] ) - Microsoft.AspNetCore.Components
|
||||||
|
ClassDeclaration - - public - TestComponent - Microsoft.AspNetCore.Components.ComponentBase -
|
||||||
|
MethodDeclaration - - protected override - void - BuildRenderTree
|
||||||
|
MarkupBlock - - <elem attributebefore="before" @KEY="someObject" attributeafter="after">Hello</elem>
|
||||||
|
CSharpCode - (95:2,7 [49] x:\dir\subdir\Test\TestComponent.cshtml)
|
||||||
|
IntermediateToken - (95:2,7 [49] x:\dir\subdir\Test\TestComponent.cshtml) - CSharp - \n private object someObject = new object();\n
|
||||||
|
|
@ -0,0 +1,9 @@
|
||||||
|
Source Location: (95:2,7 [49] x:\dir\subdir\Test\TestComponent.cshtml)
|
||||||
|
|
|
||||||
|
private object someObject = new object();
|
||||||
|
|
|
||||||
|
Generated Location: (767:20,7 [49] )
|
||||||
|
|
|
||||||
|
private object someObject = new object();
|
||||||
|
|
|
||||||
|
|
||||||
|
|
@ -0,0 +1,21 @@
|
||||||
|
// <auto-generated/>
|
||||||
|
#pragma warning disable 1591
|
||||||
|
namespace Test
|
||||||
|
{
|
||||||
|
#line hidden
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using Microsoft.AspNetCore.Components;
|
||||||
|
public class TestComponent : Microsoft.AspNetCore.Components.ComponentBase
|
||||||
|
{
|
||||||
|
#pragma warning disable 1998
|
||||||
|
protected override void BuildRenderTree(Microsoft.AspNetCore.Components.RenderTree.RenderTreeBuilder builder)
|
||||||
|
{
|
||||||
|
builder.AddMarkupContent(0, "<elem attributebefore=\"before\" @rEF=\"myElem\" attributeafter=\"after\">Hello</elem>");
|
||||||
|
}
|
||||||
|
#pragma warning restore 1998
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#pragma warning restore 1591
|
||||||
|
|
@ -0,0 +1,10 @@
|
||||||
|
Document -
|
||||||
|
NamespaceDeclaration - - Test
|
||||||
|
UsingDirective - (3:1,1 [14] ) - System
|
||||||
|
UsingDirective - (18:2,1 [34] ) - System.Collections.Generic
|
||||||
|
UsingDirective - (53:3,1 [19] ) - System.Linq
|
||||||
|
UsingDirective - (73:4,1 [30] ) - System.Threading.Tasks
|
||||||
|
UsingDirective - (104:5,1 [39] ) - Microsoft.AspNetCore.Components
|
||||||
|
ClassDeclaration - - public - TestComponent - Microsoft.AspNetCore.Components.ComponentBase -
|
||||||
|
MethodDeclaration - - protected override - void - BuildRenderTree
|
||||||
|
MarkupBlock - - <elem attributebefore="before" @rEF="myElem" attributeafter="after">Hello</elem>
|
||||||
|
|
@ -0,0 +1,29 @@
|
||||||
|
// <auto-generated/>
|
||||||
|
#pragma warning disable 1591
|
||||||
|
namespace Test
|
||||||
|
{
|
||||||
|
#line hidden
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using Microsoft.AspNetCore.Components;
|
||||||
|
public class TestComponent : Microsoft.AspNetCore.Components.ComponentBase
|
||||||
|
{
|
||||||
|
#pragma warning disable 1998
|
||||||
|
protected override void BuildRenderTree(Microsoft.AspNetCore.Components.RenderTree.RenderTreeBuilder builder)
|
||||||
|
{
|
||||||
|
builder.AddMarkupContent(0, "<elem attributebefore=\"before\" @ATTributes=\"someAttributes\" attributeafter=\"after\">Hello</elem>");
|
||||||
|
}
|
||||||
|
#pragma warning restore 1998
|
||||||
|
#nullable restore
|
||||||
|
#line 3 "x:\dir\subdir\Test\TestComponent.cshtml"
|
||||||
|
|
||||||
|
private Dictionary<string, object> someAttributes = new Dictionary<string, object>();
|
||||||
|
|
||||||
|
#line default
|
||||||
|
#line hidden
|
||||||
|
#nullable disable
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#pragma warning restore 1591
|
||||||
|
|
@ -0,0 +1,12 @@
|
||||||
|
Document -
|
||||||
|
NamespaceDeclaration - - Test
|
||||||
|
UsingDirective - (3:1,1 [14] ) - System
|
||||||
|
UsingDirective - (18:2,1 [34] ) - System.Collections.Generic
|
||||||
|
UsingDirective - (53:3,1 [19] ) - System.Linq
|
||||||
|
UsingDirective - (73:4,1 [30] ) - System.Threading.Tasks
|
||||||
|
UsingDirective - (104:5,1 [39] ) - Microsoft.AspNetCore.Components
|
||||||
|
ClassDeclaration - - public - TestComponent - Microsoft.AspNetCore.Components.ComponentBase -
|
||||||
|
MethodDeclaration - - protected override - void - BuildRenderTree
|
||||||
|
MarkupBlock - - <elem attributebefore="before" @ATTributes="someAttributes" attributeafter="after">Hello</elem>
|
||||||
|
CSharpCode - (106:2,7 [93] x:\dir\subdir\Test\TestComponent.cshtml)
|
||||||
|
IntermediateToken - (106:2,7 [93] x:\dir\subdir\Test\TestComponent.cshtml) - CSharp - \n private Dictionary<string, object> someAttributes = new Dictionary<string, object>();\n
|
||||||
|
|
@ -0,0 +1,9 @@
|
||||||
|
Source Location: (106:2,7 [93] x:\dir\subdir\Test\TestComponent.cshtml)
|
||||||
|
|
|
||||||
|
private Dictionary<string, object> someAttributes = new Dictionary<string, object>();
|
||||||
|
|
|
||||||
|
Generated Location: (778:20,7 [93] )
|
||||||
|
|
|
||||||
|
private Dictionary<string, object> someAttributes = new Dictionary<string, object>();
|
||||||
|
|
|
||||||
|
|
||||||
|
|
@ -0,0 +1,30 @@
|
||||||
|
// <auto-generated/>
|
||||||
|
#pragma warning disable 1591
|
||||||
|
namespace Test
|
||||||
|
{
|
||||||
|
#line hidden
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using Microsoft.AspNetCore.Components;
|
||||||
|
public class TestComponent : Microsoft.AspNetCore.Components.ComponentBase
|
||||||
|
{
|
||||||
|
#pragma warning disable 1998
|
||||||
|
protected override void BuildRenderTree(Microsoft.AspNetCore.Components.RenderTree.RenderTreeBuilder builder)
|
||||||
|
{
|
||||||
|
builder.AddMarkupContent(0, "<input @onCLICK=\"OnClick\">");
|
||||||
|
}
|
||||||
|
#pragma warning restore 1998
|
||||||
|
#nullable restore
|
||||||
|
#line 2 "x:\dir\subdir\Test\TestComponent.cshtml"
|
||||||
|
|
||||||
|
void OnClick(UIMouseEventArgs e) {
|
||||||
|
}
|
||||||
|
|
||||||
|
#line default
|
||||||
|
#line hidden
|
||||||
|
#nullable disable
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#pragma warning restore 1591
|
||||||
|
|
@ -0,0 +1,12 @@
|
||||||
|
Document -
|
||||||
|
NamespaceDeclaration - - Test
|
||||||
|
UsingDirective - (3:1,1 [14] ) - System
|
||||||
|
UsingDirective - (18:2,1 [34] ) - System.Collections.Generic
|
||||||
|
UsingDirective - (53:3,1 [19] ) - System.Linq
|
||||||
|
UsingDirective - (73:4,1 [30] ) - System.Threading.Tasks
|
||||||
|
UsingDirective - (104:5,1 [39] ) - Microsoft.AspNetCore.Components
|
||||||
|
ClassDeclaration - - public - TestComponent - Microsoft.AspNetCore.Components.ComponentBase -
|
||||||
|
MethodDeclaration - - protected override - void - BuildRenderTree
|
||||||
|
MarkupBlock - - <input @onCLICK="OnClick">
|
||||||
|
CSharpCode - (37:1,7 [49] x:\dir\subdir\Test\TestComponent.cshtml)
|
||||||
|
IntermediateToken - (37:1,7 [49] x:\dir\subdir\Test\TestComponent.cshtml) - CSharp - \n void OnClick(UIMouseEventArgs e) {\n }\n
|
||||||
|
|
@ -0,0 +1,11 @@
|
||||||
|
Source Location: (37:1,7 [49] x:\dir\subdir\Test\TestComponent.cshtml)
|
||||||
|
|
|
||||||
|
void OnClick(UIMouseEventArgs e) {
|
||||||
|
}
|
||||||
|
|
|
||||||
|
Generated Location: (705:20,7 [49] )
|
||||||
|
|
|
||||||
|
void OnClick(UIMouseEventArgs e) {
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
Markup span at (10:0,10 [3] ) (Accepts:Any) - Parent: Tag block at (0:0,0 [28] )
|
||||||
|
|
@ -0,0 +1,31 @@
|
||||||
|
RazorDocument - [0..28)::28 - [<p class='foo' catchAll></p>]
|
||||||
|
MarkupBlock - [0..28)::28
|
||||||
|
MarkupTagHelperElement - [0..28)::28 - p[StartTagAndEndTag] - pTagHelper - catchAllTagHelper
|
||||||
|
MarkupTagHelperStartTag - [0..24)::24 - [<p class='foo' catchAll>] - Gen<Markup> - SpanEditHandler;Accepts:Any
|
||||||
|
OpenAngle;[<];
|
||||||
|
Text;[p];
|
||||||
|
MarkupTagHelperAttribute - [2..14)::12 - class - SingleQuotes - Unbound - [ class='foo']
|
||||||
|
MarkupTextLiteral - [2..3)::1 - [ ] - Gen<Markup> - SpanEditHandler;Accepts:Any
|
||||||
|
Whitespace;[ ];
|
||||||
|
MarkupTextLiteral - [3..8)::5 - [class] - Gen<Markup> - SpanEditHandler;Accepts:Any
|
||||||
|
Text;[class];
|
||||||
|
Equals;[=];
|
||||||
|
MarkupTextLiteral - [9..10)::1 - ['] - Gen<None> - SpanEditHandler;Accepts:Any
|
||||||
|
SingleQuote;['];
|
||||||
|
MarkupTagHelperAttributeValue - [10..13)::3
|
||||||
|
MarkupLiteralAttributeValue - [10..13)::3 - [foo]
|
||||||
|
MarkupTextLiteral - [10..13)::3 - [foo] - Gen<Markup> - SpanEditHandler;Accepts:Any
|
||||||
|
Text;[foo];
|
||||||
|
MarkupTextLiteral - [13..14)::1 - ['] - Gen<None> - SpanEditHandler;Accepts:Any
|
||||||
|
SingleQuote;['];
|
||||||
|
MarkupMinimizedTagHelperAttribute - [14..23)::9 - catchAll - Minimized - Unbound - [ catchAll]
|
||||||
|
MarkupTextLiteral - [14..15)::1 - [ ] - Gen<Markup> - SpanEditHandler;Accepts:Any
|
||||||
|
Whitespace;[ ];
|
||||||
|
MarkupTextLiteral - [15..23)::8 - [catchAll] - Gen<Markup> - SpanEditHandler;Accepts:Any
|
||||||
|
Text;[catchAll];
|
||||||
|
CloseAngle;[>];
|
||||||
|
MarkupTagHelperEndTag - [24..28)::4 - [</p>]
|
||||||
|
OpenAngle;[<];
|
||||||
|
ForwardSlash;[/];
|
||||||
|
Text;[p];
|
||||||
|
CloseAngle;[>];
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
TagHelper span at (0:0,0 [28] ) - pTagHelper - catchAllTagHelper
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
Markup span at (10:0,10 [3] ) (Accepts:Any) - Parent: Tag block at (0:0,0 [28] )
|
||||||
|
|
@ -0,0 +1,31 @@
|
||||||
|
RazorDocument - [0..28)::28 - [<p CLASS='foo' CATCHAll></p>]
|
||||||
|
MarkupBlock - [0..28)::28
|
||||||
|
MarkupTagHelperElement - [0..28)::28 - p[StartTagAndEndTag] - catchAllTagHelper
|
||||||
|
MarkupTagHelperStartTag - [0..24)::24 - [<p CLASS='foo' CATCHAll>] - Gen<Markup> - SpanEditHandler;Accepts:Any
|
||||||
|
OpenAngle;[<];
|
||||||
|
Text;[p];
|
||||||
|
MarkupTagHelperAttribute - [2..14)::12 - CLASS - SingleQuotes - Unbound - [ CLASS='foo']
|
||||||
|
MarkupTextLiteral - [2..3)::1 - [ ] - Gen<Markup> - SpanEditHandler;Accepts:Any
|
||||||
|
Whitespace;[ ];
|
||||||
|
MarkupTextLiteral - [3..8)::5 - [CLASS] - Gen<Markup> - SpanEditHandler;Accepts:Any
|
||||||
|
Text;[CLASS];
|
||||||
|
Equals;[=];
|
||||||
|
MarkupTextLiteral - [9..10)::1 - ['] - Gen<None> - SpanEditHandler;Accepts:Any
|
||||||
|
SingleQuote;['];
|
||||||
|
MarkupTagHelperAttributeValue - [10..13)::3
|
||||||
|
MarkupLiteralAttributeValue - [10..13)::3 - [foo]
|
||||||
|
MarkupTextLiteral - [10..13)::3 - [foo] - Gen<Markup> - SpanEditHandler;Accepts:Any
|
||||||
|
Text;[foo];
|
||||||
|
MarkupTextLiteral - [13..14)::1 - ['] - Gen<None> - SpanEditHandler;Accepts:Any
|
||||||
|
SingleQuote;['];
|
||||||
|
MarkupMinimizedTagHelperAttribute - [14..23)::9 - CATCHAll - Minimized - Unbound - [ CATCHAll]
|
||||||
|
MarkupTextLiteral - [14..15)::1 - [ ] - Gen<Markup> - SpanEditHandler;Accepts:Any
|
||||||
|
Whitespace;[ ];
|
||||||
|
MarkupTextLiteral - [15..23)::8 - [CATCHAll] - Gen<Markup> - SpanEditHandler;Accepts:Any
|
||||||
|
Text;[CATCHAll];
|
||||||
|
CloseAngle;[>];
|
||||||
|
MarkupTagHelperEndTag - [24..28)::4 - [</p>]
|
||||||
|
OpenAngle;[<];
|
||||||
|
ForwardSlash;[/];
|
||||||
|
Text;[p];
|
||||||
|
CloseAngle;[>];
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue