Mercurial > hg
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]])') |