Add duplicate directive error for th prefix.
- Regenerated diagnostics for integration tests. - Added a duplicate directive unit test. - Added a new RazorDiagnostic entry in the factory. #942
This commit is contained in:
parent
e70ce98213
commit
05cc4123a7
|
|
@ -1877,9 +1877,28 @@ namespace Microsoft.AspNetCore.Razor.Language.Legacy
|
||||||
|
|
||||||
protected virtual void TagHelperPrefixDirective()
|
protected virtual void TagHelperPrefixDirective()
|
||||||
{
|
{
|
||||||
|
RazorDiagnostic duplicateDiagnostic = null;
|
||||||
|
if (Context.SeenDirectives.Contains(SyntaxConstants.CSharp.TagHelperPrefixKeyword))
|
||||||
|
{
|
||||||
|
// There wil always be at least 1 child because of the `@` transition.
|
||||||
|
var directiveStart = Context.Builder.CurrentBlock.Children.First().Start;
|
||||||
|
var errorLength = /* @ */ 1 + SyntaxConstants.CSharp.TagHelperPrefixKeyword.Length;
|
||||||
|
duplicateDiagnostic = RazorDiagnosticFactory.CreateParsing_DuplicateDirective(
|
||||||
|
SyntaxConstants.CSharp.TagHelperPrefixKeyword,
|
||||||
|
new SourceSpan(directiveStart, errorLength));
|
||||||
|
}
|
||||||
|
|
||||||
TagHelperDirective(
|
TagHelperDirective(
|
||||||
SyntaxConstants.CSharp.TagHelperPrefixKeyword,
|
SyntaxConstants.CSharp.TagHelperPrefixKeyword,
|
||||||
(prefix, errors) => new TagHelperPrefixDirectiveChunkGenerator(prefix, errors));
|
(prefix, errors) =>
|
||||||
|
{
|
||||||
|
if (duplicateDiagnostic != null)
|
||||||
|
{
|
||||||
|
errors.Add(duplicateDiagnostic);
|
||||||
|
}
|
||||||
|
|
||||||
|
return new TagHelperPrefixDirectiveChunkGenerator(prefix, errors);
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
protected virtual void AddTagHelperDirective()
|
protected virtual void AddTagHelperDirective()
|
||||||
|
|
|
||||||
|
|
@ -45,6 +45,16 @@ namespace Microsoft.AspNetCore.Razor.Language
|
||||||
return RazorDiagnostic.Create(CodeTarget_UnsupportedExtension, SourceSpan.Undefined, documentKind, extensionType.Name);
|
return RazorDiagnostic.Create(CodeTarget_UnsupportedExtension, SourceSpan.Undefined, documentKind, extensionType.Name);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
internal static readonly RazorDiagnosticDescriptor Parsing_DuplicateDirective =
|
||||||
|
new RazorDiagnosticDescriptor(
|
||||||
|
$"{DiagnosticPrefix}2001",
|
||||||
|
() => Resources.DuplicateDirective,
|
||||||
|
RazorDiagnosticSeverity.Error);
|
||||||
|
public static RazorDiagnostic CreateParsing_DuplicateDirective(string directive, SourceSpan location)
|
||||||
|
{
|
||||||
|
return RazorDiagnostic.Create(Parsing_DuplicateDirective, location, directive);
|
||||||
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region TagHelper Errors
|
#region TagHelper Errors
|
||||||
|
|
|
||||||
|
|
@ -1113,6 +1113,29 @@ namespace Microsoft.AspNetCore.Razor.Language.Legacy
|
||||||
.Accepts(AcceptedCharactersInternal.None)));
|
.Accepts(AcceptedCharactersInternal.None)));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void TagHelperPrefixDirective_DuplicatesCauseError()
|
||||||
|
{
|
||||||
|
// Arrange
|
||||||
|
var expectedDiagnostic = RazorDiagnosticFactory.CreateParsing_DuplicateDirective(
|
||||||
|
"tagHelperPrefix",
|
||||||
|
new SourceSpan(null, 22 + Environment.NewLine.Length, 1, 0, 16));
|
||||||
|
|
||||||
|
// Act
|
||||||
|
var document = ParseDocument(
|
||||||
|
@"@tagHelperPrefix ""th:""
|
||||||
|
@tagHelperPrefix ""th""",
|
||||||
|
directives: null,
|
||||||
|
designTime: false);
|
||||||
|
|
||||||
|
// Assert
|
||||||
|
var directive = document.Root.Children.OfType<Block>().Last();
|
||||||
|
var erroredSpan = (Span)directive.Children.Last();
|
||||||
|
var chunkGenerator = Assert.IsType<TagHelperPrefixDirectiveChunkGenerator>(erroredSpan.ChunkGenerator);
|
||||||
|
var diagnostic = Assert.Single(chunkGenerator.Diagnostics);
|
||||||
|
Assert.Equal(expectedDiagnostic, diagnostic);
|
||||||
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void TagHelperPrefixDirective_NoValueSucceeds()
|
public void TagHelperPrefixDirective_NoValueSucceeds()
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,9 @@ TestFiles/IntegrationTests/CodeGenerationIntegrationTest/IncompleteDirectives.cs
|
||||||
TestFiles/IntegrationTests/CodeGenerationIntegrationTest/IncompleteDirectives.cshtml(9,18): Error RZ9999: Unterminated string literal. Strings that start with a quotation mark (") must be terminated before the end of the line. However, strings that start with @ and a quotation mark (@") can span multiple lines.
|
TestFiles/IntegrationTests/CodeGenerationIntegrationTest/IncompleteDirectives.cshtml(9,18): Error RZ9999: Unterminated string literal. Strings that start with a quotation mark (") must be terminated before the end of the line. However, strings that start with @ and a quotation mark (@") can span multiple lines.
|
||||||
TestFiles/IntegrationTests/CodeGenerationIntegrationTest/IncompleteDirectives.cshtml(11,2): Error RZ9999: Directive 'tagHelperPrefix' must have a value.
|
TestFiles/IntegrationTests/CodeGenerationIntegrationTest/IncompleteDirectives.cshtml(11,2): Error RZ9999: Directive 'tagHelperPrefix' must have a value.
|
||||||
TestFiles/IntegrationTests/CodeGenerationIntegrationTest/IncompleteDirectives.cshtml(12,2): Error RZ9999: Directive 'tagHelperPrefix' must have a value.
|
TestFiles/IntegrationTests/CodeGenerationIntegrationTest/IncompleteDirectives.cshtml(12,2): Error RZ9999: Directive 'tagHelperPrefix' must have a value.
|
||||||
|
TestFiles/IntegrationTests/CodeGenerationIntegrationTest/IncompleteDirectives.cshtml(12,1): Error RZ2001: The 'tagHelperPrefix' directive may only occur once per document.
|
||||||
TestFiles/IntegrationTests/CodeGenerationIntegrationTest/IncompleteDirectives.cshtml(13,18): Error RZ9999: Unterminated string literal. Strings that start with a quotation mark (") must be terminated before the end of the line. However, strings that start with @ and a quotation mark (@") can span multiple lines.
|
TestFiles/IntegrationTests/CodeGenerationIntegrationTest/IncompleteDirectives.cshtml(13,18): Error RZ9999: Unterminated string literal. Strings that start with a quotation mark (") must be terminated before the end of the line. However, strings that start with @ and a quotation mark (@") can span multiple lines.
|
||||||
|
TestFiles/IntegrationTests/CodeGenerationIntegrationTest/IncompleteDirectives.cshtml(13,1): Error RZ2001: The 'tagHelperPrefix' directive may only occur once per document.
|
||||||
TestFiles/IntegrationTests/CodeGenerationIntegrationTest/IncompleteDirectives.cshtml(15,10): Error RZ9999: The 'inherits' directive expects a type name.
|
TestFiles/IntegrationTests/CodeGenerationIntegrationTest/IncompleteDirectives.cshtml(15,10): Error RZ9999: The 'inherits' directive expects a type name.
|
||||||
TestFiles/IntegrationTests/CodeGenerationIntegrationTest/IncompleteDirectives.cshtml(16,1): Error RZ9999: The 'inherits' directive may only occur once per document.
|
TestFiles/IntegrationTests/CodeGenerationIntegrationTest/IncompleteDirectives.cshtml(16,1): Error RZ9999: The 'inherits' directive may only occur once per document.
|
||||||
TestFiles/IntegrationTests/CodeGenerationIntegrationTest/IncompleteDirectives.cshtml(16,11): Error RZ9999: The 'inherits' directive expects a type name.
|
TestFiles/IntegrationTests/CodeGenerationIntegrationTest/IncompleteDirectives.cshtml(16,11): Error RZ9999: The 'inherits' directive expects a type name.
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,9 @@ TestFiles/IntegrationTests/CodeGenerationIntegrationTest/IncompleteDirectives.cs
|
||||||
TestFiles/IntegrationTests/CodeGenerationIntegrationTest/IncompleteDirectives.cshtml(9,18): Error RZ9999: Unterminated string literal. Strings that start with a quotation mark (") must be terminated before the end of the line. However, strings that start with @ and a quotation mark (@") can span multiple lines.
|
TestFiles/IntegrationTests/CodeGenerationIntegrationTest/IncompleteDirectives.cshtml(9,18): Error RZ9999: Unterminated string literal. Strings that start with a quotation mark (") must be terminated before the end of the line. However, strings that start with @ and a quotation mark (@") can span multiple lines.
|
||||||
TestFiles/IntegrationTests/CodeGenerationIntegrationTest/IncompleteDirectives.cshtml(11,2): Error RZ9999: Directive 'tagHelperPrefix' must have a value.
|
TestFiles/IntegrationTests/CodeGenerationIntegrationTest/IncompleteDirectives.cshtml(11,2): Error RZ9999: Directive 'tagHelperPrefix' must have a value.
|
||||||
TestFiles/IntegrationTests/CodeGenerationIntegrationTest/IncompleteDirectives.cshtml(12,2): Error RZ9999: Directive 'tagHelperPrefix' must have a value.
|
TestFiles/IntegrationTests/CodeGenerationIntegrationTest/IncompleteDirectives.cshtml(12,2): Error RZ9999: Directive 'tagHelperPrefix' must have a value.
|
||||||
|
TestFiles/IntegrationTests/CodeGenerationIntegrationTest/IncompleteDirectives.cshtml(12,1): Error RZ2001: The 'tagHelperPrefix' directive may only occur once per document.
|
||||||
TestFiles/IntegrationTests/CodeGenerationIntegrationTest/IncompleteDirectives.cshtml(13,18): Error RZ9999: Unterminated string literal. Strings that start with a quotation mark (") must be terminated before the end of the line. However, strings that start with @ and a quotation mark (@") can span multiple lines.
|
TestFiles/IntegrationTests/CodeGenerationIntegrationTest/IncompleteDirectives.cshtml(13,18): Error RZ9999: Unterminated string literal. Strings that start with a quotation mark (") must be terminated before the end of the line. However, strings that start with @ and a quotation mark (@") can span multiple lines.
|
||||||
|
TestFiles/IntegrationTests/CodeGenerationIntegrationTest/IncompleteDirectives.cshtml(13,1): Error RZ2001: The 'tagHelperPrefix' directive may only occur once per document.
|
||||||
TestFiles/IntegrationTests/CodeGenerationIntegrationTest/IncompleteDirectives.cshtml(15,10): Error RZ9999: The 'inherits' directive expects a type name.
|
TestFiles/IntegrationTests/CodeGenerationIntegrationTest/IncompleteDirectives.cshtml(15,10): Error RZ9999: The 'inherits' directive expects a type name.
|
||||||
TestFiles/IntegrationTests/CodeGenerationIntegrationTest/IncompleteDirectives.cshtml(16,1): Error RZ9999: The 'inherits' directive may only occur once per document.
|
TestFiles/IntegrationTests/CodeGenerationIntegrationTest/IncompleteDirectives.cshtml(16,1): Error RZ9999: The 'inherits' directive may only occur once per document.
|
||||||
TestFiles/IntegrationTests/CodeGenerationIntegrationTest/IncompleteDirectives.cshtml(16,11): Error RZ9999: The 'inherits' directive expects a type name.
|
TestFiles/IntegrationTests/CodeGenerationIntegrationTest/IncompleteDirectives.cshtml(16,11): Error RZ9999: The 'inherits' directive expects a type name.
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue