UNPKG

ts-simple-ast

Version:

TypeScript compiler wrapper for AST navigation and code generation.

49 lines (48 loc) 2.33 kB
"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;