-
Notifications
You must be signed in to change notification settings - Fork 28.2k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
This adds the `SourceMap.findOrigin(lineNumber, columnNumber)` method, for finding the origin source file and 1-indexed line and column numbers corresponding to the 1-indexed line and column numbers from a call site in generated source code. Fix: #47770
- Loading branch information
Showing
3 changed files
with
115 additions
and
22 deletions.
There are no files selected for viewing
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
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
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -169,28 +169,28 @@ class SourceMap { | |
}; | ||
|
||
/** | ||
* @param {number} lineNumber in compiled resource | ||
* @param {number} columnNumber in compiled resource | ||
* @return {?Array} | ||
* @param {number} 0-indexed line offset in compiled resource | ||
* @param {number} 0-indexed column offset in compiled resource | ||
Check warning on line 173 in lib/internal/source_map/source_map.js GitHub Actions / lint-js-and-md
|
||
* @return {object} representing start of range if found, or empty object | ||
*/ | ||
findEntry(lineNumber, columnNumber) { | ||
findEntry(lineOffset, columnOffset) { | ||
let first = 0; | ||
let count = this.#mappings.length; | ||
while (count > 1) { | ||
const step = count >> 1; | ||
const middle = first + step; | ||
const mapping = this.#mappings[middle]; | ||
if (lineNumber < mapping[0] || | ||
(lineNumber === mapping[0] && columnNumber < mapping[1])) { | ||
if (lineOffset < mapping[0] || | ||
(lineOffset === mapping[0] && columnOffset < mapping[1])) { | ||
count = step; | ||
} else { | ||
first = middle; | ||
count -= step; | ||
} | ||
} | ||
const entry = this.#mappings[first]; | ||
if (!first && entry && (lineNumber < entry[0] || | ||
(lineNumber === entry[0] && columnNumber < entry[1]))) { | ||
if (!first && entry && (lineOffset < entry[0] || | ||
(lineOffset === entry[0] && columnOffset < entry[1]))) { | ||
return {}; | ||
} else if (!entry) { | ||
return {}; | ||
|
@@ -205,6 +205,32 @@ class SourceMap { | |
}; | ||
} | ||
|
||
/** | ||
* @param {number} 1-indexed line number in compiled resource call site | ||
* @param {number} 1-indexed column number in compiled resource call site | ||
Check warning on line 210 in lib/internal/source_map/source_map.js GitHub Actions / lint-js-and-md
|
||
* @return {object} representing origin call site if found, or empty object | ||
*/ | ||
findOrigin(lineNumber, columnNumber) { | ||
const range = this.findEntry(lineNumber - 1, columnNumber - 1); | ||
if ( | ||
range.originalSource === undefined || | ||
range.originalLine === undefined || | ||
range.originalColumn === undefined || | ||
range.generatedLine === undefined || | ||
range.generatedColumn === undefined | ||
) { | ||
return {}; | ||
} | ||
const lineOffset = lineNumber - range.generatedLine; | ||
const columnOffset = columnNumber - range.generatedColumn; | ||
return { | ||
name: range.name, | ||
fileName: range.originalSource, | ||
lineNumber: range.originalLine + lineOffset, | ||
columnNumber: range.originalColumn + columnOffset, | ||
}; | ||
} | ||
|
||
/** | ||
* @override | ||
*/ | ||
|
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