public override void AddError(string path, string message, string lineText, CodeSpan location, int errorCode, Severity severity) { // keep the error list under 100 items which is a reasonable number and avoids spending too much time on error processing if (Errors.Count < 100) { int startIndex, endIndex; if (location.StartLine > 0 && location.EndLine > 0) { // get the error bounds to create a span pointing to the error text so it can be navigated to later on by the Error List startIndex = textBuffer.CurrentSnapshot.GetLineFromLineNumber(location.StartLine - 1).Start.Position + location.StartColumn; endIndex = textBuffer.CurrentSnapshot.GetLineFromLineNumber(location.EndLine - 1).Start.Position + location.EndColumn; if (startIndex < endIndex && endIndex < textBuffer.CurrentSnapshot.GetText().Length) { // add the error with all its necessary information Errors.Add(new ValidationError(new Span(startIndex, endIndex - startIndex), message, GetSeverity(severity), ValidationErrorType.Syntactic)); if (Errors.Count == 100) { // add a friendly error telling the user the maximum number of errors has been reached Errors.Add(new ValidationError(new Span(startIndex, endIndex - startIndex), "The maximum number of errors or warnings has been reached.")); } } } } }
/// <summary> /// Converts between an IronPython's CodeSpan and the new text editor's Span /// </summary> /// <param name="location"></param> /// <returns></returns> private Span ConvertCodeSpanToSpan(CodeSpan location) { if (location.StartLine > 0 && location.EndLine > 0) { var startIndex = snapshot.GetLineFromLineNumber(location.StartLine - 1).Start.Position + location.StartColumn - 1; var endIndex = snapshot.GetLineFromLineNumber(location.EndLine - 1).Start.Position + location.EndColumn - 1; if (startIndex != -1 && startIndex < endIndex && endIndex < snapshot.GetText().Length) { return new Span(startIndex, endIndex - startIndex); } } return new Span(); }
public override void AddError(string path, string message, string lineText, CodeSpan span, int errorCode, Severity severity) { if (severity == Severity.Warning) { throw Ops.SyntaxWarning(message, path, span.StartLine, span.StartColumn, lineText, severity); } switch (errorCode & ErrorCodes.ErrorMask) { case ErrorCodes.IndentationError: throw Ops.IndentationError(message, path, span.StartLine, span.StartColumn, lineText, errorCode, severity); case ErrorCodes.TabError: throw Ops.TabError(message, path, span.StartLine, span.StartColumn, lineText, errorCode, severity); default: throw Ops.SyntaxError(message, path, span.StartLine, span.StartColumn, lineText, errorCode, severity); } }
private static TextSpan CodeToText(Hosting.CodeSpan code) { TextSpan span = new TextSpan(); if (code.StartLine > 0) { span.iStartLine = code.StartLine - 1; } span.iStartIndex = code.StartColumn; if (code.EndLine > 0) { span.iEndLine = code.EndLine - 1; } span.iEndIndex = code.EndColumn; return(span); }
public override void AddError(string path, string message, string lineText, Hosting.CodeSpan location, int errorCode, Hosting.Severity severity) { TextSpan span = new TextSpan(); if (location.StartLine > 0) { span.iStartLine = location.StartLine - 1; } span.iStartIndex = location.StartColumn; if (location.EndLine > 0) { span.iEndLine = location.EndLine - 1; } span.iEndIndex = location.EndColumn; authoringSink.AddError(path, message, span, Severity.Error); }
public void SetLoc(CodeSpan span) { SetLoc(null, span); }
public override void QualifyName(Hosting.CodeSpan selector, Hosting.CodeSpan span, string name) { authoringSink.QualifyName(CodeToText(selector), CodeToText(span), name); }
public virtual void StartParameters(CodeSpan context) { }
public virtual void QualifyName(CodeSpan selector, CodeSpan span, string name) { }
public virtual void MatchTriple(CodeSpan start, CodeSpan middle, CodeSpan end, int priority) { }
public override void AddError(string path, string message, string lineText, CodeSpan location, int errorCode, Severity severity) { string sev; if (severity >= Severity.Error) sev = "Error"; else if (severity >= Severity.Warning) sev = "Warning"; else sev = "Message"; throw new CompilerException(string.Format("{0}:{1} at {2} {3}:{4}-{5}:{6}", sev, message, path, location.StartLine, location.StartColumn, location.EndLine, location.EndColumn)); }
public virtual void MatchPair(CodeSpan start, CodeSpan end, int priority) { }
public virtual void AddError(string path, string message, CodeSpan location, int errorCode, Severity severity) { AddError(path, message, String.Empty, location.startLine, location.startColumn, location.endLine, location.endColumn, errorCode, severity); }
public override void EndParameters(Hosting.CodeSpan span) { authoringSink.EndParameters(CodeToText(span)); }
public override void MatchPair(Hosting.CodeSpan span, Hosting.CodeSpan endContext, int priority) { authoringSink.MatchPair(CodeToText(span), CodeToText(endContext), priority); }
internal void SetLoc(ExternalLineMapping externalInfo, CodeSpan span) { start.Line = span.StartLine; start.Column = span.StartColumn; end.Line = span.EndLine; end.Column = span.EndColumn; externalMapping = externalInfo; }
public virtual void EndParameters(CodeSpan span) { }
public override void StartName(Hosting.CodeSpan span, string name) { authoringSink.StartName(CodeToText(span), name); }
public abstract void AddError(string path, string message, string lineText, CodeSpan location, int errorCode, Severity severity);
public virtual void NextParameter(CodeSpan span) { }
public virtual void StartName(CodeSpan span, string name) { }
public override void AddError(string path, string message, string lineText, CodeSpan span, int errorCode, Severity severity) { if (severity >= Severity.Error) errors++; else if (severity >= Severity.Warning) warnings++; else messages++; if (sink != null) { sink.AddError(path, message, lineText, span, errorCode, severity); } else { throw new CompilerException(string.Format("{0}:{1} at {2} {3}:{4}-{5}:{6}", severity, message, path, span.StartLine, span.StartColumn, span.EndLine, span.EndColumn)); } }
public override void MatchPair(CodeSpan opening, CodeSpan closing, int priority) { Matches.Add(new System.Tuple<SnapshotSpan, SnapshotSpan>(new SnapshotSpan(snapshot, ConvertCodeSpanToSpan(opening)), new SnapshotSpan(snapshot, ConvertCodeSpanToSpan(closing)))); }
public override void AddError(string path, string message, string lineText, CodeSpan span, int errorCode, Severity severity) { }
public override void NextParameter(Hosting.CodeSpan span) { authoringSink.NextParameter(CodeToText(span)); }