comparison mercurial/templater.py @ 34536:4c1cfe54c08d

templater: extend dot operator as a short for get(dict, key)
author Yuya Nishihara <yuya@tcha.org>
date Mon, 18 Sep 2017 23:07:17 +0900
parents 78590585c0db
children ee0d74083a22
comparison
equal deleted inserted replaced
34535:78590585c0db 34536:4c1cfe54c08d
461 d = evalrawexp(context, mapping, darg) 461 d = evalrawexp(context, mapping, darg)
462 if util.safehasattr(d, 'tomap'): 462 if util.safehasattr(d, 'tomap'):
463 lm = mapping.copy() 463 lm = mapping.copy()
464 lm.update(d.tomap()) 464 lm.update(d.tomap())
465 return runsymbol(context, lm, memb) 465 return runsymbol(context, lm, memb)
466 # TODO: d.get(memb) if dict-like? 466 if util.safehasattr(d, 'get'):
467 return _getdictitem(d, memb)
467 468
468 sym = findsymbolicname(darg) 469 sym = findsymbolicname(darg)
469 if sym: 470 if sym:
470 raise error.ParseError(_("keyword '%s' has no member") % sym) 471 raise error.ParseError(_("keyword '%s' has no member") % sym)
471 else: 472 else:
749 if not util.safehasattr(dictarg, 'get'): 750 if not util.safehasattr(dictarg, 'get'):
750 # i18n: "get" is a keyword 751 # i18n: "get" is a keyword
751 raise error.ParseError(_("get() expects a dict as first argument")) 752 raise error.ParseError(_("get() expects a dict as first argument"))
752 753
753 key = evalfuncarg(context, mapping, args[1]) 754 key = evalfuncarg(context, mapping, args[1])
755 return _getdictitem(dictarg, key)
756
757 def _getdictitem(dictarg, key):
754 val = dictarg.get(key) 758 val = dictarg.get(key)
755 if val is None: 759 if val is None:
756 return 760 return
757 return templatekw.wraphybridvalue(dictarg, key, val) 761 return templatekw.wraphybridvalue(dictarg, key, val)
758 762