rapydscript-ns 0.9.3 → 0.9.5

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 (111) hide show
  1. package/.agignore +1 -1
  2. package/.github/workflows/ci.yml +38 -38
  3. package/=template.pyj +5 -5
  4. package/CHANGELOG.md +18 -0
  5. package/HACKING.md +103 -103
  6. package/LICENSE +24 -24
  7. package/PYTHON_GAPS.md +52 -142
  8. package/README.md +51 -21
  9. package/TODO.md +1 -26
  10. package/add-toc-to-readme +2 -2
  11. package/bin/export +75 -75
  12. package/bin/rapydscript +0 -0
  13. package/bin/web-repl-export +102 -102
  14. package/build +2 -2
  15. package/language-service/index.js +88 -36
  16. package/package.json +1 -1
  17. package/publish.py +37 -37
  18. package/release/baselib-plain-pretty.js +157 -31
  19. package/release/baselib-plain-ugly.js +5 -5
  20. package/release/compiler.js +724 -426
  21. package/release/signatures.json +29 -29
  22. package/session.vim +4 -4
  23. package/setup.cfg +2 -2
  24. package/src/ast.pyj +7 -0
  25. package/src/baselib-containers.pyj +41 -4
  26. package/src/baselib-errors.pyj +4 -3
  27. package/src/baselib-internal.pyj +47 -18
  28. package/src/baselib-str.pyj +16 -3
  29. package/src/compiler.pyj +36 -36
  30. package/src/errors.pyj +30 -30
  31. package/src/lib/aes.pyj +646 -646
  32. package/src/lib/collections.pyj +227 -3
  33. package/src/lib/copy.pyj +120 -120
  34. package/src/lib/elementmaker.pyj +83 -83
  35. package/src/lib/encodings.pyj +126 -126
  36. package/src/lib/gettext.pyj +569 -569
  37. package/src/lib/itertools.pyj +580 -580
  38. package/src/lib/math.pyj +193 -193
  39. package/src/lib/operator.pyj +11 -11
  40. package/src/lib/pprint.pyj +455 -0
  41. package/src/lib/random.pyj +118 -118
  42. package/src/lib/react.pyj +74 -74
  43. package/src/lib/statistics.pyj +0 -0
  44. package/src/lib/traceback.pyj +63 -63
  45. package/src/lib/uuid.pyj +77 -77
  46. package/src/monaco-language-service/completions.js +21 -14
  47. package/src/monaco-language-service/diagnostics.js +2 -2
  48. package/src/monaco-language-service/dts.js +58 -15
  49. package/src/monaco-language-service/package.json +3 -0
  50. package/src/output/classes.pyj +25 -2
  51. package/src/output/codegen.pyj +4 -1
  52. package/src/output/comments.pyj +45 -45
  53. package/src/output/exceptions.pyj +201 -201
  54. package/src/output/jsx.pyj +164 -164
  55. package/src/output/treeshake.pyj +182 -182
  56. package/src/output/utils.pyj +72 -72
  57. package/src/parse.pyj +42 -7
  58. package/src/string_interpolation.pyj +72 -72
  59. package/src/tokenizer.pyj +18 -2
  60. package/src/unicode_aliases.pyj +576 -576
  61. package/src/utils.pyj +192 -192
  62. package/test/_import_one.pyj +37 -37
  63. package/test/_import_two/__init__.pyj +11 -11
  64. package/test/_import_two/level2/deep.pyj +4 -4
  65. package/test/_import_two/other.pyj +6 -6
  66. package/test/_import_two/sub.pyj +13 -13
  67. package/test/aes_vectors.pyj +421 -421
  68. package/test/annotations.pyj +80 -80
  69. package/test/baselib.pyj +23 -0
  70. package/test/chainmap.pyj +185 -0
  71. package/test/dataclasses.pyj +3 -4
  72. package/test/decorators.pyj +77 -77
  73. package/test/docstrings.pyj +39 -39
  74. package/test/elementmaker_test.pyj +45 -45
  75. package/test/enum.pyj +1 -1
  76. package/test/functions.pyj +151 -151
  77. package/test/generators.pyj +41 -41
  78. package/test/generic.pyj +370 -370
  79. package/test/internationalization.pyj +73 -73
  80. package/test/lint.pyj +164 -164
  81. package/test/loops.pyj +85 -85
  82. package/test/numpy.pyj +734 -734
  83. package/test/pprint.pyj +232 -0
  84. package/test/python_features.pyj +1 -1
  85. package/test/repl.pyj +121 -121
  86. package/test/scoped_flags.pyj +76 -76
  87. package/test/statistics.pyj +224 -0
  88. package/test/str.pyj +4 -4
  89. package/test/unit/index.js +455 -0
  90. package/test/unit/language-service-completions.js +2 -0
  91. package/test/unit/language-service-dts.js +113 -0
  92. package/test/unit/language-service-hover.js +455 -455
  93. package/test/unit/language-service.js +135 -2
  94. package/test/unit/web-repl.js +349 -1
  95. package/tools/compiler.d.ts +367 -367
  96. package/tools/completer.js +131 -131
  97. package/tools/export.js +4 -2
  98. package/tools/gettext.js +185 -185
  99. package/tools/ini.js +65 -65
  100. package/tools/msgfmt.js +187 -187
  101. package/tools/repl.js +223 -223
  102. package/tools/test.js +118 -118
  103. package/tools/utils.js +141 -128
  104. package/tools/web_repl.js +95 -95
  105. package/try +41 -41
  106. package/web-repl/env.js +196 -196
  107. package/web-repl/index.html +163 -163
  108. package/web-repl/prism.css +139 -139
  109. package/web-repl/prism.js +113 -113
  110. package/web-repl/rapydscript.js +228 -226
  111. package/web-repl/sha1.js +25 -25
