async function insertExcludeDependency()

in src/handlers/excludeDependencyHandler.ts [48:76]


async function insertExcludeDependency(pomPath: string, targetNode: ElementNode, gid: string, aid: string): Promise<void> {
    if (targetNode.children === undefined || targetNode.contentStart === undefined || targetNode.contentEnd === undefined) {
        throw new UserError("Invalid target XML node to delete dependency.");
    }
    const currentDocument: vscode.TextDocument = await vscode.workspace.openTextDocument(pomPath);
    const textEditor: vscode.TextEditor = await vscode.window.showTextDocument(currentDocument);
    const baseIndent: string = getIndentation(currentDocument, targetNode.contentEnd);
    const options: vscode.TextEditorOptions = textEditor.options;
    const indent: string = options.insertSpaces && typeof options.tabSize === "number" ? " ".repeat(options.tabSize) : "\t";
    const eol: string = currentDocument.eol === vscode.EndOfLine.LF ? "\n" : "\r\n";
    let insertPosition: vscode.Position;
    let targetText: string;
    const exclusionNode: ElementNode | undefined = targetNode.children?.find(node => node.tag === XmlTagName.Exclusions);
    if (exclusionNode === undefined) {
        insertPosition = currentDocument.positionAt(targetNode.contentEnd);
        targetText = constructExclusionsNode(gid, aid, baseIndent, indent, eol);
    } else {
        if (exclusionNode.contentStart === undefined) {
            throw new UserError("Invalid insert position.");
        }
        insertPosition = currentDocument.positionAt(exclusionNode.contentStart);
        targetText = constructExclusionNode(gid, aid, baseIndent, indent, eol);
    }
    const edit: vscode.WorkspaceEdit = new vscode.WorkspaceEdit();
    edit.insert(currentDocument.uri, insertPosition, targetText);
    await vscode.workspace.applyEdit(edit);
    const endingPosition: vscode.Position = currentDocument.positionAt(currentDocument.offsetAt(insertPosition) + targetText.length);
    textEditor.revealRange(new vscode.Range(insertPosition, endingPosition));
}