Created
October 2, 2020 21:24
-
-
Save nvie/331a70c74faf295f941a3f679ae1db7b to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
export type Range = [number, number] | |
type Position = { | |
offset: number | |
line: number | |
column: number | |
} | |
export type Location = { | |
start: Position | |
end: Position | |
} | |
export function rangeToLocation(input: string, range: Range): Location { | |
let startOffset = range[0] | |
let start: Position = { offset: startOffset, line: 1, column: 1 } | |
let p = 0 | |
while (p < startOffset) { | |
if (input.charCodeAt(p) === 10) { | |
start.line++ | |
start.column = 1 | |
} else { | |
start.column++ | |
} | |
p++ | |
} | |
let endOffset = range[1] | |
let end: Position = { ...start } | |
while (p < endOffset) { | |
if (input.charCodeAt(p) === 10) { | |
end.line++ | |
end.column = 1 | |
} else { | |
end.column++ | |
} | |
p++ | |
} | |
return { start, end } | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment