Skip to content

Commit f9ff462

Browse files
committed
Update OriginalPositionFor to match mozilla/source-map
Remove check where line and column number of found mapping must match Change line number to be 1-based instead of 0-based
1 parent f43880a commit f9ff462

File tree

3 files changed

+16
-15
lines changed

3 files changed

+16
-15
lines changed

SourceMaps.StackTraces/StackTraceParser.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ public static string ReTrace(SourceMapCollection sourceMaps, string stacktrace,
2828
if (frame.LineNumber == null || frame.ColumnNumber == null)
2929
continue;
3030

31-
var originalPosition = sourceMap?.OriginalPositionFor(frame.LineNumber.Value - 1, frame.ColumnNumber.Value - 1);
31+
var originalPosition = sourceMap?.OriginalPositionFor(frame.LineNumber.Value, frame.ColumnNumber.Value - 1);
3232
if (originalPosition == null)
3333
continue;
3434

SourceMaps.Tests/SourceMapParserTests.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -138,7 +138,7 @@ public void Parse_OriginalPositionFor()
138138
}
139139
};
140140

141-
var pos = map.OriginalPositionFor(2, 2).Value;
141+
var pos = map.OriginalPositionFor(3, 2).Value;
142142
Assert.Equal("foo/bar/bang.coffee", pos.OriginalFileName);
143143
Assert.Equal(1, pos.OriginalLineNumber);
144144
Assert.Equal(1, pos.OriginalColumnNumber);

SourceMaps/SourceMap.cs

Lines changed: 14 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -33,34 +33,35 @@ public sealed class SourceMap
3333
/// Returns the original source, line and column information for the generated
3434
/// source's line and column positions provided.
3535
/// </summary>
36-
/// <param name="generatedLineNumber">The zero-based line number in the generated source, 1-based.</param>
37-
/// <param name="generatedColumnNumber">The zero-based column number in the generated source, 0-based</param>
36+
/// <param name="generatedLineNumber">The one-based line number in the generated source.</param>
37+
/// <param name="generatedColumnNumber">The zero-based column number in the generated source</param>
3838
/// <returns>A struct with the original mappings, or null if no mapping exit for the given line and column number.</returns>
3939
public SourceMapMappingEntry? OriginalPositionFor(int generatedLineNumber, int generatedColumnNumber)
4040
{
4141
if (Mappings == null)
4242
return null;
4343

44-
var index = Mappings.BinarySearch(
45-
new SourceMapMappingEntry(generatedLineNumber, generatedColumnNumber, null, null, null, null),
46-
Comparer<SourceMapMappingEntry>.Create((a, b) =>
47-
{
48-
var lineNumberComparison = a.GeneratedLineNumber.CompareTo(b.GeneratedLineNumber);
49-
if (lineNumberComparison != 0) return lineNumberComparison;
50-
return a.GeneratedColumnNumber.CompareTo(b.GeneratedColumnNumber);
51-
}));
44+
var searchEntry = new SourceMapMappingEntry(generatedLineNumber - 1, generatedColumnNumber, null, null, null, null);
45+
var index = Mappings.BinarySearch(searchEntry, MappingEntryComparer);
5246

5347
if (index < 0)
5448
{
55-
if (~index - 1 >= 0 &&
56-
Mappings[~index - 1].GeneratedLineNumber == generatedLineNumber &&
57-
Mappings[~index - 1].GeneratedColumnNumber == generatedColumnNumber)
49+
if (~index - 1 >= 0)
5850
{
5951
index = ~index - 1;
6052
}
6153
}
6254

6355
return index >= 0 ? Mappings[index] : (SourceMapMappingEntry?)null;
6456
}
57+
58+
private static readonly IComparer<SourceMapMappingEntry> MappingEntryComparer = Comparer<SourceMapMappingEntry>.Create((a, b) =>
59+
{
60+
var lineNumberCompare = a.GeneratedLineNumber.CompareTo(b.GeneratedLineNumber);
61+
if (lineNumberCompare != 0)
62+
return lineNumberCompare;
63+
64+
return a.GeneratedColumnNumber.CompareTo(b.GeneratedColumnNumber);
65+
});
6566
}
6667
}

0 commit comments

Comments
 (0)