private CliExecutorArgumentDescriptor ExtractArgumentDescriptor(PseudoList subForm)
        {
            var alias           = subForm.GetSingleKeywordArgument <Symbol>(":alias").Name.ToLowerInvariant();
            var description     = subForm.GetSingleKeywordArgument <StringAtom>(":description", true)?.Value;
            var docSubstitution = subForm.GetSingleKeywordArgument <StringAtom>(":doc-subst", true)?.Value;

            IList <string> values = null;

            if (subForm.GetCarSymbolName().ToLowerInvariant() == "multi-text")
            {
                values = subForm
                         .GetAllKeywordArguments(":values")
                         .Cast <StringAtom>()
                         .Select(x => x.Value)
                         .ToList();
            }

            var isMandatory    = subForm.GetSingleArgumentAsBool(":is-mandatory") ?? false;
            var allowsMultiple = subForm.GetSingleArgumentAsBool(":allows-multiple") ?? false;

            var argumentDescriptor = new CliExecutorArgumentDescriptor(
                alias,
                values,
                isMandatory,
                allowsMultiple,
                description,
                docSubstitution);

            return(argumentDescriptor);
        }