public DiagnosticResult WithLineOffset(int offset) { if (Spans.IsEmpty) { return(this); } var result = this; var spansBuilder = result.Spans.ToBuilder(); for (var i = 0; i < result.Spans.Length; i++) { var newStartLinePosition = new LinePosition(result.Spans[i].Span.StartLinePosition.Line + offset, result.Spans[i].Span.StartLinePosition.Character); var newEndLinePosition = new LinePosition(result.Spans[i].Span.EndLinePosition.Line + offset, result.Spans[i].Span.EndLinePosition.Character); spansBuilder[i] = new DiagnosticLocation(new FileLinePositionSpan(result.Spans[i].Span.Path, newStartLinePosition, newEndLinePosition), result.Spans[i].Options); } return(new DiagnosticResult( spans: spansBuilder.MoveToImmutable(), suppressMessage: _suppressMessage, message: _message, severity: Severity, options: Options, id: Id, messageFormat: MessageFormat, messageArguments: MessageArguments)); }
public DiagnosticResult WithDefaultPath(string path) { if (Spans.IsEmpty) { return(this); } var spans = Spans.ToBuilder(); for (var i = 0; i < spans.Count; i++) { if (spans[i].Options.HasFlag(DiagnosticLocationOptions.InterpretAsMarkupKey)) { // Markup keys have a predefined syntax that requires empty paths. continue; } if (spans[i].Span.Path == string.Empty) { spans[i] = new DiagnosticLocation(new FileLinePositionSpan(path, spans[i].Span.Span), spans[i].Options); } } return(new DiagnosticResult( spans: spans.MoveToImmutable(), suppressMessage: _suppressMessage, message: _message, severity: Severity, options: Options, id: Id, messageFormat: MessageFormat, messageArguments: MessageArguments)); }
public DiagnosticResult WithDefaultPath(string path) { if (Spans.IsEmpty) { return(this); } var spans = Spans.ToBuilder(); for (var i = 0; i < spans.Count; i++) { if (spans[i].Span.Path == string.Empty) { spans[i] = new DiagnosticLocation(new FileLinePositionSpan(path, spans[i].Span.Span), spans[i].Options); } } return(new DiagnosticResult( spans: spans.MoveToImmutable(), suppressMessage: _suppressMessage, message: _message, severity: Severity, id: Id, messageFormat: MessageFormat, messageArguments: MessageArguments)); }
internal DiagnosticResult WithAppliedMarkupLocations(ImmutableDictionary <string, FileLinePositionSpan> markupLocations) { if (Spans.IsEmpty) { return(this); } var verifier = new DefaultVerifier(); var spans = Spans.ToBuilder(); for (var i = 0; i < spans.Count; i++) { if (!spans[i].Options.HasFlag(DiagnosticLocationOptions.InterpretAsMarkupKey)) { continue; } var index = spans[i].Span.StartLinePosition.Character; var expected = new FileLinePositionSpan(path: string.Empty, new LinePosition(0, index), new LinePosition(0, index)); if (!spans[i].Span.Equals(expected)) { verifier.Equal(expected, spans[i].Span); } if (!markupLocations.TryGetValue("#" + index, out var location)) { throw new InvalidOperationException($"The markup location '#{index}' was not found in the input."); } spans[i] = new DiagnosticLocation(location, spans[i].Options & ~DiagnosticLocationOptions.InterpretAsMarkupKey); } return(new DiagnosticResult( spans: spans.MoveToImmutable(), suppressMessage: _suppressMessage, message: _message, severity: Severity, options: Options, id: Id, messageFormat: MessageFormat, messageArguments: MessageArguments)); }