rapydscript-ns 0.8.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 (144) hide show
  1. package/.agignore +1 -0
  2. package/.gitattributes +4 -0
  3. package/.github/workflows/ci.yml +38 -0
  4. package/.github/workflows/web-repl-page-deploy.yml +42 -0
  5. package/=template.pyj +5 -0
  6. package/CHANGELOG.md +456 -0
  7. package/CONTRIBUTORS +13 -0
  8. package/HACKING.md +103 -0
  9. package/LICENSE +24 -0
  10. package/README.md +2512 -0
  11. package/TODO.md +327 -0
  12. package/add-toc-to-readme +2 -0
  13. package/bin/export +75 -0
  14. package/bin/rapydscript +70 -0
  15. package/bin/web-repl-export +102 -0
  16. package/build +3 -0
  17. package/package.json +46 -0
  18. package/publish.py +37 -0
  19. package/release/baselib-plain-pretty.js +4370 -0
  20. package/release/baselib-plain-ugly.js +3 -0
  21. package/release/compiler.js +18394 -0
  22. package/release/signatures.json +31 -0
  23. package/session.vim +4 -0
  24. package/setup.cfg +2 -0
  25. package/src/ast.pyj +1356 -0
  26. package/src/baselib-builtins.pyj +279 -0
  27. package/src/baselib-containers.pyj +723 -0
  28. package/src/baselib-errors.pyj +37 -0
  29. package/src/baselib-internal.pyj +421 -0
  30. package/src/baselib-itertools.pyj +97 -0
  31. package/src/baselib-str.pyj +798 -0
  32. package/src/compiler.pyj +36 -0
  33. package/src/errors.pyj +30 -0
  34. package/src/lib/aes.pyj +646 -0
  35. package/src/lib/collections.pyj +695 -0
  36. package/src/lib/elementmaker.pyj +83 -0
  37. package/src/lib/encodings.pyj +126 -0
  38. package/src/lib/functools.pyj +148 -0
  39. package/src/lib/gettext.pyj +569 -0
  40. package/src/lib/itertools.pyj +580 -0
  41. package/src/lib/math.pyj +193 -0
  42. package/src/lib/numpy.pyj +2101 -0
  43. package/src/lib/operator.pyj +11 -0
  44. package/src/lib/pythonize.pyj +20 -0
  45. package/src/lib/random.pyj +118 -0
  46. package/src/lib/re.pyj +470 -0
  47. package/src/lib/traceback.pyj +63 -0
  48. package/src/lib/uuid.pyj +77 -0
  49. package/src/monaco-language-service/analyzer.js +526 -0
  50. package/src/monaco-language-service/builtins.js +543 -0
  51. package/src/monaco-language-service/completions.js +498 -0
  52. package/src/monaco-language-service/diagnostics.js +643 -0
  53. package/src/monaco-language-service/dts.js +550 -0
  54. package/src/monaco-language-service/hover.js +121 -0
  55. package/src/monaco-language-service/index.js +386 -0
  56. package/src/monaco-language-service/scope.js +162 -0
  57. package/src/monaco-language-service/signature.js +144 -0
  58. package/src/output/__init__.pyj +0 -0
  59. package/src/output/classes.pyj +296 -0
  60. package/src/output/codegen.pyj +492 -0
  61. package/src/output/comments.pyj +45 -0
  62. package/src/output/exceptions.pyj +105 -0
  63. package/src/output/functions.pyj +491 -0
  64. package/src/output/literals.pyj +109 -0
  65. package/src/output/loops.pyj +444 -0
  66. package/src/output/modules.pyj +329 -0
  67. package/src/output/operators.pyj +429 -0
  68. package/src/output/statements.pyj +463 -0
  69. package/src/output/stream.pyj +309 -0
  70. package/src/output/treeshake.pyj +182 -0
  71. package/src/output/utils.pyj +72 -0
  72. package/src/parse.pyj +3106 -0
  73. package/src/string_interpolation.pyj +72 -0
  74. package/src/tokenizer.pyj +702 -0
  75. package/src/unicode_aliases.pyj +576 -0
  76. package/src/utils.pyj +192 -0
  77. package/test/_import_one.pyj +37 -0
  78. package/test/_import_two/__init__.pyj +11 -0
  79. package/test/_import_two/level2/__init__.pyj +0 -0
  80. package/test/_import_two/level2/deep.pyj +4 -0
  81. package/test/_import_two/other.pyj +6 -0
  82. package/test/_import_two/sub.pyj +13 -0
  83. package/test/aes_vectors.pyj +421 -0
  84. package/test/annotations.pyj +80 -0
  85. package/test/baselib.pyj +319 -0
  86. package/test/classes.pyj +452 -0
  87. package/test/collections.pyj +152 -0
  88. package/test/decorators.pyj +77 -0
  89. package/test/dict_spread.pyj +76 -0
  90. package/test/docstrings.pyj +39 -0
  91. package/test/elementmaker_test.pyj +45 -0
  92. package/test/ellipsis.pyj +49 -0
  93. package/test/functions.pyj +151 -0
  94. package/test/generators.pyj +41 -0
  95. package/test/generic.pyj +370 -0
  96. package/test/imports.pyj +72 -0
  97. package/test/internationalization.pyj +73 -0
  98. package/test/lint.pyj +164 -0
  99. package/test/loops.pyj +85 -0
  100. package/test/numpy.pyj +734 -0
  101. package/test/omit_function_metadata.pyj +20 -0
  102. package/test/regexp.pyj +55 -0
  103. package/test/repl.pyj +121 -0
  104. package/test/scoped_flags.pyj +76 -0
  105. package/test/starargs.pyj +506 -0
  106. package/test/starred_assign.pyj +104 -0
  107. package/test/str.pyj +198 -0
  108. package/test/subscript_tuple.pyj +53 -0
  109. package/test/unit/fixtures/fibonacci_expected.js +46 -0
  110. package/test/unit/index.js +2989 -0
  111. package/test/unit/language-service-builtins.js +815 -0
  112. package/test/unit/language-service-completions.js +1067 -0
  113. package/test/unit/language-service-dts.js +543 -0
  114. package/test/unit/language-service-hover.js +455 -0
  115. package/test/unit/language-service-scope.js +833 -0
  116. package/test/unit/language-service-signature.js +458 -0
  117. package/test/unit/language-service.js +705 -0
  118. package/test/unit/run-language-service.js +41 -0
  119. package/test/unit/web-repl.js +484 -0
  120. package/tools/build-language-service.js +190 -0
  121. package/tools/cli.js +547 -0
  122. package/tools/compile.js +219 -0
  123. package/tools/compiler.js +108 -0
  124. package/tools/completer.js +131 -0
  125. package/tools/embedded_compiler.js +251 -0
  126. package/tools/export.js +316 -0
  127. package/tools/gettext.js +185 -0
  128. package/tools/ini.js +65 -0
  129. package/tools/lint.js +705 -0
  130. package/tools/msgfmt.js +187 -0
  131. package/tools/repl.js +223 -0
  132. package/tools/self.js +162 -0
  133. package/tools/test.js +118 -0
  134. package/tools/utils.js +128 -0
  135. package/tools/web_repl.js +95 -0
  136. package/try +41 -0
  137. package/web-repl/env.js +74 -0
  138. package/web-repl/index.html +163 -0
  139. package/web-repl/language-service.js +4084 -0
  140. package/web-repl/main.js +254 -0
  141. package/web-repl/prism.css +139 -0
  142. package/web-repl/prism.js +113 -0
  143. package/web-repl/rapydscript.js +435 -0
  144. package/web-repl/sha1.js +25 -0
