43 lines
1.5 KiB
Plaintext
43 lines
1.5 KiB
Plaintext
|
"use strict";
|
||
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||
|
const ast_utils_1 = require("./ast-utils");
|
||
|
class FixTracker {
|
||
|
constructor(fixer, sourceCode) {
|
||
|
this.fixer = fixer;
|
||
|
this.sourceCode = sourceCode;
|
||
|
this.retainedRange = null;
|
||
|
}
|
||
|
retainRange(range) {
|
||
|
this.retainedRange = range;
|
||
|
return this;
|
||
|
}
|
||
|
retainEnclosingFunction(node) {
|
||
|
const functionNode = (0, ast_utils_1.getUpperFunction)(node);
|
||
|
return this.retainRange(functionNode ? functionNode.range : this.sourceCode.ast.range);
|
||
|
}
|
||
|
retainSurroundingTokens(nodeOrToken) {
|
||
|
const tokenBefore = this.sourceCode.getTokenBefore(nodeOrToken) || nodeOrToken;
|
||
|
const tokenAfter = this.sourceCode.getTokenAfter(nodeOrToken) || nodeOrToken;
|
||
|
return this.retainRange([tokenBefore.range[0], tokenAfter.range[1]]);
|
||
|
}
|
||
|
replaceTextRange(range, text) {
|
||
|
let actualRange;
|
||
|
if (this.retainedRange) {
|
||
|
actualRange = [
|
||
|
Math.min(this.retainedRange[0], range[0]),
|
||
|
Math.max(this.retainedRange[1], range[1]),
|
||
|
];
|
||
|
}
|
||
|
else {
|
||
|
actualRange = range;
|
||
|
}
|
||
|
return this.fixer.replaceTextRange(actualRange, this.sourceCode.text.slice(actualRange[0], range[0]) +
|
||
|
text +
|
||
|
this.sourceCode.text.slice(range[1], actualRange[1]));
|
||
|
}
|
||
|
remove(nodeOrToken) {
|
||
|
return this.replaceTextRange(nodeOrToken.range, "");
|
||
|
}
|
||
|
}
|
||
|
exports.default = FixTracker;
|