rapydscript-ns 0.9.3 → 0.9.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 (98) 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 +9 -0
  5. package/HACKING.md +103 -103
  6. package/LICENSE +24 -24
  7. package/PYTHON_GAPS.md +48 -116
  8. package/README.md +35 -15
  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 +9 -7
  16. package/package.json +1 -1
  17. package/publish.py +37 -37
  18. package/session.vim +4 -4
  19. package/setup.cfg +2 -2
  20. package/src/ast.pyj +6 -0
  21. package/src/baselib-containers.pyj +23 -1
  22. package/src/baselib-str.pyj +13 -2
  23. package/src/compiler.pyj +36 -36
  24. package/src/errors.pyj +30 -30
  25. package/src/lib/aes.pyj +646 -646
  26. package/src/lib/collections.pyj +227 -3
  27. package/src/lib/copy.pyj +120 -120
  28. package/src/lib/elementmaker.pyj +83 -83
  29. package/src/lib/encodings.pyj +126 -126
  30. package/src/lib/gettext.pyj +569 -569
  31. package/src/lib/itertools.pyj +580 -580
  32. package/src/lib/math.pyj +193 -193
  33. package/src/lib/operator.pyj +11 -11
  34. package/src/lib/pprint.pyj +455 -0
  35. package/src/lib/random.pyj +118 -118
  36. package/src/lib/react.pyj +74 -74
  37. package/src/lib/statistics.pyj +0 -0
  38. package/src/lib/traceback.pyj +63 -63
  39. package/src/lib/uuid.pyj +77 -77
  40. package/src/monaco-language-service/diagnostics.js +2 -2
  41. package/src/monaco-language-service/dts.js +550 -550
  42. package/src/output/codegen.pyj +4 -1
  43. package/src/output/comments.pyj +45 -45
  44. package/src/output/exceptions.pyj +201 -201
  45. package/src/output/jsx.pyj +164 -164
  46. package/src/output/treeshake.pyj +182 -182
  47. package/src/output/utils.pyj +72 -72
  48. package/src/parse.pyj +28 -7
  49. package/src/string_interpolation.pyj +72 -72
  50. package/src/tokenizer.pyj +18 -2
  51. package/src/unicode_aliases.pyj +576 -576
  52. package/src/utils.pyj +192 -192
  53. package/test/_import_one.pyj +37 -37
  54. package/test/_import_two/__init__.pyj +11 -11
  55. package/test/_import_two/level2/deep.pyj +4 -4
  56. package/test/_import_two/other.pyj +6 -6
  57. package/test/_import_two/sub.pyj +13 -13
  58. package/test/aes_vectors.pyj +421 -421
  59. package/test/annotations.pyj +80 -80
  60. package/test/baselib.pyj +23 -0
  61. package/test/chainmap.pyj +185 -0
  62. package/test/decorators.pyj +77 -77
  63. package/test/docstrings.pyj +39 -39
  64. package/test/elementmaker_test.pyj +45 -45
  65. package/test/functions.pyj +151 -151
  66. package/test/generators.pyj +41 -41
  67. package/test/generic.pyj +370 -370
  68. package/test/internationalization.pyj +73 -73
  69. package/test/lint.pyj +164 -164
  70. package/test/loops.pyj +85 -85
  71. package/test/numpy.pyj +734 -734
  72. package/test/pprint.pyj +232 -0
  73. package/test/repl.pyj +121 -121
  74. package/test/scoped_flags.pyj +76 -76
  75. package/test/statistics.pyj +224 -0
  76. package/test/unit/index.js +80 -0
  77. package/test/unit/language-service-completions.js +2 -0
  78. package/test/unit/language-service-dts.js +543 -543
  79. package/test/unit/language-service-hover.js +455 -455
  80. package/test/unit/language-service.js +63 -2
  81. package/test/unit/web-repl.js +323 -0
  82. package/tools/compiler.d.ts +367 -367
  83. package/tools/completer.js +131 -131
  84. package/tools/export.js +4 -2
  85. package/tools/gettext.js +185 -185
  86. package/tools/ini.js +65 -65
  87. package/tools/msgfmt.js +187 -187
  88. package/tools/repl.js +223 -223
  89. package/tools/test.js +118 -118
  90. package/tools/utils.js +128 -128
  91. package/tools/web_repl.js +95 -95
  92. package/try +41 -41
  93. package/web-repl/env.js +196 -196
  94. package/web-repl/index.html +163 -163
  95. package/web-repl/prism.css +139 -139
  96. package/web-repl/prism.js +113 -113
  97. package/web-repl/rapydscript.js +228 -226
  98. package/web-repl/sha1.js +25 -25
