rapydscript-ns 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 (116) 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 +8 -0
  5. package/HACKING.md +103 -103
  6. package/LICENSE +24 -24
  7. package/PYTHON_DIFFERENCES_REPORT.md +2 -2
  8. package/PYTHON_FEATURE_COVERAGE.md +13 -13
  9. package/README.md +670 -6
  10. package/TODO.md +5 -6
  11. package/add-toc-to-readme +2 -2
  12. package/bin/export +75 -75
  13. package/bin/rapydscript +70 -70
  14. package/bin/web-repl-export +102 -102
  15. package/build +2 -2
  16. package/language-service/index.js +155 -6
  17. package/package.json +1 -1
  18. package/publish.py +37 -37
  19. package/release/baselib-plain-pretty.js +2006 -229
  20. package/release/baselib-plain-ugly.js +70 -3
  21. package/release/compiler.js +11554 -3870
  22. package/release/signatures.json +31 -29
  23. package/session.vim +4 -4
  24. package/setup.cfg +2 -2
  25. package/src/ast.pyj +93 -1
  26. package/src/baselib-builtins.pyj +22 -1
  27. package/src/baselib-containers.pyj +99 -0
  28. package/src/baselib-errors.pyj +44 -0
  29. package/src/baselib-internal.pyj +94 -4
  30. package/src/baselib-itertools.pyj +97 -97
  31. package/src/baselib-str.pyj +24 -0
  32. package/src/compiler.pyj +36 -36
  33. package/src/errors.pyj +30 -30
  34. package/src/lib/aes.pyj +646 -646
  35. package/src/lib/copy.pyj +120 -0
  36. package/src/lib/elementmaker.pyj +83 -83
  37. package/src/lib/encodings.pyj +126 -126
  38. package/src/lib/gettext.pyj +569 -569
  39. package/src/lib/itertools.pyj +580 -580
  40. package/src/lib/math.pyj +193 -193
  41. package/src/lib/operator.pyj +11 -11
  42. package/src/lib/pythonize.pyj +20 -20
  43. package/src/lib/random.pyj +118 -118
  44. package/src/lib/re.pyj +470 -470
  45. package/src/lib/react.pyj +74 -0
  46. package/src/lib/traceback.pyj +63 -63
  47. package/src/lib/uuid.pyj +77 -77
  48. package/src/monaco-language-service/builtins.js +5 -0
  49. package/src/monaco-language-service/diagnostics.js +25 -3
  50. package/src/monaco-language-service/dts.js +550 -550
  51. package/src/output/classes.pyj +108 -8
  52. package/src/output/codegen.pyj +16 -2
  53. package/src/output/comments.pyj +45 -45
  54. package/src/output/exceptions.pyj +201 -105
  55. package/src/output/functions.pyj +9 -0
  56. package/src/output/jsx.pyj +164 -0
  57. package/src/output/literals.pyj +28 -2
  58. package/src/output/modules.pyj +1 -1
  59. package/src/output/operators.pyj +8 -2
  60. package/src/output/statements.pyj +2 -2
  61. package/src/output/stream.pyj +1 -0
  62. package/src/output/treeshake.pyj +182 -182
  63. package/src/output/utils.pyj +72 -72
  64. package/src/parse.pyj +417 -113
  65. package/src/string_interpolation.pyj +72 -72
  66. package/src/tokenizer.pyj +29 -0
  67. package/src/unicode_aliases.pyj +576 -576
  68. package/src/utils.pyj +192 -192
  69. package/test/_import_one.pyj +37 -37
  70. package/test/_import_two/__init__.pyj +11 -11
  71. package/test/_import_two/level2/deep.pyj +4 -4
  72. package/test/_import_two/other.pyj +6 -6
  73. package/test/_import_two/sub.pyj +13 -13
  74. package/test/aes_vectors.pyj +421 -421
  75. package/test/annotations.pyj +80 -80
  76. package/test/decorators.pyj +77 -77
  77. package/test/docstrings.pyj +39 -39
  78. package/test/elementmaker_test.pyj +45 -45
  79. package/test/functions.pyj +151 -151
  80. package/test/generators.pyj +41 -41
  81. package/test/generic.pyj +370 -370
  82. package/test/imports.pyj +72 -72
  83. package/test/internationalization.pyj +73 -73
  84. package/test/lint.pyj +164 -164
  85. package/test/loops.pyj +85 -85
  86. package/test/numpy.pyj +734 -734
  87. package/test/omit_function_metadata.pyj +20 -20
  88. package/test/python_features.pyj +19 -6
  89. package/test/regexp.pyj +55 -55
  90. package/test/repl.pyj +121 -121
  91. package/test/scoped_flags.pyj +76 -76
  92. package/test/unit/index.js +2177 -64
  93. package/test/unit/language-service-dts.js +543 -543
  94. package/test/unit/language-service-hover.js +455 -455
  95. package/test/unit/language-service.js +590 -4
  96. package/test/unit/web-repl.js +303 -0
  97. package/tools/cli.js +547 -547
  98. package/tools/compile.js +219 -219
  99. package/tools/completer.js +131 -131
  100. package/tools/embedded_compiler.js +251 -251
  101. package/tools/gettext.js +185 -185
  102. package/tools/ini.js +65 -65
  103. package/tools/msgfmt.js +187 -187
  104. package/tools/repl.js +223 -223
  105. package/tools/test.js +118 -118
  106. package/tools/utils.js +128 -128
  107. package/tools/web_repl.js +95 -95
  108. package/try +41 -41
  109. package/web-repl/env.js +196 -74
  110. package/web-repl/index.html +163 -163
  111. package/web-repl/main.js +252 -254
  112. package/web-repl/prism.css +139 -139
  113. package/web-repl/prism.js +113 -113
  114. package/web-repl/rapydscript.js +224 -102
  115. package/web-repl/sha1.js +25 -25
  116. package/hack_demo.pyj +0 -112
