Make ErrorSink and Tokenizer depend on RazorDiagnostic instead of RazorError
This commit is contained in:
parent
6bbd063e26
commit
085838e83a
|
|
@ -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<RazorDiagnostic>();
|
||||
errorList.AddRange(errorSink.Errors.Select(error => RazorDiagnostic.Create(error)));
|
||||
errorList.AddRange(errorSink.Errors);
|
||||
|
||||
errorList.AddRange(descriptors.SelectMany(d => d.GetAllDiagnostics()));
|
||||
|
||||
|
|
|
|||
|
|
@ -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<RazorDiagnostic> directiveErrors;
|
||||
if (directiveErrorSink.Errors.Count > 0)
|
||||
{
|
||||
directiveErrors = directiveErrorSink.Errors.Select(RazorDiagnostic.Create).ToList();
|
||||
}
|
||||
else
|
||||
{
|
||||
directiveErrors = new List<RazorDiagnostic>();
|
||||
}
|
||||
|
||||
Span.ChunkGenerator = chunkGeneratorFactory(directiveValue, directiveErrors);
|
||||
Span.ChunkGenerator = chunkGeneratorFactory(directiveValue, directiveErrorSink.Errors.ToList());
|
||||
Context.ErrorSink = savedErrorSink;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -74,7 +74,7 @@ namespace Microsoft.AspNetCore.Razor.Language.Legacy
|
|||
return new CSharpTokenizer(source);
|
||||
}
|
||||
|
||||
protected override CSharpSymbol CreateSymbol(string content, CSharpSymbolType type, IReadOnlyList<RazorError> errors)
|
||||
protected override CSharpSymbol CreateSymbol(string content, CSharpSymbolType type, IReadOnlyList<RazorDiagnostic> errors)
|
||||
{
|
||||
return new CSharpSymbol(content, type, errors);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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<RazorError> errors)
|
||||
IReadOnlyList<RazorDiagnostic> errors)
|
||||
: base(content, type, errors)
|
||||
{
|
||||
if (content == null)
|
||||
|
|
|
|||
|
|
@ -343,7 +343,7 @@ namespace Microsoft.AspNetCore.Razor.Language.Legacy
|
|||
return base.GetSymbolContent(type);
|
||||
}
|
||||
|
||||
protected override CSharpSymbol CreateSymbol(string content, CSharpSymbolType type, IReadOnlyList<RazorError> errors)
|
||||
protected override CSharpSymbol CreateSymbol(string content, CSharpSymbolType type, IReadOnlyList<RazorDiagnostic> 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 == '*')
|
||||
|
|
|
|||
|
|
@ -6,40 +6,41 @@ using System.Collections.Generic;
|
|||
namespace Microsoft.AspNetCore.Razor.Language.Legacy
|
||||
{
|
||||
/// <summary>
|
||||
/// Used to manage <see cref="RazorError"/>s encountered during the Razor parsing phase.
|
||||
/// Used to manage <see cref="RazorDiagnostic"/>s encountered during the Razor parsing phase.
|
||||
/// </summary>
|
||||
internal class ErrorSink
|
||||
{
|
||||
private readonly List<RazorError> _errors;
|
||||
private readonly List<RazorDiagnostic> _errors;
|
||||
|
||||
/// <summary>
|
||||
/// Instantiates a new instance of <see cref="ErrorSink"/>.
|
||||
/// </summary>
|
||||
public ErrorSink()
|
||||
{
|
||||
_errors = new List<RazorError>();
|
||||
_errors = new List<RazorDiagnostic>();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// <see cref="RazorError"/>s collected.
|
||||
/// <see cref="RazorDiagnostic"/>s collected.
|
||||
/// </summary>
|
||||
public IReadOnlyList<RazorError> Errors => _errors;
|
||||
public IReadOnlyList<RazorDiagnostic> Errors => _errors;
|
||||
|
||||
/// <summary>
|
||||
/// Tracks the given <paramref name="error"/>.
|
||||
/// </summary>
|
||||
/// <param name="error">The <see cref="RazorError"/> to track.</param>
|
||||
public void OnError(RazorError error) =>_errors.Add(error);
|
||||
public void OnError(RazorDiagnostic error) =>_errors.Add(error);
|
||||
|
||||
/// <summary>
|
||||
/// Creates and tracks a new <see cref="RazorError"/>.
|
||||
/// Creates and tracks a new <see cref="RazorDiagnostic"/>.
|
||||
/// </summary>
|
||||
/// <param name="location"><see cref="SourceLocation"/> of the error.</param>
|
||||
/// <param name="message">A message describing the error.</param>
|
||||
/// <param name="length">The length of the error.</param>
|
||||
/// <remarks>This is temporary. It will be removed once we get rid of <see cref="LegacyRazorDiagnostic"/>.</remarks>
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -119,7 +119,7 @@ namespace Microsoft.AspNetCore.Razor.Language.Legacy
|
|||
}
|
||||
}
|
||||
|
||||
protected override HtmlSymbol CreateSymbol(string content, HtmlSymbolType type, IReadOnlyList<RazorError> errors)
|
||||
protected override HtmlSymbol CreateSymbol(string content, HtmlSymbolType type, IReadOnlyList<RazorDiagnostic> errors)
|
||||
{
|
||||
return new HtmlSymbol(content, type, errors);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -9,7 +9,7 @@ namespace Microsoft.AspNetCore.Razor.Language.Legacy
|
|||
internal class HtmlSymbol : SymbolBase<HtmlSymbolType>
|
||||
{
|
||||
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<RazorError> errors)
|
||||
IReadOnlyList<RazorDiagnostic> errors)
|
||||
: base(content, type, errors)
|
||||
{
|
||||
if (content == null)
|
||||
|
|
|
|||
|
|
@ -36,7 +36,7 @@ namespace Microsoft.AspNetCore.Razor.Language.Legacy
|
|||
get { return HtmlSymbolType.RazorCommentStar; }
|
||||
}
|
||||
|
||||
protected override HtmlSymbol CreateSymbol(string content, HtmlSymbolType type, IReadOnlyList<RazorError> errors)
|
||||
protected override HtmlSymbol CreateSymbol(string content, HtmlSymbolType type, IReadOnlyList<RazorDiagnostic> errors)
|
||||
{
|
||||
return new HtmlSymbol(content, type, errors);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -86,7 +86,7 @@ namespace Microsoft.AspNetCore.Razor.Language.Legacy
|
|||
|
||||
public virtual Tuple<TSymbol, TSymbol> 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<RazorError> errors);
|
||||
protected abstract TSymbol CreateSymbol(string content, TSymbolType type, IReadOnlyList<RazorDiagnostic> errors);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -13,7 +13,7 @@ namespace Microsoft.AspNetCore.Razor.Language.Legacy
|
|||
protected SymbolBase(
|
||||
string content,
|
||||
TType type,
|
||||
IReadOnlyList<RazorError> errors)
|
||||
IReadOnlyList<RazorDiagnostic> errors)
|
||||
{
|
||||
if (content == null)
|
||||
{
|
||||
|
|
@ -27,7 +27,7 @@ namespace Microsoft.AspNetCore.Razor.Language.Legacy
|
|||
|
||||
public Span Parent { get; set; }
|
||||
|
||||
public IReadOnlyList<RazorError> Errors { get; }
|
||||
public IReadOnlyList<RazorDiagnostic> Errors { get; }
|
||||
|
||||
public string Content { get; }
|
||||
|
||||
|
|
|
|||
|
|
@ -21,11 +21,11 @@ namespace Microsoft.AspNetCore.Razor.Language.Legacy
|
|||
|
||||
Source = source;
|
||||
Buffer = new StringBuilder();
|
||||
CurrentErrors = new List<RazorError>();
|
||||
CurrentErrors = new List<RazorDiagnostic>();
|
||||
StartSymbol();
|
||||
}
|
||||
|
||||
protected List<RazorError> CurrentErrors { get; }
|
||||
protected List<RazorDiagnostic> 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<RazorError> errors);
|
||||
protected abstract TSymbol CreateSymbol(string content, TSymbolType type, IReadOnlyList<RazorDiagnostic> 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];
|
||||
|
|
|
|||
|
|
@ -8,6 +8,7 @@ namespace Microsoft.AspNetCore.Razor.Language
|
|||
{
|
||||
public abstract class RazorDiagnostic : IEquatable<RazorDiagnostic>, IFormattable
|
||||
{
|
||||
internal static readonly RazorDiagnostic[] EmptyArray = new RazorDiagnostic[0];
|
||||
internal static readonly object[] EmptyArgs = new object[0];
|
||||
|
||||
public abstract string Id { get; }
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
|
|
|
|||
|
|
@ -106,7 +106,7 @@ namespace Microsoft.AspNetCore.Razor.Language.Legacy
|
|||
protected override CSharpSymbol CreateSymbol(
|
||||
string content,
|
||||
CSharpSymbolType type,
|
||||
IReadOnlyList<RazorError> errors)
|
||||
IReadOnlyList<RazorDiagnostic> errors)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue