comparison mercurial/templater.py @ 31928:277b3e2d711b

templater: add shorthand for building a dict like {"key": key} Like field init shorthand of Rust. This is convenient for building a JSON object from selected keywords. This means dict() won't support Python-like dict(iterable) syntax because it's ambiguous. Perhaps it could be implemented as 'mapdict(xs % (k, v))'.
author Yuya Nishihara <yuya@tcha.org>
date Mon, 03 Apr 2017 23:13:49 +0900
parents 2abc556dbe92
children e5eab0fe69ee
comparison
equal deleted inserted replaced
31927:2abc556dbe92 31928:277b3e2d711b
543 return util.datestr(date, fmt) 543 return util.datestr(date, fmt)
544 except (TypeError, ValueError): 544 except (TypeError, ValueError):
545 # i18n: "date" is a keyword 545 # i18n: "date" is a keyword
546 raise error.ParseError(_("date expects a date information")) 546 raise error.ParseError(_("date expects a date information"))
547 547
548 @templatefunc('dict([key=value...])', argspec='**kwargs') 548 @templatefunc('dict([[key=]value...])', argspec='*args **kwargs')
549 def dict_(context, mapping, args): 549 def dict_(context, mapping, args):
550 """Construct a dict from key-value pairs.""" 550 """Construct a dict from key-value pairs. A key may be omitted if
551 a value expression can provide an unambiguous name."""
551 data = util.sortdict() 552 data = util.sortdict()
553
554 for v in args['args']:
555 k = findsymbolicname(v)
556 if not k:
557 raise error.ParseError(_('dict key cannot be inferred'))
558 if k in data or k in args['kwargs']:
559 raise error.ParseError(_("duplicated dict key '%s' inferred") % k)
560 data[k] = evalfuncarg(context, mapping, v)
561
552 data.update((k, evalfuncarg(context, mapping, v)) 562 data.update((k, evalfuncarg(context, mapping, v))
553 for k, v in args['kwargs'].iteritems()) 563 for k, v in args['kwargs'].iteritems())
554 return templatekw.hybriddict(data) 564 return templatekw.hybriddict(data)
555 565
556 @templatefunc('diff([includepattern [, excludepattern]])') 566 @templatefunc('diff([includepattern [, excludepattern]])')