rapydscript-ns 0.8.2 → 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 +39 -0
- package/HACKING.md +103 -103
- package/LICENSE +24 -24
- package/PYTHON_DIFFERENCES_REPORT.md +291 -0
- package/PYTHON_FEATURE_COVERAGE.md +106 -15
- package/README.md +831 -52
- package/TODO.md +4 -286
- 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 +4623 -0
- package/language-service/language-service.d.ts +40 -0
- package/package.json +9 -7
- 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 +99 -2
- package/src/baselib-containers.pyj +107 -4
- package/src/baselib-errors.pyj +44 -0
- package/src/baselib-internal.pyj +124 -5
- package/src/baselib-itertools.pyj +97 -97
- package/src/baselib-str.pyj +32 -1
- package/src/compiler.pyj +36 -36
- package/src/errors.pyj +30 -30
- package/src/lib/aes.pyj +646 -646
- package/src/lib/collections.pyj +1 -1
- 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/numpy.pyj +10 -10
- 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/analyzer.js +131 -9
- package/src/monaco-language-service/builtins.js +17 -2
- package/src/monaco-language-service/completions.js +170 -1
- package/src/monaco-language-service/diagnostics.js +25 -3
- package/src/monaco-language-service/dts.js +550 -550
- package/src/monaco-language-service/index.js +17 -0
- package/src/monaco-language-service/scope.js +3 -0
- package/src/output/classes.pyj +128 -11
- package/src/output/codegen.pyj +17 -3
- package/src/output/comments.pyj +45 -45
- package/src/output/exceptions.pyj +201 -105
- package/src/output/functions.pyj +13 -16
- package/src/output/jsx.pyj +164 -0
- package/src/output/literals.pyj +28 -2
- package/src/output/loops.pyj +0 -9
- package/src/output/modules.pyj +2 -5
- package/src/output/operators.pyj +22 -2
- package/src/output/statements.pyj +2 -2
- package/src/output/stream.pyj +1 -13
- package/src/output/treeshake.pyj +182 -182
- package/src/output/utils.pyj +72 -72
- package/src/parse.pyj +434 -114
- 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/baselib.pyj +4 -4
- package/test/classes.pyj +56 -17
- package/test/collections.pyj +5 -5
- 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_compat.pyj +326 -0
- package/test/python_features.pyj +129 -29
- package/test/regexp.pyj +55 -55
- package/test/repl.pyj +121 -121
- package/test/scoped_flags.pyj +76 -76
- package/test/slice.pyj +105 -0
- package/test/str.pyj +25 -0
- package/test/unit/fixtures/fibonacci_expected.js +1 -1
- package/test/unit/index.js +2296 -71
- package/test/unit/language-service-builtins.js +70 -0
- package/test/unit/language-service-bundle.js +5 -5
- package/test/unit/language-service-completions.js +180 -0
- package/test/unit/language-service-dts.js +543 -543
- package/test/unit/language-service-hover.js +455 -455
- package/test/unit/language-service-index.js +350 -0
- package/test/unit/language-service-scope.js +255 -0
- package/test/unit/language-service.js +625 -4
- package/test/unit/run-language-service.js +1 -0
- package/test/unit/web-repl.js +437 -0
- package/tools/build-language-service.js +2 -2
- package/tools/cli.js +547 -547
- package/tools/compile.js +219 -219
- package/tools/compiler.js +0 -24
- package/tools/completer.js +131 -131
- package/tools/embedded_compiler.js +251 -251
- package/tools/export.js +3 -37
- 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 +227 -139
- package/web-repl/sha1.js +25 -25
- package/hack_demo.pyj +0 -112
- package/web-repl/language-service.js +0 -4187
package/tools/completer.js
CHANGED
|
@@ -1,131 +1,131 @@
|
|
|
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
|
-
|
|
8
|
-
|
|
9
|
-
module.exports = function(compiler, options) {
|
|
10
|
-
"use strict";
|
|
11
|
-
var all_keywords = compiler.ALL_KEYWORDS.split(' ');
|
|
12
|
-
var vm = require('vm');
|
|
13
|
-
options = options || {};
|
|
14
|
-
if (!options.enum_global) options.enum_global = "var global = Function('return this')(); Object.getOwnPropertyNames(global);";
|
|
15
|
-
|
|
16
|
-
function global_names(ctx) {
|
|
17
|
-
try {
|
|
18
|
-
var ans = vm.runInContext(options.enum_global, ctx);
|
|
19
|
-
ans = ans.concat(all_keywords);
|
|
20
|
-
ans.sort();
|
|
21
|
-
var seen = {};
|
|
22
|
-
ans.filter(function (item) {
|
|
23
|
-
if (Object.prototype.hasOwnProperty.call(seen, item)) return false;
|
|
24
|
-
seen[item] = true;
|
|
25
|
-
return true;
|
|
26
|
-
});
|
|
27
|
-
return ans;
|
|
28
|
-
} catch(e) {
|
|
29
|
-
console.log(e.stack || e.toString());
|
|
30
|
-
}
|
|
31
|
-
return [];
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
function object_names(obj, prefix) {
|
|
35
|
-
if (obj === null || obj === undefined) return [];
|
|
36
|
-
var groups = [], prefix_len = prefix.length, p;
|
|
37
|
-
|
|
38
|
-
function prefix_filter(name) { return (prefix_len) ? (name.substr(0, prefix_len) === prefix) : true; }
|
|
39
|
-
|
|
40
|
-
function add(o) {
|
|
41
|
-
var items = Object.getOwnPropertyNames(o).filter(prefix_filter);
|
|
42
|
-
if (items.length) groups.push(items);
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
if (typeof obj === 'object' || typeof obj === 'function') {
|
|
46
|
-
add(obj);
|
|
47
|
-
p = Object.getPrototypeOf(obj);
|
|
48
|
-
} else p = obj.constructor ? obj.constructor.prototype : null;
|
|
49
|
-
|
|
50
|
-
// Walk the prototype chain
|
|
51
|
-
try {
|
|
52
|
-
var sentinel = 5;
|
|
53
|
-
while (p !== null && sentinel > 0) {
|
|
54
|
-
add(p);
|
|
55
|
-
p = Object.getPrototypeOf(p);
|
|
56
|
-
// Circular refs possible? Let's guard against that.
|
|
57
|
-
sentinel--;
|
|
58
|
-
}
|
|
59
|
-
} catch (e) {
|
|
60
|
-
// console.error("completion error walking prototype chain:" + e);
|
|
61
|
-
}
|
|
62
|
-
if (!groups.length) return [];
|
|
63
|
-
var seen = {}, ans = [];
|
|
64
|
-
function uniq(name) {
|
|
65
|
-
if (Object.prototype.hasOwnProperty.call(seen, name)) return false;
|
|
66
|
-
seen[name] = true;
|
|
67
|
-
return true;
|
|
68
|
-
}
|
|
69
|
-
for (var i = 0; i < groups.length; i++) {
|
|
70
|
-
var group = groups[i];
|
|
71
|
-
group.sort();
|
|
72
|
-
ans = ans.concat(group.filter(uniq));
|
|
73
|
-
ans.push(''); // group separator
|
|
74
|
-
|
|
75
|
-
}
|
|
76
|
-
while (ans.length && ans[ans.length - 1] === '') ans.pop();
|
|
77
|
-
return ans;
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
function prefix_matches(prefix, items) {
|
|
81
|
-
var len = prefix.length;
|
|
82
|
-
var ans = items.filter(function(item) { return item.substr(0, len) === prefix; });
|
|
83
|
-
ans.sort();
|
|
84
|
-
return ans;
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
function find_completions(line, ctx) {
|
|
88
|
-
var t;
|
|
89
|
-
try {
|
|
90
|
-
t = compiler.tokenizer(line, '<repl>');
|
|
91
|
-
} catch(e) { return []; }
|
|
92
|
-
var tokens = [], token;
|
|
93
|
-
while (true) {
|
|
94
|
-
try {
|
|
95
|
-
token = t();
|
|
96
|
-
} catch (e) { return []; }
|
|
97
|
-
if (token.type === 'eof') break;
|
|
98
|
-
if (token.type === 'punc' && '(){},;:'.indexOf(token.value) > -1)
|
|
99
|
-
tokens = [];
|
|
100
|
-
tokens.push(token);
|
|
101
|
-
}
|
|
102
|
-
if (!tokens.length) {
|
|
103
|
-
// New line or trailing space
|
|
104
|
-
return [global_names(ctx), ''];
|
|
105
|
-
}
|
|
106
|
-
var last_tok = tokens[tokens.length - 1];
|
|
107
|
-
if (last_tok.value === '.' || (last_tok.type === 'name' && compiler.IDENTIFIER_PAT.test(last_tok.value))) {
|
|
108
|
-
last_tok = last_tok.value;
|
|
109
|
-
if (last_tok === '.') {
|
|
110
|
-
tokens.push({'value':''});
|
|
111
|
-
last_tok = '';
|
|
112
|
-
}
|
|
113
|
-
if (tokens.length > 1 && tokens[tokens.length - 2].value === '.') {
|
|
114
|
-
// A compound expression
|
|
115
|
-
var prefix = '', result;
|
|
116
|
-
tokens.slice(0, tokens.length - 2).forEach(function (tok) { prefix += tok.value; });
|
|
117
|
-
if (prefix) {
|
|
118
|
-
try {
|
|
119
|
-
result = vm.runInContext(prefix, ctx, {'displayErrors':false});
|
|
120
|
-
} catch(e) { return []; }
|
|
121
|
-
return [object_names(result, last_tok), last_tok];
|
|
122
|
-
}
|
|
123
|
-
} else {
|
|
124
|
-
return [prefix_matches(last_tok, global_names(ctx)), last_tok];
|
|
125
|
-
}
|
|
126
|
-
}
|
|
127
|
-
return [];
|
|
128
|
-
}
|
|
129
|
-
|
|
130
|
-
return find_completions;
|
|
131
|
-
};
|
|
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
|
+
|
|
8
|
+
|
|
9
|
+
module.exports = function(compiler, options) {
|
|
10
|
+
"use strict";
|
|
11
|
+
var all_keywords = compiler.ALL_KEYWORDS.split(' ');
|
|
12
|
+
var vm = require('vm');
|
|
13
|
+
options = options || {};
|
|
14
|
+
if (!options.enum_global) options.enum_global = "var global = Function('return this')(); Object.getOwnPropertyNames(global);";
|
|
15
|
+
|
|
16
|
+
function global_names(ctx) {
|
|
17
|
+
try {
|
|
18
|
+
var ans = vm.runInContext(options.enum_global, ctx);
|
|
19
|
+
ans = ans.concat(all_keywords);
|
|
20
|
+
ans.sort();
|
|
21
|
+
var seen = {};
|
|
22
|
+
ans.filter(function (item) {
|
|
23
|
+
if (Object.prototype.hasOwnProperty.call(seen, item)) return false;
|
|
24
|
+
seen[item] = true;
|
|
25
|
+
return true;
|
|
26
|
+
});
|
|
27
|
+
return ans;
|
|
28
|
+
} catch(e) {
|
|
29
|
+
console.log(e.stack || e.toString());
|
|
30
|
+
}
|
|
31
|
+
return [];
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
function object_names(obj, prefix) {
|
|
35
|
+
if (obj === null || obj === undefined) return [];
|
|
36
|
+
var groups = [], prefix_len = prefix.length, p;
|
|
37
|
+
|
|
38
|
+
function prefix_filter(name) { return (prefix_len) ? (name.substr(0, prefix_len) === prefix) : true; }
|
|
39
|
+
|
|
40
|
+
function add(o) {
|
|
41
|
+
var items = Object.getOwnPropertyNames(o).filter(prefix_filter);
|
|
42
|
+
if (items.length) groups.push(items);
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
if (typeof obj === 'object' || typeof obj === 'function') {
|
|
46
|
+
add(obj);
|
|
47
|
+
p = Object.getPrototypeOf(obj);
|
|
48
|
+
} else p = obj.constructor ? obj.constructor.prototype : null;
|
|
49
|
+
|
|
50
|
+
// Walk the prototype chain
|
|
51
|
+
try {
|
|
52
|
+
var sentinel = 5;
|
|
53
|
+
while (p !== null && sentinel > 0) {
|
|
54
|
+
add(p);
|
|
55
|
+
p = Object.getPrototypeOf(p);
|
|
56
|
+
// Circular refs possible? Let's guard against that.
|
|
57
|
+
sentinel--;
|
|
58
|
+
}
|
|
59
|
+
} catch (e) {
|
|
60
|
+
// console.error("completion error walking prototype chain:" + e);
|
|
61
|
+
}
|
|
62
|
+
if (!groups.length) return [];
|
|
63
|
+
var seen = {}, ans = [];
|
|
64
|
+
function uniq(name) {
|
|
65
|
+
if (Object.prototype.hasOwnProperty.call(seen, name)) return false;
|
|
66
|
+
seen[name] = true;
|
|
67
|
+
return true;
|
|
68
|
+
}
|
|
69
|
+
for (var i = 0; i < groups.length; i++) {
|
|
70
|
+
var group = groups[i];
|
|
71
|
+
group.sort();
|
|
72
|
+
ans = ans.concat(group.filter(uniq));
|
|
73
|
+
ans.push(''); // group separator
|
|
74
|
+
|
|
75
|
+
}
|
|
76
|
+
while (ans.length && ans[ans.length - 1] === '') ans.pop();
|
|
77
|
+
return ans;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
function prefix_matches(prefix, items) {
|
|
81
|
+
var len = prefix.length;
|
|
82
|
+
var ans = items.filter(function(item) { return item.substr(0, len) === prefix; });
|
|
83
|
+
ans.sort();
|
|
84
|
+
return ans;
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
function find_completions(line, ctx) {
|
|
88
|
+
var t;
|
|
89
|
+
try {
|
|
90
|
+
t = compiler.tokenizer(line, '<repl>');
|
|
91
|
+
} catch(e) { return []; }
|
|
92
|
+
var tokens = [], token;
|
|
93
|
+
while (true) {
|
|
94
|
+
try {
|
|
95
|
+
token = t();
|
|
96
|
+
} catch (e) { return []; }
|
|
97
|
+
if (token.type === 'eof') break;
|
|
98
|
+
if (token.type === 'punc' && '(){},;:'.indexOf(token.value) > -1)
|
|
99
|
+
tokens = [];
|
|
100
|
+
tokens.push(token);
|
|
101
|
+
}
|
|
102
|
+
if (!tokens.length) {
|
|
103
|
+
// New line or trailing space
|
|
104
|
+
return [global_names(ctx), ''];
|
|
105
|
+
}
|
|
106
|
+
var last_tok = tokens[tokens.length - 1];
|
|
107
|
+
if (last_tok.value === '.' || (last_tok.type === 'name' && compiler.IDENTIFIER_PAT.test(last_tok.value))) {
|
|
108
|
+
last_tok = last_tok.value;
|
|
109
|
+
if (last_tok === '.') {
|
|
110
|
+
tokens.push({'value':''});
|
|
111
|
+
last_tok = '';
|
|
112
|
+
}
|
|
113
|
+
if (tokens.length > 1 && tokens[tokens.length - 2].value === '.') {
|
|
114
|
+
// A compound expression
|
|
115
|
+
var prefix = '', result;
|
|
116
|
+
tokens.slice(0, tokens.length - 2).forEach(function (tok) { prefix += tok.value; });
|
|
117
|
+
if (prefix) {
|
|
118
|
+
try {
|
|
119
|
+
result = vm.runInContext(prefix, ctx, {'displayErrors':false});
|
|
120
|
+
} catch(e) { return []; }
|
|
121
|
+
return [object_names(result, last_tok), last_tok];
|
|
122
|
+
}
|
|
123
|
+
} else {
|
|
124
|
+
return [prefix_matches(last_tok, global_names(ctx)), last_tok];
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
return [];
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
return find_completions;
|
|
131
|
+
};
|