Show full lines in error messages in Ycicle
This commit is contained in:
parent
16d50b3311
commit
7beeb713c9
|
@ -93,6 +93,13 @@ namespace Upsilon
|
||||||
return $"({linePos.Line},{linePos.Pos})";
|
return $"({linePos.Line},{linePos.Pos})";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public string LineBeforeError()
|
||||||
|
{
|
||||||
|
var linePos = Diagnostics.ScriptString.GetLinePosition(Span.Start);
|
||||||
|
var lineIndex = Diagnostics.ScriptString.GetLineStartPos(linePos.Line);
|
||||||
|
return Diagnostics.ScriptString.GetSpan(lineIndex, linePos.Pos);
|
||||||
|
}
|
||||||
|
|
||||||
public string BeforeError(int i = 5)
|
public string BeforeError(int i = 5)
|
||||||
{
|
{
|
||||||
return Diagnostics.ScriptString.GetSpan(Span.Start - i, i);
|
return Diagnostics.ScriptString.GetSpan(Span.Start - i, i);
|
||||||
|
@ -103,6 +110,14 @@ namespace Upsilon
|
||||||
return Diagnostics.ScriptString.GetSpan(Span);
|
return Diagnostics.ScriptString.GetSpan(Span);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public string LineAfterError()
|
||||||
|
{
|
||||||
|
var linePos = Diagnostics.ScriptString.GetLinePosition(Span.Start);
|
||||||
|
var lineInfo = Diagnostics.ScriptString.GetLineInfo(linePos.Line);
|
||||||
|
|
||||||
|
return Diagnostics.ScriptString.GetSpan(Span.End, lineInfo.End - Span.End);
|
||||||
|
}
|
||||||
|
|
||||||
public string AfterError(int i = 5)
|
public string AfterError(int i = 5)
|
||||||
{
|
{
|
||||||
return Diagnostics.ScriptString.GetSpan(Span.Start + Span.Length, i);
|
return Diagnostics.ScriptString.GetSpan(Span.Start + Span.Length, i);
|
||||||
|
|
|
@ -28,9 +28,9 @@ namespace Upsilon.Parser
|
||||||
|
|
||||||
private SyntaxToken Get(int offset)
|
private SyntaxToken Get(int offset)
|
||||||
{
|
{
|
||||||
if (_position + offset >= _tokens.Length)
|
return _position + offset >= _tokens.Length
|
||||||
return new SyntaxToken(SyntaxKind.EndOfFile, _position + offset, "\0", null);
|
? new SyntaxToken(SyntaxKind.EndOfFile, _position + offset, "\0", null)
|
||||||
return _tokens[_position + offset];
|
: _tokens[_position + offset];
|
||||||
}
|
}
|
||||||
|
|
||||||
private SyntaxToken NextToken()
|
private SyntaxToken NextToken()
|
||||||
|
|
|
@ -60,6 +60,16 @@ namespace Upsilon.Text
|
||||||
return (min, newPos);
|
return (min, newPos);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public int GetLineStartPos(int lineIndex)
|
||||||
|
{
|
||||||
|
return _lines[lineIndex].Start;
|
||||||
|
}
|
||||||
|
|
||||||
|
public SourceTextLine GetLineInfo(int lineIndex)
|
||||||
|
{
|
||||||
|
return _lines[lineIndex];
|
||||||
|
}
|
||||||
|
|
||||||
public string GetSpan(TextSpan span)
|
public string GetSpan(TextSpan span)
|
||||||
{
|
{
|
||||||
return GetSpan(span.Start, span.Length);
|
return GetSpan(span.Start, span.Length);
|
||||||
|
|
|
@ -66,13 +66,13 @@ namespace Ycicle
|
||||||
|
|
||||||
Console.ForegroundColor = ConsoleColor.Gray;
|
Console.ForegroundColor = ConsoleColor.Gray;
|
||||||
Console.Write(message.GetDiagnosticPosition() + " ");
|
Console.Write(message.GetDiagnosticPosition() + " ");
|
||||||
Console.Write(message.BeforeError());
|
Console.Write(message.LineBeforeError());
|
||||||
|
|
||||||
Console.ForegroundColor = ConsoleColor.Red;
|
Console.ForegroundColor = ConsoleColor.Red;
|
||||||
Console.Write(message.AtError());
|
Console.Write(message.AtError());
|
||||||
|
|
||||||
Console.ForegroundColor = ConsoleColor.Gray;
|
Console.ForegroundColor = ConsoleColor.Gray;
|
||||||
Console.Write(message.AfterError());
|
Console.Write(message.LineAfterError());
|
||||||
Console.WriteLine();
|
Console.WriteLine();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue