in lib/src/editor.dart [235:274]
void update(Iterable<Object?> path, Object? value) {
final valueNode = wrapAsYamlNode(value);
if (path.isEmpty) {
final start = _contents.span.start.offset;
final end = getContentSensitiveEnd(_contents);
final lineEnding = getLineEnding(_yaml);
final edit = SourceEdit(
start, end - start, yamlEncodeBlockString(valueNode, 0, lineEnding));
return _performEdit(edit, path, valueNode);
}
final pathAsList = path.toList();
final collectionPath = pathAsList.take(path.length - 1);
final keyOrIndex = pathAsList.last;
final parentNode = _traverse(collectionPath, checkAlias: true);
if (parentNode is YamlList) {
if (keyOrIndex is! int) {
throw PathError(path, path, parentNode);
}
final expected = wrapAsYamlNode(
[...parentNode.nodes]..[keyOrIndex] = valueNode,
);
return _performEdit(updateInList(this, parentNode, keyOrIndex, valueNode),
collectionPath, expected);
}
if (parentNode is YamlMap) {
final expectedMap =
updatedYamlMap(parentNode, (nodes) => nodes[keyOrIndex] = valueNode);
return _performEdit(updateInMap(this, parentNode, keyOrIndex, valueNode),
collectionPath, expectedMap);
}
throw PathError.unexpected(
path, 'Scalar $parentNode does not have key $keyOrIndex');
}