@@ -1,97 +1,97 @@
1
- # vim:fileencoding=utf-8
2
- # License: BSD
3
- # Copyright: 2015, Kovid Goyal <kovid at kovidgoyal.net>
4
-
5
- # globals: ρσ_iterator_symbol, ρσ_bool
6
-
7
- def sum(iterable, start):
8
- if Array.isArray(iterable):
9
- return iterable.reduce(
10
- def(prev, cur): return prev+cur
11
- ,
12
- start or 0
13
- )
14
- ans = start or 0
15
- iterator = iter(iterable)
16
- r = iterator.next()
17
- while not r.done:
18
- ans += r.value
19
- r = iterator.next()
20
- return ans
21
-
22
- def map():
23
- iterators = new Array(arguments.length - 1)
24
- func = arguments[0] # noqa: unused-local
25
- args = new Array(arguments.length - 1) # noqa: unused-local
26
- for v'var i = 1; i < arguments.length; i++':
27
- iterators[i - 1] = iter(arguments[i]) # noqa:undef
28
- ans = v"{'_func':func, '_iterators':iterators, '_args':args}"
29
- ans[ρσ_iterator_symbol] = def():
30
- return this
31
- ans['next'] = def():
32
- for v'var i = 0; i < this._iterators.length; i++':
33
- r = this._iterators[i].next()
34
- if r.done:
35
- return v"{'done':true}"
36
- this._args[i] = r.value # noqa:undef
37
- return v"{'done':false, 'value':this._func.apply(undefined, this._args)}"
38
- return ans
39
-
40
- def filter(func_or_none, iterable):
41
- func = ρσ_bool if func_or_none is None else func_or_none # noqa: unused-local
42
- ans = v"{'_func':func, '_iterator':ρσ_iter(iterable)}"
43
- ans[ρσ_iterator_symbol] = def():
44
- return this
45
- ans['next'] = def():
46
- r = this._iterator.next()
47
- while not r.done:
48
- if this._func(r.value):
49
- return r
50
- r = this._iterator.next()
51
- return v"{'done':true}"
52
- return ans
53
-
54
- def zip():
55
- iterators = new Array(arguments.length)
56
- for v'var i = 0; i < arguments.length; i++':
57
- iterators[i] = iter(arguments[i]) # noqa:undef
58
- ans = v"{'_iterators':iterators}"
59
- ans[ρσ_iterator_symbol] = def():
60
- return this
61
- ans['next'] = def():
62
- args = new Array(this._iterators.length)
63
- for v'var i = 0; i < this._iterators.length; i++':
64
- r = this._iterators[i].next()
65
- if r.done:
66
- return v"{'done':true}"
67
- args[i] = r.value # noqa:undef
68
- return v"{'done':false, 'value':args}"
69
- return ans
70
-
71
- def any(iterable):
72
- if Array.isArray(iterable) or jstype(iterable) is 'string':
73
- for v'var i = 0; i < iterable.length; i++':
74
- if iterable[i]: # noqa:undef
75
- return True
76
- return False
77
- iterator = iter(iterable)
78
- r = iterator.next()
79
- while not r.done:
80
- if r.value:
81
- return True
82
- r = iterator.next()
83
- return False
84
-
85
- def all(iterable):
86
- if Array.isArray(iterable) or jstype(iterable) is 'string':
87
- for v'var i = 0; i < iterable.length; i++':
88
- if not iterable[i]: # noqa:undef
89
- return False
90
- return True
91
- iterator = iter(iterable)
92
- r = iterator.next()
93
- while not r.done:
94
- if not r.value:
95
- return False
96
- r = iterator.next()
97
- return True
1
+ # vim:fileencoding=utf-8
2
+ # License: BSD
3
+ # Copyright: 2015, Kovid Goyal <kovid at kovidgoyal.net>
4
+
5
+ # globals: ρσ_iterator_symbol, ρσ_bool
6
+
7
+ def sum(iterable, start):
8
+ if Array.isArray(iterable):
9
+ return iterable.reduce(
10
+ def(prev, cur): return prev+cur
11
+ ,
12
+ start or 0
13
+ )
14
+ ans = start or 0
15
+ iterator = iter(iterable)
16
+ r = iterator.next()
17
+ while not r.done:
18
+ ans += r.value
19
+ r = iterator.next()
20
+ return ans
21
+
22
+ def map():
23
+ iterators = new Array(arguments.length - 1)
24
+ func = arguments[0] # noqa: unused-local
25
+ args = new Array(arguments.length - 1) # noqa: unused-local
26
+ for v'var i = 1; i < arguments.length; i++':
27
+ iterators[i - 1] = iter(arguments[i]) # noqa:undef
28
+ ans = v"{'_func':func, '_iterators':iterators, '_args':args}"
29
+ ans[ρσ_iterator_symbol] = def():
30
+ return this
31
+ ans['next'] = def():
32
+ for v'var i = 0; i < this._iterators.length; i++':
33
+ r = this._iterators[i].next()
34
+ if r.done:
35
+ return v"{'done':true}"
36
+ this._args[i] = r.value # noqa:undef
37
+ return v"{'done':false, 'value':this._func.apply(undefined, this._args)}"
38
+ return ans
39
+
40
+ def filter(func_or_none, iterable):
41
+ func = ρσ_bool if func_or_none is None else func_or_none # noqa: unused-local
42
+ ans = v"{'_func':func, '_iterator':ρσ_iter(iterable)}"
43
+ ans[ρσ_iterator_symbol] = def():
44
+ return this
45
+ ans['next'] = def():
46
+ r = this._iterator.next()
47
+ while not r.done:
48
+ if this._func(r.value):
49
+ return r
50
+ r = this._iterator.next()
51
+ return v"{'done':true}"
52
+ return ans
53
+
54
+ def zip():
55
+ iterators = new Array(arguments.length)
56
+ for v'var i = 0; i < arguments.length; i++':
57
+ iterators[i] = iter(arguments[i]) # noqa:undef
58
+ ans = v"{'_iterators':iterators}"
59
+ ans[ρσ_iterator_symbol] = def():
60
+ return this
61
+ ans['next'] = def():
62
+ args = new Array(this._iterators.length)
63
+ for v'var i = 0; i < this._iterators.length; i++':
64
+ r = this._iterators[i].next()
65
+ if r.done:
66
+ return v"{'done':true}"
67
+ args[i] = r.value # noqa:undef
68
+ return v"{'done':false, 'value':args}"
69
+ return ans
70
+
71
+ def any(iterable):
72
+ if Array.isArray(iterable) or jstype(iterable) is 'string':
73
+ for v'var i = 0; i < iterable.length; i++':
74
+ if iterable[i]: # noqa:undef
75
+ return True
76
+ return False
77
+ iterator = iter(iterable)
78
+ r = iterator.next()
79
+ while not r.done:
80
+ if r.value:
81
+ return True
82
+ r = iterator.next()
83
+ return False
84
+
85
+ def all(iterable):
86
+ if Array.isArray(iterable) or jstype(iterable) is 'string':
87
+ for v'var i = 0; i < iterable.length; i++':
88
+ if not iterable[i]: # noqa:undef
89
+ return False
90
+ return True
91
+ iterator = iter(iterable)
92
+ r = iterator.next()
93
+ while not r.done:
94
+ if not r.value:
95
+ return False
96
+ r = iterator.next()
97
+ return True
@@ -774,6 +774,29 @@ define_str_func('zfill', def(width):
774
774
  return string
775
775
  )
