Skip to content

Commit bda29a7

Browse files
committed
JavaScript: modernize lexer slightly
1 parent dd467ca commit bda29a7

File tree

1 file changed

+13
-24
lines changed

1 file changed

+13
-24
lines changed

babel/messages/jslexer.py

Lines changed: 13 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -9,27 +9,34 @@
99
:copyright: (c) 2013 by the Babel Team.
1010
:license: BSD, see LICENSE for more details.
1111
"""
12-
13-
from operator import itemgetter
12+
from collections import namedtuple
1413
import re
1514
from babel._compat import unichr
1615

17-
operators = [
16+
operators = sorted([
1817
'+', '-', '*', '%', '!=', '==', '<', '>', '<=', '>=', '=',
1918
'+=', '-=', '*=', '%=', '<<', '>>', '>>>', '<<=', '>>=',
2019
'>>>=', '&', '&=', '|', '|=', '&&', '||', '^', '^=', '(', ')',
2120
'[', ']', '{', '}', '!', '--', '++', '~', ',', ';', '.', ':'
22-
]
23-
operators.sort(key=lambda a: -len(a))
21+
], key=len, reverse=True)
2422

2523
escapes = {'b': '\b', 'f': '\f', 'n': '\n', 'r': '\r', 't': '\t'}
2624

25+
division_re = re.compile(r'/=?')
26+
regex_re = re.compile(r'/(?:[^/\\]*(?:\\.[^/\\]*)*)/[a-zA-Z]*(?s)')
27+
line_re = re.compile(r'(\r\n|\n|\r)')
28+
line_join_re = re.compile(r'\\' + line_re.pattern)
29+
uni_escape_re = re.compile(r'[a-fA-F0-9]{1,4}')
30+
name_re = re.compile(r'(\$+\w*|[^\W\d]\w*)(?u)')
31+
32+
Token = namedtuple('Token', 'type value lineno')
33+
2734
rules = [
2835
(None, re.compile(r'\s+(?u)')),
2936
(None, re.compile(r'<!--.*')),
3037
('linecomment', re.compile(r'//.*')),
3138
('multilinecomment', re.compile(r'/\*.*?\*/(?us)')),
32-
('name', re.compile(r'(\$+\w*|[^\W\d]\w*)(?u)')),
39+
('name', name_re),
3340
('number', re.compile(r'''(?x)(
3441
(?:0|[1-9]\d*)
3542
(\.\d+)?
@@ -43,24 +50,6 @@
4350
)'''))
4451
]
4552

46-
division_re = re.compile(r'/=?')
47-
regex_re = re.compile(r'/(?:[^/\\]*(?:\\.[^/\\]*)*)/[a-zA-Z]*(?s)')
48-
line_re = re.compile(r'(\r\n|\n|\r)')
49-
line_join_re = re.compile(r'\\' + line_re.pattern)
50-
uni_escape_re = re.compile(r'[a-fA-F0-9]{1,4}')
51-
52-
53-
class Token(tuple):
54-
"""Represents a token as returned by `tokenize`."""
55-
__slots__ = ()
56-
57-
def __new__(cls, type, value, lineno):
58-
return tuple.__new__(cls, (type, value, lineno))
59-
60-
type = property(itemgetter(0))
61-
value = property(itemgetter(1))
62-
lineno = property(itemgetter(2))
63-
6453

6554
def indicates_division(token):
6655
"""A helper function that helps the tokenizer to decide if the current

0 commit comments

Comments
 (0)