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.
- package/.agignore +1 -1
- package/.github/workflows/ci.yml +38 -38
- package/=template.pyj +5 -5
- package/CHANGELOG.md +8 -0
- package/HACKING.md +103 -103
- package/LICENSE +24 -24
- package/PYTHON_DIFFERENCES_REPORT.md +2 -2
- package/PYTHON_FEATURE_COVERAGE.md +13 -13
- package/README.md +670 -6
- package/TODO.md +5 -6
- package/add-toc-to-readme +2 -2
- package/bin/export +75 -75
- package/bin/rapydscript +70 -70
- package/bin/web-repl-export +102 -102
- package/build +2 -2
- package/language-service/index.js +155 -6
- package/package.json +1 -1
- package/publish.py +37 -37
- package/release/baselib-plain-pretty.js +2006 -229
- package/release/baselib-plain-ugly.js +70 -3
- package/release/compiler.js +11554 -3870
- package/release/signatures.json +31 -29
- package/session.vim +4 -4
- package/setup.cfg +2 -2
- package/src/ast.pyj +93 -1
- package/src/baselib-builtins.pyj +22 -1
- package/src/baselib-containers.pyj +99 -0
- package/src/baselib-errors.pyj +44 -0
- package/src/baselib-internal.pyj +94 -4
- package/src/baselib-itertools.pyj +97 -97
- package/src/baselib-str.pyj +24 -0
- package/src/compiler.pyj +36 -36
- package/src/errors.pyj +30 -30
- package/src/lib/aes.pyj +646 -646
- package/src/lib/copy.pyj +120 -0
- package/src/lib/elementmaker.pyj +83 -83
- package/src/lib/encodings.pyj +126 -126
- package/src/lib/gettext.pyj +569 -569
- package/src/lib/itertools.pyj +580 -580
- package/src/lib/math.pyj +193 -193
- package/src/lib/operator.pyj +11 -11
- package/src/lib/pythonize.pyj +20 -20
- package/src/lib/random.pyj +118 -118
- package/src/lib/re.pyj +470 -470
- package/src/lib/react.pyj +74 -0
- package/src/lib/traceback.pyj +63 -63
- package/src/lib/uuid.pyj +77 -77
- package/src/monaco-language-service/builtins.js +5 -0
- package/src/monaco-language-service/diagnostics.js +25 -3
- package/src/monaco-language-service/dts.js +550 -550
- package/src/output/classes.pyj +108 -8
- package/src/output/codegen.pyj +16 -2
- package/src/output/comments.pyj +45 -45
- package/src/output/exceptions.pyj +201 -105
- package/src/output/functions.pyj +9 -0
- package/src/output/jsx.pyj +164 -0
- package/src/output/literals.pyj +28 -2
- package/src/output/modules.pyj +1 -1
- package/src/output/operators.pyj +8 -2
- package/src/output/statements.pyj +2 -2
- package/src/output/stream.pyj +1 -0
- package/src/output/treeshake.pyj +182 -182
- package/src/output/utils.pyj +72 -72
- package/src/parse.pyj +417 -113
- package/src/string_interpolation.pyj +72 -72
- package/src/tokenizer.pyj +29 -0
- package/src/unicode_aliases.pyj +576 -576
- package/src/utils.pyj +192 -192
- package/test/_import_one.pyj +37 -37
- package/test/_import_two/__init__.pyj +11 -11
- package/test/_import_two/level2/deep.pyj +4 -4
- package/test/_import_two/other.pyj +6 -6
- package/test/_import_two/sub.pyj +13 -13
- package/test/aes_vectors.pyj +421 -421
- package/test/annotations.pyj +80 -80
- package/test/decorators.pyj +77 -77
- package/test/docstrings.pyj +39 -39
- package/test/elementmaker_test.pyj +45 -45
- package/test/functions.pyj +151 -151
- package/test/generators.pyj +41 -41
- package/test/generic.pyj +370 -370
- package/test/imports.pyj +72 -72
- package/test/internationalization.pyj +73 -73
- package/test/lint.pyj +164 -164
- package/test/loops.pyj +85 -85
- package/test/numpy.pyj +734 -734
- package/test/omit_function_metadata.pyj +20 -20
- package/test/python_features.pyj +19 -6
- package/test/regexp.pyj +55 -55
- package/test/repl.pyj +121 -121
- package/test/scoped_flags.pyj +76 -76
- package/test/unit/index.js +2177 -64
- package/test/unit/language-service-dts.js +543 -543
- package/test/unit/language-service-hover.js +455 -455
- package/test/unit/language-service.js +590 -4
- package/test/unit/web-repl.js +303 -0
- package/tools/cli.js +547 -547
- package/tools/compile.js +219 -219
- package/tools/completer.js +131 -131
- package/tools/embedded_compiler.js +251 -251
- package/tools/gettext.js +185 -185
- package/tools/ini.js +65 -65
- package/tools/msgfmt.js +187 -187
- package/tools/repl.js +223 -223
- package/tools/test.js +118 -118
- package/tools/utils.js +128 -128
- package/tools/web_repl.js +95 -95
- package/try +41 -41
- package/web-repl/env.js +196 -74
- package/web-repl/index.html +163 -163
- package/web-repl/main.js +252 -254
- package/web-repl/prism.css +139 -139
- package/web-repl/prism.js +113 -113
- package/web-repl/rapydscript.js +224 -102
- package/web-repl/sha1.js +25 -25
- package/hack_demo.pyj +0 -112
package/test/functions.pyj
CHANGED
|
@@ -1,151 +1,151 @@
|
|
|
1
|
-
# globals: assrt
|
|
2
|
-
|
|
3
|
-
def nothing():
|
|
4
|
-
pass
|
|
5
|
-
assrt.equal(nothing(), undefined)
|
|
6
|
-
|
|
7
|
-
add = def(a, b):
|
|
8
|
-
return a+b
|
|
9
|
-
def sub(a, b):
|
|
10
|
-
return a-b
|
|
11
|
-
|
|
12
|
-
mul = None
|
|
13
|
-
(def():
|
|
14
|
-
nonlocal mul
|
|
15
|
-
mul = def(a, b):
|
|
16
|
-
return a*b
|
|
17
|
-
|
|
18
|
-
div = def(a, b): # noqa:unused-local
|
|
19
|
-
return a/b
|
|
20
|
-
)()
|
|
21
|
-
|
|
22
|
-
assrt.equal(add(1,2), 3)
|
|
23
|
-
assrt.equal(sub(1,2), -1)
|
|
24
|
-
assrt.equal(mul(2,2), 4)
|
|
25
|
-
# for some reason input to throws must be of type block, hence the 'def' wrapper
|
|
26
|
-
assrt.throws(
|
|
27
|
-
def():
|
|
28
|
-
div(6,3) # noqa: undef
|
|
29
|
-
,
|
|
30
|
-
/div is not defined/
|
|
31
|
-
)
|
|
32
|
-
|
|
33
|
-
arr = [8,4]
|
|
34
|
-
assrt.equal(add(*arr), 12)
|
|
35
|
-
assrt.ok(Array.isArray(arr))
|
|
36
|
-
|
|
37
|
-
def sum(*args):
|
|
38
|
-
ttl = 0
|
|
39
|
-
for i in args:
|
|
40
|
-
ttl += i
|
|
41
|
-
return ttl
|
|
42
|
-
assrt.equal(sum(1,2,3), 6)
|
|
43
|
-
assrt.equal(sum(1,*[2,3]), 6)
|
|
44
|
-
|
|
45
|
-
num = 4
|
|
46
|
-
def():
|
|
47
|
-
nonlocal num
|
|
48
|
-
num = 5
|
|
49
|
-
.call(this)
|
|
50
|
-
|
|
51
|
-
assrt.equal(num, 5)
|
|
52
|
-
|
|
53
|
-
x = "foo"
|
|
54
|
-
y = 5
|
|
55
|
-
def swap(x, y):
|
|
56
|
-
return y, x
|
|
57
|
-
x, y = swap(x, y)
|
|
58
|
-
assrt.equal(x, 5)
|
|
59
|
-
assrt.equal(y, "foo")
|
|
60
|
-
|
|
61
|
-
count = 0
|
|
62
|
-
f, r = (def():
|
|
63
|
-
def fake_increment():
|
|
64
|
-
count += 1
|
|
65
|
-
def real_increment():
|
|
66
|
-
nonlocal count
|
|
67
|
-
count += 1
|
|
68
|
-
return fake_increment, real_increment
|
|
69
|
-
).call(this)
|
|
70
|
-
|
|
71
|
-
f()
|
|
72
|
-
assrt.equal(count, 0)
|
|
73
|
-
r()
|
|
74
|
-
assrt.equal(count, 1)
|
|
75
|
-
|
|
76
|
-
st = "this is a string"
|
|
77
|
-
assrt.equal(jstype(st), v"typeof st")
|
|
78
|
-
|
|
79
|
-
# testing inlined functions
|
|
80
|
-
inlined = [
|
|
81
|
-
def(x): return x+1;, def(x): return x+2;,
|
|
82
|
-
def(x): return x+3
|
|
83
|
-
,
|
|
84
|
-
def(x): return x+4
|
|
85
|
-
]
|
|
86
|
-
assrt.equal(inlined[0](1), 2)
|
|
87
|
-
assrt.equal(inlined[1](1), 3)
|
|
88
|
-
assrt.equal(inlined[2](1), 4)
|
|
89
|
-
assrt.equal(inlined[3](1), 5)
|
|
90
|
-
|
|
91
|
-
# decorators
|
|
92
|
-
def makebold(fn):
|
|
93
|
-
def wrapped(arg):
|
|
94
|
-
return "<b>" + fn(arg) + "</b>"
|
|
95
|
-
return wrapped
|
|
96
|
-
|
|
97
|
-
def makeitalic(fn):
|
|
98
|
-
def wrapped(arg):
|
|
99
|
-
return "<i>" + fn(arg) + "</i>"
|
|
100
|
-
return wrapped
|
|
101
|
-
|
|
102
|
-
@makebold
|
|
103
|
-
@makeitalic
|
|
104
|
-
def hello(something):
|
|
105
|
-
return "hello " + something
|
|
106
|
-
|
|
107
|
-
assrt.equal(hello("world"), "<b><i>hello world</i></b>")
|
|
108
|
-
assrt.equal(hello.__module__, '__main__')
|
|
109
|
-
assrt.equal(hello.__argnames__.length, 1)
|
|
110
|
-
assrt.equal(hello.__argnames__[0], 'arg')
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
def simple_wrapper(f):
|
|
114
|
-
f.test_attr = 'test'
|
|
115
|
-
return f
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
@simple_wrapper
|
|
119
|
-
def fw(x):
|
|
120
|
-
pass
|
|
121
|
-
|
|
122
|
-
assrt.equal(fw.__module__, '__main__')
|
|
123
|
-
assrt.equal(fw.__argnames__.length, 1)
|
|
124
|
-
assrt.equal(fw.__argnames__[0], 'x')
|
|
125
|
-
# just because something is a reserved keyword in RapydScript, doesn't mean other libraries won't attempt to use it
|
|
126
|
-
# let's make sure we parse that correctly
|
|
127
|
-
five = {}
|
|
128
|
-
v"five.is = function(n) { return 5 == n };"
|
|
129
|
-
assrt.ok(five.is(5))
|
|
130
|
-
|
|
131
|
-
# function assignment via conditional
|
|
132
|
-
foo = (def(): return 5;) if 0 else (def(): return 6;)
|
|
133
|
-
bar = (def(): return 5;) if 0 < 1 else (def(): return 6;)
|
|
134
|
-
baz = (def():
|
|
135
|
-
return 5
|
|
136
|
-
) if 1 else (def():
|
|
137
|
-
return 6
|
|
138
|
-
)
|
|
139
|
-
assrt.equal(foo(), 6)
|
|
140
|
-
assrt.equal(bar(), 5)
|
|
141
|
-
assrt.equal(baz(), 5)
|
|
142
|
-
|
|
143
|
-
def trailing_comma(a, b,):
|
|
144
|
-
return a + b
|
|
145
|
-
assrt.equal(trailing_comma(1, 2), 3)
|
|
146
|
-
assrt.equal(trailing_comma(1, 2,), 3)
|
|
147
|
-
|
|
148
|
-
def return_string_with_newline():
|
|
149
|
-
return '''a
|
|
150
|
-
b'''
|
|
151
|
-
assrt.equal(return_string_with_newline(), 'a\nb')
|
|
1
|
+
# globals: assrt
|
|
2
|
+
|
|
3
|
+
def nothing():
|
|
4
|
+
pass
|
|
5
|
+
assrt.equal(nothing(), undefined)
|
|
6
|
+
|
|
7
|
+
add = def(a, b):
|
|
8
|
+
return a+b
|
|
9
|
+
def sub(a, b):
|
|
10
|
+
return a-b
|
|
11
|
+
|
|
12
|
+
mul = None
|
|
13
|
+
(def():
|
|
14
|
+
nonlocal mul
|
|
15
|
+
mul = def(a, b):
|
|
16
|
+
return a*b
|
|
17
|
+
|
|
18
|
+
div = def(a, b): # noqa:unused-local
|
|
19
|
+
return a/b
|
|
20
|
+
)()
|
|
21
|
+
|
|
22
|
+
assrt.equal(add(1,2), 3)
|
|
23
|
+
assrt.equal(sub(1,2), -1)
|
|
24
|
+
assrt.equal(mul(2,2), 4)
|
|
25
|
+
# for some reason input to throws must be of type block, hence the 'def' wrapper
|
|
26
|
+
assrt.throws(
|
|
27
|
+
def():
|
|
28
|
+
div(6,3) # noqa: undef
|
|
29
|
+
,
|
|
30
|
+
/div is not defined/
|
|
31
|
+
)
|
|
32
|
+
|
|
33
|
+
arr = [8,4]
|
|
34
|
+
assrt.equal(add(*arr), 12)
|
|
35
|
+
assrt.ok(Array.isArray(arr))
|
|
36
|
+
|
|
37
|
+
def sum(*args):
|
|
38
|
+
ttl = 0
|
|
39
|
+
for i in args:
|
|
40
|
+
ttl += i
|
|
41
|
+
return ttl
|
|
42
|
+
assrt.equal(sum(1,2,3), 6)
|
|
43
|
+
assrt.equal(sum(1,*[2,3]), 6)
|
|
44
|
+
|
|
45
|
+
num = 4
|
|
46
|
+
def():
|
|
47
|
+
nonlocal num
|
|
48
|
+
num = 5
|
|
49
|
+
.call(this)
|
|
50
|
+
|
|
51
|
+
assrt.equal(num, 5)
|
|
52
|
+
|
|
53
|
+
x = "foo"
|
|
54
|
+
y = 5
|
|
55
|
+
def swap(x, y):
|
|
56
|
+
return y, x
|
|
57
|
+
x, y = swap(x, y)
|
|
58
|
+
assrt.equal(x, 5)
|
|
59
|
+
assrt.equal(y, "foo")
|
|
60
|
+
|
|
61
|
+
count = 0
|
|
62
|
+
f, r = (def():
|
|
63
|
+
def fake_increment():
|
|
64
|
+
count += 1
|
|
65
|
+
def real_increment():
|
|
66
|
+
nonlocal count
|
|
67
|
+
count += 1
|
|
68
|
+
return fake_increment, real_increment
|
|
69
|
+
).call(this)
|
|
70
|
+
|
|
71
|
+
f()
|
|
72
|
+
assrt.equal(count, 0)
|
|
73
|
+
r()
|
|
74
|
+
assrt.equal(count, 1)
|
|
75
|
+
|
|
76
|
+
st = "this is a string"
|
|
77
|
+
assrt.equal(jstype(st), v"typeof st")
|
|
78
|
+
|
|
79
|
+
# testing inlined functions
|
|
80
|
+
inlined = [
|
|
81
|
+
def(x): return x+1;, def(x): return x+2;,
|
|
82
|
+
def(x): return x+3
|
|
83
|
+
,
|
|
84
|
+
def(x): return x+4
|
|
85
|
+
]
|
|
86
|
+
assrt.equal(inlined[0](1), 2)
|
|
87
|
+
assrt.equal(inlined[1](1), 3)
|
|
88
|
+
assrt.equal(inlined[2](1), 4)
|
|
89
|
+
assrt.equal(inlined[3](1), 5)
|
|
90
|
+
|
|
91
|
+
# decorators
|
|
92
|
+
def makebold(fn):
|
|
93
|
+
def wrapped(arg):
|
|
94
|
+
return "<b>" + fn(arg) + "</b>"
|
|
95
|
+
return wrapped
|
|
96
|
+
|
|
97
|
+
def makeitalic(fn):
|
|
98
|
+
def wrapped(arg):
|
|
99
|
+
return "<i>" + fn(arg) + "</i>"
|
|
100
|
+
return wrapped
|
|
101
|
+
|
|
102
|
+
@makebold
|
|
103
|
+
@makeitalic
|
|
104
|
+
def hello(something):
|
|
105
|
+
return "hello " + something
|
|
106
|
+
|
|
107
|
+
assrt.equal(hello("world"), "<b><i>hello world</i></b>")
|
|
108
|
+
assrt.equal(hello.__module__, '__main__')
|
|
109
|
+
assrt.equal(hello.__argnames__.length, 1)
|
|
110
|
+
assrt.equal(hello.__argnames__[0], 'arg')
|
|
111
|
+
|
|
112
|
+
|
|
113
|
+
def simple_wrapper(f):
|
|
114
|
+
f.test_attr = 'test'
|
|
115
|
+
return f
|
|
116
|
+
|
|
117
|
+
|
|
118
|
+
@simple_wrapper
|
|
119
|
+
def fw(x):
|
|
120
|
+
pass
|
|
121
|
+
|
|
122
|
+
assrt.equal(fw.__module__, '__main__')
|
|
123
|
+
assrt.equal(fw.__argnames__.length, 1)
|
|
124
|
+
assrt.equal(fw.__argnames__[0], 'x')
|
|
125
|
+
# just because something is a reserved keyword in RapydScript, doesn't mean other libraries won't attempt to use it
|
|
126
|
+
# let's make sure we parse that correctly
|
|
127
|
+
five = {}
|
|
128
|
+
v"five.is = function(n) { return 5 == n };"
|
|
129
|
+
assrt.ok(five.is(5))
|
|
130
|
+
|
|
131
|
+
# function assignment via conditional
|
|
132
|
+
foo = (def(): return 5;) if 0 else (def(): return 6;)
|
|
133
|
+
bar = (def(): return 5;) if 0 < 1 else (def(): return 6;)
|
|
134
|
+
baz = (def():
|
|
135
|
+
return 5
|
|
136
|
+
) if 1 else (def():
|
|
137
|
+
return 6
|
|
138
|
+
)
|
|
139
|
+
assrt.equal(foo(), 6)
|
|
140
|
+
assrt.equal(bar(), 5)
|
|
141
|
+
assrt.equal(baz(), 5)
|
|
142
|
+
|
|
143
|
+
def trailing_comma(a, b,):
|
|
144
|
+
return a + b
|
|
145
|
+
assrt.equal(trailing_comma(1, 2), 3)
|
|
146
|
+
assrt.equal(trailing_comma(1, 2,), 3)
|
|
147
|
+
|
|
148
|
+
def return_string_with_newline():
|
|
149
|
+
return '''a
|
|
150
|
+
b'''
|
|
151
|
+
assrt.equal(return_string_with_newline(), 'a\nb')
|
package/test/generators.pyj
CHANGED
|
@@ -1,41 +1,41 @@
|
|
|
1
|
-
# vim:fileencoding=utf-8
|
|
2
|
-
# License: BSD
|
|
3
|
-
# Copyright: 2015, Kovid Goyal <kovid at kovidgoyal.net>
|
|
4
|
-
|
|
5
|
-
def g1():
|
|
6
|
-
yield 1
|
|
7
|
-
yield 2
|
|
8
|
-
|
|
9
|
-
def g2():
|
|
10
|
-
for i in range(2):
|
|
11
|
-
yield from g1()
|
|
12
|
-
|
|
13
|
-
def g3():
|
|
14
|
-
data = yield 1
|
|
15
|
-
yield data
|
|
16
|
-
|
|
17
|
-
class A:
|
|
18
|
-
|
|
19
|
-
def __init__(self):
|
|
20
|
-
self.items = [1, 2, 3]
|
|
21
|
-
|
|
22
|
-
def __iter__(self):
|
|
23
|
-
for x in self.items:
|
|
24
|
-
yield x
|
|
25
|
-
|
|
26
|
-
assrt.deepEqual([x for x in g1()], [1, 2])
|
|
27
|
-
assrt.deepEqual([x for x in g2()], [1, 2, 1, 2])
|
|
28
|
-
assrt.deepEqual([x for x in A()], [1, 2, 3])
|
|
29
|
-
|
|
30
|
-
g = g3()
|
|
31
|
-
assrt.equal(g.next().value, 1)
|
|
32
|
-
assrt.equal(g.next('a').value, 'a')
|
|
33
|
-
|
|
34
|
-
a = (x for x in range(3))
|
|
35
|
-
assrt.deepEqual(list(a), [0, 1, 2])
|
|
36
|
-
a = ([x, x**2] for x in range(3))
|
|
37
|
-
assrt.deepEqual(list(a), [[0, 0], [1, 1], [2, 4]])
|
|
38
|
-
assrt.deepEqual(list(x for x in range(3)), [0, 1, 2])
|
|
39
|
-
def t(a, b):
|
|
40
|
-
assrt.deepEqual(list(a), list(b))
|
|
41
|
-
t((x for x in range(1)), (y for y in range(1)))
|
|
1
|
+
# vim:fileencoding=utf-8
|
|
2
|
+
# License: BSD
|
|
3
|
+
# Copyright: 2015, Kovid Goyal <kovid at kovidgoyal.net>
|
|
4
|
+
|
|
5
|
+
def g1():
|
|
6
|
+
yield 1
|
|
7
|
+
yield 2
|
|
8
|
+
|
|
9
|
+
def g2():
|
|
10
|
+
for i in range(2):
|
|
11
|
+
yield from g1()
|
|
12
|
+
|
|
13
|
+
def g3():
|
|
14
|
+
data = yield 1
|
|
15
|
+
yield data
|
|
16
|
+
|
|
17
|
+
class A:
|
|
18
|
+
|
|
19
|
+
def __init__(self):
|
|
20
|
+
self.items = [1, 2, 3]
|
|
21
|
+
|
|
22
|
+
def __iter__(self):
|
|
23
|
+
for x in self.items:
|
|
24
|
+
yield x
|
|
25
|
+
|
|
26
|
+
assrt.deepEqual([x for x in g1()], [1, 2])
|
|
27
|
+
assrt.deepEqual([x for x in g2()], [1, 2, 1, 2])
|
|
28
|
+
assrt.deepEqual([x for x in A()], [1, 2, 3])
|
|
29
|
+
|
|
30
|
+
g = g3()
|
|
31
|
+
assrt.equal(g.next().value, 1)
|
|
32
|
+
assrt.equal(g.next('a').value, 'a')
|
|
33
|
+
|
|
34
|
+
a = (x for x in range(3))
|
|
35
|
+
assrt.deepEqual(list(a), [0, 1, 2])
|
|
36
|
+
a = ([x, x**2] for x in range(3))
|
|
37
|
+
assrt.deepEqual(list(a), [[0, 0], [1, 1], [2, 4]])
|
|
38
|
+
assrt.deepEqual(list(x for x in range(3)), [0, 1, 2])
|
|
39
|
+
def t(a, b):
|
|
40
|
+
assrt.deepEqual(list(a), list(b))
|
|
41
|
+
t((x for x in range(1)), (y for y in range(1)))
|