Mercurial > public > mercurial-scm > hg
comparison mercurial/revsetlang.py @ 34131:0fa781320203
doctest: bulk-replace string literals with b'' for Python 3
Our code transformer can't rewrite string literals in docstrings, and I
don't want to make the transformer more complex.
author | Yuya Nishihara <yuya@tcha.org> |
---|---|
date | Sun, 03 Sep 2017 14:32:11 +0900 |
parents | e18119b1ad5d |
children | 53fb09c73ba8 |
comparison
equal
deleted
inserted
replaced
34130:ada8a19672ab | 34131:0fa781320203 |
---|---|
76 | 76 |
77 By default, character ``c`` is recognized as valid for non-initial | 77 By default, character ``c`` is recognized as valid for non-initial |
78 letters of symbols, if ``c.isalnum() or c in '-._/@' or ord(c) > 127``. | 78 letters of symbols, if ``c.isalnum() or c in '-._/@' or ord(c) > 127``. |
79 | 79 |
80 Check that @ is a valid unquoted token character (issue3686): | 80 Check that @ is a valid unquoted token character (issue3686): |
81 >>> list(tokenize("@::")) | 81 >>> list(tokenize(b"@::")) |
82 [('symbol', '@', 0), ('::', None, 1), ('end', None, 3)] | 82 [('symbol', '@', 0), ('::', None, 1), ('end', None, 3)] |
83 | 83 |
84 ''' | 84 ''' |
85 program = pycompat.bytestr(program) | 85 program = pycompat.bytestr(program) |
86 if syminitletters is None: | 86 if syminitletters is None: |
250 return tree | 250 return tree |
251 | 251 |
252 def _build(tmplspec, *repls): | 252 def _build(tmplspec, *repls): |
253 """Create raw parsed tree from a template revset statement | 253 """Create raw parsed tree from a template revset statement |
254 | 254 |
255 >>> _build('f(_) and _', ('string', '1'), ('symbol', '2')) | 255 >>> _build(b'f(_) and _', (b'string', b'1'), (b'symbol', b'2')) |
256 ('and', ('func', ('symbol', 'f'), ('string', '1')), ('symbol', '2')) | 256 ('and', ('func', ('symbol', 'f'), ('string', '1')), ('symbol', '2')) |
257 """ | 257 """ |
258 template = _cachedtree(tmplspec) | 258 template = _cachedtree(tmplspec) |
259 return parser.buildtree(template, ('symbol', '_'), *repls) | 259 return parser.buildtree(template, ('symbol', '_'), *repls) |
260 | 260 |
261 def _match(patspec, tree): | 261 def _match(patspec, tree): |
262 """Test if a tree matches the given pattern statement; return the matches | 262 """Test if a tree matches the given pattern statement; return the matches |
263 | 263 |
264 >>> _match('f(_)', parse('f()')) | 264 >>> _match(b'f(_)', parse(b'f()')) |
265 >>> _match('f(_)', parse('f(1)')) | 265 >>> _match(b'f(_)', parse(b'f(1)')) |
266 [('func', ('symbol', 'f'), ('symbol', '1')), ('symbol', '1')] | 266 [('func', ('symbol', 'f'), ('symbol', '1')), ('symbol', '1')] |
267 >>> _match('f(_)', parse('f(1, 2)')) | 267 >>> _match(b'f(_)', parse(b'f(1, 2)')) |
268 """ | 268 """ |
269 pattern = _cachedtree(patspec) | 269 pattern = _cachedtree(patspec) |
270 return parser.matchtree(pattern, tree, ('symbol', '_'), | 270 return parser.matchtree(pattern, tree, ('symbol', '_'), |
271 {'keyvalue', 'list'}) | 271 {'keyvalue', 'list'}) |
272 | 272 |
476 _aliassyminitletters = _syminitletters | {'$'} | 476 _aliassyminitletters = _syminitletters | {'$'} |
477 | 477 |
478 def _parsewith(spec, lookup=None, syminitletters=None): | 478 def _parsewith(spec, lookup=None, syminitletters=None): |
479 """Generate a parse tree of given spec with given tokenizing options | 479 """Generate a parse tree of given spec with given tokenizing options |
480 | 480 |
481 >>> _parsewith('foo($1)', syminitletters=_aliassyminitletters) | 481 >>> _parsewith(b'foo($1)', syminitletters=_aliassyminitletters) |
482 ('func', ('symbol', 'foo'), ('symbol', '$1')) | 482 ('func', ('symbol', 'foo'), ('symbol', '$1')) |
483 >>> _parsewith('$1') | 483 >>> _parsewith(b'$1') |
484 Traceback (most recent call last): | 484 Traceback (most recent call last): |
485 ... | 485 ... |
486 ParseError: ("syntax error in revset '$1'", 0) | 486 ParseError: ("syntax error in revset '$1'", 0) |
487 >>> _parsewith('foo bar') | 487 >>> _parsewith(b'foo bar') |
488 Traceback (most recent call last): | 488 Traceback (most recent call last): |
489 ... | 489 ... |
490 ParseError: ('invalid token', 4) | 490 ParseError: ('invalid token', 4) |
491 """ | 491 """ |
492 p = parser.parser(elements) | 492 p = parser.parser(elements) |
552 return _parsewith(spec, lookup=lookup) | 552 return _parsewith(spec, lookup=lookup) |
553 | 553 |
554 def _quote(s): | 554 def _quote(s): |
555 r"""Quote a value in order to make it safe for the revset engine. | 555 r"""Quote a value in order to make it safe for the revset engine. |
556 | 556 |
557 >>> _quote('asdf') | 557 >>> _quote(b'asdf') |
558 "'asdf'" | 558 "'asdf'" |
559 >>> _quote("asdf'\"") | 559 >>> _quote(b"asdf'\"") |
560 '\'asdf\\\'"\'' | 560 '\'asdf\\\'"\'' |
561 >>> _quote('asdf\'') | 561 >>> _quote(b'asdf\'') |
562 "'asdf\\''" | 562 "'asdf\\''" |
563 >>> _quote(1) | 563 >>> _quote(1) |
564 "'1'" | 564 "'1'" |
565 """ | 565 """ |
566 return "'%s'" % util.escapestr(pycompat.bytestr(s)) | 566 return "'%s'" % util.escapestr(pycompat.bytestr(s)) |
580 %n = hex(arg), single-quoted | 580 %n = hex(arg), single-quoted |
581 %% = a literal '%' | 581 %% = a literal '%' |
582 | 582 |
583 Prefixing the type with 'l' specifies a parenthesized list of that type. | 583 Prefixing the type with 'l' specifies a parenthesized list of that type. |
584 | 584 |
585 >>> formatspec('%r:: and %lr', '10 or 11', ("this()", "that()")) | 585 >>> formatspec(b'%r:: and %lr', b'10 or 11', (b"this()", b"that()")) |
586 '(10 or 11):: and ((this()) or (that()))' | 586 '(10 or 11):: and ((this()) or (that()))' |
587 >>> formatspec('%d:: and not %d::', 10, 20) | 587 >>> formatspec(b'%d:: and not %d::', 10, 20) |
588 '10:: and not 20::' | 588 '10:: and not 20::' |
589 >>> formatspec('%ld or %ld', [], [1]) | 589 >>> formatspec(b'%ld or %ld', [], [1]) |
590 "_list('') or 1" | 590 "_list('') or 1" |
591 >>> formatspec('keyword(%s)', 'foo\\xe9') | 591 >>> formatspec(b'keyword(%s)', b'foo\\xe9') |
592 "keyword('foo\\\\xe9')" | 592 "keyword('foo\\\\xe9')" |
593 >>> b = lambda: 'default' | 593 >>> b = lambda: b'default' |
594 >>> b.branch = b | 594 >>> b.branch = b |
595 >>> formatspec('branch(%b)', b) | 595 >>> formatspec(b'branch(%b)', b) |
596 "branch('default')" | 596 "branch('default')" |
597 >>> formatspec('root(%ls)', ['a', 'b', 'c', 'd']) | 597 >>> formatspec(b'root(%ls)', [b'a', b'b', b'c', b'd']) |
598 "root(_list('a\\x00b\\x00c\\x00d'))" | 598 "root(_list('a\\x00b\\x00c\\x00d'))" |
599 ''' | 599 ''' |
600 | 600 |
601 def argtype(c, arg): | 601 def argtype(c, arg): |
602 if c == 'd': | 602 if c == 'd': |