rapydscript-ns 0.8.4 → 0.9.0

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 (132) 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/README.md +715 -169
  8. package/TODO.md +9 -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 +6282 -3092
  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/copy.pyj +120 -120
  35. package/src/lib/dataclasses.pyj +532 -0
  36. package/src/lib/elementmaker.pyj +83 -83
  37. package/src/lib/encodings.pyj +126 -126
  38. package/src/lib/enum.pyj +125 -0
  39. package/src/lib/gettext.pyj +569 -569
  40. package/src/lib/itertools.pyj +580 -580
  41. package/src/lib/math.pyj +193 -193
  42. package/src/lib/operator.pyj +11 -11
  43. package/src/lib/pythonize.pyj +20 -20
  44. package/src/lib/random.pyj +118 -118
  45. package/src/lib/re.pyj +504 -470
  46. package/src/lib/react.pyj +74 -74
  47. package/src/lib/traceback.pyj +63 -63
  48. package/src/lib/typing.pyj +577 -0
  49. package/src/lib/uuid.pyj +77 -77
  50. package/src/monaco-language-service/builtins.js +14 -4
  51. package/src/monaco-language-service/diagnostics.js +19 -20
  52. package/src/monaco-language-service/dts.js +550 -550
  53. package/src/output/classes.pyj +62 -26
  54. package/src/output/comments.pyj +45 -45
  55. package/src/output/exceptions.pyj +201 -201
  56. package/src/output/functions.pyj +78 -5
  57. package/src/output/jsx.pyj +164 -164
  58. package/src/output/loops.pyj +5 -2
  59. package/src/output/operators.pyj +100 -34
  60. package/src/output/treeshake.pyj +182 -182
  61. package/src/output/utils.pyj +72 -72
  62. package/src/parse.pyj +80 -16
  63. package/src/string_interpolation.pyj +72 -72
  64. package/src/tokenizer.pyj +9 -4
  65. package/src/unicode_aliases.pyj +576 -576
  66. package/src/utils.pyj +192 -192
  67. package/test/_import_one.pyj +37 -37
  68. package/test/_import_two/__init__.pyj +11 -11
  69. package/test/_import_two/level2/deep.pyj +4 -4
  70. package/test/_import_two/other.pyj +6 -6
  71. package/test/_import_two/sub.pyj +13 -13
  72. package/test/abc.pyj +291 -0
  73. package/test/aes_vectors.pyj +421 -421
  74. package/test/annotations.pyj +80 -80
  75. package/test/arithmetic_nostrict.pyj +88 -0
  76. package/test/arithmetic_types.pyj +169 -0
  77. package/test/baselib.pyj +91 -0
  78. package/test/bytes.pyj +467 -0
  79. package/test/classes.pyj +1 -0
  80. package/test/comparison_ops.pyj +173 -0
  81. package/test/dataclasses.pyj +253 -0
  82. package/test/decorators.pyj +77 -77
  83. package/test/docstrings.pyj +39 -39
  84. package/test/elementmaker_test.pyj +45 -45
  85. package/test/enum.pyj +134 -0
  86. package/test/eval_exec.pyj +56 -0
  87. package/test/format.pyj +148 -0
  88. package/test/functions.pyj +151 -151
  89. package/test/generators.pyj +41 -41
  90. package/test/generic.pyj +370 -370
  91. package/test/imports.pyj +72 -72
  92. package/test/internationalization.pyj +73 -73
  93. package/test/lint.pyj +164 -164
  94. package/test/loops.pyj +85 -85
  95. package/test/numpy.pyj +734 -734
  96. package/test/object.pyj +64 -0
  97. package/test/omit_function_metadata.pyj +20 -20
  98. package/test/python_compat.pyj +17 -15
  99. package/test/python_features.pyj +70 -15
  100. package/test/regexp.pyj +83 -55
  101. package/test/repl.pyj +121 -121
  102. package/test/scoped_flags.pyj +76 -76
  103. package/test/tuples.pyj +96 -0
  104. package/test/typing.pyj +469 -0
  105. package/test/unit/index.js +116 -7
  106. package/test/unit/language-service-dts.js +543 -543
  107. package/test/unit/language-service-hover.js +455 -455
  108. package/test/unit/language-service.js +84 -0
  109. package/test/unit/web-repl.js +804 -1
  110. package/test/vars_locals_globals.pyj +94 -0
  111. package/tools/cli.js +558 -547
  112. package/tools/compile.js +224 -219
  113. package/tools/completer.js +131 -131
  114. package/tools/embedded_compiler.js +262 -251
  115. package/tools/gettext.js +185 -185
  116. package/tools/ini.js +65 -65
  117. package/tools/lint.js +16 -19
  118. package/tools/msgfmt.js +187 -187
  119. package/tools/repl.js +223 -223
  120. package/tools/test.js +118 -118
  121. package/tools/utils.js +128 -128
  122. package/tools/web_repl.js +95 -95
  123. package/try +41 -41
  124. package/web-repl/env.js +196 -196
  125. package/web-repl/index.html +163 -163
  126. package/web-repl/main.js +252 -252
  127. package/web-repl/prism.css +139 -139
  128. package/web-repl/prism.js +113 -113
  129. package/web-repl/rapydscript.js +224 -224
  130. package/web-repl/sha1.js +25 -25
  131. package/PYTHON_DIFFERENCES_REPORT.md +0 -291
  132. 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,21 @@
1
+ version 0.9.0
2
+ =======================
3
+ * All optional Python compatibility features are now enabled by default. See Python Feature Coverage from the README
4
+ * Add `enum` standard library module
5
+ * Add `dataclasses` standard library module
6
+ * Add `abc` standard library module (`ABC`, `abstractmethod`, `Protocol`)
7
+ * Add `typing` standard library module
8
+ * Add support for `eval()` and `exec()` to run python/rapydscript code. Please use this responsibly.
9
+ * Add support for `vars()` and `globals()` builtins
10
+ * Add support for complex numbers and complex number literals
11
+ * Add support for `bytes` literals and the `ByteString` type
12
+ * Add support for `__format__` dunder method
13
+ * Add support for Python-style container comparison (chained `<`/`>`)
14
+ * Add support for strict `zip()` behavior
15
+ * Add support for `object()`, `int.bit_length()`, and `float.is_integer()`
16
+ * Prevent JavaScript-style arithmetic type coercion when attempting to sum invalid mixed data types
17
+
18
+
1
19
  version 0.8.4
2
20
  =======================
3
21
  * 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.