~ruther/NosSmooth

a4f8525a700dfe18380f893b8c7f1b62427bcb00 — František Boháček 3 years ago 661f4e9
fix: correct generated syntax errors
M Core/NosSmooth.PacketSerializersGenerator/AttributeGenerators/PacketListIndexAttributeGenerator.cs => Core/NosSmooth.PacketSerializersGenerator/AttributeGenerators/PacketListIndexAttributeGenerator.cs +1 -1
@@ 22,7 22,7 @@ public class PacketListIndexAttributeGenerator : IParameterGenerator
    /// <summary>
    /// Gets the full name of the packet index attribute.
    /// </summary>
    public static string PacketListIndexAttributeFullName => "NosSmooth.Packets.Attributes.PacketListIndex";
    public static string PacketListIndexAttributeFullName => "NosSmooth.Packets.Attributes.PacketListIndexAttribute";

    /// <inheritdoc />
    public bool ShouldHandle(ParameterInfo parameter)

M Core/NosSmooth.PacketSerializersGenerator/ConverterDeserializationGenerator.cs => Core/NosSmooth.PacketSerializersGenerator/ConverterDeserializationGenerator.cs +3 -3
@@ 33,7 33,7 @@ public class ConverterDeserializationGenerator
    /// <param name="separator">The separator.</param>
    public void SetAfterSeparatorOnce(char separator)
    {
        _textWriter.WriteLine(@$"{_stringEnumeratorVariable}.SetAfterSeparatorOnce(""{separator}"");");
        _textWriter.WriteLine(@$"{_stringEnumeratorVariable}.SetAfterSeparatorOnce('{separator}');");
    }

    /// <summary>


@@ 43,7 43,7 @@ public class ConverterDeserializationGenerator
    /// <param name="maxTokens">The maximum number of tokens to read.</param>
    public void PushLevel(char separator, uint? maxTokens = default)
    {
        _textWriter.WriteLine(@$"{_stringEnumeratorVariable}.PushLevel(""{separator}"", {maxTokens?.ToString() ?? "null"});");
        _textWriter.WriteLine(@$"{_stringEnumeratorVariable}.PushLevel('{separator}', {maxTokens?.ToString() ?? "null"});");
    }

    /// <summary>


@@ 61,7 61,7 @@ public class ConverterDeserializationGenerator
    /// <param name="maxTokens">The maximum number of tokens to read.</param>
    public void PrepareLevel(char separator, uint? maxTokens = default)
    {
        _textWriter.WriteLine($@"{_stringEnumeratorVariable}.PrepareLevel(""{separator}"", {maxTokens?.ToString() ?? "null"});");
        _textWriter.WriteLine($@"{_stringEnumeratorVariable}.PrepareLevel('{separator}', {maxTokens?.ToString() ?? "null"});");
    }

    /// <summary>

M Core/NosSmooth.PacketSerializersGenerator/ConverterSerializationGenerator.cs => Core/NosSmooth.PacketSerializersGenerator/ConverterSerializationGenerator.cs +4 -5
@@ 33,7 33,7 @@ public class ConverterSerializationGenerator
    /// <param name="separator">The separator.</param>
    public void SetAfterSeparatorOnce(char separator)
    {
        _textWriter.WriteLine(@$"{_builderVariable}.SetAfterSeparatorOnce(""{separator}"");");
        _textWriter.WriteLine(@$"{_builderVariable}.SetAfterSeparatorOnce('{separator}');");
    }

    /// <summary>


@@ 43,7 43,7 @@ public class ConverterSerializationGenerator
    public void PushLevel(char separator)
    {
        _textWriter.WriteLine
            (@$"{_builderVariable}.PushLevel(""{separator}"");");
            (@$"{_builderVariable}.PushLevel('{separator}');");
    }

    /// <summary>


@@ 58,11 58,10 @@ public class ConverterSerializationGenerator
    /// Prepare the level to the string enumerator.
    /// </summary>
    /// <param name="separator">The separator.</param>
    /// <param name="maxTokens">The maximum number of tokens to read.</param>
    public void PrepareLevel(char separator, uint? maxTokens = default)
    public void PrepareLevel(char separator)
    {
        _textWriter.WriteLine
            ($@"{_builderVariable}.PrepareLevel(""{separator}"", {maxTokens?.ToString() ?? "null"});");
            ($@"{_builderVariable}.PrepareLevel('{separator}');");
    }

    /// <summary>

M Core/NosSmooth.PacketSerializersGenerator/Extensions/AttributeArgumentSyntaxExtensions.cs => Core/NosSmooth.PacketSerializersGenerator/Extensions/AttributeArgumentSyntaxExtensions.cs +1 -1
@@ 28,6 28,6 @@ public static class AttributeArgumentSyntaxExtensions
            return null;
        }

        return value;
        return value.Value;
    }
}
\ No newline at end of file

M Core/NosSmooth.PacketSerializersGenerator/Extensions/AttributeListSyntaxExtensions.cs => Core/NosSmooth.PacketSerializersGenerator/Extensions/AttributeListSyntaxExtensions.cs +1 -1
@@ 24,6 24,6 @@ public static class AttributeListSyntaxExtensions
    /// <returns>Whether the attribute is present.</returns>
    public static bool ContainsAttribute(this AttributeListSyntax attributeList, SemanticModel semanticModel, string attributeFullName)
    {
        return attributeList.Attributes.Any(x => Regex.IsMatch(attributeFullName, semanticModel.GetTypeInfo(x).Type?.ToString()!));
        return attributeList.Attributes.Any(x => Regex.IsMatch(semanticModel.GetTypeInfo(x).Type?.ToString()!, attributeFullName));
    }
}
\ No newline at end of file

M Core/NosSmooth.PacketSerializersGenerator/SourceGenerator.cs => Core/NosSmooth.PacketSerializersGenerator/SourceGenerator.cs +10 -1
@@ 6,6 6,7 @@

using System.CodeDom.Compiler;
using System.Diagnostics;
using System.Text.RegularExpressions;
using Microsoft.CodeAnalysis;
using Microsoft.CodeAnalysis.CSharp;
using Microsoft.CodeAnalysis.CSharp.Syntax;


@@ 204,7 205,15 @@ public class SourceGenerator : ISourceGenerator
        parameterInfo = null;
        var attributes = parameter.AttributeLists
            .Where(x => x.ContainsAttribute(semanticModel, Constants.PacketAttributesClassRegex))
            .SelectMany(x => x.Attributes)
            .SelectMany
            (
                x
                    => x.Attributes.Where
                    (
                        y => Regex.IsMatch
                            (semanticModel.GetTypeInfo(y).Type?.ToString()!, Constants.PacketAttributesClassRegex)
                    )
            )
            .ToList();

        if (attributes.Count == 0)