Show More
@@ -2242,6 +2242,71 b' def _parsealiasdecl(decl):' | |||
|
2242 | 2242 | except error.ParseError, inst: |
|
2243 | 2243 | return (decl, None, None, parseerrordetail(inst)) |
|
2244 | 2244 | |
|
2245 | def _parsealiasdefn(defn, args): | |
|
2246 | """Parse alias definition ``defn`` | |
|
2247 | ||
|
2248 | This function also replaces alias argument references in the | |
|
2249 | specified definition by ``_aliasarg(ARGNAME)``. | |
|
2250 | ||
|
2251 | ``args`` is a list of alias argument names, or None if the alias | |
|
2252 | is declared as a symbol. | |
|
2253 | ||
|
2254 | This returns "tree" as parsing result. | |
|
2255 | ||
|
2256 | >>> args = ['$1', '$2', 'foo'] | |
|
2257 | >>> print prettyformat(_parsealiasdefn('$1 or foo', args)) | |
|
2258 | (or | |
|
2259 | (func | |
|
2260 | ('symbol', '_aliasarg') | |
|
2261 | ('string', '$1')) | |
|
2262 | (func | |
|
2263 | ('symbol', '_aliasarg') | |
|
2264 | ('string', 'foo'))) | |
|
2265 | >>> try: | |
|
2266 | ... _parsealiasdefn('$1 or $bar', args) | |
|
2267 | ... except error.ParseError, inst: | |
|
2268 | ... print parseerrordetail(inst) | |
|
2269 | at 6: '$' not for alias arguments | |
|
2270 | >>> args = ['$1', '$10', 'foo'] | |
|
2271 | >>> print prettyformat(_parsealiasdefn('$10 or foobar', args)) | |
|
2272 | (or | |
|
2273 | (func | |
|
2274 | ('symbol', '_aliasarg') | |
|
2275 | ('string', '$10')) | |
|
2276 | ('symbol', 'foobar')) | |
|
2277 | >>> print prettyformat(_parsealiasdefn('"$1" or "foo"', args)) | |
|
2278 | (or | |
|
2279 | ('string', '$1') | |
|
2280 | ('string', 'foo')) | |
|
2281 | """ | |
|
2282 | def tokenizedefn(program, lookup=None): | |
|
2283 | if args: | |
|
2284 | argset = set(args) | |
|
2285 | else: | |
|
2286 | argset = set() | |
|
2287 | ||
|
2288 | for t, value, pos in _tokenizealias(program, lookup=lookup): | |
|
2289 | if t == 'symbol': | |
|
2290 | if value in argset: | |
|
2291 | # emulate tokenization of "_aliasarg('ARGNAME')": | |
|
2292 | # "_aliasarg()" is an unknown symbol only used separate | |
|
2293 | # alias argument placeholders from regular strings. | |
|
2294 | yield ('symbol', '_aliasarg', pos) | |
|
2295 | yield ('(', None, pos) | |
|
2296 | yield ('string', value, pos) | |
|
2297 | yield (')', None, pos) | |
|
2298 | continue | |
|
2299 | elif value.startswith('$'): | |
|
2300 | raise error.ParseError(_("'$' not for alias arguments"), | |
|
2301 | pos) | |
|
2302 | yield (t, value, pos) | |
|
2303 | ||
|
2304 | p = parser.parser(tokenizedefn, elements) | |
|
2305 | tree, pos = p.parse(defn) | |
|
2306 | if pos != len(defn): | |
|
2307 | raise error.ParseError(_('invalid token'), pos) | |
|
2308 | return tree | |
|
2309 | ||
|
2245 | 2310 | class revsetalias(object): |
|
2246 | 2311 | # whether own `error` information is already shown or not. |
|
2247 | 2312 | # this avoids showing same warning multiple times at each `findaliases`. |
General Comments 0
You need to be logged in to leave comments.
Login now