776
776
 
777
+ define_str_func('expandtabs', def(tabsize):
778
+ if tabsize is undefined:
779
+ tabsize = 8
780
+ string = this
781
+ ans = ''
782
+ col = 0
783
+ for v'var i = 0; i < string.length; i++':
784
+ ch = string[i] # noqa:undef
785
+ if ch is '\t':
786
+ if tabsize > 0:
787
+ spaces = tabsize - (col % tabsize)
788
+ ans += v'new Array(spaces + 1).join(" ")'
789
+ col += spaces
790
+ # tabsize <= 0: tab adds no spaces, col stays
791
+ elif ch is '\n' or ch is '\r':
792
+ ans += ch
793
+ col = 0
794
+ else:
795
+ ans += ch
796
+ col += 1
797
+ return ans
798
+ )
799
+
777
800
  ρσ_str.uchrs = def(string, with_positions):
778
801
  # Return iterator over unicode chars in string. Will yield the unicode
779
802
  # replacement char U+FFFD for broken surrogate pairs
@@ -836,4 +859,5 @@ def ρσ_format(value, spec):
836
859
  return ρσ_str(value)
837
860
  return str.format('{:' + spec + '}', value)
838
861
 
862
+ ρσ_str.__name__ = 'str'
839
863
  v'var str = ρσ_str, repr = ρσ_repr, format = ρσ_format'
