ts-simple-ast
Version:
TypeScript compiler wrapper for AST navigation and code generation.
49 lines (48 loc) • 2.33 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var insertIntoParent_1 = require("./insertIntoParent");
function insertIntoCommaSeparatedNodes(opts) {
// todo: this needs to be fixed/cleaned up in the future, but this is good enough for now
var currentNodes = opts.currentNodes, insertIndex = opts.insertIndex, newTexts = opts.newTexts, parent = opts.parent;
var nextNode = currentNodes[insertIndex];
var previousNode = currentNodes[insertIndex - 1];
var numberOfSyntaxListItemsInserting = newTexts.length * 2 - 1;
var separator = getSeparator();
var newText = newTexts.join("," + (opts.useNewlines ? parent.global.manipulationSettings.getNewLineKind() : " ")).replace(/^\s+/, "");
if (nextNode != null) {
insertIntoParent_1.insertIntoParent({
insertPos: nextNode.getStart(),
newText: newText + "," + separator,
parent: parent,
childIndex: nextNode.getChildIndex(),
insertItemsCount: numberOfSyntaxListItemsInserting + 1 // extra comma
});
}
else if (previousNode != null) {
insertIntoParent_1.insertIntoParent({
insertPos: previousNode.getEnd(),
newText: "," + separator + newText,
parent: parent,
childIndex: previousNode.getChildIndex() + 1,
insertItemsCount: numberOfSyntaxListItemsInserting + 1 // extra comma
});
}
else {
if (opts.useNewlines && currentNodes.length === 0)
newText = separator + newText + parent.global.manipulationSettings.getNewLineKind() + parent.getIndentationText();
insertIntoParent_1.insertIntoParent({
insertPos: parent.getPos(),
parent: parent,
newText: newText,
childIndex: 0,
insertItemsCount: numberOfSyntaxListItemsInserting,
replacing: currentNodes.length === 0 ? { textLength: parent.getNextSiblingOrThrow().getStart() - parent.getPos(), nodes: [] } : undefined
});
}
function getSeparator() {
if (!opts.useNewlines)
return " ";
return parent.global.manipulationSettings.getNewLineKind() + parent.getParentOrThrow().getChildIndentationText();
}
}
exports.insertIntoCommaSeparatedNodes = insertIntoCommaSeparatedNodes;