in lib/src/map_mutations.dart [52:96]
SourceEdit _addToBlockMap(
YamlEditor yamlEdit, YamlMap map, Object key, YamlNode newValue) {
final yaml = yamlEdit.toString();
final newIndentation =
getMapIndentation(yaml, map) + getIndentation(yamlEdit);
final keyString = yamlEncodeFlowString(wrapAsYamlNode(key));
final lineEnding = getLineEnding(yaml);
var valueString = yamlEncodeBlockString(newValue, newIndentation, lineEnding);
if (isCollection(newValue) &&
!isFlowYamlCollectionNode(newValue) &&
!isEmpty(newValue)) {
valueString = '$lineEnding$valueString';
}
var formattedValue = ' ' * getMapIndentation(yaml, map) + '$keyString: ';
var offset = map.span.end.offset;
final insertionIndex = getMapInsertionIndex(map, keyString);
if (map.isNotEmpty) {
/// Adjusts offset to after the trailing newline of the last entry, if it
/// exists
if (insertionIndex == map.length) {
final lastValueSpanEnd = getContentSensitiveEnd(map.nodes.values.last);
final nextNewLineIndex = yaml.indexOf('\n', lastValueSpanEnd);
if (nextNewLineIndex != -1) {
offset = nextNewLineIndex + 1;
} else {
formattedValue = lineEnding + formattedValue;
}
} else {
final keyAtIndex = map.nodes.keys.toList()[insertionIndex] as YamlNode;
final keySpanStart = keyAtIndex.span.start.offset;
final prevNewLineIndex = yaml.lastIndexOf('\n', keySpanStart);
offset = prevNewLineIndex + 1;
}
}
formattedValue += valueString + lineEnding;
return SourceEdit(offset, 0, formattedValue);
}