rapydscript-ns 0.9.2 → 0.9.3
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 +19 -0
- package/HACKING.md +103 -103
- package/LICENSE +24 -24
- package/PYTHON_GAPS.md +420 -0
- package/README.md +153 -29
- package/TODO.md +16 -118
- 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 +237 -8
- package/memory/project_string_impl.md +43 -0
- package/package.json +1 -1
- package/publish.py +37 -37
- package/release/baselib-plain-pretty.js +248 -38
- package/release/baselib-plain-ugly.js +8 -8
- package/release/compiler.js +778 -277
- package/release/signatures.json +30 -30
- package/session.vim +4 -4
- package/setup.cfg +2 -2
- package/src/ast.pyj +4 -1
- package/src/baselib-builtins.pyj +56 -2
- package/src/baselib-containers.pyj +2 -0
- package/src/baselib-errors.pyj +7 -3
- package/src/baselib-internal.pyj +51 -6
- package/src/baselib-str.pyj +5 -3
- package/src/compiler.pyj +36 -36
- package/src/errors.pyj +30 -30
- package/src/lib/aes.pyj +646 -646
- package/src/lib/asyncio.pyj +534 -0
- package/src/lib/base64.pyj +399 -0
- package/src/lib/bisect.pyj +73 -0
- package/src/lib/collections.pyj +1 -1
- package/src/lib/copy.pyj +120 -120
- package/src/lib/csv.pyj +494 -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/heapq.pyj +98 -0
- package/src/lib/html.pyj +382 -0
- package/src/lib/http/__init__.pyj +98 -0
- package/src/lib/http/client.pyj +304 -0
- package/src/lib/http/cookies.pyj +236 -0
- package/src/lib/itertools.pyj +580 -580
- package/src/lib/logging.pyj +672 -0
- 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/react.pyj +74 -74
- package/src/lib/string.pyj +357 -0
- package/src/lib/textwrap.pyj +329 -0
- package/src/lib/traceback.pyj +63 -63
- package/src/lib/urllib/__init__.pyj +14 -0
- package/src/lib/urllib/error.pyj +66 -0
- package/src/lib/urllib/parse.pyj +475 -0
- package/src/lib/urllib/request.pyj +86 -0
- package/src/lib/uuid.pyj +77 -77
- package/src/monaco-language-service/analyzer.js +5 -2
- package/src/monaco-language-service/completions.js +26 -0
- package/src/monaco-language-service/diagnostics.js +202 -3
- package/src/monaco-language-service/dts.js +550 -550
- package/src/monaco-language-service/scope.js +1 -0
- package/src/output/comments.pyj +45 -45
- package/src/output/exceptions.pyj +201 -201
- package/src/output/functions.pyj +152 -6
- package/src/output/jsx.pyj +164 -164
- package/src/output/loops.pyj +17 -2
- package/src/output/modules.pyj +1 -1
- package/src/output/operators.pyj +15 -0
- package/src/output/stream.pyj +0 -1
- package/src/output/treeshake.pyj +182 -182
- package/src/output/utils.pyj +72 -72
- package/src/parse.pyj +80 -17
- package/src/string_interpolation.pyj +72 -72
- package/src/tokenizer.pyj +1 -1
- 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/async_generators.pyj +144 -0
- package/test/asyncio.pyj +307 -0
- package/test/base64.pyj +202 -0
- package/test/bisect.pyj +178 -0
- package/test/csv.pyj +405 -0
- package/test/decorators.pyj +77 -77
- package/test/docstrings.pyj +39 -39
- package/test/elementmaker_test.pyj +45 -45
- package/test/float_special.pyj +64 -0
- package/test/functions.pyj +151 -151
- package/test/generators.pyj +41 -41
- package/test/generic.pyj +370 -370
- package/test/heapq.pyj +174 -0
- package/test/html.pyj +212 -0
- package/test/http.pyj +259 -0
- package/test/imports.pyj +79 -72
- package/test/internationalization.pyj +73 -73
- package/test/lint.pyj +164 -164
- package/test/logging.pyj +356 -0
- package/test/long.pyj +130 -0
- package/test/loops.pyj +85 -85
- package/test/numpy.pyj +734 -734
- package/test/parenthesized_with.pyj +141 -0
- package/test/python_compat.pyj +3 -5
- package/test/python_modulo.pyj +76 -0
- package/test/python_modulo_off.pyj +21 -0
- package/test/repl.pyj +121 -121
- package/test/scoped_flags.pyj +76 -76
- package/test/str.pyj +14 -0
- package/test/string.pyj +245 -0
- package/test/textwrap.pyj +172 -0
- package/test/type_display.pyj +48 -0
- package/test/type_enforcement.pyj +164 -0
- package/test/unit/index.js +14 -6
- package/test/unit/language-service-completions.js +119 -0
- package/test/unit/language-service-dts.js +543 -543
- package/test/unit/language-service-hover.js +455 -455
- package/test/unit/language-service-scope.js +32 -0
- package/test/unit/language-service.js +127 -3
- package/test/unit/run-language-service.js +17 -3
- package/test/unit/web-repl.js +2094 -29
- package/test/urllib.pyj +193 -0
- package/tools/compile.js +1 -1
- package/tools/compiler.d.ts +367 -367
- package/tools/completer.js +131 -131
- package/tools/embedded_compiler.js +7 -7
- 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 -196
- package/web-repl/index.html +163 -163
- package/web-repl/main.js +1 -1
- package/web-repl/prism.css +139 -139
- package/web-repl/prism.js +113 -113
- package/web-repl/rapydscript.js +224 -224
- package/web-repl/sha1.js +25 -25
- package/test/omit_function_metadata.pyj +0 -20
|
@@ -87,6 +87,10 @@ function make_tests(CompletionEngine, detect_context, SourceAnalyzer, DtsRegistr
|
|
|
87
87
|
require('path').join(__dirname, '../../src/lib/collections.pyj'), 'utf-8'
|
|
88
88
|
);
|
|
89
89
|
|
|
90
|
+
var RE_SRC = require('fs').readFileSync(
|
|
91
|
+
require('path').join(__dirname, '../../src/lib/re.pyj'), 'utf-8'
|
|
92
|
+
);
|
|
93
|
+
|
|
90
94
|
var TESTS = [
|
|
91
95
|
|
|
92
96
|
// ── detect_context ────────────────────────────────────────────────
|
|
@@ -1254,6 +1258,121 @@ function make_tests(CompletionEngine, detect_context, SourceAnalyzer, DtsRegistr
|
|
|
1254
1258
|
},
|
|
1255
1259
|
},
|
|
1256
1260
|
|
|
1261
|
+
// ── Bare import dot completions (import X; X.attr) ──────────────
|
|
1262
|
+
|
|
1263
|
+
{
|
|
1264
|
+
name: "bare_import_virtual_dot_completions",
|
|
1265
|
+
description: "import mymod; mymod. shows module-level symbols from virtual file",
|
|
1266
|
+
run: function () {
|
|
1267
|
+
var vf = {
|
|
1268
|
+
mymod: [
|
|
1269
|
+
"def foo():",
|
|
1270
|
+
" return 1",
|
|
1271
|
+
"def bar():",
|
|
1272
|
+
" return 2",
|
|
1273
|
+
"BAZ = 42",
|
|
1274
|
+
].join("\n"),
|
|
1275
|
+
};
|
|
1276
|
+
var engine = make_engine(vf);
|
|
1277
|
+
var analyzer = new SourceAnalyzer(RS);
|
|
1278
|
+
var scopeMap = analyzer.analyze("import mymod\npass", { virtualFiles: vf });
|
|
1279
|
+
var list = engine.getCompletions(scopeMap, pos(2, 7), "mymod.", MockKind);
|
|
1280
|
+
assert_has(list, 'foo', 'foo from virtual module');
|
|
1281
|
+
assert_has(list, 'bar', 'bar from virtual module');
|
|
1282
|
+
assert_has(list, 'BAZ', 'BAZ from virtual module');
|
|
1283
|
+
},
|
|
1284
|
+
},
|
|
1285
|
+
|
|
1286
|
+
{
|
|
1287
|
+
name: "bare_import_virtual_dot_prefix",
|
|
1288
|
+
description: "import mymod; mymod.f filters completions by prefix",
|
|
1289
|
+
run: function () {
|
|
1290
|
+
var vf = {
|
|
1291
|
+
mymod: "def foo():\n return 1\ndef bar():\n return 2",
|
|
1292
|
+
};
|
|
1293
|
+
var engine = make_engine(vf);
|
|
1294
|
+
var analyzer = new SourceAnalyzer(RS);
|
|
1295
|
+
var scopeMap = analyzer.analyze("import mymod\npass", { virtualFiles: vf });
|
|
1296
|
+
var list = engine.getCompletions(scopeMap, pos(2, 8), "mymod.f", MockKind);
|
|
1297
|
+
assert_has(list, 'foo', 'foo matches prefix f');
|
|
1298
|
+
assert_missing(list,'bar', 'bar does not match prefix f');
|
|
1299
|
+
},
|
|
1300
|
+
},
|
|
1301
|
+
|
|
1302
|
+
{
|
|
1303
|
+
name: "bare_import_re_dot_completions",
|
|
1304
|
+
description: "import re; re. shows re module exports via stdlibFiles",
|
|
1305
|
+
run: function () {
|
|
1306
|
+
var engine = make_engine({}, ['print', 'len', 'range'], null, null, { re: RE_SRC });
|
|
1307
|
+
var analyzer = new SourceAnalyzer(RS);
|
|
1308
|
+
var scopeMap = analyzer.analyze("import re\npass", { virtualFiles: { re: RE_SRC } });
|
|
1309
|
+
var list = engine.getCompletions(scopeMap, pos(2, 4), "re.", MockKind);
|
|
1310
|
+
assert_has(list, 'match', 'match from re module');
|
|
1311
|
+
assert_has(list, 'search', 'search from re module');
|
|
1312
|
+
assert_has(list, 'compile', 'compile from re module');
|
|
1313
|
+
assert_has(list, 'sub', 'sub from re module');
|
|
1314
|
+
assert_has(list, 'findall', 'findall from re module');
|
|
1315
|
+
assert_has(list, 'split', 'split from re module');
|
|
1316
|
+
},
|
|
1317
|
+
},
|
|
1318
|
+
|
|
1319
|
+
{
|
|
1320
|
+
name: "bare_import_re_dot_prefix",
|
|
1321
|
+
description: "import re; re.ma filters to matching names like match",
|
|
1322
|
+
run: function () {
|
|
1323
|
+
var engine = make_engine({}, ['print', 'len', 'range'], null, null, { re: RE_SRC });
|
|
1324
|
+
var analyzer = new SourceAnalyzer(RS);
|
|
1325
|
+
var scopeMap = analyzer.analyze("import re\npass", { virtualFiles: { re: RE_SRC } });
|
|
1326
|
+
var list = engine.getCompletions(scopeMap, pos(2, 6), "re.ma", MockKind);
|
|
1327
|
+
assert_has(list, 'match', 'match matches prefix ma');
|
|
1328
|
+
assert_missing(list,'compile', 'compile does not match prefix ma');
|
|
1329
|
+
},
|
|
1330
|
+
},
|
|
1331
|
+
|
|
1332
|
+
{
|
|
1333
|
+
name: "bare_import_alias_dot_completions",
|
|
1334
|
+
description: "import mymod as mm; mm. shows module-level symbols",
|
|
1335
|
+
run: function () {
|
|
1336
|
+
var vf = {
|
|
1337
|
+
mymod: "def foo():\n return 1\nVAL = 10",
|
|
1338
|
+
};
|
|
1339
|
+
var engine = make_engine(vf);
|
|
1340
|
+
var analyzer = new SourceAnalyzer(RS);
|
|
1341
|
+
var scopeMap = analyzer.analyze("import mymod as mm\npass", { virtualFiles: vf });
|
|
1342
|
+
var list = engine.getCompletions(scopeMap, pos(2, 4), "mm.", MockKind);
|
|
1343
|
+
assert_has(list, 'foo', 'foo from aliased module');
|
|
1344
|
+
assert_has(list, 'VAL', 'VAL from aliased module');
|
|
1345
|
+
},
|
|
1346
|
+
},
|
|
1347
|
+
|
|
1348
|
+
{
|
|
1349
|
+
name: "bare_import_unknown_module_empty",
|
|
1350
|
+
description: "import unknown; unknown. returns empty when module source unavailable",
|
|
1351
|
+
run: function () {
|
|
1352
|
+
var engine = make_engine({});
|
|
1353
|
+
var analyzer = new SourceAnalyzer(RS);
|
|
1354
|
+
var scopeMap = analyzer.analyze("import unknown\npass", {});
|
|
1355
|
+
var list = engine.getCompletions(scopeMap, pos(2, 9), "unknown.", MockKind);
|
|
1356
|
+
assert.strictEqual(list.suggestions.length, 0, 'unknown module → no dot suggestions');
|
|
1357
|
+
},
|
|
1358
|
+
},
|
|
1359
|
+
|
|
1360
|
+
{
|
|
1361
|
+
name: "bare_import_collections_dot_completions",
|
|
1362
|
+
description: "import collections; collections. shows namedtuple, deque, Counter, etc.",
|
|
1363
|
+
run: function () {
|
|
1364
|
+
var engine = make_engine({}, ['print', 'len', 'range'], null, null, { collections: COLLECTIONS_SRC });
|
|
1365
|
+
var analyzer = new SourceAnalyzer(RS);
|
|
1366
|
+
var scopeMap = analyzer.analyze("import collections\npass", { virtualFiles: { collections: COLLECTIONS_SRC } });
|
|
1367
|
+
var list = engine.getCompletions(scopeMap, pos(2, 13), "collections.", MockKind);
|
|
1368
|
+
assert_has(list, 'namedtuple', 'namedtuple from collections');
|
|
1369
|
+
assert_has(list, 'deque', 'deque from collections');
|
|
1370
|
+
assert_has(list, 'Counter', 'Counter from collections');
|
|
1371
|
+
assert_has(list, 'OrderedDict', 'OrderedDict from collections');
|
|
1372
|
+
assert_has(list, 'defaultdict', 'defaultdict from collections');
|
|
1373
|
+
},
|
|
1374
|
+
},
|
|
1375
|
+
|
|
1257
1376
|
{
|
|
1258
1377
|
name: "return_type_imported_fn_inferred_consistent_branches",
|
|
1259
1378
|
description: "imported fn with multiple return [] branches — type still inferred as list",
|