refakts
Version:
TypeScript refactoring tool built for AI coding agents to perform precise refactoring operations via command line instead of requiring complete code regeneration.
83 lines • 3.02 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.SelectOutputHandler = void 0;
class SelectOutputHandler {
outputResults(results) {
if (this.hasNoResults(results)) {
console.log('No Matches');
return;
}
this.processAllResults(results);
}
hasNoResults(results) {
return results.length === 0;
}
processAllResults(results) {
for (let i = 0; i < results.length; i++) {
const result = results[i];
this.outputSingleResult(result);
this.addSpacingIfNeeded(results, i);
}
}
addSpacingIfNeeded(results, index) {
if (index < results.length - 1) {
const currentResult = results[index];
const nextResult = results[index + 1];
if (this.needsSpacing(currentResult, nextResult)) {
console.log('');
}
}
}
needsSpacing(currentResult, nextResult) {
return this.isMultiLineResult(currentResult) || this.isMultiLineResult(nextResult);
}
outputSingleResult(result) {
const outputType = this.determineOutputType(result);
this.executeOutput(result, outputType);
}
determineOutputType(result) {
const typeChecks = [
{ check: this.hasPreviewContent(result), type: 'preview' },
{ check: this.isMultiLineResult(result), type: 'multiline' },
{ check: !!result.content, type: 'withContent' }
];
const found = typeChecks.find(check => check.check);
return found ? found.type : 'locationOnly';
}
hasPreviewContent(result) {
return !!(result.content && result.context);
}
executeOutput(result, outputType) {
const outputHandlers = this.getOutputHandlers(result);
const handler = outputHandlers[outputType];
if (handler) {
handler();
}
}
getOutputHandlers(result) {
return {
preview: () => this.outputPreviewResult(result),
multiline: () => this.outputMultiLineResult(result),
withContent: () => console.log(`${result.location} ${result.content}`),
locationOnly: () => console.log(result.location)
};
}
outputPreviewResult(result) {
console.log(`${result.location} ${result.content}`);
console.log(`Context: ${result.context}`);
}
isMultiLineResult(result) {
if (!result.content || !result.location.includes(':-') || !result.location.includes(':')) {
return false;
}
const hasMultiLineRange = result.location.match(/(\d+):-(\d+):/);
return hasMultiLineRange ? hasMultiLineRange[1] !== hasMultiLineRange[2] : false;
}
outputMultiLineResult(result) {
console.log(result.location);
console.log(result.content);
console.log(result.location);
}
}
exports.SelectOutputHandler = SelectOutputHandler;
//# sourceMappingURL=output-handler.js.map