* fix SA1505 and SA1508 * fix SA1116 * fix SA1009 * fix SA1019 * fix SA1127 * fix SA1128 * fix SA1134 * fix indent * allow CA2227 * fix CA1810 * using clean up * fix naming * fix CA1806 * fix await * Revert "fix CA1806" This reverts commit a3b465087fdaf26ec461272373ee9810a90de2cc. * fix dotnet format * allow SA1009
54 lines
1.7 KiB
C#
54 lines
1.7 KiB
C#
using System;
|
|
using System.Text.RegularExpressions;
|
|
using YamlDotNet.Core;
|
|
using YamlDotNet.Serialization;
|
|
using YamlDotNet.Serialization.EventEmitters;
|
|
|
|
namespace k8s
|
|
{
|
|
// adapted from https://github.com/cloudbase/powershell-yaml/blob/master/powershell-yaml.psm1
|
|
public class StringQuotingEmitter : ChainedEventEmitter
|
|
{
|
|
// Patterns from https://yaml.org/spec/1.2/spec.html#id2804356
|
|
private static readonly Regex QuotedRegex =
|
|
new Regex(@"^(\~|null|true|false|-?(0|[1-9][0-9]*)(\.[0-9]*)?([eE][-+]?[0-9]+)?)?$");
|
|
|
|
public StringQuotingEmitter(IEventEmitter next)
|
|
: base(next)
|
|
{
|
|
}
|
|
|
|
/// <inheritdoc/>
|
|
public override void Emit(ScalarEventInfo eventInfo, IEmitter emitter)
|
|
{
|
|
var typeCode = eventInfo.Source.Value != null
|
|
? Type.GetTypeCode(eventInfo.Source.Type)
|
|
: TypeCode.Empty;
|
|
switch (typeCode)
|
|
{
|
|
case TypeCode.Char:
|
|
if (char.IsDigit((char)eventInfo.Source.Value))
|
|
{
|
|
eventInfo.Style = ScalarStyle.DoubleQuoted;
|
|
}
|
|
|
|
break;
|
|
case TypeCode.String:
|
|
var val = eventInfo.Source.Value.ToString();
|
|
if (QuotedRegex.IsMatch(val))
|
|
{
|
|
eventInfo.Style = ScalarStyle.DoubleQuoted;
|
|
}
|
|
else if (val.IndexOf('\n') > -1)
|
|
{
|
|
eventInfo.Style = ScalarStyle.Literal;
|
|
}
|
|
|
|
break;
|
|
}
|
|
|
|
base.Emit(eventInfo, emitter);
|
|
}
|
|
}
|
|
}
|