public override AstNode?VisitEnumDefinition(EnumDefinitionContext context)
        {
            _hasDefinitions = true;

            var enumDef = new EnumDefinition
            {
                ParseContext = context,
                Name         = GetId(context.name),
                Options      = _currentMemberOptions
            };

            var accessModifier = context.accessModifier();

            if (accessModifier != null)
            {
                ProcessTypeModifiers(enumDef, new[] { accessModifier.type });
            }

            ProcessAttributes(enumDef.Attributes, context.attributes());

            if (context.underlyingType != null)
            {
                enumDef.UnderlyingType = context.underlyingType.GetText();
            }

            foreach (var enumMemberContext in context.enumMember())
            {
                var memberDef = new EnumMemberDefinition
                {
                    ParseContext = enumMemberContext,
                    Name         = GetId(enumMemberContext.name),
                    Value        = enumMemberContext.value?.GetFullText()
                };

                ProcessAttributes(memberDef.Attributes, enumMemberContext.attributes());

                enumDef.Members.Add(memberDef);
            }

            _contracts.Enums.Add(enumDef);
            return(enumDef);
        }
 private static string Descriptor(EnumDefinition enumDefinition, EnumMemberDefinition m)
 {
     return($"{{ value: {enumDefinition.Name}.{m.Name}, name: `{m.Name}`, description: `{m.Description}` }}");
 }
 private static string MemberValueAssignment(EnumMemberDefinition member)
 {
     return($"    {member.Name} = {member.Value}");
 }