Lint and format src/compiler/preprocess/replace_in_code.js

pull/8569/head
Simon Holthausen 3 years ago
parent f738338c84
commit 360e6b6c78

@ -7,12 +7,12 @@ import { MappedCode } from '../utils/mapped_code';
* @returns {Source} * @returns {Source}
*/ */
export function slice_source(code_slice, offset, { file_basename, filename, get_location }) { export function slice_source(code_slice, offset, { file_basename, filename, get_location }) {
return { return {
source: code_slice, source: code_slice,
get_location: (index) => get_location(index + offset), get_location: (index) => get_location(index + offset),
file_basename, file_basename,
filename filename
}; };
} }
/** /**
@ -21,20 +21,21 @@ export function slice_source(code_slice, offset, { file_basename, filename, get_
* @param {string} source * @param {string} source
*/ */
function calculate_replacements(re, get_replacement, source) { function calculate_replacements(re, get_replacement, source) {
/**
/** * @type {Array<Promise<Replacement>>}
* @type {Array<Promise<Replacement>>} */
*/ const replacements = [];
const replacements = []; source.replace(re, (...match) => {
source.replace(re, (...match) => { replacements.push(
replacements.push(get_replacement(...match).then((replacement) => { get_replacement(...match).then((replacement) => {
const matched_string = match[0]; const matched_string = match[0];
const offset = match[match.length - 2]; const offset = match[match.length - 2];
return { offset, length: matched_string.length, replacement }; return { offset, length: matched_string.length, replacement };
})); })
return ''; );
}); return '';
return Promise.all(replacements); });
return Promise.all(replacements);
} }
/** /**
@ -43,15 +44,19 @@ function calculate_replacements(re, get_replacement, source) {
* @returns {MappedCode} * @returns {MappedCode}
*/ */
function perform_replacements(replacements, source) { function perform_replacements(replacements, source) {
const out = new MappedCode(); const out = new MappedCode();
let last_end = 0; let last_end = 0;
for (const { offset, length, replacement } of replacements) { for (const { offset, length, replacement } of replacements) {
const unchanged_prefix = MappedCode.from_source(slice_source(source.source.slice(last_end, offset), last_end, source)); const unchanged_prefix = MappedCode.from_source(
out.concat(unchanged_prefix).concat(replacement); slice_source(source.source.slice(last_end, offset), last_end, source)
last_end = offset + length; );
} out.concat(unchanged_prefix).concat(replacement);
const unchanged_suffix = MappedCode.from_source(slice_source(source.source.slice(last_end), last_end, source)); last_end = offset + length;
return out.concat(unchanged_suffix); }
const unchanged_suffix = MappedCode.from_source(
slice_source(source.source.slice(last_end), last_end, source)
);
return out.concat(unchanged_suffix);
} }
/** /**
@ -61,15 +66,12 @@ function perform_replacements(replacements, source) {
* @returns {Promise<MappedCode>} * @returns {Promise<MappedCode>}
*/ */
export async function replace_in_code(regex, get_replacement, location) { export async function replace_in_code(regex, get_replacement, location) {
const replacements = await calculate_replacements(regex, get_replacement, location.source); const replacements = await calculate_replacements(regex, get_replacement, location.source);
return perform_replacements(replacements, location); return perform_replacements(replacements, location);
} }
/** @typedef {Object} Replacement /** @typedef {Object} Replacement
* @property {number} offset * @property {number} offset
* @property {number} length * @property {number} length
* @property {MappedCode} replacement * @property {MappedCode} replacement
*/ */

Loading…
Cancel
Save