@@ -1,45 +1,45 @@
1
- # vim:fileencoding=utf-8
2
- # License: BSD Copyright: 2015, Kovid Goyal <kovid at kovidgoyal.net>
3
- # globals: assrt
4
-
5
- from elementmaker import E
6
-
7
- eq = assrt.equal
8
-
9
- def dummy_elem_eq(a, b):
10
- eq(jstype(a), jstype(b))
11
- if (jstype(a) == 'string'):
12
- eq(a, b)
13
- return
14
- eq(a.attributes.length, b.attributes.length)
15
- eq(a.children.length, b.children.length)
16
- eq(a.name, b.name)
17
- for attr in a.attributes:
18
- eq(a[attr], b[attr])
19
- for i, child in enumerate(a.children):
20
- dummy_elem_eq(child, b.children[i])
21
-
22
- q = E.div('text', id='1', class_='c', data_x='x')
23
- dummy_elem_eq(q, {'name':'div', 'children':['text'], 'attributes':{'id':'1', 'class':'c', 'data-x': 'x'}})
24
-
25
- q = E.div(
26
- E.span('a'),
27
- E.span('b'),
28
- E.a(),
29
- id='1',
30
- boolean_attr=True,
31
- )
32
- dummy_elem_eq(q, {'name':'div', 'children':[
33
- {
34
- 'name':'span',
35
- 'children':['a'], 'attributes': {}
36
- },
37
- {
38
- 'name':'span',
39
- 'children':['b'], 'attributes': {}
40
- },
41
- {
42
- 'name':'a',
43
- 'children':[], 'attributes': {}
44
- },
45
- ], 'attributes':{'id':'1', 'boolean-attr':'boolean-attr'}})
1
+ # vim:fileencoding=utf-8
2
+ # License: BSD Copyright: 2015, Kovid Goyal <kovid at kovidgoyal.net>
3
+ # globals: assrt
4
+
5
+ from elementmaker import E
6
+
7
+ eq = assrt.equal
8
+
9
+ def dummy_elem_eq(a, b):
10
+ eq(jstype(a), jstype(b))
11
+ if (jstype(a) == 'string'):
12
+ eq(a, b)
13
+ return
14
+ eq(a.attributes.length, b.attributes.length)
15
+ eq(a.children.length, b.children.length)
16
+ eq(a.name, b.name)
17
+ for attr in a.attributes:
18
+ eq(a[attr], b[attr])
19
+ for i, child in enumerate(a.children):
20
+ dummy_elem_eq(child, b.children[i])
21
+
22
+ q = E.div('text', id='1', class_='c', data_x='x')
23
+ dummy_elem_eq(q, {'name':'div', 'children':['text'], 'attributes':{'id':'1', 'class':'c', 'data-x': 'x'}})
24
+
25
+ q = E.div(
26
+ E.span('a'),
27
+ E.span('b'),
28
+ E.a(),
29
+ id='1',
30
+ boolean_attr=True,
31
+ )
32
+ dummy_elem_eq(q, {'name':'div', 'children':[
33
+ {
34
+ 'name':'span',
35
+ 'children':['a'], 'attributes': {}
36
+ },
37
+ {
38
+ 'name':'span',
39
+ 'children':['b'], 'attributes': {}
40
+ },
41
+ {
42
+ 'name':'a',
43
+ 'children':[], 'attributes': {}
44
+ },
45
+ ], 'attributes':{'id':'1', 'boolean-attr':'boolean-attr'}})
@@ -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')
@@ -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)))