mirror of
https://github.com/OliveTin/OliveTin
synced 2025-12-18 12:05:32 +00:00
75 lines
1.7 KiB
JavaScript
75 lines
1.7 KiB
JavaScript
// NOTICE: This file is generated by Rollup. To modify it,
|
|
// please instead edit the ESM counterpart and rebuild with Rollup (npm run build).
|
|
'use strict';
|
|
|
|
/** @import { Node as PostcssNode } from 'postcss' */
|
|
|
|
/**
|
|
* Make a fix range as narrow as possible by trimming common prefixes and suffixes
|
|
*
|
|
* @param {PostcssNode} node
|
|
* @param {{range: [number, number], text: string}} fixData
|
|
* @returns {{range: [number, number], text: string}}
|
|
*/
|
|
function narrowFixRange(node, fixData) {
|
|
if (!node.source) {
|
|
return fixData;
|
|
}
|
|
|
|
let startOffset = fixData.range[0];
|
|
let endOffset = fixData.range[1];
|
|
|
|
const stringRepresentation = node.source.input.css.slice(startOffset, endOffset);
|
|
|
|
let replacementStartOffset = 0;
|
|
|
|
for (let i = 0; i < stringRepresentation.length; i++) {
|
|
const a = stringRepresentation[i];
|
|
const b = fixData.text[i];
|
|
|
|
if (a !== b) break;
|
|
|
|
startOffset++;
|
|
replacementStartOffset++;
|
|
}
|
|
|
|
let replacementEndOffset = fixData.text.length;
|
|
|
|
for (let i = 0; i < stringRepresentation.length; i++) {
|
|
const ia = stringRepresentation.length - 1 - i;
|
|
|
|
if (ia < replacementStartOffset) break;
|
|
|
|
const a = stringRepresentation[ia];
|
|
|
|
const ib = fixData.text.length - 1 - i;
|
|
|
|
if (ib < replacementStartOffset) break;
|
|
|
|
const b = fixData.text[ib];
|
|
|
|
if (a !== b) break;
|
|
|
|
endOffset--;
|
|
replacementEndOffset--;
|
|
}
|
|
|
|
// Try to have a context size of at least 1
|
|
if (startOffset === endOffset) {
|
|
if (startOffset > fixData.range[0]) {
|
|
startOffset--;
|
|
replacementStartOffset--;
|
|
} else if (endOffset < fixData.range[1]) {
|
|
endOffset++;
|
|
replacementEndOffset++;
|
|
}
|
|
}
|
|
|
|
return {
|
|
text: fixData.text.slice(replacementStartOffset, replacementEndOffset),
|
|
range: [startOffset, endOffset],
|
|
};
|
|
}
|
|
|
|
module.exports = narrowFixRange;
|