package/src/compiler.pyj CHANGED
@@ -1,36 +1,36 @@
1
- # vim:fileencoding=utf-8
2
- # License: BSD
3
- # Copyright: 2015, Kovid Goyal <kovid at kovidgoyal.net>
4
- # globals: console
5
-
6
- from utils import DefaultsError, string_template
7
- from errors import ImportError, SyntaxError
8
- from tokenizer import ALL_KEYWORDS, IDENTIFIER_PAT, tokenizer
9
- from parse import parse, NATIVE_CLASSES, compile_time_decorators
10
- from output.stream import OutputStream
11
- from output.codegen import generate_code
12
- from output.treeshake import tree_shake
13
-
14
- generate_code() # create the print methods on the AST nodes
15
-
16
- # The following allows this module to be used from a pure javascript, require()
17
- # based environment like Node.js
18
- if jstype(exports) is 'object':
19
- exports.DefaultsError = DefaultsError
20
- exports.parse = parse
21
- exports.compile_time_decorators = compile_time_decorators
22
- exports.OutputStream = OutputStream
23
- exports.string_template = string_template # noqa:undef
24
- # Needed for REPL and linter
25
- exports.ALL_KEYWORDS = ALL_KEYWORDS
26
- exports.IDENTIFIER_PAT = IDENTIFIER_PAT
27
- exports.NATIVE_CLASSES = NATIVE_CLASSES
28
- exports.ImportError = ImportError
29
- exports.SyntaxError = SyntaxError
30
- exports.tokenizer = tokenizer
31
- exports.tree_shake = tree_shake
32
- # Magic! Export all the AST_* nodes
33
- ast = ρσ_modules['ast']
34
- for ast_node in ast:
35
- if ast_node.substr(0, 4) is 'AST_':
36
- exports[ast_node] = ast[ast_node] # noqa:undef
1
+ # vim:fileencoding=utf-8
2
+ # License: BSD
3
+ # Copyright: 2015, Kovid Goyal <kovid at kovidgoyal.net>
4
+ # globals: console
5
+
6
+ from utils import DefaultsError, string_template
7
+ from errors import ImportError, SyntaxError
8
+ from tokenizer import ALL_KEYWORDS, IDENTIFIER_PAT, tokenizer
9
+ from parse import parse, NATIVE_CLASSES, compile_time_decorators
10
+ from output.stream import OutputStream
11
+ from output.codegen import generate_code
12
+ from output.treeshake import tree_shake
13
+
14
+ generate_code() # create the print methods on the AST nodes
15
+
16
+ # The following allows this module to be used from a pure javascript, require()
17
+ # based environment like Node.js
18
+ if jstype(exports) is 'object':
19
+ exports.DefaultsError = DefaultsError
20
+ exports.parse = parse
21
+ exports.compile_time_decorators = compile_time_decorators
22
+ exports.OutputStream = OutputStream
23
+ exports.string_template = string_template # noqa:undef
24
+ # Needed for REPL and linter
25
+ exports.ALL_KEYWORDS = ALL_KEYWORDS
26
+ exports.IDENTIFIER_PAT = IDENTIFIER_PAT
27
+ exports.NATIVE_CLASSES = NATIVE_CLASSES
28
+ exports.ImportError = ImportError
29
+ exports.SyntaxError = SyntaxError
30
+ exports.tokenizer = tokenizer
31
+ exports.tree_shake = tree_shake
32
+ # Magic! Export all the AST_* nodes
33
+ ast = ρσ_modules['ast']
34
+ for ast_node in ast:
35
+ if ast_node.substr(0, 4) is 'AST_':
36
+ exports[ast_node] = ast[ast_node] # noqa:undef
package/src/errors.pyj CHANGED
@@ -1,30 +1,30 @@
1
- # vim:fileencoding=utf-8
2
- # License: BSD Copyright: 2016, Kovid Goyal <kovid at kovidgoyal.net>
3
- from __python__ import hash_literals
4
-
5
- class SyntaxError(Error):
6
-
7
- def __init__(self, message, filename, line, col, pos, is_eof):
8
- self.stack = Error().stack
9
- self.message = message
10
- self.line = line
11
- self.col = col
12
- self.pos = pos
13
- self.is_eof = is_eof
14
- self.filename = filename
15
- # The "standard" form for these error attributes
16
- self.lineNumber = line
17
- self.fileName = filename
18
-
19
- def toString(self):
20
- ans = self.message + " (line: " + self.line + ", col: " + self.col + ", pos: " + self.pos + ")"
21
- if self.filename:
22
- ans = self.filename + ':' + ans
23
- if self.stack:
24
- ans += "\n\n" + self.stack
25
- return ans
26
-
27
-
28
- class ImportError(SyntaxError):
29
- pass
30
-
1
+ # vim:fileencoding=utf-8
2
+ # License: BSD Copyright: 2016, Kovid Goyal <kovid at kovidgoyal.net>
3
+ from __python__ import hash_literals
4
+
5
+ class SyntaxError(Error):
6
+
7
+ def __init__(self, message, filename, line, col, pos, is_eof):
8
+ self.stack = Error().stack
9
+ self.message = message
10
+ self.line = line
11
+ self.col = col
12
+ self.pos = pos
13
+ self.is_eof = is_eof
14
+ self.filename = filename
15
+ # The "standard" form for these error attributes
16
+ self.lineNumber = line
17
+ self.fileName = filename
18
+
19
+ def toString(self):
20
+ ans = self.message + " (line: " + self.line + ", col: " + self.col + ", pos: " + self.pos + ")"
21
+ if self.filename:
22
+ ans = self.filename + ':' + ans
23
+ if self.stack:
24
+ ans += "\n\n" + self.stack
25
+ return ans
26
+
27
+
28
+ class ImportError(SyntaxError):
29
+ pass
30
+