diff --git a/src/Microsoft.AspNetCore.Razor.Language/DefaultRazorTagHelperBinderPhase.cs b/src/Microsoft.AspNetCore.Razor.Language/DefaultRazorTagHelperBinderPhase.cs index b75ab9335c..7d9dfb7c6e 100644 --- a/src/Microsoft.AspNetCore.Razor.Language/DefaultRazorTagHelperBinderPhase.cs +++ b/src/Microsoft.AspNetCore.Razor.Language/DefaultRazorTagHelperBinderPhase.cs @@ -58,9 +58,8 @@ namespace Microsoft.AspNetCore.Razor.Language var root = syntaxTree.Root; root = rewriter.Rewrite(root, errorSink); - // Temporary code while we're still using legacy diagnostics in the SyntaxTree. var errorList = new List(); - errorList.AddRange(errorSink.Errors.Select(error => RazorDiagnostic.Create(error))); + errorList.AddRange(errorSink.Errors); errorList.AddRange(descriptors.SelectMany(d => d.GetAllDiagnostics())); diff --git a/src/Microsoft.AspNetCore.Razor.Language/Legacy/CSharpCodeParser.cs b/src/Microsoft.AspNetCore.Razor.Language/Legacy/CSharpCodeParser.cs index 6390d1ffc4..8a720db36b 100644 --- a/src/Microsoft.AspNetCore.Razor.Language/Legacy/CSharpCodeParser.cs +++ b/src/Microsoft.AspNetCore.Razor.Language/Legacy/CSharpCodeParser.cs @@ -1840,8 +1840,7 @@ namespace Microsoft.AspNetCore.Razor.Language.Legacy { if (directiveErrorSink.Errors.Count > 0) { - var directiveDiagnostics = directiveErrorSink.Errors.Select(error => RazorDiagnostic.Create(error)); - directiveChunkGenerator.Diagnostics.AddRange(directiveDiagnostics); + directiveChunkGenerator.Diagnostics.AddRange(directiveErrorSink.Errors); } Context.ErrorSink = savedErrorSink; @@ -2223,17 +2222,7 @@ namespace Microsoft.AspNetCore.Razor.Language.Legacy } finally { - List directiveErrors; - if (directiveErrorSink.Errors.Count > 0) - { - directiveErrors = directiveErrorSink.Errors.Select(RazorDiagnostic.Create).ToList(); - } - else - { - directiveErrors = new List(); - } - - Span.ChunkGenerator = chunkGeneratorFactory(directiveValue, directiveErrors); + Span.ChunkGenerator = chunkGeneratorFactory(directiveValue, directiveErrorSink.Errors.ToList()); Context.ErrorSink = savedErrorSink; } diff --git a/src/Microsoft.AspNetCore.Razor.Language/Legacy/CSharpLanguageCharacteristics.cs b/src/Microsoft.AspNetCore.Razor.Language/Legacy/CSharpLanguageCharacteristics.cs index 7a251cc7e9..b52d48cbf8 100644 --- a/src/Microsoft.AspNetCore.Razor.Language/Legacy/CSharpLanguageCharacteristics.cs +++ b/src/Microsoft.AspNetCore.Razor.Language/Legacy/CSharpLanguageCharacteristics.cs @@ -74,7 +74,7 @@ namespace Microsoft.AspNetCore.Razor.Language.Legacy return new CSharpTokenizer(source); } - protected override CSharpSymbol CreateSymbol(string content, CSharpSymbolType type, IReadOnlyList errors) + protected override CSharpSymbol CreateSymbol(string content, CSharpSymbolType type, IReadOnlyList errors) { return new CSharpSymbol(content, type, errors); } diff --git a/src/Microsoft.AspNetCore.Razor.Language/Legacy/CSharpSymbol.cs b/src/Microsoft.AspNetCore.Razor.Language/Legacy/CSharpSymbol.cs index cbb8cc9a21..21cd94915d 100644 --- a/src/Microsoft.AspNetCore.Razor.Language/Legacy/CSharpSymbol.cs +++ b/src/Microsoft.AspNetCore.Razor.Language/Legacy/CSharpSymbol.cs @@ -11,7 +11,7 @@ namespace Microsoft.AspNetCore.Razor.Language.Legacy public CSharpSymbol( string content, CSharpSymbolType type) - : base(content, type, RazorError.EmptyArray) + : base(content, type, RazorDiagnostic.EmptyArray) { if (content == null) { @@ -22,7 +22,7 @@ namespace Microsoft.AspNetCore.Razor.Language.Legacy public CSharpSymbol( string content, CSharpSymbolType type, - IReadOnlyList errors) + IReadOnlyList errors) : base(content, type, errors) { if (content == null) diff --git a/src/Microsoft.AspNetCore.Razor.Language/Legacy/CSharpTokenizer.cs b/src/Microsoft.AspNetCore.Razor.Language/Legacy/CSharpTokenizer.cs index eb08ba8e2e..0b7816f2f6 100644 --- a/src/Microsoft.AspNetCore.Razor.Language/Legacy/CSharpTokenizer.cs +++ b/src/Microsoft.AspNetCore.Razor.Language/Legacy/CSharpTokenizer.cs @@ -343,7 +343,7 @@ namespace Microsoft.AspNetCore.Razor.Language.Legacy return base.GetSymbolContent(type); } - protected override CSharpSymbol CreateSymbol(string content, CSharpSymbolType type, IReadOnlyList errors) + protected override CSharpSymbol CreateSymbol(string content, CSharpSymbolType type, IReadOnlyList errors) { return new CSharpSymbol(content, type, errors); } @@ -547,10 +547,11 @@ namespace Microsoft.AspNetCore.Razor.Language.Legacy else if (EndOfFile) { CurrentErrors.Add( - new RazorError( - LegacyResources.ParseError_Unterminated_String_Literal, - CurrentStart, - length: 1 /* end of file */)); + RazorDiagnostic.Create( + new RazorError( + LegacyResources.ParseError_Unterminated_String_Literal, + CurrentStart, + length: 1 /* end of file */))); } return Transition(CSharpTokenizerState.Data, EndSymbol(CSharpSymbolType.StringLiteral)); } @@ -576,10 +577,10 @@ namespace Microsoft.AspNetCore.Razor.Language.Legacy else if (EndOfFile || ParserHelpers.IsNewLine(CurrentCharacter)) { CurrentErrors.Add( - new RazorError( + RazorDiagnostic.Create(new RazorError( LegacyResources.ParseError_Unterminated_String_Literal, CurrentStart, - length: 1 /* " */)); + length: 1 /* " */))); } else { @@ -595,10 +596,10 @@ namespace Microsoft.AspNetCore.Razor.Language.Legacy if (EndOfFile) { CurrentErrors.Add( - new RazorError( + RazorDiagnostic.Create(new RazorError( LegacyResources.ParseError_BlockComment_Not_Terminated, CurrentStart, - length: 1 /* end of file */)); + length: 1 /* end of file */))); return Transition(CSharpTokenizerState.Data, EndSymbol(CSharpSymbolType.Comment)); } if (CurrentCharacter == '*') diff --git a/src/Microsoft.AspNetCore.Razor.Language/Legacy/ErrorSink.cs b/src/Microsoft.AspNetCore.Razor.Language/Legacy/ErrorSink.cs index c8219dda5a..93cce597f1 100644 --- a/src/Microsoft.AspNetCore.Razor.Language/Legacy/ErrorSink.cs +++ b/src/Microsoft.AspNetCore.Razor.Language/Legacy/ErrorSink.cs @@ -6,40 +6,41 @@ using System.Collections.Generic; namespace Microsoft.AspNetCore.Razor.Language.Legacy { /// - /// Used to manage s encountered during the Razor parsing phase. + /// Used to manage s encountered during the Razor parsing phase. /// internal class ErrorSink { - private readonly List _errors; + private readonly List _errors; /// /// Instantiates a new instance of . /// public ErrorSink() { - _errors = new List(); + _errors = new List(); } /// - /// s collected. + /// s collected. /// - public IReadOnlyList Errors => _errors; + public IReadOnlyList Errors => _errors; /// /// Tracks the given . /// /// The to track. - public void OnError(RazorError error) =>_errors.Add(error); + public void OnError(RazorDiagnostic error) =>_errors.Add(error); /// - /// Creates and tracks a new . + /// Creates and tracks a new . /// /// of the error. /// A message describing the error. /// The length of the error. + /// This is temporary. It will be removed once we get rid of . public void OnError(SourceLocation location, string message, int length) { - var error = new RazorError(message, location, length); + var error = RazorDiagnostic.Create(new RazorError(message, location, length)); _errors.Add(error); } } diff --git a/src/Microsoft.AspNetCore.Razor.Language/Legacy/HtmlLanguageCharacteristics.cs b/src/Microsoft.AspNetCore.Razor.Language/Legacy/HtmlLanguageCharacteristics.cs index 70d7929736..1021a6ac90 100644 --- a/src/Microsoft.AspNetCore.Razor.Language/Legacy/HtmlLanguageCharacteristics.cs +++ b/src/Microsoft.AspNetCore.Razor.Language/Legacy/HtmlLanguageCharacteristics.cs @@ -119,7 +119,7 @@ namespace Microsoft.AspNetCore.Razor.Language.Legacy } } - protected override HtmlSymbol CreateSymbol(string content, HtmlSymbolType type, IReadOnlyList errors) + protected override HtmlSymbol CreateSymbol(string content, HtmlSymbolType type, IReadOnlyList errors) { return new HtmlSymbol(content, type, errors); } diff --git a/src/Microsoft.AspNetCore.Razor.Language/Legacy/HtmlSymbol.cs b/src/Microsoft.AspNetCore.Razor.Language/Legacy/HtmlSymbol.cs index da308bcc14..f41f323d1d 100644 --- a/src/Microsoft.AspNetCore.Razor.Language/Legacy/HtmlSymbol.cs +++ b/src/Microsoft.AspNetCore.Razor.Language/Legacy/HtmlSymbol.cs @@ -9,7 +9,7 @@ namespace Microsoft.AspNetCore.Razor.Language.Legacy internal class HtmlSymbol : SymbolBase { public HtmlSymbol(string content, HtmlSymbolType type) - : base(content, type, RazorError.EmptyArray) + : base(content, type, RazorDiagnostic.EmptyArray) { if (content == null) { @@ -20,7 +20,7 @@ namespace Microsoft.AspNetCore.Razor.Language.Legacy public HtmlSymbol( string content, HtmlSymbolType type, - IReadOnlyList errors) + IReadOnlyList errors) : base(content, type, errors) { if (content == null) diff --git a/src/Microsoft.AspNetCore.Razor.Language/Legacy/HtmlTokenizer.cs b/src/Microsoft.AspNetCore.Razor.Language/Legacy/HtmlTokenizer.cs index 0b3af2d407..df9671d1b7 100644 --- a/src/Microsoft.AspNetCore.Razor.Language/Legacy/HtmlTokenizer.cs +++ b/src/Microsoft.AspNetCore.Razor.Language/Legacy/HtmlTokenizer.cs @@ -36,7 +36,7 @@ namespace Microsoft.AspNetCore.Razor.Language.Legacy get { return HtmlSymbolType.RazorCommentStar; } } - protected override HtmlSymbol CreateSymbol(string content, HtmlSymbolType type, IReadOnlyList errors) + protected override HtmlSymbol CreateSymbol(string content, HtmlSymbolType type, IReadOnlyList errors) { return new HtmlSymbol(content, type, errors); } diff --git a/src/Microsoft.AspNetCore.Razor.Language/Legacy/LanguageCharacteristics.cs b/src/Microsoft.AspNetCore.Razor.Language/Legacy/LanguageCharacteristics.cs index 02b5864458..23d5f037d0 100644 --- a/src/Microsoft.AspNetCore.Razor.Language/Legacy/LanguageCharacteristics.cs +++ b/src/Microsoft.AspNetCore.Razor.Language/Legacy/LanguageCharacteristics.cs @@ -86,7 +86,7 @@ namespace Microsoft.AspNetCore.Razor.Language.Legacy public virtual Tuple SplitSymbol(TSymbol symbol, int splitAt, TSymbolType leftType) { - var left = CreateSymbol(symbol.Content.Substring(0, splitAt), leftType, RazorError.EmptyArray); + var left = CreateSymbol(symbol.Content.Substring(0, splitAt), leftType, RazorDiagnostic.EmptyArray); TSymbol right = null; if (splitAt < symbol.Content.Length) @@ -104,6 +104,6 @@ namespace Microsoft.AspNetCore.Razor.Language.Legacy return type == KnownSymbolType.Unknown || !Equals(GetKnownSymbolType(type), GetKnownSymbolType(KnownSymbolType.Unknown)); } - protected abstract TSymbol CreateSymbol(string content, TSymbolType type, IReadOnlyList errors); + protected abstract TSymbol CreateSymbol(string content, TSymbolType type, IReadOnlyList errors); } } diff --git a/src/Microsoft.AspNetCore.Razor.Language/Legacy/RazorParser.cs b/src/Microsoft.AspNetCore.Razor.Language/Legacy/RazorParser.cs index 2823ffd69d..8e79907b8c 100644 --- a/src/Microsoft.AspNetCore.Razor.Language/Legacy/RazorParser.cs +++ b/src/Microsoft.AspNetCore.Razor.Language/Legacy/RazorParser.cs @@ -43,8 +43,7 @@ namespace Microsoft.AspNetCore.Razor.Language.Legacy var root = context.Builder.Build(); - // Temporary code while we're still using legacy diagnostics in the SyntaxTree. - var diagnostics = context.ErrorSink.Errors.Select(error => RazorDiagnostic.Create(error)); + var diagnostics = context.ErrorSink.Errors; return RazorSyntaxTree.Create(root, source, diagnostics, Options); } diff --git a/src/Microsoft.AspNetCore.Razor.Language/Legacy/SymbolBase.cs b/src/Microsoft.AspNetCore.Razor.Language/Legacy/SymbolBase.cs index b0a772e85d..c1caebb988 100644 --- a/src/Microsoft.AspNetCore.Razor.Language/Legacy/SymbolBase.cs +++ b/src/Microsoft.AspNetCore.Razor.Language/Legacy/SymbolBase.cs @@ -13,7 +13,7 @@ namespace Microsoft.AspNetCore.Razor.Language.Legacy protected SymbolBase( string content, TType type, - IReadOnlyList errors) + IReadOnlyList errors) { if (content == null) { @@ -27,7 +27,7 @@ namespace Microsoft.AspNetCore.Razor.Language.Legacy public Span Parent { get; set; } - public IReadOnlyList Errors { get; } + public IReadOnlyList Errors { get; } public string Content { get; } diff --git a/src/Microsoft.AspNetCore.Razor.Language/Legacy/Tokenizer.cs b/src/Microsoft.AspNetCore.Razor.Language/Legacy/Tokenizer.cs index fdc0deb956..465754f6d5 100644 --- a/src/Microsoft.AspNetCore.Razor.Language/Legacy/Tokenizer.cs +++ b/src/Microsoft.AspNetCore.Razor.Language/Legacy/Tokenizer.cs @@ -21,11 +21,11 @@ namespace Microsoft.AspNetCore.Razor.Language.Legacy Source = source; Buffer = new StringBuilder(); - CurrentErrors = new List(); + CurrentErrors = new List(); StartSymbol(); } - protected List CurrentErrors { get; } + protected List CurrentErrors { get; } protected abstract int StartState { get; } @@ -64,7 +64,7 @@ namespace Microsoft.AspNetCore.Razor.Language.Legacy public SourceLocation CurrentStart { get; private set; } - protected abstract TSymbol CreateSymbol(string content, TSymbolType type, IReadOnlyList errors); + protected abstract TSymbol CreateSymbol(string content, TSymbolType type, IReadOnlyList errors); protected abstract StateResult Dispatch(); @@ -205,7 +205,7 @@ namespace Microsoft.AspNetCore.Razor.Language.Legacy if (HaveContent) { // Perf: Don't allocate a new errors array unless necessary. - var errors = CurrentErrors.Count == 0 ? RazorError.EmptyArray : new RazorError[CurrentErrors.Count]; + var errors = CurrentErrors.Count == 0 ? RazorDiagnostic.EmptyArray : new RazorDiagnostic[CurrentErrors.Count]; for (var i = 0; i < CurrentErrors.Count; i++) { errors[i] = CurrentErrors[i]; diff --git a/src/Microsoft.AspNetCore.Razor.Language/RazorDiagnostic.cs b/src/Microsoft.AspNetCore.Razor.Language/RazorDiagnostic.cs index 0edb2fdf93..e5dbac402a 100644 --- a/src/Microsoft.AspNetCore.Razor.Language/RazorDiagnostic.cs +++ b/src/Microsoft.AspNetCore.Razor.Language/RazorDiagnostic.cs @@ -8,6 +8,7 @@ namespace Microsoft.AspNetCore.Razor.Language { public abstract class RazorDiagnostic : IEquatable, IFormattable { + internal static readonly RazorDiagnostic[] EmptyArray = new RazorDiagnostic[0]; internal static readonly object[] EmptyArgs = new object[0]; public abstract string Id { get; } diff --git a/test/Microsoft.AspNetCore.Razor.Language.Test/Legacy/TagHelperRewritingTestBase.cs b/test/Microsoft.AspNetCore.Razor.Language.Test/Legacy/TagHelperRewritingTestBase.cs index 8471aaf23a..6be1b3a5cb 100644 --- a/test/Microsoft.AspNetCore.Razor.Language.Test/Legacy/TagHelperRewritingTestBase.cs +++ b/test/Microsoft.AspNetCore.Razor.Language.Test/Legacy/TagHelperRewritingTestBase.cs @@ -63,7 +63,7 @@ namespace Microsoft.AspNetCore.Razor.Language.Legacy var actualTree = parseTreeRewriter.Rewrite(syntaxTree.Root, errorSink); - var allErrors = syntaxTree.Diagnostics.Concat(errorSink.Errors.Select(error => RazorDiagnostic.Create(error))); + var allErrors = syntaxTree.Diagnostics.Concat(errorSink.Errors); var actualErrors = allErrors .OrderBy(error => error.Span.AbsoluteIndex) .ToList(); diff --git a/test/Microsoft.AspNetCore.Razor.Language.Test/Legacy/TokenizerLookaheadTest.cs b/test/Microsoft.AspNetCore.Razor.Language.Test/Legacy/TokenizerLookaheadTest.cs index d8b98becfd..6abd70ad3e 100644 --- a/test/Microsoft.AspNetCore.Razor.Language.Test/Legacy/TokenizerLookaheadTest.cs +++ b/test/Microsoft.AspNetCore.Razor.Language.Test/Legacy/TokenizerLookaheadTest.cs @@ -106,7 +106,7 @@ namespace Microsoft.AspNetCore.Razor.Language.Legacy protected override CSharpSymbol CreateSymbol( string content, CSharpSymbolType type, - IReadOnlyList errors) + IReadOnlyList errors) { throw new NotImplementedException(); } diff --git a/test/Microsoft.AspNetCore.Razor.Test.Common/Language/Legacy/ParserTestBase.cs b/test/Microsoft.AspNetCore.Razor.Test.Common/Language/Legacy/ParserTestBase.cs index f91e4c65aa..3e25f1c0d7 100644 --- a/test/Microsoft.AspNetCore.Razor.Test.Common/Language/Legacy/ParserTestBase.cs +++ b/test/Microsoft.AspNetCore.Razor.Test.Common/Language/Legacy/ParserTestBase.cs @@ -60,7 +60,7 @@ namespace Microsoft.AspNetCore.Razor.Language.Legacy markupParser.ParseDocument(); var root = context.Builder.Build(); - var diagnostics = context.ErrorSink.Errors?.Select(error => RazorDiagnostic.Create(error)); + var diagnostics = context.ErrorSink.Errors; var codeDocument = RazorCodeDocument.Create(source); @@ -90,7 +90,7 @@ namespace Microsoft.AspNetCore.Razor.Language.Legacy parser.ParseBlock(); var root = context.Builder.Build(); - var diagnostics = context.ErrorSink.Errors?.Select(error => RazorDiagnostic.Create(error)); + var diagnostics = context.ErrorSink.Errors; return RazorSyntaxTree.Create(root, source, diagnostics, options); } @@ -120,7 +120,7 @@ namespace Microsoft.AspNetCore.Razor.Language.Legacy parser.ParseBlock(); var root = context.Builder.Build(); - var diagnostics = context.ErrorSink.Errors?.Select(error => RazorDiagnostic.Create(error)); + var diagnostics = context.ErrorSink.Errors; return RazorSyntaxTree.Create(root, source, diagnostics, options); }