Skip to content

Instantly share code, notes, and snippets.

@nvie
Created October 2, 2020 21:24
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save nvie/331a70c74faf295f941a3f679ae1db7b to your computer and use it in GitHub Desktop.
Save nvie/331a70c74faf295f941a3f679ae1db7b to your computer and use it in GitHub Desktop.
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