public MethodNode(DeltinScriptParser.MethodContext context, BuildAstVisitor visitor)
            : base(
                new Location(visitor.file, DocRange.GetRange(context)),
                DocRange.GetRange(context.PART().Symbol),
                DocRange.GetRange(context.LEFT_PAREN().Symbol, context.RIGHT_PAREN().Symbol)
                )
        {
            Name = context.PART().GetText();

            if (context.call_parameters() != null)
            {
                Parameters = new Node[context.call_parameters().expr().Length];
                for (int i = 0; i < Parameters.Length; i++)
                {
                    Parameters[i] = visitor.Visit(context.call_parameters().expr()[i]);
                }
            }
            else if (context.picky_parameters() != null)
            {
                PickyParameters = new PickyParameter[context.picky_parameters().picky_parameter().Length];
                for (int i = 0; i < PickyParameters.Length; i++)
                {
                    PickyParameters[i] = new PickyParameter(context.picky_parameters().picky_parameter(i), visitor);
                }
            }
            else
            {
                Parameters = new Node[0];
            }
        }
        // Method()
        public override Node VisitMethod(DeltinScriptParser.MethodContext context)
        {
            string methodName = context.PART().GetText();

            Node[] parameters = new Node[context.call_parameters()?.expr().Length ?? 0];
            for (int i = 0; i < parameters.Length; i++)
            {
                parameters[i] = Visit(context.call_parameters().expr()[i]);
            }

            Range nameRange      = Range.GetRange(context.PART().Symbol);
            Range parameterRange = Range.GetRange(context.LEFT_PAREN().Symbol, context.RIGHT_PAREN().Symbol);

            return(new MethodNode(methodName, parameters, nameRange, parameterRange, new Location(file, Range.GetRange(context))));
        }