rapydscript-ns 0.8.4 → 0.9.1

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 (141) 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 +26 -0
  5. package/HACKING.md +103 -103
  6. package/LICENSE +24 -24
  7. package/README.md +716 -169
  8. package/TODO.md +7 -2
  9. package/add-toc-to-readme +2 -2
  10. package/bin/export +75 -75
  11. package/bin/rapydscript +70 -70
  12. package/bin/web-repl-export +102 -102
  13. package/build +2 -2
  14. package/language-service/index.js +36 -27
  15. package/package.json +1 -1
  16. package/publish.py +37 -37
  17. package/release/baselib-plain-pretty.js +2358 -168
  18. package/release/baselib-plain-ugly.js +73 -3
  19. package/release/compiler.js +6283 -3093
  20. package/release/signatures.json +31 -30
  21. package/session.vim +4 -4
  22. package/setup.cfg +2 -2
  23. package/src/ast.pyj +1 -0
  24. package/src/baselib-builtins.pyj +340 -2
  25. package/src/baselib-bytes.pyj +664 -0
  26. package/src/baselib-errors.pyj +1 -1
  27. package/src/baselib-internal.pyj +267 -60
  28. package/src/baselib-itertools.pyj +110 -97
  29. package/src/baselib-str.pyj +22 -4
  30. package/src/compiler.pyj +36 -36
  31. package/src/errors.pyj +30 -30
  32. package/src/lib/abc.pyj +317 -0
  33. package/src/lib/aes.pyj +646 -646
  34. package/src/lib/contextlib.pyj +379 -0
  35. package/src/lib/copy.pyj +120 -120
  36. package/src/lib/dataclasses.pyj +532 -0
  37. package/src/lib/datetime.pyj +712 -0
  38. package/src/lib/elementmaker.pyj +83 -83
  39. package/src/lib/encodings.pyj +126 -126
  40. package/src/lib/enum.pyj +125 -0
  41. package/src/lib/gettext.pyj +569 -569
  42. package/src/lib/io.pyj +500 -0
  43. package/src/lib/itertools.pyj +580 -580
  44. package/src/lib/json.pyj +227 -0
  45. package/src/lib/math.pyj +193 -193
  46. package/src/lib/operator.pyj +11 -11
  47. package/src/lib/pythonize.pyj +20 -20
  48. package/src/lib/random.pyj +118 -118
  49. package/src/lib/re.pyj +504 -470
  50. package/src/lib/react.pyj +74 -74
  51. package/src/lib/traceback.pyj +63 -63
  52. package/src/lib/typing.pyj +577 -0
  53. package/src/lib/uuid.pyj +77 -77
  54. package/src/monaco-language-service/builtins.js +14 -4
  55. package/src/monaco-language-service/diagnostics.js +19 -20
  56. package/src/monaco-language-service/dts.js +550 -550
  57. package/src/output/classes.pyj +62 -26
  58. package/src/output/comments.pyj +45 -45
  59. package/src/output/exceptions.pyj +201 -201
  60. package/src/output/functions.pyj +78 -5
  61. package/src/output/jsx.pyj +164 -164
  62. package/src/output/loops.pyj +5 -2
  63. package/src/output/operators.pyj +100 -34
  64. package/src/output/treeshake.pyj +182 -182
  65. package/src/output/utils.pyj +72 -72
  66. package/src/parse.pyj +80 -16
  67. package/src/string_interpolation.pyj +72 -72
  68. package/src/tokenizer.pyj +10 -5
  69. package/src/unicode_aliases.pyj +576 -576
  70. package/src/utils.pyj +192 -192
  71. package/test/_import_one.pyj +37 -37
  72. package/test/_import_two/__init__.pyj +11 -11
  73. package/test/_import_two/level2/deep.pyj +4 -4
  74. package/test/_import_two/other.pyj +6 -6
  75. package/test/_import_two/sub.pyj +13 -13
  76. package/test/abc.pyj +291 -0
  77. package/test/aes_vectors.pyj +421 -421
  78. package/test/annotations.pyj +80 -80
  79. package/test/arithmetic_nostrict.pyj +88 -0
  80. package/test/arithmetic_types.pyj +169 -0
  81. package/test/baselib.pyj +91 -0
  82. package/test/bytes.pyj +467 -0
  83. package/test/classes.pyj +1 -0
  84. package/test/comparison_ops.pyj +173 -0
  85. package/test/contextlib.pyj +362 -0
  86. package/test/dataclasses.pyj +253 -0
  87. package/test/datetime.pyj +500 -0
  88. package/test/debugger_stmt.pyj +41 -0
  89. package/test/decorators.pyj +77 -77
  90. package/test/docstrings.pyj +39 -39
  91. package/test/elementmaker_test.pyj +45 -45
  92. package/test/enum.pyj +134 -0
  93. package/test/eval_exec.pyj +56 -0
  94. package/test/format.pyj +148 -0
  95. package/test/functions.pyj +151 -151
  96. package/test/generators.pyj +41 -41
  97. package/test/generic.pyj +370 -370
  98. package/test/imports.pyj +72 -72
  99. package/test/internationalization.pyj +73 -73
  100. package/test/io.pyj +316 -0
  101. package/test/json.pyj +196 -0
  102. package/test/lint.pyj +164 -164
  103. package/test/loops.pyj +85 -85
  104. package/test/numpy.pyj +734 -734
  105. package/test/object.pyj +64 -0
  106. package/test/omit_function_metadata.pyj +20 -20
  107. package/test/python_compat.pyj +17 -15
  108. package/test/python_features.pyj +70 -15
  109. package/test/regexp.pyj +83 -55
  110. package/test/repl.pyj +121 -121
  111. package/test/scoped_flags.pyj +76 -76
  112. package/test/tuples.pyj +96 -0
  113. package/test/typing.pyj +469 -0
  114. package/test/unit/index.js +116 -7
  115. package/test/unit/language-service-dts.js +543 -543
  116. package/test/unit/language-service-hover.js +455 -455
  117. package/test/unit/language-service.js +84 -0
  118. package/test/unit/web-repl.js +1337 -1
  119. package/test/vars_locals_globals.pyj +94 -0
  120. package/tools/cli.js +558 -547
  121. package/tools/compile.js +224 -219
  122. package/tools/completer.js +131 -131
  123. package/tools/embedded_compiler.js +262 -251
  124. package/tools/gettext.js +185 -185
  125. package/tools/ini.js +65 -65
  126. package/tools/lint.js +16 -19
  127. package/tools/msgfmt.js +187 -187
  128. package/tools/repl.js +223 -223
  129. package/tools/test.js +118 -118
  130. package/tools/utils.js +128 -128
  131. package/tools/web_repl.js +95 -95
  132. package/try +41 -41
  133. package/web-repl/env.js +196 -196
  134. package/web-repl/index.html +163 -163
  135. package/web-repl/main.js +252 -252
  136. package/web-repl/prism.css +139 -139
  137. package/web-repl/prism.js +113 -113
  138. package/web-repl/rapydscript.js +224 -224
  139. package/web-repl/sha1.js +25 -25
  140. package/PYTHON_DIFFERENCES_REPORT.md +0 -291
  141. package/PYTHON_FEATURE_COVERAGE.md +0 -200
