else:
bestcmds.append(cmd)
- # Sort bestcmds by number of args so we can try shortest first
+ # Sort bestcmds by number of req args so we can try shortest first
# (relies on a cmdsig being key,val where val is a list of len 1)
- bestcmds_sorted = sorted(bestcmds, key=lambda c: len(c['sig']))
+ def grade(cmd):
+ # prefer optional arguments over required ones
+ sigs = cmd['sig']
+ return sum(map(lambda sig: sig.req, sigs))
+
+ bestcmds_sorted = sorted(bestcmds, key=grade)
if verbose:
print("bestcmds_sorted: ", file=sys.stderr)
pprint.PrettyPrinter(stream=sys.stderr).pprint(bestcmds_sorted)