@@ -1,72 +1,72 @@
1
- # vim:fileencoding=utf-8
2
- # License: BSD Copyright: 2016, Kovid Goyal <kovid at kovidgoyal.net>
3
- from __python__ import hash_literals
4
-
5
- def quoted_string(x):
6
- return '"' + x.replace(/\\/g, '\\\\').replace(/"/g, r'\"').replace(/\n/g, '\\n') + '"'
7
-
8
- def render_markup(markup):
9
- pos, key = 0, ''
10
- while pos < markup.length:
11
- ch = markup[pos]
12
- if ch is '!' or ch is ':':
13
- break
14
- key += ch
15
- pos += 1
16
- fmtspec = markup[pos:]
17
- prefix = ''
18
- if key.endsWith('='):
19
- prefix=key
20
- key = key[:-1]
21
- return 'ρσ_str.format("' + prefix + '{' + fmtspec + '}", ' + key + ')'
22
-
23
-
24
- def interpolate(template, raise_error):
25
- pos = in_brace = 0
26
- markup = ''
27
- ans = v'[""]'
28
- while pos < template.length:
29
- ch = template[pos]
30
- if in_brace:
31
- if ch is '{':
32
- in_brace += 1
33
- markup += '{'
34
- elif ch is '}':
35
- in_brace -= 1
36
- if in_brace > 0:
37
- markup += '}'
38
- else:
39
- ans.push(v'[markup]')
40
- ans.push('')
41
- else:
42
- markup += ch
43
- else:
44
- if ch is '{':
45
- if template[pos+1] is '{':
46
- pos += 1
47
- ans[-1] += '{'
48
- else:
49
- in_brace = 1
50
- markup = ''
51
- elif ch is '}':
52
- if template[pos+1] is '}':
53
- pos += 1
54
- ans[-1] += '}'
55
- else:
56
- raise_error("f-string: single '}' is not allowed")
57
- else:
58
- ans[-1] += ch
59
-
60
- pos += 1
61
-
62
- if in_brace:
63
- raise_error("expected '}' before end of string")
64
-
65
- if ans[-1] is '+':
66
- ans[-1] = ''
67
- for v'var i = 0; i < ans.length; i++':
68
- if jstype(ans[i]) is 'string':
69
- ans[i] = quoted_string(ans[i])
70
- else:
71
- ans[i] = '+' + render_markup.apply(this, ans[i]) + '+'
72
- return ans.join('')
1
+ # vim:fileencoding=utf-8
2
+ # License: BSD Copyright: 2016, Kovid Goyal <kovid at kovidgoyal.net>
3
+ from __python__ import hash_literals
4
+
5
+ def quoted_string(x):
6
+ return '"' + x.replace(/\\/g, '\\\\').replace(/"/g, r'\"').replace(/\n/g, '\\n') + '"'
7
+
8
+ def render_markup(markup):
9
+ pos, key = 0, ''
10
+ while pos < markup.length:
11
+ ch = markup[pos]
12
+ if ch is '!' or ch is ':':
13
+ break
14
+ key += ch
15
+ pos += 1
16
+ fmtspec = markup[pos:]
17
+ prefix = ''
18
+ if key.endsWith('='):
19
+ prefix=key
20
+ key = key[:-1]
21
+ return 'ρσ_str.format("' + prefix + '{' + fmtspec + '}", ' + key + ')'
22
+
23
+
24
+ def interpolate(template, raise_error):
25
+ pos = in_brace = 0
26
+ markup = ''
27
+ ans = v'[""]'
28
+ while pos < template.length:
29
+ ch = template[pos]
30
+ if in_brace:
31
+ if ch is '{':
32
+ in_brace += 1
33
+ markup += '{'
34
+ elif ch is '}':
35
+ in_brace -= 1
36
+ if in_brace > 0:
37
+ markup += '}'
38
+ else:
39
+ ans.push(v'[markup]')
40
+ ans.push('')
41
+ else:
42
+ markup += ch
43
+ else:
44
+ if ch is '{':
45
+ if template[pos+1] is '{':
46
+ pos += 1
47
+ ans[-1] += '{'
48
+ else:
49
+ in_brace = 1
50
+ markup = ''
51
+ elif ch is '}':
52
+ if template[pos+1] is '}':
53
+ pos += 1
54
+ ans[-1] += '}'
55
+ else:
56
+ raise_error("f-string: single '}' is not allowed")
57
+ else:
58
+ ans[-1] += ch
59
+
60
+ pos += 1
61
+
62
+ if in_brace:
63
+ raise_error("expected '}' before end of string")
64
+
65
+ if ans[-1] is '+':
66
+ ans[-1] = ''
67
+ for v'var i = 0; i < ans.length; i++':
68
+ if jstype(ans[i]) is 'string':
69
+ ans[i] = quoted_string(ans[i])
70
+ else:
71
+ ans[i] = '+' + render_markup.apply(this, ans[i]) + '+'
72
+ return ans.join('')
package/src/tokenizer.pyj CHANGED
@@ -334,6 +334,19 @@ def tokenizer(raw_text, filename):
334
334
  valid = parseInt(num, 2)
335
335
  if isNaN(valid):
336
336
  parse_error('Invalid syntax for a binary number')
337
+ if peek() is 'n':
338
+ next()
339
+ return token('bigint', '0b' + num)
340
+ return token('num', valid)
341
+ if not prefix and peek() is '0' and S.text.charAt(S.pos + 1) is 'o':
342
+ next(), next()
343
+ num = read_while(def(ch): return ch >= '0' and ch <= '7';)
344
+ valid = parseInt(num, 8)
345
+ if isNaN(valid):
346
+ parse_error('Invalid syntax for an octal number')
347
+ if peek() is 'n':
348
+ next()
349
+ return token('bigint', '0o' + num)
337
350
  return token('num', valid)
338
351
  seen = v'[]'
339
352
  num = read_while(def(ch, i):
@@ -363,8 +376,8 @@ def tokenizer(raw_text, filename):
363
376
  return False
364
377
  elif ch is '.':
365
378
  return (has_dot = True) if not has_dot and not has_x and not has_e else False
366
- elif ch is 'j' or ch is 'J':
367
- return False # imaginary suffix — stop here; handled after loop
379
+ elif ch is 'j' or ch is 'J' or ch is 'n':
380
+ return False # imaginary/bigint suffix — stop here; handled after loop
368
381
  return is_alphanumeric_char(ch.charCodeAt(0))
369
382
  )
370
383
  if prefix:
@@ -375,6 +388,9 @@ def tokenizer(raw_text, filename):
375
388
  if peek() is 'j' or peek() is 'J':
376
389
  next()
377
390
  return token("imaginary", valid)
391
+ if peek() is 'n':
392
+ next()
393
+ return token("bigint", num)
378
394
  return token("num", valid)
379
395
  else:
380
396
  parse_error("Invalid syntax: " + num)