rapydscript-ng 0.8.2 → 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 (60) hide show
  1. package/CHANGELOG.md +17 -0
  2. package/bin/build.ts +29 -0
  3. package/local-agent.md +4 -0
  4. package/package.json +1 -1
  5. package/release/baselib-plain-pretty.js +85 -61
  6. package/release/baselib-plain-ugly.js +3 -3
  7. package/release/compiler.js +9661 -9540
  8. package/release/signatures.json +26 -26
  9. package/src/ast.pyj +169 -64
  10. package/src/baselib-builtins.pyj +35 -14
  11. package/src/baselib-containers.pyj +70 -40
  12. package/src/baselib-internal.pyj +20 -8
  13. package/src/baselib-itertools.pyj +6 -2
  14. package/src/baselib-str.pyj +74 -28
  15. package/src/errors.pyj +4 -1
  16. package/src/lib/aes.pyj +664 -35
  17. package/src/lib/elementmaker.pyj +105 -13
  18. package/src/lib/encodings.pyj +31 -7
  19. package/src/lib/gettext.pyj +6 -3
  20. package/src/lib/math.pyj +38 -22
  21. package/src/lib/pythonize.pyj +5 -3
  22. package/src/lib/random.pyj +13 -5
  23. package/src/lib/re.pyj +81 -18
  24. package/src/lib/traceback.pyj +42 -10
  25. package/src/lib/uuid.pyj +2 -1
  26. package/src/output/classes.pyj +70 -26
  27. package/src/output/codegen.pyj +92 -20
  28. package/src/output/comments.pyj +11 -4
  29. package/src/output/exceptions.pyj +17 -4
  30. package/src/output/functions.pyj +145 -26
  31. package/src/output/literals.pyj +7 -2
  32. package/src/output/loops.pyj +79 -23
  33. package/src/output/modules.pyj +41 -12
  34. package/src/output/operators.pyj +154 -31
  35. package/src/output/statements.pyj +38 -10
  36. package/src/output/stream.pyj +43 -12
  37. package/src/output/utils.pyj +10 -3
  38. package/src/parse.pyj +740 -259
  39. package/src/string_interpolation.pyj +4 -1
  40. package/src/tokenizer.pyj +314 -57
  41. package/src/unicode_aliases.pyj +4 -2
  42. package/src/utils.pyj +19 -5
  43. package/test/functions.pyj +8 -0
  44. package/test/generic.pyj +9 -0
  45. package/test/lsp.pyj +16 -0
  46. package/test/str.pyj +10 -0
  47. package/tools/cli.mjs +4 -3
  48. package/tools/compile.mjs +9 -3
  49. package/tools/compiler.mjs +0 -6
  50. package/tools/fmt.mjs +41 -2
  51. package/tools/lint-worker.mjs +107 -0
  52. package/tools/lint.mjs +134 -8
  53. package/tools/lsp.mjs +11 -1
  54. package/tree-sitter/grammar.js +27 -6
  55. package/tree-sitter/queries/highlights.scm +10 -0
  56. package/tree-sitter/src/grammar.json +130 -5
  57. package/tree-sitter/src/node-types.json +73 -0
  58. package/tree-sitter/src/parser.c +119589 -114993
  59. package/tree-sitter/src/scanner.c +275 -17
  60. package/tree-sitter/test/corpus/strings.txt +41 -5
@@ -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,27 +692,48 @@ 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 (spaces and tabs, not newlines)
507
- while S.pos < S.text.length and (S.text.charAt(S.pos) is ' ' or S.text.charAt(S.pos) is '\t'):
508
- next()
710
+ # Skip horizontal whitespace; also skip newlines inside
711
+ # brackets where indentation is irrelevant
712
+ while S.pos < S.text.length:
713
+ wch = S.text.charAt(S.pos)
714
+ if wch is ' ' or wch is '\t':
715
+ next()
716
+ elif (
717
+ (wch is '\n' or wch is '\r') and
718
+ not S.indentation_matters[-1]
719
+ ):
720
+ next()
721
+ else:
722
+ break
509
723
  ch = S.text.charAt(S.pos)
510
724
  if not ch:
511
725
  break
512
726
  if ch is "'" or ch is '"':
513
- # 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
514
729
  stok = read_string(False, False)
515
730
  parts.push(quoted_string(stok.value))
516
731
  elif is_identifier_start(ch.charCodeAt(0)):
