rapydscript-ng 0.8.3 → 0.8.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (49) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/bin/build.ts +29 -0
  3. package/package.json +1 -1
  4. package/release/baselib-plain-pretty.js +85 -61
  5. package/release/baselib-plain-ugly.js +3 -3
  6. package/release/compiler.js +2543 -2432
  7. package/release/signatures.json +26 -26
  8. package/src/ast.pyj +170 -58
  9. package/src/baselib-builtins.pyj +35 -14
  10. package/src/baselib-containers.pyj +70 -40
  11. package/src/baselib-internal.pyj +20 -8
  12. package/src/baselib-itertools.pyj +6 -2
  13. package/src/baselib-str.pyj +74 -28
  14. package/src/errors.pyj +4 -1
  15. package/src/lib/aes.pyj +664 -35
  16. package/src/lib/elementmaker.pyj +105 -13
  17. package/src/lib/encodings.pyj +31 -7
  18. package/src/lib/gettext.pyj +6 -3
  19. package/src/lib/math.pyj +38 -22
  20. package/src/lib/pythonize.pyj +5 -3
  21. package/src/lib/random.pyj +13 -5
  22. package/src/lib/re.pyj +81 -18
  23. package/src/lib/traceback.pyj +42 -10
  24. package/src/lib/uuid.pyj +2 -1
  25. package/src/output/classes.pyj +70 -26
  26. package/src/output/codegen.pyj +92 -20
  27. package/src/output/comments.pyj +11 -4
  28. package/src/output/exceptions.pyj +17 -4
  29. package/src/output/functions.pyj +34 -13
  30. package/src/output/literals.pyj +7 -2
  31. package/src/output/loops.pyj +50 -16
  32. package/src/output/modules.pyj +41 -12
  33. package/src/output/operators.pyj +154 -31
  34. package/src/output/statements.pyj +38 -10
  35. package/src/output/stream.pyj +43 -12
  36. package/src/output/utils.pyj +10 -3
  37. package/src/parse.pyj +740 -259
  38. package/src/string_interpolation.pyj +4 -1
  39. package/src/tokenizer.pyj +300 -55
  40. package/src/unicode_aliases.pyj +4 -2
  41. package/src/utils.pyj +19 -5
  42. package/test/functions.pyj +8 -0
  43. package/test/generic.pyj +9 -0
  44. package/test/lsp.pyj +16 -0
  45. package/tools/compiler.mjs +0 -6
  46. package/tools/fmt.mjs +41 -2
  47. package/tools/lint-worker.mjs +7 -1
  48. package/tools/lint.mjs +12 -5
  49. package/tools/lsp.mjs +11 -1
@@ -4,7 +4,10 @@ from __python__ import hash_literals
4
4
 
5
5
 
6
6
  def quoted_string(x):
