async function updateWorkspaceEdit()

in src/Utils/xml/index.ts [56:78]


async function updateWorkspaceEdit(edit: vscode.WorkspaceEdit, uri: vscode.Uri, parentNode: Element, nodeToInsert: PomNode): Promise<vscode.WorkspaceEdit> {
    const currentDocument: vscode.TextDocument = await vscode.workspace.openTextDocument(uri);
    const baseIndent: string = getIndentation(currentDocument, parentNode.startIndex);

    let insertOffset = parentNode.endIndex - (parentNode.name.length + 3)/* "</parentNode>".length */ + 1;
    let insertPos: vscode.Position = currentDocument.positionAt(insertOffset);
    // Not to mess up indentation, move cursor to line start:
    // <tab><tab>|</dependencies>  =>  |<tab><whitespace></dependencies>
    const insPosLineStart: vscode.Position = new vscode.Position(insertPos.line, 0);
    const contentBefore: string = currentDocument.getText(new vscode.Range(insPosLineStart, insertPos));
    if (contentBefore.trim() === "") {
        insertOffset -= insertPos.character;
        insertPos = insPosLineStart;
    }

    const textEditor: vscode.TextEditor = await vscode.window.showTextDocument(currentDocument);
    const options: vscode.TextEditorOptions = textEditor.options;
    const indent: string = options.insertSpaces ? " ".repeat(options.tabSize as number) : "\t";
    const eol: string = currentDocument.eol === vscode.EndOfLine.LF ? "\n" : "\r\n";
    const targetText: string = constructNodeText(nodeToInsert, baseIndent, indent, eol);
    edit.insert(currentDocument.uri, insertPos, targetText);
    return edit;
}