Mercurial > public > mercurial-scm > hg-stable
comparison mercurial/revset.py @ 28874:552eabef663b
revset: unify function that parses alias declaration and definition
We no longer need separate parsers. Only difference between _parsealiasdecl()
and _parsealiasdefn() is whether or not to flatten 'or' tree. Since alias
declaration should have no 'or' operator, there was no practical difference.
author | Yuya Nishihara <yuya@tcha.org> |
---|---|
date | Tue, 29 Mar 2016 00:05:14 +0900 |
parents | 2ca3b7c563f3 |
children | 2e9f5453ab5a |
comparison
equal
deleted
inserted
replaced
28873:2ca3b7c563f3 | 28874:552eabef663b |
---|---|
2232 examine whether ``$`` is used also for unexpected symbols or not. | 2232 examine whether ``$`` is used also for unexpected symbols or not. |
2233 """ | 2233 """ |
2234 return tokenize(program, lookup=lookup, | 2234 return tokenize(program, lookup=lookup, |
2235 syminitletters=_aliassyminitletters) | 2235 syminitletters=_aliassyminitletters) |
2236 | 2236 |
2237 def _parsealiasdecl(decl): | 2237 def _parsealias(spec): |
2238 """Parse alias declaration ``decl`` | 2238 """Parse alias declaration/definition ``spec`` |
2239 | 2239 |
2240 >>> _parsealiasdecl('foo($1)') | 2240 >>> _parsealias('foo($1)') |
2241 ('func', ('symbol', 'foo'), ('symbol', '$1')) | 2241 ('func', ('symbol', 'foo'), ('symbol', '$1')) |
2242 >>> _parsealiasdecl('foo bar') | 2242 >>> _parsealias('foo bar') |
2243 Traceback (most recent call last): | 2243 Traceback (most recent call last): |
2244 ... | 2244 ... |
2245 ParseError: ('invalid token', 4) | 2245 ParseError: ('invalid token', 4) |
2246 """ | 2246 """ |
2247 p = parser.parser(elements) | 2247 p = parser.parser(elements) |
2248 tree, pos = p.parse(_tokenizealias(decl)) | 2248 tree, pos = p.parse(_tokenizealias(spec)) |
2249 if pos != len(decl): | 2249 if pos != len(spec): |
2250 raise error.ParseError(_('invalid token'), pos) | |
2251 return parser.simplifyinfixops(tree, ('list',)) | |
2252 | |
2253 def _parsealiasdefn(defn): | |
2254 """Parse alias definition ``defn``""" | |
2255 p = parser.parser(elements) | |
2256 tree, pos = p.parse(_tokenizealias(defn)) | |
2257 if pos != len(defn): | |
2258 raise error.ParseError(_('invalid token'), pos) | 2250 raise error.ParseError(_('invalid token'), pos) |
2259 return parser.simplifyinfixops(tree, ('list', 'or')) | 2251 return parser.simplifyinfixops(tree, ('list', 'or')) |
2260 | 2252 |
2261 class _aliasrules(parser.basealiasrules): | 2253 class _aliasrules(parser.basealiasrules): |
2262 """Parsing and expansion rule set of revset aliases""" | 2254 """Parsing and expansion rule set of revset aliases""" |
2263 _section = _('revset alias') | 2255 _section = _('revset alias') |
2264 _parsedecl = staticmethod(_parsealiasdecl) | 2256 _parsedecl = staticmethod(_parsealias) |
2265 _parsedefn = staticmethod(_parsealiasdefn) | 2257 _parsedefn = staticmethod(_parsealias) |
2266 _getlist = staticmethod(getlist) | 2258 _getlist = staticmethod(getlist) |
2267 | 2259 |
2268 class revsetalias(object): | 2260 class revsetalias(object): |
2269 # whether own `error` information is already shown or not. | 2261 # whether own `error` information is already shown or not. |
2270 # this avoids showing same warning multiple times at each `findaliases`. | 2262 # this avoids showing same warning multiple times at each `findaliases`. |