7
- return '"' + x.replace(/\\/g, '\\\\').replace(/"/g, r'\"').replace(/\n/g, '\\n') + '"'
7
+ return '"' + x.replace(
8
+ /\\/g,
9
+ '\\\\'
10
+ ).replace(/"/g, r'\"').replace(/\n/g, '\\n') + '"'
8
11
 
9
12
 
10
13
  def render_markup(markup):
package/src/tokenizer.pyj CHANGED
@@ -14,7 +14,15 @@ RE_DEC_NUMBER = /^\d*\.?\d*(?:e[+-]?\d*(?:\d\.?|\.?\d)\d*)?$/i
14
14
 
15
15
  OPERATOR_CHARS = make_predicate(characters('+-*&%=<>!?|~^@'))
16
16
 
17
- ASCII_CONTROL_CHARS = {'a': 7, 'b': 8, 'f': 12, 'n': 10, 'r': 13, 't': 9, 'v': 11}
17
+ ASCII_CONTROL_CHARS = {
18
+ 'a': 7,
19
+ 'b': 8,
20
+ 'f': 12,
21
+ 'n': 10,
22
+ 'r': 13,
23
+ 't': 9,
24
+ 'v': 11,
25
+ }
18
26
  HEX_PAT = /[a-fA-F0-9]/
19
27
  NAME_PAT = /[a-zA-Z ]/
20
28
 
@@ -75,20 +83,33 @@ OP_MAP = {
75
83
  'is': '===',
76
84
  }
77
85
 
78
- WHITESPACE_CHARS = make_predicate(characters(' \u00a0\n\r\t\f\u000b\u200b\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000'))
86
+ WHITESPACE_CHARS = make_predicate(characters(
87
+ ' \u00a0\n\r\t\f\u000b\u200b\u180e\u2000\u2001\u2002\u2003' +
88
+ '\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000'
89
+ ))
79
90
 
80
91
  PUNC_BEFORE_EXPRESSION = make_predicate(characters('[{(,.;:'))
81
92
 
82
93
  PUNC_CHARS = make_predicate(characters('[]{}(),;:?'))
83
94
 
84
- KEYWORDS = 'as assert async await break class continue def del do elif else except finally for from global if import in is new nonlocal pass raise return yield try while with or and not'
95
+ KEYWORDS = (
96
+ 'as assert async await break class continue def del do elif else ' +
97
+ 'except finally for from global if import in is new nonlocal pass ' +
98
+ 'raise return yield try while with or and not'
99
+ )
85
100
 
86
101
  KEYWORDS_ATOM = 'False None True'
87
102
 
88
- # see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Lexical_grammar
89
- RESERVED_WORDS = ('break case class catch const continue debugger default delete do else export extends'
90
- ' finally for function if import in instanceof new return super switch this throw try typeof var void'
91
- ' while with yield enum implements static private package let public protected interface null true false')
103
+ # see https://developer.mozilla.org/en-US/docs/Web/JavaScript/
104
+ # Reference/Lexical_grammar
105
+ RESERVED_WORDS = (
106
+ 'break case class catch const continue debugger default' +
107
+ ' delete do else export extends finally for function if' +
108
+ ' import in instanceof new return super switch this throw' +
109
+ ' try typeof var void while with yield enum implements' +
110
+ ' static private package let public protected interface' +
111
+ ' null true false'
112
+ )
92
113
 
93
114
  KEYWORDS_BEFORE_EXPRESSION = 'return yield new del raise elif else if await'
94
115
 
@@ -109,7 +130,11 @@ def is_string_modifier(val):
109
130
 
110
131
 
111
132
  def is_letter(code):
112
- return code >= 97 and code <= 122 or code >= 65 and code <= 90 or code >= 170 and UNICODE.letter.test(String.fromCharCode(code))
133
+ return (
134
+ code >= 97 and code <= 122 or
135
+ code >= 65 and code <= 90 or
136
+ code >= 170 and UNICODE.letter.test(String.fromCharCode(code))
137
+ )
113
138
 
114
139
 
115
140
  def is_digit(code):
@@ -121,7 +146,10 @@ def is_alphanumeric_char(code):
121
146
 
122
147
 
123
148
  def is_unicode_combining_mark(ch):
124
- return UNICODE.non_spacing_mark.test(ch) or UNICODE.space_combining_mark.test(ch)
149
+ return (
150
+ UNICODE.non_spacing_mark.test(ch) or
151
+ UNICODE.space_combining_mark.test(ch)
152
+ )
125
153
 
126
154
 
127
155
  def is_unicode_connector_punctuation(ch):
@@ -129,7 +157,10 @@ def is_unicode_connector_punctuation(ch):
129
157
 
130
158
 
131
159
  def is_identifier(name):
132
- return not RESERVED_WORDS[name] and not KEYWORDS[name] and not KEYWORDS_ATOM[name] and IDENTIFIER_PAT.test(name)
160
+ return (
161
+ not RESERVED_WORDS[name] and not KEYWORDS[name] and
162
+ not KEYWORDS_ATOM[name] and IDENTIFIER_PAT.test(name)
163
+ )
133
164
 
134
165
 
135
166
  def is_identifier_start(code):
@@ -138,7 +169,12 @@ def is_identifier_start(code):
138
169
 
139
170
  def is_identifier_char(ch):
140
171
  code = ch.charCodeAt(0)
141
- return is_identifier_start(code) or is_digit(code) or code is 8204 or code is 8205 or is_unicode_combining_mark(ch) or is_unicode_connector_punctuation(ch)
172
+ return (
173
+ is_identifier_start(code) or is_digit(code) or
174
+ code is 8204 or code is 8205 or
175
+ is_unicode_combining_mark(ch) or
176
+ is_unicode_connector_punctuation(ch)
177
+ )
142
178
 
143
179
 
144
180
  def parse_js_number(num):
@@ -151,24 +187,153 @@ def parse_js_number(num):
151
187
 
152
188
  # regexps adapted from http://xregexp.com/plugins/#unicode
153
189
  UNICODE = { # {{{
154
- 'letter': RegExp('[\\u0041-\\u005A\\u0061-\\u007A\\u00AA\\u00B5\\u00BA\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0370-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u048A-\\u0523\\u0531-\\u0556\\u0559\\u0561-\\u0587\\u05D0-\\u05EA\\u05F0-\\u05F2\\u0621-\\u064A\\u066E\\u066F\\u0671-\\u06D3\\u06D5\\u06E5\\u06E6\\u06EE\\u06EF\\u06FA-\\u06FC\\u06FF\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07CA-\\u07EA\\u07F4\\u07F5\\u07FA\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0971\\u0972\\u097B-\\u097F\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC\\u09DD\\u09DF-\\u09E1\\u09F0\\u09F1\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A59-\\u0A5C\\u0A5E\\u0A72-\\u0A74\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AD0\\u0AE0\\u0AE1\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C\\u0B5D\\u0B5F-\\u0B61\\u0B71\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BD0\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C33\\u0C35-\\u0C39\\u0C3D\\u0C58\\u0C59\\u0C60\\u0C61\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBD\\u0CDE\\u0CE0\\u0CE1\\u0D05-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D28\\u0D2A-\\u0D39\\u0D3D\\u0D60\\u0D61\\u0D7A-\\u0D7F\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0E01-\\u0E30\\u0E32\\u0E33\\u0E40-\\u0E46\\u0E81\\u0E82\\u0E84\\u0E87\\u0E88\\u0E8A\\u0E8D\\u0E94-\\u0E97\\u0E99-\\u0E9F\\u0EA1-\\u0EA3\\u0EA5\\u0EA7\\u0EAA\\u0EAB\\u0EAD-\\u0EB0\\u0EB2\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EDC\\u0EDD\\u0F00\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8B\\u1000-\\u102A\\u103F\\u1050-\\u1055\\u105A-\\u105D\\u1061\\u1065\\u1066\\u106E-\\u1070\\u1075-\\u1081\\u108E\\u10A0-\\u10C5\\u10D0-\\u10FA\\u10FC\\u1100-\\u1159\\u115F-\\u11A2\\u11A8-\\u11F9\\u1200-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u1380-\\u138F\\u13A0-\\u13F4\\u1401-\\u166C\\u166F-\\u1676\\u1681-\\u169A\\u16A0-\\u16EA\\u1700-\\u170C\\u170E-\\u1711\\u1720-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17D7\\u17DC\\u1820-\\u1877\\u1880-\\u18A8\\u18AA\\u1900-\\u191C\\u1950-\\u196D\\u1970-\\u1974\\u1980-\\u19A9\\u19C1-\\u19C7\\u1A00-\\u1A16\\u1B05-\\u1B33\\u1B45-\\u1B4B\\u1B83-\\u1BA0\\u1BAE\\u1BAF\\u1C00-\\u1C23\\u1C4D-\\u1C4F\\u1C5A-\\u1C7D\\u1D00-\\u1DBF\\u1E00-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2071\\u207F\\u2090-\\u2094\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2183\\u2184\\u2C00-\\u2C2E\\u2C30-\\u2C5E\\u2C60-\\u2C6F\\u2C71-\\u2C7D\\u2C80-\\u2CE4\\u2D00-\\u2D25\\u2D30-\\u2D65\\u2D6F\\u2D80-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2E2F\\u3005\\u3006\\u3031-\\u3035\\u303B\\u303C\\u3041-\\u3096\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312D\\u3131-\\u318E\\u31A0-\\u31B7\\u31F0-\\u31FF\\u3400\\u4DB5\\u4E00\\u9FC3\\uA000-\\uA48C\\uA500-\\uA60C\\uA610-\\uA61F\\uA62A\\uA62B\\uA640-\\uA65F\\uA662-\\uA66E\\uA67F-\\uA697\\uA717-\\uA71F\\uA722-\\uA788\\uA78B\\uA78C\\uA7FB-\\uA801\\uA803-\\uA805\\uA807-\\uA80A\\uA80C-\\uA822\\uA840-\\uA873\\uA882-\\uA8B3\\uA90A-\\uA925\\uA930-\\uA946\\uAA00-\\uAA28\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAC00\\uD7A3\\uF900-\\uFA2D\\uFA30-\\uFA6A\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC]'),
155
- 'non_spacing_mark': RegExp('[\\u0300-\\u036F\\u0483-\\u0487\\u0591-\\u05BD\\u05BF\\u05C1\\u05C2\\u05C4\\u05C5\\u05C7\\u0610-\\u061A\\u064B-\\u065E\\u0670\\u06D6-\\u06DC\\u06DF-\\u06E4\\u06E7\\u06E8\\u06EA-\\u06ED\\u0711\\u0730-\\u074A\\u07A6-\\u07B0\\u07EB-\\u07F3\\u0816-\\u0819\\u081B-\\u0823\\u0825-\\u0827\\u0829-\\u082D\\u0900-\\u0902\\u093C\\u0941-\\u0948\\u094D\\u0951-\\u0955\\u0962\\u0963\\u0981\\u09BC\\u09C1-\\u09C4\\u09CD\\u09E2\\u09E3\\u0A01\\u0A02\\u0A3C\\u0A41\\u0A42\\u0A47\\u0A48\\u0A4B-\\u0A4D\\u0A51\\u0A70\\u0A71\\u0A75\\u0A81\\u0A82\\u0ABC\\u0AC1-\\u0AC5\\u0AC7\\u0AC8\\u0ACD\\u0AE2\\u0AE3\\u0B01\\u0B3C\\u0B3F\\u0B41-\\u0B44\\u0B4D\\u0B56\\u0B62\\u0B63\\u0B82\\u0BC0\\u0BCD\\u0C3E-\\u0C40\\u0C46-\\u0C48\\u0C4A-\\u0C4D\\u0C55\\u0C56\\u0C62\\u0C63\\u0CBC\\u0CBF\\u0CC6\\u0CCC\\u0CCD\\u0CE2\\u0CE3\\u0D41-\\u0D44\\u0D4D\\u0D62\\u0D63\\u0DCA\\u0DD2-\\u0DD4\\u0DD6\\u0E31\\u0E34-\\u0E3A\\u0E47-\\u0E4E\\u0EB1\\u0EB4-\\u0EB9\\u0EBB\\u0EBC\\u0EC8-\\u0ECD\\u0F18\\u0F19\\u0F35\\u0F37\\u0F39\\u0F71-\\u0F7E\\u0F80-\\u0F84\\u0F86\\u0F87\\u0F90-\\u0F97\\u0F99-\\u0FBC\\u0FC6\\u102D-\\u1030\\u1032-\\u1037\\u1039\\u103A\\u103D\\u103E\\u1058\\u1059\\u105E-\\u1060\\u1071-\\u1074\\u1082\\u1085\\u1086\\u108D\\u109D\\u135F\\u1712-\\u1714\\u1732-\\u1734\\u1752\\u1753\\u1772\\u1773\\u17B7-\\u17BD\\u17C6\\u17C9-\\u17D3\\u17DD\\u180B-\\u180D\\u18A9\\u1920-\\u1922\\u1927\\u1928\\u1932\\u1939-\\u193B\\u1A17\\u1A18\\u1A56\\u1A58-\\u1A5E\\u1A60\\u1A62\\u1A65-\\u1A6C\\u1A73-\\u1A7C\\u1A7F\\u1B00-\\u1B03\\u1B34\\u1B36-\\u1B3A\\u1B3C\\u1B42\\u1B6B-\\u1B73\\u1B80\\u1B81\\u1BA2-\\u1BA5\\u1BA8\\u1BA9\\u1C2C-\\u1C33\\u1C36\\u1C37\\u1CD0-\\u1CD2\\u1CD4-\\u1CE0\\u1CE2-\\u1CE8\\u1CED\\u1DC0-\\u1DE6\\u1DFD-\\u1DFF\\u20D0-\\u20DC\\u20E1\\u20E5-\\u20F0\\u2CEF-\\u2CF1\\u2DE0-\\u2DFF\\u302A-\\u302F\\u3099\\u309A\\uA66F\\uA67C\\uA67D\\uA6F0\\uA6F1\\uA802\\uA806\\uA80B\\uA825\\uA826\\uA8C4\\uA8E0-\\uA8F1\\uA926-\\uA92D\\uA947-\\uA951\\uA980-\\uA982\\uA9B3\\uA9B6-\\uA9B9\\uA9BC\\uAA29-\\uAA2E\\uAA31\\uAA32\\uAA35\\uAA36\\uAA43\\uAA4C\\uAAB0\\uAAB2-\\uAAB4\\uAAB7\\uAAB8\\uAABE\\uAABF\\uAAC1\\uABE5\\uABE8\\uABED\\uFB1E\\uFE00-\\uFE0F\\uFE20-\\uFE26]'),
156
- 'space_combining_mark': RegExp('[\\u0903\\u093E-\\u0940\\u0949-\\u094C\\u094E\\u0982\\u0983\\u09BE-\\u09C0\\u09C7\\u09C8\\u09CB\\u09CC\\u09D7\\u0A03\\u0A3E-\\u0A40\\u0A83\\u0ABE-\\u0AC0\\u0AC9\\u0ACB\\u0ACC\\u0B02\\u0B03\\u0B3E\\u0B40\\u0B47\\u0B48\\u0B4B\\u0B4C\\u0B57\\u0BBE\\u0BBF\\u0BC1\\u0BC2\\u0BC6-\\u0BC8\\u0BCA-\\u0BCC\\u0BD7\\u0C01-\\u0C03\\u0C41-\\u0C44\\u0C82\\u0C83\\u0CBE\\u0CC0-\\u0CC4\\u0CC7\\u0CC8\\u0CCA\\u0CCB\\u0CD5\\u0CD6\\u0D02\\u0D03\\u0D3E-\\u0D40\\u0D46-\\u0D48\\u0D4A-\\u0D4C\\u0D57\\u0D82\\u0D83\\u0DCF-\\u0DD1\\u0DD8-\\u0DDF\\u0DF2\\u0DF3\\u0F3E\\u0F3F\\u0F7F\\u102B\\u102C\\u1031\\u1038\\u103B\\u103C\\u1056\\u1057\\u1062-\\u1064\\u1067-\\u106D\\u1083\\u1084\\u1087-\\u108C\\u108F\\u109A-\\u109C\\u17B6\\u17BE-\\u17C5\\u17C7\\u17C8\\u1923-\\u1926\\u1929-\\u192B\\u1930\\u1931\\u1933-\\u1938\\u19B0-\\u19C0\\u19C8\\u19C9\\u1A19-\\u1A1B\\u1A55\\u1A57\\u1A61\\u1A63\\u1A64\\u1A6D-\\u1A72\\u1B04\\u1B35\\u1B3B\\u1B3D-\\u1B41\\u1B43\\u1B44\\u1B82\\u1BA1\\u1BA6\\u1BA7\\u1BAA\\u1C24-\\u1C2B\\u1C34\\u1C35\\u1CE1\\u1CF2\\uA823\\uA824\\uA827\\uA880\\uA881\\uA8B4-\\uA8C3\\uA952\\uA953\\uA983\\uA9B4\\uA9B5\\uA9BA\\uA9BB\\uA9BD-\\uA9C0\\uAA2F\\uAA30\\uAA33\\uAA34\\uAA4D\\uAA7B\\uABE3\\uABE4\\uABE6\\uABE7\\uABE9\\uABEA\\uABEC]'),
157
- 'connector_punctuation': RegExp('[\\u005F\\u203F\\u2040\\u2054\\uFE33\\uFE34\\uFE4D-\\uFE4F\\uFF3F]')
190
+ 'letter': RegExp(
191
+ '[\\u0041-\\u005A\\u0061-\\u007A\\u00AA\\u00B5\\u00BA\\u00C0-\\u00D' +
192
+ '6\\u00D8-\\u00F6\\u00F8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02E' +
193
+ 'C\\u02EE\\u0370-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u0386\\u038' +
194
+ '8-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u048' +
195
+ 'A-\\u0523\\u0531-\\u0556\\u0559\\u0561-\\u0587\\u05D0-\\u05EA\\u05F' +
196
+ '0-\\u05F2\\u0621-\\u064A\\u066E\\u066F\\u0671-\\u06D3\\u06D5\\u06E' +
197
+ '5\\u06E6\\u06EE\\u06EF\\u06FA-\\u06FC\\u06FF\\u0710\\u0712-\\u072' +
198
+ 'F\\u074D-\\u07A5\\u07B1\\u07CA-\\u07EA\\u07F4\\u07F5\\u07FA\\u090' +
199
+ '4-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0971\\u0972\\u097B-\\u097' +
200
+ 'F\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B' +
201
+ '2\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC\\u09DD\\u09DF-\\u09E1\\u09F' +
202
+ '0\\u09F1\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A3' +
203
+ '0\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A59-\\u0A5C\\u0A5' +
204
+ 'E\\u0A72-\\u0A74\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AA' +
205
+ 'A-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AD0\\u0AE0\\u0AE' +
206
+ '1\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B3' +
207
+ '2\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C\\u0B5D\\u0B5F-\\u0B61\\u0B7' +
208
+ '1\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9' +
209
+ 'A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB' +
210
+ '9\\u0BD0\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C3' +
211
+ '3\\u0C35-\\u0C39\\u0C3D\\u0C58\\u0C59\\u0C60\\u0C61\\u0C85-\\u0C8' +
212
+ 'C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CB' +
213
+ 'D\\u0CDE\\u0CE0\\u0CE1\\u0D05-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D2' +
214
+ '8\\u0D2A-\\u0D39\\u0D3D\\u0D60\\u0D61\\u0D7A-\\u0D7F\\u0D85-\\u0D9' +
215
+ '6\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0E01-\\u0E3' +
216
+ '0\\u0E32\\u0E33\\u0E40-\\u0E46\\u0E81\\u0E82\\u0E84\\u0E87\\u0E8' +
217
+ '8\\u0E8A\\u0E8D\\u0E94-\\u0E97\\u0E99-\\u0E9F\\u0EA1-\\u0EA3\\u0EA' +
218
+ '5\\u0EA7\\u0EAA\\u0EAB\\u0EAD-\\u0EB0\\u0EB2\\u0EB3\\u0EBD\\u0EC' +
219
+ '0-\\u0EC4\\u0EC6\\u0EDC\\u0EDD\\u0F00\\u0F40-\\u0F47\\u0F49-\\u0F6' +
220
+ 'C\\u0F88-\\u0F8B\\u1000-\\u102A\\u103F\\u1050-\\u1055\\u105A-\\u105' +
221
+ 'D\\u1061\\u1065\\u1066\\u106E-\\u1070\\u1075-\\u1081\\u108E\\u10A' +
222
+ '0-\\u10C5\\u10D0-\\u10FA\\u10FC\\u1100-\\u1159\\u115F-\\u11A2\\u11A' +
223
+ '8-\\u11F9\\u1200-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125' +
224
+ 'A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B' +
225
+ '5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u131' +
226
+ '0\\u1312-\\u1315\\u1318-\\u135A\\u1380-\\u138F\\u13A0-\\u13F4\\u140' +
227
+ '1-\\u166C\\u166F-\\u1676\\u1681-\\u169A\\u16A0-\\u16EA\\u1700-\\u170' +
228
+ 'C\\u170E-\\u1711\\u1720-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176' +
229
+ 'E-\\u1770\\u1780-\\u17B3\\u17D7\\u17DC\\u1820-\\u1877\\u1880-\\u18A' +
230
+ '8\\u18AA\\u1900-\\u191C\\u1950-\\u196D\\u1970-\\u1974\\u1980-\\u19A' +
231
+ '9\\u19C1-\\u19C7\\u1A00-\\u1A16\\u1B05-\\u1B33\\u1B45-\\u1B4B\\u1B8' +
232
+ '3-\\u1BA0\\u1BAE\\u1BAF\\u1C00-\\u1C23\\u1C4D-\\u1C4F\\u1C5A-\\u1C7' +
233
+ 'D\\u1D00-\\u1DBF\\u1E00-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F4' +
234
+ '8-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F8' +
235
+ '0-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD' +
236
+ '0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FF' +
237
+ 'C\\u2071\\u207F\\u2090-\\u2094\\u2102\\u2107\\u210A-\\u2113\\u211' +
238
+ '5\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u213' +
239
+ '9\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2183\\u2184\\u2C00-\\u2C2' +
240
+ 'E\\u2C30-\\u2C5E\\u2C60-\\u2C6F\\u2C71-\\u2C7D\\u2C80-\\u2CE4\\u2D0' +
241
+ '0-\\u2D25\\u2D30-\\u2D65\\u2D6F\\u2D80-\\u2D96\\u2DA0-\\u2DA6\\u2DA' +
242
+ '8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DC' +
243
+ 'E\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2E2F\\u3005\\u3006\\u3031-\\u303' +
244
+ '5\\u303B\\u303C\\u3041-\\u3096\\u309D-\\u309F\\u30A1-\\u30FA\\u30F' +
245
+ 'C-\\u30FF\\u3105-\\u312D\\u3131-\\u318E\\u31A0-\\u31B7\\u31F0-\\u31F' +
246
+ 'F\\u3400\\u4DB5\\u4E00\\u9FC3\\uA000-\\uA48C\\uA500-\\uA60C\\uA61' +
247
+ '0-\\uA61F\\uA62A\\uA62B\\uA640-\\uA65F\\uA662-\\uA66E\\uA67F-\\uA69' +
248
+ '7\\uA717-\\uA71F\\uA722-\\uA788\\uA78B\\uA78C\\uA7FB-\\uA801\\uA80' +
249
+ '3-\\uA805\\uA807-\\uA80A\\uA80C-\\uA822\\uA840-\\uA873\\uA882-\\uA8B' +
250
+ '3\\uA90A-\\uA925\\uA930-\\uA946\\uAA00-\\uAA28\\uAA40-\\uAA42\\uAA4' +
251
+ '4-\\uAA4B\\uAC00\\uD7A3\\uF900-\\uFA2D\\uFA30-\\uFA6A\\uFA70-\\uFAD' +
252
+ '9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB3' +
253
+ '6\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB' +
254
+ '1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE7' +
255
+ '0-\\uFE74\\uFE76-\\uFEFC\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFF66-\\uFFB' +
256
+ 'E\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC]'
257
+ ),
258
+ 'non_spacing_mark': RegExp(
259
+ '[\\u0300-\\u036F\\u0483-\\u0487\\u0591-\\u05BD\\u05BF\\u05C1\\u05C' +
260
+ '2\\u05C4\\u05C5\\u05C7\\u0610-\\u061A\\u064B-\\u065E\\u0670\\u06D' +
261
+ '6-\\u06DC\\u06DF-\\u06E4\\u06E7\\u06E8\\u06EA-\\u06ED\\u0711\\u073' +
262
+ '0-\\u074A\\u07A6-\\u07B0\\u07EB-\\u07F3\\u0816-\\u0819\\u081B-\\u082' +
263
+ '3\\u0825-\\u0827\\u0829-\\u082D\\u0900-\\u0902\\u093C\\u0941-\\u094' +
264
+ '8\\u094D\\u0951-\\u0955\\u0962\\u0963\\u0981\\u09BC\\u09C1-\\u09C' +
265
+ '4\\u09CD\\u09E2\\u09E3\\u0A01\\u0A02\\u0A3C\\u0A41\\u0A42\\u0A4' +
266
+ '7\\u0A48\\u0A4B-\\u0A4D\\u0A51\\u0A70\\u0A71\\u0A75\\u0A81\\u0A8' +
267
+ '2\\u0ABC\\u0AC1-\\u0AC5\\u0AC7\\u0AC8\\u0ACD\\u0AE2\\u0AE3\\u0B0' +
268
+ '1\\u0B3C\\u0B3F\\u0B41-\\u0B44\\u0B4D\\u0B56\\u0B62\\u0B63\\u0B8' +
269
+ '2\\u0BC0\\u0BCD\\u0C3E-\\u0C40\\u0C46-\\u0C48\\u0C4A-\\u0C4D\\u0C5' +
270
+ '5\\u0C56\\u0C62\\u0C63\\u0CBC\\u0CBF\\u0CC6\\u0CCC\\u0CCD\\u0CE' +
271
+ '2\\u0CE3\\u0D41-\\u0D44\\u0D4D\\u0D62\\u0D63\\u0DCA\\u0DD2-\\u0DD' +
272
+ '4\\u0DD6\\u0E31\\u0E34-\\u0E3A\\u0E47-\\u0E4E\\u0EB1\\u0EB4-\\u0EB' +
273
+ '9\\u0EBB\\u0EBC\\u0EC8-\\u0ECD\\u0F18\\u0F19\\u0F35\\u0F37\\u0F3' +
274
+ '9\\u0F71-\\u0F7E\\u0F80-\\u0F84\\u0F86\\u0F87\\u0F90-\\u0F97\\u0F9' +
275
+ '9-\\u0FBC\\u0FC6\\u102D-\\u1030\\u1032-\\u1037\\u1039\\u103A\\u103' +
276
+ 'D\\u103E\\u1058\\u1059\\u105E-\\u1060\\u1071-\\u1074\\u1082\\u108' +
277
+ '5\\u1086\\u108D\\u109D\\u135F\\u1712-\\u1714\\u1732-\\u1734\\u175' +
278
+ '2\\u1753\\u1772\\u1773\\u17B7-\\u17BD\\u17C6\\u17C9-\\u17D3\\u17D' +
279
+ 'D\\u180B-\\u180D\\u18A9\\u1920-\\u1922\\u1927\\u1928\\u1932\\u193' +
280
+ '9-\\u193B\\u1A17\\u1A18\\u1A56\\u1A58-\\u1A5E\\u1A60\\u1A62\\u1A6' +
281
+ '5-\\u1A6C\\u1A73-\\u1A7C\\u1A7F\\u1B00-\\u1B03\\u1B34\\u1B36-\\u1B3' +
282
+ 'A\\u1B3C\\u1B42\\u1B6B-\\u1B73\\u1B80\\u1B81\\u1BA2-\\u1BA5\\u1BA' +
283
+ '8\\u1BA9\\u1C2C-\\u1C33\\u1C36\\u1C37\\u1CD0-\\u1CD2\\u1CD4-\\u1CE' +
284
+ '0\\u1CE2-\\u1CE8\\u1CED\\u1DC0-\\u1DE6\\u1DFD-\\u1DFF\\u20D0-\\u20D' +
285
+ 'C\\u20E1\\u20E5-\\u20F0\\u2CEF-\\u2CF1\\u2DE0-\\u2DFF\\u302A-\\u302' +
286
+ 'F\\u3099\\u309A\\uA66F\\uA67C\\uA67D\\uA6F0\\uA6F1\\uA802\\uA80' +
287
+ '6\\uA80B\\uA825\\uA826\\uA8C4\\uA8E0-\\uA8F1\\uA926-\\uA92D\\uA94' +
288
+ '7-\\uA951\\uA980-\\uA982\\uA9B3\\uA9B6-\\uA9B9\\uA9BC\\uAA29-\\uAA2' +
289
+ 'E\\uAA31\\uAA32\\uAA35\\uAA36\\uAA43\\uAA4C\\uAAB0\\uAAB2-\\uAAB' +
290
+ '4\\uAAB7\\uAAB8\\uAABE\\uAABF\\uAAC1\\uABE5\\uABE8\\uABED\\uFB1' +
291
+ 'E\\uFE00-\\uFE0F\\uFE20-\\uFE26]'
292
+ ),
293
+ 'space_combining_mark': RegExp(
294
+ '[\\u0903\\u093E-\\u0940\\u0949-\\u094C\\u094E\\u0982\\u0983\\u09B' +
295
+ 'E-\\u09C0\\u09C7\\u09C8\\u09CB\\u09CC\\u09D7\\u0A03\\u0A3E-\\u0A4' +
296
+ '0\\u0A83\\u0ABE-\\u0AC0\\u0AC9\\u0ACB\\u0ACC\\u0B02\\u0B03\\u0B3' +
297
+ 'E\\u0B40\\u0B47\\u0B48\\u0B4B\\u0B4C\\u0B57\\u0BBE\\u0BBF\\u0BC' +
298
+ '1\\u0BC2\\u0BC6-\\u0BC8\\u0BCA-\\u0BCC\\u0BD7\\u0C01-\\u0C03\\u0C4' +
299
+ '1-\\u0C44\\u0C82\\u0C83\\u0CBE\\u0CC0-\\u0CC4\\u0CC7\\u0CC8\\u0CC' +
300
+ 'A\\u0CCB\\u0CD5\\u0CD6\\u0D02\\u0D03\\u0D3E-\\u0D40\\u0D46-\\u0D4' +
301
+ '8\\u0D4A-\\u0D4C\\u0D57\\u0D82\\u0D83\\u0DCF-\\u0DD1\\u0DD8-\\u0DD' +
302
+ 'F\\u0DF2\\u0DF3\\u0F3E\\u0F3F\\u0F7F\\u102B\\u102C\\u1031\\u103' +
303
+ '8\\u103B\\u103C\\u1056\\u1057\\u1062-\\u1064\\u1067-\\u106D\\u108' +
304
+ '3\\u1084\\u1087-\\u108C\\u108F\\u109A-\\u109C\\u17B6\\u17BE-\\u17C' +
305
+ '5\\u17C7\\u17C8\\u1923-\\u1926\\u1929-\\u192B\\u1930\\u1931\\u193' +
306
+ '3-\\u1938\\u19B0-\\u19C0\\u19C8\\u19C9\\u1A19-\\u1A1B\\u1A55\\u1A5' +
307
+ '7\\u1A61\\u1A63\\u1A64\\u1A6D-\\u1A72\\u1B04\\u1B35\\u1B3B\\u1B3' +
308
+ 'D-\\u1B41\\u1B43\\u1B44\\u1B82\\u1BA1\\u1BA6\\u1BA7\\u1BAA\\u1C2' +
309
+ '4-\\u1C2B\\u1C34\\u1C35\\u1CE1\\u1CF2\\uA823\\uA824\\uA827\\uA88' +
310
+ '0\\uA881\\uA8B4-\\uA8C3\\uA952\\uA953\\uA983\\uA9B4\\uA9B5\\uA9B' +
311
+ 'A\\uA9BB\\uA9BD-\\uA9C0\\uAA2F\\uAA30\\uAA33\\uAA34\\uAA4D\\uAA7' +
312
+ 'B\\uABE3\\uABE4\\uABE6\\uABE7\\uABE9\\uABEA\\uABEC]'
313
+ ),
314
+ 'connector_punctuation': RegExp(
315
+ '[\\u005F\\u203F\\u2040\\u2054\\uFE33\\uFE34\\uFE4D-\\uFE4F\\uFF3F]'
316
+ )
158
317
  } # }}}
159
318
 
160
319
 
161
320
  def is_token(token, type, val):
162
- return token.type is type and (val is None or val is undefined or token.value is val)
321
+ return (
322
+ token.type is type and
323
+ (val is None or val is undefined or token.value is val)
324
+ )
163
325
 
164
326
  EX_EOF = {}
165
327
 
166
328
 
167
329
  def tokenizer(raw_text, filename, recover_errors):
168
330
  S = {
169
- 'text': raw_text.replace(/\r\n?|[\n\u2028\u2029]/g, '\n').replace(/\uFEFF/g, ''),
331
+ 'text': raw_text.replace(
332
+ /\r\n?|[\n\u2028\u2029]/g, '\n'
333
+ ).replace(/\uFEFF/g, ''),
170
334
  'filename': filename,
171
- 'recover_errors': not not recover_errors, # LSP error-recovery mode (see parse())
335
+ # LSP error-recovery mode (see parse())
336
+ 'recover_errors': not not recover_errors,
172
337
  'recovered_errors': v'[]', # collected errors when recover_errors is on
173
338
  'pos': 0,
174
339
  'tokpos': 0,
@@ -186,7 +351,9 @@ def tokenizer(raw_text, filename, recover_errors):
186
351
  'cached_whitespace': '',
187
352
  'prev': undefined,
188
353
  'index_or_slice': v'[ false ]',
189
- 'expecting_object_literal_key': False, # This is set by the parser when it is expecting an object literal key
354
+ # This is set by the parser when it is expecting an
355
+ # object literal key
356
+ 'expecting_object_literal_key': False,
190
357
  }
191
358
 
192
359
  def peek():
@@ -225,7 +392,9 @@ def tokenizer(raw_text, filename, recover_errors):
225
392
  or type is 'keyword' and KEYWORDS_BEFORE_EXPRESSION[value]
226
393
  or type is 'punc' and PUNC_BEFORE_EXPRESSION[value])
227
394
 
228
- if type is 'operator' and value is 'is' and S.text.substr(S.pos).trimLeft().substr(0, 4).trimRight() is 'not':
395
+ if (type is 'operator' and value is 'is' and
396
+ S.text.substr(S.pos).trimLeft()
397
+ .substr(0, 4).trimRight() is 'not'):
229
398
  next_token()
230
399
  value = '!=='
231
400
 
@@ -257,14 +426,18 @@ def tokenizer(raw_text, filename, recover_errors):
257
426
  # if (value is ":" && peek() is "\n") {
258
427
  if value is ':' and not S.index_or_slice[-1]
259
428
  and not S.expecting_object_literal_key
260
- and (not S.text.substring(S.pos + 1, find('\n')).trim() or not S.text.substring(S.pos + 1, find('#')).trim()):
429
+ and (
430
+ not S.text.substring(S.pos + 1, find('\n')).trim() or
431
+ not S.text.substring(S.pos + 1, find('#')).trim()
432
+ ):
261
433
  S.newblock = True
262
434
  S.indentation_matters.push(True)
263
435
 
264
436
  if value is '[':
265
437
  if S.prev and (
266
438
  S.prev.type is 'name' or
267
- (S.prev.type is 'punc' and ')]'.indexOf(S.prev.value) is not -1)
439
+ (S.prev.type is 'punc' and
440
+ ')]'.indexOf(S.prev.value) is not -1)
268
441
  ):
269
442
  S.index_or_slice.push(True)
270
443
  else:
@@ -304,7 +477,8 @@ def tokenizer(raw_text, filename, recover_errors):
304
477
  most_recent = S.whitespace_before[-1] or ''
305
478
  S.endblock = False
306
479
  if S.indentation_matters[-1] and leading_whitespace is not most_recent:
307
- if S.newblock and leading_whitespace and leading_whitespace.indexOf(most_recent) is 0:
480
+ if (S.newblock and leading_whitespace and
481
+ leading_whitespace.indexOf(most_recent) is 0):
308
482
  # positive indent, new block
309
483
  S.newblock = False
310
484
  S.whitespace_before.push(leading_whitespace)
@@ -329,7 +503,14 @@ def tokenizer(raw_text, filename, recover_errors):
329
503
  return ret
330
504
 
331
505
  def parse_error(err, is_eof):
332
- raise new SyntaxError(err, filename, S.tokline, S.tokcol, S.tokpos, is_eof)
506
+ raise new SyntaxError(
507
+ err,
508
+ filename,
509
+ S.tokline,
510
+ S.tokcol,
511
+ S.tokpos,
512
+ is_eof
513
+ )
333
514
 
334
515
  def read_num(prefix):
335
516
  has_e = False
@@ -369,7 +550,9 @@ def tokenizer(raw_text, filename, recover_errors):
369
550
  return True
370
551
  return False
371
552
  elif ch is '.':
372
- return (has_dot = True) if not has_dot and not has_x and not has_e else False
553
+ return (has_dot = True) if (
554
+ not has_dot and not has_x and not has_e
555
+ ) else False
373
556
  return is_alphanumeric_char(ch.charCodeAt(0))
374
557
  )
