mercurial/parser.py
changeset 25705 48919d246a47
parent 25655 b8b73652c1c9
child 25801 272ff3680bf3
equal deleted inserted replaced
25704:70a2082f855a 25705:48919d246a47
    89         t = self.parse(tokeniter)
    89         t = self.parse(tokeniter)
    90         if self._methods:
    90         if self._methods:
    91             return self.eval(t)
    91             return self.eval(t)
    92         return t
    92         return t
    93 
    93 
       
    94 def buildargsdict(trees, funcname, keys, keyvaluenode, keynode):
       
    95     """Build dict from list containing positional and keyword arguments
       
    96 
       
    97     Invalid keywords or too many positional arguments are rejected, but
       
    98     missing arguments are just omitted.
       
    99     """
       
   100     if len(trees) > len(keys):
       
   101         raise error.ParseError(_("%(func)s takes at most %(nargs)d arguments")
       
   102                                % {'func': funcname, 'nargs': len(keys)})
       
   103     args = {}
       
   104     # consume positional arguments
       
   105     for k, x in zip(keys, trees):
       
   106         if x[0] == keyvaluenode:
       
   107             break
       
   108         args[k] = x
       
   109     # remainder should be keyword arguments
       
   110     for x in trees[len(args):]:
       
   111         if x[0] != keyvaluenode or x[1][0] != keynode:
       
   112             raise error.ParseError(_("%(func)s got an invalid argument")
       
   113                                    % {'func': funcname})
       
   114         k = x[1][1]
       
   115         if k not in keys:
       
   116             raise error.ParseError(_("%(func)s got an unexpected keyword "
       
   117                                      "argument '%(key)s'")
       
   118                                    % {'func': funcname, 'key': k})
       
   119         if k in args:
       
   120             raise error.ParseError(_("%(func)s got multiple values for keyword "
       
   121                                      "argument '%(key)s'")
       
   122                                    % {'func': funcname, 'key': k})
       
   123         args[k] = x[2]
       
   124     return args
       
   125 
    94 def _prettyformat(tree, leafnodes, level, lines):
   126 def _prettyformat(tree, leafnodes, level, lines):
    95     if not isinstance(tree, tuple) or tree[0] in leafnodes:
   127     if not isinstance(tree, tuple) or tree[0] in leafnodes:
    96         lines.append((level, str(tree)))
   128         lines.append((level, str(tree)))
    97     else:
   129     else:
    98         lines.append((level, '(%s' % tree[0]))
   130         lines.append((level, '(%s' % tree[0]))