var insertReqTags = function()

in srs_extension/extension.js [117:194]


    var insertReqTags = function () {
        var text = loadText();

        if (text) {
            var nextReqTag = reqParser.getNextReq(text, reqPrefix, devId);

            var editor = vscode.window.activeTextEditor;
            var document = editor.document;

            var endSnippet = ' **]**';

            var rangesToEdit = new Array();
            var positionIterator = editor.selection.start;
            var stopLine = editor.selection.end.line;
            while (positionIterator.line <= stopLine) {
                var line = document.lineAt(positionIterator);
                // Attempt to add requirement to each line
                if (!line.isEmptyOrWhitespace) {
                    // Skip markdown list and white space around it
                    var startOffset = line.firstNonWhitespaceCharacterIndex;
                    while (line.text.charAt(startOffset) == '-' || line.text.charAt(startOffset) == ' ') {
                        startOffset++;
                    }
                    if (line.text.charAt(startOffset) != '\n' && line.text.charAt(startOffset) != '\r') {
                        var lineStart = positionIterator.translate(0, startOffset);
                        rangesToEdit.push(lineStart);
                    }
                }
                positionIterator = positionIterator.with(positionIterator.line + 1, 0);
            }

            var task = null;

            rangesToEdit.forEach(function (value, index, array){
                var doInsertStart = function (e) {
                    // insert start snippet
                    var startSnippet = '**' + nextReqTag + ': [** ';
                    nextReqTag = reqParser.getNextReq(nextReqTag, reqPrefix, devId);
                    e.insert(value, startSnippet);
                };

                var doInsertEnd = function (e) {
                    // recompute line end (after inserting start) and insert end
                    var line = document.lineAt(value);
                    var lineEnd = value.with(value.line, line.text.length);
                    e.insert(lineEnd, endSnippet);
                };

                // Insert start
                if (task == null) {
                    task = editor.edit(doInsertStart);
                } else {
                    task = task.then(function(status) {
                        if (status) {
                            return editor.edit(doInsertStart);
                        }
                        return status;
                    });
                }

                // Insert end
                task = task.then(function(status) {
                    if (status) {
                        return editor.edit(doInsertEnd);
                    }
                    return status;
                });
            });

            if (task == null) {
                return editor.edit(function (e) {}).then(function(status) { return status; });
            } else {
                return task.then(function(status) { return status; });
            }
        } else {
            return editor.edit(function (e) {}).then(function(status) { return status; });
        }
    };