375
558
  if prefix:
@@ -429,7 +612,10 @@ def tokenizer(raw_text, filename, recover_errors):
429
612
  if code <= 0xFFFF:
430
613
  return String.fromCharCode(code)
431
614
  code -= 0x10000
432
- return String.fromCharCode(0xD800 + (code >> 10), 0xDC00 + (code & 0x3FF))
615
+ return String.fromCharCode(
616
+ 0xD800 + (code >> 10),
617
+ 0xDC00 + (code & 0x3FF)
618
+ )
433
619
  return '\\U' + code
434
620
  if q is 'N' and peek() is '{':
435
621
  next()
@@ -438,13 +624,19 @@ def tokenizer(raw_text, filename, recover_errors):
438
624
  return '\\N{' + name
439
625
  next()
440
626
  key = (name or '').toLowerCase()
441
- if not name or not Object.prototype.hasOwnProperty.call(ALIAS_MAP, key):
627
+ if not name or not Object.prototype.hasOwnProperty.call(
628
+ ALIAS_MAP,
629
+ key
630
+ ):
442
631
  return '\\N{' + name + '}'
443
632
  code = ALIAS_MAP[key]
444
633
  if code <= 0xFFFF:
445
634
  return String.fromCharCode(code)
446
635
  code -= 0x10000
