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); }