517
- # 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
518
734
  j = S.pos
519
- 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))):
520
737
  j += 1
521
738
  potential_mod = S.text.substring(S.pos, j)
522
739
  if not is_string_modifier(potential_mod):
@@ -526,7 +743,8 @@ def tokenizer(raw_text, filename, recover_errors):
526
743
  mods = potential_mod.toLowerCase()
527
744
  if mods.indexOf('v') is not -1:
528
745
  break # Do not concatenate with verbatim JS literals
529
- # Consume the modifier characters via next() to keep position tracking correct
746
+ # Consume the modifier characters via next() to keep
747
+ # position tracking correct
530
748
  while S.pos < j:
531
749
  next()
532
750
  is_raw = mods.indexOf('r') is not -1
@@ -613,7 +831,8 @@ def tokenizer(raw_text, filename, recover_errors):
613
831
  break
614
832
  elif ch is '\\':
615
833
  prev_backslash = True
616
- 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):
617
836
  pass
618
837
  elif verbose_regexp and not in_class and ch is '#':
619
838
  in_comment = True
@@ -647,14 +866,23 @@ def tokenizer(raw_text, filename, recover_errors):
647
866
 
648
867
  def handle_dot():
649
868
  next()
650
- 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
+ )
651
873
 
652
874
  def read_word():
653
875
  word = read_name()
654
876
  return token(
655
877
  'atom',
656
878
  word
657
- ) 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
+ )
658
886
 
659
887
  def next_token():
660
888
  indent = parse_whitespace()
@@ -672,21 +900,40 @@ def tokenizer(raw_text, filename, recover_errors):
672
900
  tmp_ = code
673
901
  if tmp_ is 34 or tmp_ is 39: # double-quote (") or single quote (')
674
902
  stok = read_string(False)
675
- # Look ahead to detect a following f-string (e.g. "a" f"b"), which would
676
- # otherwise be parsed as a call expression "a"(...) after the tokenizer
677
- # 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.
678
907
  j = S.pos
679
- while j < S.text.length and (S.text.charAt(j) is ' ' or S.text.charAt(j) is '\t'):
680
- j += 1
681
- if j < S.text.length and is_identifier_start(S.text.charAt(j).charCodeAt(0)):
908
+ while j < S.text.length:
909
+ jch = S.text.charAt(j)
910
+ if jch is ' ' or jch is '\t':
911
+ j += 1
912
+ elif (
913
+ (jch is '\n' or jch is '\r') and
914
+ not S.indentation_matters[-1]
915
+ ):
916
+ j += 1
917
+ else:
918
+ break
919
+ if (j < S.text.length and
920
+ is_identifier_start(S.text.charAt(j).charCodeAt(0))):
682
921
  k = j
683
- 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))):
684
924
  k += 1
685
925
  potential_mod = S.text.substring(j, k)
686
- 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):
687
929
  mods_check = potential_mod.toLowerCase()
688
- if mods_check.indexOf('f') is not -1 and mods_check.indexOf('v') is -1:
689
- 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
+ )
690
937
  return stok
691
938
  elif tmp_ is 35: # pound-sign (#)
692
939
  if S.pos is 0 and S.text.charAt(1) is '!':
@@ -721,10 +968,14 @@ def tokenizer(raw_text, filename, recover_errors):
721
968
 
722
969
  if is_identifier_start(code):
723
970
  tok = read_word()
724
- 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)):
725
973
  mods = tok.value.toLowerCase()
726
974
  start_pos_for_string = S.tokpos
727
- 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
+ )
728
979
  tok.endpos = stok.endpos
729
980
  if stok.type is not 'js' and mods.indexOf('f') is not -1:
730
981
  tok.col += start_pos_for_string - tok.pos
@@ -737,10 +988,16 @@ def tokenizer(raw_text, filename, recover_errors):
737
988
  # In error-recovery mode (used by the LSP) an unrecognized character
738
989
  # must not raise, because re-tokenizing from the same position would
739
990
  # loop forever (parse_error is raised before the character is
740
- # consumed). Record it and skip the single offending character so the
991
+ # consumed). Record it and skip the single offending
992
+ # character so the
741
993
  # tokenizer always makes forward progress.
742
- S.recovered_errors.push({'message': 'Unexpected character «' + ch + '»',
743
- '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
+ })
744
1001
  next()
745
1002
  return next_token()
746
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
  #