447
- return String.fromCharCode(0xD800 + (code >> 10), 0xDC00 + (code & 0x3FF))
636
+ return String.fromCharCode(
637
+ 0xD800 + (code >> 10),
638
+ 0xDC00 + (code & 0x3FF)
639
+ )
448
640
  return '\\' + q
449
641
 
450
642
  def with_eof_error(eof_error, cont):
@@ -457,7 +649,8 @@ def tokenizer(raw_text, filename, recover_errors):
457
649
  else:
458
650
  raise
459
651
 
460
- read_string = with_eof_error('Unterminated string constant', def (is_raw_literal, is_js_literal):
652
+ read_string = with_eof_error('Unterminated string constant', def (
653
+ is_raw_literal, is_js_literal):
461
654
  quote = next()
462
655
  tok_type = 'js' if is_js_literal else 'string'
463
656
  ret = ''
@@ -478,7 +671,10 @@ def tokenizer(raw_text, filename, recover_errors):
478
671
  if ch is '\n' and not is_multiline:
479
672
  parse_error('End of line while scanning string literal')
480
673
  if ch is '\\':
481
- ret += ('\\' + next(True)) if is_raw_literal else read_escape_sequence()
674
+ ret += (
675
+ ('\\' + next(True)) if is_raw_literal else
676
+ read_escape_sequence()
677
+ )
482
678
  continue
483
679
  if ch is quote:
484
680
  if not is_multiline:
@@ -496,19 +692,31 @@ def tokenizer(raw_text, filename, recover_errors):
496
692
 
497
693
  def handle_interpolated_string(string, start_tok, is_fstring=True):
498
694
  def raise_error(err):
499
- raise new SyntaxError(err, filename, start_tok.line, start_tok.col, start_tok.pos, False)
695
+ raise new SyntaxError(
696
+ err,
697
+ filename,
698
+ start_tok.line,
699
+ start_tok.col,
700
+ start_tok.pos,
701
+ False
702
+ )
500
703
  if is_fstring:
501
704
  parts = v'[interpolate(string, raise_error)]'
502
705
  else:
503
706
  parts = v'[quoted_string(string)]'
504
- # Look ahead for consecutive string literals to concatenate (e.g. f'a'f'b' or f'a''b')
707
+ # Look ahead for consecutive string literals to concatenate
708
+ # (e.g. f'a'f'b' or f'a''b')
505
709
  while True:
506
- # Skip horizontal whitespace; also skip newlines inside brackets where indentation is irrelevant
710
+ # Skip horizontal whitespace; also skip newlines inside
711
+ # brackets where indentation is irrelevant
507
712
  while S.pos < S.text.length:
508
713
  wch = S.text.charAt(S.pos)
509
714
  if wch is ' ' or wch is '\t':
510
715
  next()
511
- elif (wch is '\n' or wch is '\r') and not S.indentation_matters[-1]:
716
+ elif (
717
+ (wch is '\n' or wch is '\r') and
718
+ not S.indentation_matters[-1]
719
+ ):
512
720
  next()
513
721
  else:
514
722
  break
@@ -516,13 +724,16 @@ def tokenizer(raw_text, filename, recover_errors):
516
724
  if not ch:
517
725
  break
518
726
  if ch is "'" or ch is '"':
519
- # A plain string literal follows; read it and append its quoted value
727
+ # A plain string literal follows; read it and
728
+ # append its quoted value
520
729
  stok = read_string(False, False)
521
730
  parts.push(quoted_string(stok.value))
522
731
  elif is_identifier_start(ch.charCodeAt(0)):
523
- # Peek ahead (without consuming) to check if it is a string modifier followed by a quote
732
+ # Peek ahead (without consuming) to check if it is
733
+ # a string modifier followed by a quote
524
734
  j = S.pos
525
- while j < S.text.length and is_identifier_char(S.text.charAt(j)):
735
+ while (j < S.text.length and
736
+ is_identifier_char(S.text.charAt(j))):
526
737
  j += 1
527
738
  potential_mod = S.text.substring(S.pos, j)
528
739
  if not is_string_modifier(potential_mod):
@@ -532,7 +743,8 @@ def tokenizer(raw_text, filename, recover_errors):
532
743
  mods = potential_mod.toLowerCase()
533
744
  if mods.indexOf('v') is not -1:
534
745
  break # Do not concatenate with verbatim JS literals
535
- # Consume the modifier characters via next() to keep position tracking correct
746
+ # Consume the modifier characters via next() to keep
747
+ # position tracking correct
536
748
  while S.pos < j:
537
749
  next()
538
750
  is_raw = mods.indexOf('r') is not -1
@@ -619,7 +831,8 @@ def tokenizer(raw_text, filename, recover_errors):
619
831
  break
620
832
  elif ch is '\\':
621
833
  prev_backslash = True
622
- elif verbose_regexp and not in_class and ' \n\r\t'.indexOf(ch) is not -1:
834
+ elif (verbose_regexp and not in_class and
835
+ ' \n\r\t'.indexOf(ch) is not -1):
623
836
  pass
624
837
  elif verbose_regexp and not in_class and ch is '#':
625
838
  in_comment = True
@@ -653,14 +866,23 @@ def tokenizer(raw_text, filename, recover_errors):
653
866
 
654
867
  def handle_dot():
655
868
  next()
656
- return read_num('.') if is_digit(peek().charCodeAt(0)) else token('punc', '.')
869
+ return read_num('.') if is_digit(peek().charCodeAt(0)) else token(
870
+ 'punc',
871
+ '.'
872
+ )
657
873
 
658
874
  def read_word():
659
875
  word = read_name()
660
876
  return token(
661
877
  'atom',
662
878
  word
663
- ) if KEYWORDS_ATOM[word] else (token('name', word) if not KEYWORDS[word] else (token('operator', word) if OPERATORS[word] and prevChar() is not '.' else token('keyword', word)))
879
+ ) if KEYWORDS_ATOM[word] else (
880
+ token('name', word) if not KEYWORDS[word] else (
881
+ token('operator', word) if (
882
+ OPERATORS[word] and prevChar() is not '.'
883
+ ) else token('keyword', word)
884
+ )
885
+ )
664
886
 
665
887
  def next_token():
666
888
  indent = parse_whitespace()
@@ -678,27 +900,40 @@ def tokenizer(raw_text, filename, recover_errors):
678
900
  tmp_ = code
679
901
  if tmp_ is 34 or tmp_ is 39: # double-quote (") or single quote (')
680
902
  stok = read_string(False)
681
- # Look ahead to detect a following f-string (e.g. "a" f"b"), which would
682
- # otherwise be parsed as a call expression "a"(...) after the tokenizer
683
- # injects the f-string result as a parenthesised expression.
903
+ # Look ahead to detect a following f-string
904
+ # (e.g. "a" f"b"), which would otherwise be parsed as a
905
+ # call expression "a"(...) after the tokenizer injects
906
+ # the f-string result as a parenthesised expression.
684
907
  j = S.pos
685
908
  while j < S.text.length:
686
909
  jch = S.text.charAt(j)
687
910
  if jch is ' ' or jch is '\t':
688
911
  j += 1
689
- elif (jch is '\n' or jch is '\r') and not S.indentation_matters[-1]:
912
+ elif (
913
+ (jch is '\n' or jch is '\r') and
914
+ not S.indentation_matters[-1]
915
+ ):
690
916
  j += 1
691
917
  else:
692
918
  break
693
- if j < S.text.length and is_identifier_start(S.text.charAt(j).charCodeAt(0)):
919
+ if (j < S.text.length and
920
+ is_identifier_start(S.text.charAt(j).charCodeAt(0))):
694
921
  k = j
695
- while k < S.text.length and is_identifier_char(S.text.charAt(k)):
922
+ while (k < S.text.length and
923
+ is_identifier_char(S.text.charAt(k))):
696
924
  k += 1
697
925
  potential_mod = S.text.substring(j, k)
698
- if is_string_modifier(potential_mod) and k < S.text.length and '\'"'.indexOf(S.text.charAt(k)) is not -1:
926
+ if (is_string_modifier(potential_mod) and
927
+ k < S.text.length and
928
+ '\'"'.indexOf(S.text.charAt(k)) is not -1):
699
929
  mods_check = potential_mod.toLowerCase()
700
- if mods_check.indexOf('f') is not -1 and mods_check.indexOf('v') is -1:
701
- return handle_interpolated_string(stok.value, stok, False)
930
+ if (mods_check.indexOf('f') is not -1 and
931
+ mods_check.indexOf('v') is -1):
932
+ return handle_interpolated_string(
933
+ stok.value,
934
+ stok,
935
+ False
936
+ )
702
937
  return stok
703
938
  elif tmp_ is 35: # pound-sign (#)
704
939
  if S.pos is 0 and S.text.charAt(1) is '!':
@@ -733,10 +968,14 @@ def tokenizer(raw_text, filename, recover_errors):
733
968
 
734
969
  if is_identifier_start(code):
735
970
  tok = read_word()
736
- if '\'"'.indexOf(peek()) is not -1 and is_string_modifier(tok.value):
971
+ if ('\'"'.indexOf(peek()) is not -1 and
972
+ is_string_modifier(tok.value)):
737
973
  mods = tok.value.toLowerCase()
738
974
  start_pos_for_string = S.tokpos
739
- stok = read_string(mods.indexOf('r') is not -1, mods.indexOf('v') is not -1)
975
+ stok = read_string(
976
+ mods.indexOf('r') is not -1,
977
+ mods.indexOf('v') is not -1
978
+ )
740
979
  tok.endpos = stok.endpos
741
980
  if stok.type is not 'js' and mods.indexOf('f') is not -1:
742
981
  tok.col += start_pos_for_string - tok.pos
@@ -749,10 +988,16 @@ def tokenizer(raw_text, filename, recover_errors):
749
988
  # In error-recovery mode (used by the LSP) an unrecognized character
750
989
  # must not raise, because re-tokenizing from the same position would
751
990
  # loop forever (parse_error is raised before the character is
752
- # consumed). Record it and skip the single offending character so the
991
+ # consumed). Record it and skip the single offending
992
+ # character so the
753
993
  # tokenizer always makes forward progress.
754
- S.recovered_errors.push({'message': 'Unexpected character «' + ch + '»',
755
- 'line': S.tokline, 'col': S.tokcol, 'pos': S.tokpos, 'is_eof': False})
994
+ S.recovered_errors.push({
995
+ 'message': 'Unexpected character «' + ch + '»',
996
+ 'line': S.tokline,
997
+ 'col': S.tokcol,
998
+ 'pos': S.tokpos,
999
+ 'is_eof': False
1000
+ })
756
1001
  next()
757
1002
  return next_token()
758
1003
  parse_error('Unexpected character «' + ch + '»')
@@ -17,7 +17,8 @@ DB = '''
17
17
  #
18
18
  # For informative aliases, see NamesList.txt
19
19
  #
20
- # The formal name aliases are divided into five types, each with a distinct label.
20
+ # The formal name aliases are divided into five types, each with a distinct
21
+ # label.
21
22
  #
22
23
  # Type Labels:
23
24
  #
@@ -40,7 +41,8 @@ DB = '''
40
41
  # The inclusion of ISO 6429 names and other commonly occurring names and
41
42
  # abbreviations for control codes and format characters as formal name aliases
42
43
  # is to help avoid name collisions between Unicode character names and the
43
- # labels which commonly appear in text and/or in implementations such as regex, for
44
+ # labels which commonly appear in text and/or in implementations such as regex,
45
+ # for
44
46
  # control codes (which for historical reasons have no Unicode character name)
45
47
  # or for format characters.
46
48
  #