package/.agignore CHANGED
@@ -1 +1 @@
1
- lib/*
1
+ lib/*
@@ -1,38 +1,38 @@
1
- name: CI
2
- on: [push, pull_request]
3
- env:
4
- CI: 'true'
5
-
6
- jobs:
7
- test:
8
- name: Test on ${{ matrix.os }} LANG ${{ matrix.lang }}
9
- runs-on: ${{ matrix.os }}
10
- env:
11
- LANG: ${{ matrix.lang }}
12
- LC_ALL: ${{ matrix.lang }}
13
- strategy:
14
- matrix:
15
- include:
16
- - { os: ubuntu-latest, lang: en_US.UTF-8 }
17
- - { os: ubuntu-latest, lang: de_DE.UTF-8}
18
- - { os: ubuntu-latest, lang: hi_IN.UTF-8 }
19
-
20
- - { os: macos-latest, lang: en_US.UTF-8 }
21
- - { os: windows-latest, lang: en_US.UTF-8 }
22
-
23
- steps:
24
- - name: Checkout source code
25
- uses: actions/checkout@master
26
- with:
27
- fetch-depth: 10
28
-
29
- - name: Set up Node ${{ matrix.node }}
30
- uses: actions/setup-node@master
31
-
32
- - name: Install deps
33
- run:
34
- npm install --no-optional
35
-
36
- - name: Test
37
- run:
38
- npm test
1
+ name: CI
2
+ on: [push, pull_request]
3
+ env:
4
+ CI: 'true'
5
+
6
+ jobs:
7
+ test:
8
+ name: Test on ${{ matrix.os }} LANG ${{ matrix.lang }}
9
+ runs-on: ${{ matrix.os }}
10
+ env:
11
+ LANG: ${{ matrix.lang }}
12
+ LC_ALL: ${{ matrix.lang }}
13
+ strategy:
14
+ matrix:
15
+ include:
16
+ - { os: ubuntu-latest, lang: en_US.UTF-8 }
17
+ - { os: ubuntu-latest, lang: de_DE.UTF-8}
18
+ - { os: ubuntu-latest, lang: hi_IN.UTF-8 }
19
+
20
+ - { os: macos-latest, lang: en_US.UTF-8 }
21
+ - { os: windows-latest, lang: en_US.UTF-8 }
22
+
23
+ steps:
24
+ - name: Checkout source code
25
+ uses: actions/checkout@master
26
+ with:
27
+ fetch-depth: 10
28
+
29
+ - name: Set up Node ${{ matrix.node }}
30
+ uses: actions/setup-node@master
31
+
32
+ - name: Install deps
33
+ run:
34
+ npm install --no-optional
35
+
36
+ - name: Test
37
+ run:
38
+ npm test
package/=template.pyj CHANGED
@@ -1,5 +1,5 @@
1
- # vim:fileencoding=utf-8
2
- # License: BSD Copyright: %YEAR%, %USER% <%MAIL%>
3
- from __python__ import hash_literals
4
-
5
- %HERE%
1
+ # vim:fileencoding=utf-8
2
+ # License: BSD Copyright: %YEAR%, %USER% <%MAIL%>
3
+ from __python__ import hash_literals
4
+
5
+ %HERE%
package/CHANGELOG.md CHANGED
@@ -1,3 +1,29 @@
1
+ version 0.9.1
2
+ =======================
3
+ * Added the contextlib standard library
4
+ * Added the datetime standard library
5
+ * Added the io standard library
6
+ * Added the json standard library
7
+ * Added support for the `debugger` keyword
8
+
9
+ version 0.9.0
10
+ =======================
11
+ * All optional Python compatibility features are now enabled by default. See Python Feature Coverage from the README
12
+ * Add `enum` standard library module
13
+ * Add `dataclasses` standard library module
14
+ * Add `abc` standard library module (`ABC`, `abstractmethod`, `Protocol`)
15
+ * Add `typing` standard library module
16
+ * Add support for `eval()` and `exec()` to run python/rapydscript code. Please use this responsibly.
17
+ * Add support for `vars()` and `globals()` builtins
18
+ * Add support for complex numbers and complex number literals
19
+ * Add support for `bytes` literals and the `ByteString` type
20
+ * Add support for `__format__` dunder method
21
+ * Add support for Python-style container comparison (chained `<`/`>`)
22
+ * Add support for strict `zip()` behavior
23
+ * Add support for `object()`, `int.bit_length()`, and `float.is_integer()`
24
+ * Prevent JavaScript-style arithmetic type coercion when attempting to sum invalid mixed data types
25
+
26
+
1
27
  version 0.8.4
2
28
  =======================
3
29
  * Added support for jsx
package/HACKING.md CHANGED
@@ -1,103 +1,103 @@
1
- Hacking the RapydScript compiler
2
- =================================
3
-
4
- The RapydScript compiler is written in RapydScript itself and uses the
5
- RapydScript import system to modularize its code. The compiler source code is
6
- in the `src` directory. The compiled compiler is by default in the `release`
7
- directory.
8
-
9
- In order to start hacking on the compiler, run the command
10
-
11
- ```
12
- bin/rapydscript self --complete --test
13
- ```
14
-
15
- This will generate a build of the compiler in the `dev` directory. Now, the
16
- rapydscript command will automatically use this build, rather than the one in
17
- release. If you want to go back to the release build, simply delete the `dev`
18
- directory.
19
-
20
-
21
- Code organization
22
- -------------------
23
-
24
- The way the compiler works, given some RapydScript source code:
25
-
26
- * The source code is lexed into a stream of tokens (`src/tokenzier.pyj`)
27
-
28
- * The tokens are parsed into a Abstract Syntax Tree (`src/parse.pyj and src/ast.pyj`)
29
-
30
- * During parsing any import statement are resolved (this is different from
31
- python, where imports happen at run-time, not compile time).
32
-
33
- * The Abstract Syntax Tree is transformed into the output JavaScript (`src/output/*.pyj`)
34
-
35
- * Various bits of functionality in RapydScript depend upon the *Base Library*
36
- (`src/baselib*.pyj`). This includes things like the basic container types
37
- (list/set/dict) string functions such as `str.format()`, etc. The baselib
38
- is automatically inserted into the start of the output JavaScript.
39
-
40
- The RapydScript standard library can be found in `src/lib`. The various tools,
41
- such as the linter, gettext support, the REPL, etc. are in the `tools`
42
- directory.
43
-
44
- Tests
45
- --------
46
-
47
- The tests are in the test directory and can be run using the command:
48
- ```
49
- rapydscript test
50
- ```
51
-
52
- You can run individual test files by providing the name of the file, as
53
-
54
- ```
55
- rapydscript test classes
56
- ```
57
-
58
- Modifying the compiler
59
- -------------------------
60
-
61
- Edit the files in the `src` directory to make your changes, then use the
62
- `./try` script to test them. This script will compile an updated version of
63
- the compiler with your changes, if any, and use it to run the snippet of code
64
- you pass to it.
65
-
66
- For example:
67
-
68
- ```
69
- ./try 'print("Hello world")'
70
- ```
71
-
72
- will compile `print ("Hello world")` and show you the output on stdout. You can
73
- tell it to omit the baselib, so you can focus on the output, with the `-m`
74
- switch, like this:
75
-
76
- ```
77
- ./try -m 'print("Hello world")'
78
- ```
79
-
80
- You can also have it not print out the JavaScript, instead directly executing the output
81
- JavaScript with the `-x` switch, like this
82
-
83
- ```
84
- ./try -x 'print("Hello world")'
85
- ```
86
-
87
- If you want to test longer sections of code, you can use the `-f` switch to
88
- pass in the path to a RapydScript file to compile, like this:
89
-
90
- ```
91
- ./try -f myfile.pyj
92
- ```
93
-
94
- Once you are happy with your changes, you can build the compiler and run the
95
- test suite, all with a single command:
96
-
97
- ```
98
- ./build
99
- ```
100
-
101
- This will build the compiler with the updated version of itself and then run
102
- the test suite. If all test pass you can commit your changes and send a pull
103
- request :)
1
+ Hacking the RapydScript compiler
2
+ =================================
3
+
4
+ The RapydScript compiler is written in RapydScript itself and uses the
5
+ RapydScript import system to modularize its code. The compiler source code is
6
+ in the `src` directory. The compiled compiler is by default in the `release`
7
+ directory.
8
+
9
+ In order to start hacking on the compiler, run the command
10
+
11
+ ```
12
+ bin/rapydscript self --complete --test
13
+ ```
14
+
15
+ This will generate a build of the compiler in the `dev` directory. Now, the
16
+ rapydscript command will automatically use this build, rather than the one in
17
+ release. If you want to go back to the release build, simply delete the `dev`
18
+ directory.
19
+
20
+
21
+ Code organization
22
+ -------------------
23
+
24
+ The way the compiler works, given some RapydScript source code:
25
+
26
+ * The source code is lexed into a stream of tokens (`src/tokenzier.pyj`)
27
+
28
+ * The tokens are parsed into a Abstract Syntax Tree (`src/parse.pyj and src/ast.pyj`)
29
+
30
+ * During parsing any import statement are resolved (this is different from
31
+ python, where imports happen at run-time, not compile time).
32
+
33
+ * The Abstract Syntax Tree is transformed into the output JavaScript (`src/output/*.pyj`)
34
+
35
+ * Various bits of functionality in RapydScript depend upon the *Base Library*
36
+ (`src/baselib*.pyj`). This includes things like the basic container types
37
+ (list/set/dict) string functions such as `str.format()`, etc. The baselib
38
+ is automatically inserted into the start of the output JavaScript.
39
+
40
+ The RapydScript standard library can be found in `src/lib`. The various tools,
41
+ such as the linter, gettext support, the REPL, etc. are in the `tools`
42
+ directory.
43
+
44
+ Tests
45
+ --------
46
+
47
+ The tests are in the test directory and can be run using the command:
48
+ ```
49
+ rapydscript test
50
+ ```
51
+
52
+ You can run individual test files by providing the name of the file, as
53
+
54
+ ```
55
+ rapydscript test classes
56
+ ```
57
+
58
+ Modifying the compiler
59
+ -------------------------
60
+
61
+ Edit the files in the `src` directory to make your changes, then use the
62
+ `./try` script to test them. This script will compile an updated version of
63
+ the compiler with your changes, if any, and use it to run the snippet of code
64
+ you pass to it.
65
+
66
+ For example:
67
+
68
+ ```
69
+ ./try 'print("Hello world")'
70
+ ```
71
+
72
+ will compile `print ("Hello world")` and show you the output on stdout. You can
73
+ tell it to omit the baselib, so you can focus on the output, with the `-m`
74
+ switch, like this:
75
+
76
+ ```
77
+ ./try -m 'print("Hello world")'
78
+ ```
79
+
80
+ You can also have it not print out the JavaScript, instead directly executing the output
81
+ JavaScript with the `-x` switch, like this
82
+
83
+ ```
84
+ ./try -x 'print("Hello world")'
85
+ ```
86
+
87
+ If you want to test longer sections of code, you can use the `-f` switch to
88
+ pass in the path to a RapydScript file to compile, like this:
89
+
90
+ ```
91
+ ./try -f myfile.pyj
92
+ ```
93
+
94
+ Once you are happy with your changes, you can build the compiler and run the
95
+ test suite, all with a single command:
96
+
97
+ ```
98
+ ./build
99
+ ```
100
+
101
+ This will build the compiler with the updated version of itself and then run
102
+ the test suite. If all test pass you can commit your changes and send a pull
103
+ request :)
package/LICENSE CHANGED
@@ -1,24 +1,24 @@
1
- Copyright (c) 2015-, Kovid Goyal <kovid@kovidgoyal.net>
2
- Copyright (c) 2013-2014, Alexander Tsepkov <atsepkov@pyjeon.com>
3
- All rights reserved.
4
-
5
- Redistribution and use in source and binary forms, with or without
6
- modification, are permitted provided that the following conditions are met:
7
-
8
- * Redistributions of source code must retain the above copyright notice, this
9
- list of conditions and the following disclaimer.
10
-
11
- * Redistributions in binary form must reproduce the above copyright notice,
12
- this list of conditions and the following disclaimer in the documentation
13
- and/or other materials provided with the distribution.
14
-
15
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
16
- AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
17
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
18
- DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
19
- FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
20
- DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
21
- SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
22
- CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
23
- OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
24
- OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
1
+ Copyright (c) 2015-, Kovid Goyal <kovid@kovidgoyal.net>
2
+ Copyright (c) 2013-2014, Alexander Tsepkov <atsepkov@pyjeon.com>
3
+ All rights reserved.
4
+
5
+ Redistribution and use in source and binary forms, with or without
6
+ modification, are permitted provided that the following conditions are met:
7
+
8
+ * Redistributions of source code must retain the above copyright notice, this
9
+ list of conditions and the following disclaimer.
10
+
11
+ * Redistributions in binary form must reproduce the above copyright notice,
12
+ this list of conditions and the following disclaimer in the documentation
13
+ and/or other materials provided with the distribution.
14
+
15
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
16
+ AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
17
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
18
+ DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
19
+ FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
20
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
21
+ SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
22
+ CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
23
+ OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
24
+ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.