@@ -0,0 +1,254 @@
1
+ /* vim:fileencoding=utf-8
2
+ *
3
+ * Copyright (C) 2016 Kovid Goyal <kovid at kovidgoyal.net>
4
+ *
5
+ * Distributed under terms of the BSD license
6
+ */
7
+ (function() {
8
+ "use strict";
9
+
10
+ var web_repl = null;
11
+
12
+ // Proof-of-concept virtual file import: `from greeting import hello`
13
+ var VIRTUAL_FILES = {
14
+ 'greeting': [
15
+ 'def hello(name):',
16
+ ' return "Hello, " + name + "!"',
17
+ ].join('\n')
18
+ };
19
+
20
+ function compile(code) {
21
+ const codeWithoutVariableTypeDefinitions = code.replace(/^ *(?!def\s)([\w.-]+) *: *[\w.-]+ *[:+*\/%&|^><-]*=/gm, '$1');
22
+ var pythonize_strings = !!(document.getElementById('pythonize_strings') || {}).checked;
23
+ return web_repl.compile(codeWithoutVariableTypeDefinitions, {omit_function_metadata: false, tree_shake: false, export_main: true, virtual_files: VIRTUAL_FILES, pythonize_strings: pythonize_strings});
24
+ }
25
+
26
+ function runjs(code) {
27
+ return web_repl.runjs(code);
28
+ }
29
+
30
+ function println(text) {
31
+ document.getElementById('output').appendChild(document.createTextNode(text + '\n'));
32
+ }
33
+
34
+ function add_output(text, color) {
35
+ var output = document.getElementById('output');
36
+ var node = document.createTextNode(text);
37
+ if (color) {
38
+ var e = document.createElement('span');
39
+ e.style.color = color;
40
+ e.appendChild(node);
41
+ node = e;
42
+ }
43
+ output.appendChild(node);
44
+ output.appendChild(document.createElement('hr'));
45
+ output.lastChild.scrollIntoView();
46
+ }
47
+
48
+ function add_javascript(text) {
49
+ var output = document.getElementById('js');
50
+ var code = document.createElement('code');
51
+ code.appendChild(document.createTextNode(text));
52
+ code.setAttribute('class', 'language-javascript');
53
+ output.appendChild(code);
54
+ output.appendChild(document.createElement('hr'));
55
+ Prism.highlightElement(code);
56
+ output.lastChild.scrollIntoView();
57
+ }
58
+
59
+ function show_compiler_error(text, line, col) {
60
+ var output = document.getElementById('js');
61
+ var e = document.createElement('div');
62
+ e.style.color = 'red';
63
+ var b = document.createElement('b');
64
+ b.textContent = "Failed to compile RapydScript with error:\n";
65
+ e.appendChild(b);
66
+ e.appendChild(document.createTextNode(text + '\n'));
67
+ if (line) {
68
+ var t = document.createElement('span');
69
+ t.style.color = 'black';
70
+ e.appendChild(document.createTextNode('☛ '));
71
+ t.textContent = line + '\n';
72
+ e.appendChild(t);
73
+ if (col !== null) {
74
+ t = document.createElement('span');
75
+ e.appendChild(document.createTextNode('☛ '));
76
+ t.textContent = ' '.repeat(col) + '⬆';
77
+ e.appendChild(t);
78
+ }
79
+ }
80
+ output.appendChild(e);
81
+ output.appendChild(document.createElement('hr'));
82
+ output.lastChild.scrollIntoView();
83
+ }
84
+
85
+ function read_eval(code) {
86
+ var js, obj, text;
87
+ hide_completions();
88
+ try {
89
+ js = compile(code);
90
+ } catch(e) {
91
+ var text, line = null, col = null;
92
+ if (e.message && e.line) {
93
+ text = e.message;
94
+ line = code.split('\n')[e.line - 1];
95
+ col = e.col;
96
+ } else text = e.stack || e.toString();
97
+ show_compiler_error(text, line, col);
98
+ return false;
99
+ }
100
+ add_javascript(js);
101
+ try {
102
+ obj = runjs(js);
103
+ } catch(e) {
104
+ add_output(e.toString(), 'red');
105
+ return;
106
+ }
107
+ if (typeof obj === 'string') add_output(obj, 'brown');
108
+ return false;
109
+ }
110
+
111
+ function run_code() {
112
+ document.getElementById('output').innerHTML = '';
113
+ var input = document.getElementById('input');
114
+ var code = input.value;
115
+ //input.value = '';
116
+ if (code) read_eval(code);
117
+ document.getElementById('input').focus();
118
+ }
119
+
120
+ function hide_completions() {
121
+ document.getElementById('completions').style.display = 'none';
122
+ }
123
+
124
+ function completions_visible() {
125
+ return document.getElementById('completions').style.display !== 'none';
126
+ }
127
+
128
+ function show_completions(completions) {
129
+ var comps = document.getElementById('completions'), e = comps.lastChild;
130
+ e.innerHTML = '';
131
+ var groups = [], current_group = [];
132
+ completions.forEach(function(x) {
133
+ if (x) current_group.push(x);
134
+ else {
135
+ if (current_group.length) groups.push(current_group);
136
+ current_group = [];
137
+ }
138
+ });
139
+ if (current_group.length) groups.push(current_group);
140
+ groups.forEach(function(group) {
141
+ if (!group.length) return;
142
+ var g = document.createElement('div');
143
+ g.setAttribute('class', 'completion-group');
144
+ var longest_length = group.concat().sort(function (a, b) { return b.length - a.length; })[0].length + 1;
145
+ group.forEach(function(word) {
146
+ var node = document.createTextNode(word + '\xa0'.repeat(longest_length - word.length));
147
+ var div = document.createElement('div');
148
+ div.appendChild(node);
149
+ g.appendChild(div);
150
+ });
151
+ e.appendChild(g);
152
+ });
153
+ comps.style.display = 'block';
154
+ }
155
+
156
+ function check_for_completions() {
157
+ var input = document.getElementById('input'), source = input.value;
158
+ var ss = input.selectionStart;
159
+ if (ss === undefined || input.selectionEnd !== ss) return hide_completions();
160
+ var before = source.substr(0, ss);
161
+ var ret = web_repl.find_completions(before);
162
+ if (!ret || ret.length != 2) return hide_completions();
163
+ var completions = ret[0], prefix = longest_common_prefix(completions), last_tok = ret[1];
164
+ if (prefix == last_tok && completions.length == 1) return hide_completions();
165
+ if (completions_visible() || completions.length == 1) {
166
+ if (prefix.length > last_tok.length) {
167
+ var insertion = prefix.substr(last_tok.length);
168
+ input.value = before + insertion + source.substr(ss);
169
+ input.setSelectionRange(ss + insertion.length, ss + insertion.length);
170
+ }
171
+ }
172
+ if (completions.length > 1) show_completions(completions);
173
+ else hide_completions();
174
+ }
175
+
176
+ function update_completions() {
177
+ if (completions_visible()) {
178
+ var input = document.getElementById('input'), source = input.value;
179
+ var ss = input.selectionStart;
180
+ if (ss === undefined || input.selectionEnd !== ss) return hide_completions();
181
+ var before = source.substr(0, ss);
182
+ var ret = web_repl.find_completions(before);
183
+ if (!ret || ret.length != 2) return hide_completions();
184
+ var completions = ret[0], prefix = longest_common_prefix(completions), last_tok = ret[1];
185
+ if (prefix == last_tok && completions.length == 1) return hide_completions();
186
+ show_completions(completions);
187
+ }
188
+ }
189
+
190
+ function longest_common_prefix(items) {
191
+ if (!items.length) return '';
192
+ var sorted = items.concat().sort(), a1 = sorted[0], a2 = sorted[sorted.length-1], limit = a1.length, i = 0;
193
+ while ( i < limit && a1.charAt(i) === a2.charAt(i)) i++;
194
+ return a1.substr(0, i);
195
+ }
196
+
197
+ function on_input(ev) {
198
+ var input, source;
199
+ var code = ev.keyCode || ev.which;
200
+ if (code === 13 && !ev.ctrlKey && !ev.shiftKey && !ev.altKey && !ev.metaKey) { // Enter
201
+ input = document.getElementById('input');
202
+ source = input.value;
203
+ ev.preventDefault();
204
+ if (web_repl.is_input_complete(source)) {
205
+ setTimeout(run_code, 0);
206
+ return;
207
+ }
208
+ var lines = source.split('\n');
209
+ var last_line = lines[lines.length - 1];
210
+ var prev_leading_whitespace = last_line.match(/^\s+/);
211
+ var next_line = prev_leading_whitespace || '';
212
+ if (source.trimRight().endsWith(':')) next_line += ' ';
213
+ input.value = source + '\n' + next_line;
214
+ }
215
+ else if (code === 9 && !ev.ctrlKey && !ev.shiftKey && !ev.altKey && !ev.metaKey) { // Tab
216
+ ev.preventDefault();
217
+ check_for_completions();
218
+ }
219
+ else if (code === 27 && !ev.ctrlKey && !ev.shiftKey && !ev.altKey && !ev.metaKey) { // Esc
220
+ hide_completions();
221
+ }
222
+ else if (code === 115) { // F4
223
+ input = document.getElementById('input');
224
+ source = input.value;
225
+ var ss = input.selectionStart;
226
+ if (ss === undefined) return;
227
+ ev.preventDefault();
228
+ var before = source.substr(0, ss);
229
+ input.value = before + 'ρσ_' + source.substr(ss);
230
+ }
231
+
232
+ }
233
+
234
+ function on_load() {
235
+ web_repl = RapydScript.web_repl();
236
+ web_repl.replace_print(println);
237
+ web_repl.init_completions(RapydScript.completer);
238
+ document.getElementById('loading').style.display = 'none';
239
+ document.getElementById('top').style.display = 'flex';
240
+ document.getElementById('bottom').style.display = 'flex';
241
+ add_output(
242
+ ('RapydScript-ng ' + RapydScript.rs_version + ' (at commit: ' + RapydScript.rs_commit_sha.substr(0, 10) + ')\n' +
243
+ 'Type RapydScript code into the box at the bottom and click the' +
244
+ ' Run button. You can press Tab for completions.'), 'blue'
245
+ );
246
+ document.getElementById('run').addEventListener('click', run_code);
247
+ document.getElementById('input').focus();
248
+ document.getElementById('input').addEventListener('keydown', on_input);
249
+ document.getElementById('input').addEventListener('keyup', function() { setTimeout(update_completions, 0); });
250
+ document.getElementById('completions').firstChild.addEventListener('click', hide_completions);
251
+ }
252
+
253
+ window.onload = on_load;
254
+ })();
@@ -0,0 +1,139 @@
1
+ /* http://prismjs.com/download.html?themes=prism&languages=markup+css+clike+javascript+abap+actionscript+apacheconf+apl+applescript+asciidoc+aspnet+autoit+autohotkey+bash+basic+batch+c+brainfuck+bison+csharp+cpp+coffeescript+ruby+css-extras+d+dart+diff+docker+eiffel+elixir+erlang+fsharp+fortran+gherkin+git+glsl+go+groovy+haml+handlebars+haskell+haxe+http+icon+inform7+ini+j+jade+java+json+julia+keyman+kotlin+latex+less+lolcode+lua+makefile+markdown+matlab+mel+mizar+monkey+nasm+nginx+nim+nix+nsis+objectivec+ocaml+oz+parigp+parser+pascal+perl+php+php-extras+powershell+processing+prolog+puppet+pure+python+q+qore+r+jsx+rest+rip+roboconf+crystal+rust+sas+sass+scss+scala+scheme+smalltalk+smarty+sql+stylus+swift+tcl+textile+twig+typescript+verilog+vhdl+vim+wiki+yaml */
2
+ /**
3
+ * prism.js default theme for JavaScript, CSS and HTML
4
+ * Based on dabblet (http://dabblet.com)
5
+ * @author Lea Verou
6
+ */
7
+
8
+ code[class*="language-"],
9
+ pre[class*="language-"] {
10
+ color: black;
11
+ background: none;
12
+ text-shadow: 0 1px white;
13
+ font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace;
14
+ text-align: left;
15
+ white-space: pre;
16
+ word-spacing: normal;
17
+ word-break: normal;
18
+ word-wrap: normal;
19
+ line-height: 1.5;
20
+
21
+ -moz-tab-size: 4;
22
+ -o-tab-size: 4;
23
+ tab-size: 4;
24
+
25
+ -webkit-hyphens: none;
26
+ -moz-hyphens: none;
27
+ -ms-hyphens: none;
28
+ hyphens: none;
29
+ }
30
+
31
+ pre[class*="language-"]::-moz-selection, pre[class*="language-"] ::-moz-selection,
32
+ code[class*="language-"]::-moz-selection, code[class*="language-"] ::-moz-selection {
33
+ text-shadow: none;
34
+ background: #b3d4fc;
35
+ }
36
+
37
+ pre[class*="language-"]::selection, pre[class*="language-"] ::selection,
38
+ code[class*="language-"]::selection, code[class*="language-"] ::selection {
39
+ text-shadow: none;
40
+ background: #b3d4fc;
41
+ }
42
+
43
+ @media print {
44
+ code[class*="language-"],
45
+ pre[class*="language-"] {
46
+ text-shadow: none;
47
+ }
48
+ }
49
+
50
+ /* Code blocks */
51
+ pre[class*="language-"] {
52
+ padding: 1em;
53
+ margin: .5em 0;
54
+ overflow: auto;
55
+ }
56
+
57
+ :not(pre) > code[class*="language-"],
58
+ pre[class*="language-"] {
59
+ background: #f5f2f0;
60
+ }
61
+
62
+ /* Inline code */
63
+ :not(pre) > code[class*="language-"] {
64
+ padding: .1em;
65
+ border-radius: .3em;
66
+ white-space: normal;
67
+ }
68
+
69
+ .token.comment,
70
+ .token.prolog,
71
+ .token.doctype,
72
+ .token.cdata {
73
+ color: slategray;
74
+ }
75
+
76
+ .token.punctuation {
77
+ color: #999;
78
+ }
79
+
80
+ .namespace {
81
+ opacity: .7;
82
+ }
83
+
84
+ .token.property,
85
+ .token.tag,
86
+ .token.boolean,
87
+ .token.number,
88
+ .token.constant,
89
+ .token.symbol,
90
+ .token.deleted {
91
+ color: #905;
92
+ }
93
+
94
+ .token.selector,
95
+ .token.attr-name,
96
+ .token.string,
97
+ .token.char,
98
+ .token.builtin,
99
+ .token.inserted {
100
+ color: #690;
101
+ }
102
+
103
+ .token.operator,
104
+ .token.entity,
105
+ .token.url,
106
+ .language-css .token.string,
107
+ .style .token.string {
108
+ color: #a67f59;
109
+ background: hsla(0, 0%, 100%, .5);
110
+ }
111
+
112
+ .token.atrule,
113
+ .token.attr-value,
114
+ .token.keyword {
115
+ color: #07a;
116
+ }
117
+
118
+ .token.function {
119
+ color: #DD4A68;
120
+ }
121
+
122
+ .token.regex,
123
+ .token.important,
124
+ .token.variable {
125
+ color: #e90;
126
+ }
127
+
128
+ .token.important,
129
+ .token.bold {
130
+ font-weight: bold;
131
+ }
132
+ .token.italic {
133
+ font-style: italic;
134
+ }
135
+
136
+ .token.entity {
137
+ cursor: help;
138
+ }
139
+