Skip to content

Commit

Permalink
Refactor the comments functionality
Browse files Browse the repository at this point in the history
  • Loading branch information
aaubry committed Mar 30, 2021
1 parent 0a8b53e commit ed66b8d
Show file tree
Hide file tree
Showing 4 changed files with 57 additions and 9 deletions.
4 changes: 3 additions & 1 deletion YamlDotNet.Test/Serialization/YamlCommentTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,9 @@ public void SerializationWithComment()
Serializer serializer = new Serializer();
string result = serializer.Serialize(person);

Output.WriteLine(result);
Assert.Contains("# this is a yaml comment about name property", result);
Assert.Contains("# this is age", result);
Assert.Contains("# male or female", result);
}

class Person
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
// This file is part of YamlDotNet - A .NET library for YAML.
// Copyright (c) Antoine Aubry and contributors

// Permission is hereby granted, free of charge, to any person obtaining a copy of
// this software and associated documentation files (the "Software"), to deal in
// the Software without restriction, including without limitation the rights to
// use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
// of the Software, and to permit persons to whom the Software is furnished to do
// so, subject to the following conditions:

// The above copyright notice and this permission notice shall be included in all
// copies or substantial portions of the Software.

// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
// SOFTWARE.

using System;
using YamlDotNet.Core;

namespace YamlDotNet.Serialization.ObjectGraphVisitors
{
public sealed class CommentsObjectGraphVisitor : ChainedObjectGraphVisitor
{
public CommentsObjectGraphVisitor(IObjectGraphVisitor<IEmitter> nextVisitor)
: base(nextVisitor)
{
}

private static object? GetDefault(Type type)
{
return type.IsValueType() ? Activator.CreateInstance(type) : null;
}

public override bool EnterMapping(IPropertyDescriptor key, IObjectDescriptor value, IEmitter context)
{
var yamlMember = key.GetCustomAttribute<YamlMemberAttribute>();
if (yamlMember?.Description != null)
{
context.Emit(new Core.Events.Comment(yamlMember.Description, false));
}

return base.EnterMapping(key, value, context);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -67,14 +67,6 @@ public override bool EnterMapping(IPropertyDescriptor key, IObjectDescriptor val
break;
}

if (yamlMember != null)
{
if (yamlMember.Description != null)
{
context.Emit(new Core.Events.Comment(yamlMember.Description, false));
}
}

return base.EnterMapping(key, value, context);
}
}
Expand Down
4 changes: 4 additions & 0 deletions YamlDotNet/Serialization/SerializerBuilder.cs
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,10 @@ public SerializerBuilder()
{
typeof(DefaultValuesObjectGraphVisitor),
args => new DefaultValuesObjectGraphVisitor(defaultValuesHandlingConfiguration, args.InnerVisitor)
},
{
typeof(CommentsObjectGraphVisitor),
args => new CommentsObjectGraphVisitor(args.InnerVisitor)
}
};

Expand Down

0 comments on commit ed66b8d

Please sign in to comment.