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; });
}
};