mirror of
https://github.com/denoland/deno.git
synced 2024-11-21 15:04:11 -05:00
feat: repl improvements
This commit is contained in:
parent
507e5b74ff
commit
d7d49be0f9
10 changed files with 325 additions and 167 deletions
184
Cargo.lock
generated
184
Cargo.lock
generated
|
@ -453,10 +453,10 @@ version = "0.69.4"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "a00dc851838a2120612785d195287475a3ac45514741da670b735818822129a0"
|
checksum = "a00dc851838a2120612785d195287475a3ac45514741da670b735818822129a0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"bitflags 2.5.0",
|
"bitflags 2.6.0",
|
||||||
"cexpr",
|
"cexpr",
|
||||||
"clang-sys",
|
"clang-sys",
|
||||||
"itertools",
|
"itertools 0.12.1",
|
||||||
"lazy_static",
|
"lazy_static",
|
||||||
"lazycell",
|
"lazycell",
|
||||||
"log",
|
"log",
|
||||||
|
@ -493,9 +493,9 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "bitflags"
|
name = "bitflags"
|
||||||
version = "2.5.0"
|
version = "2.6.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "cf4b9d6a944f767f8e5e0db018570623c85f3d925ac718db4e06d0187adb21c1"
|
checksum = "b048fb63fd8b5923fc5aa7b340d8e156aec7ec02f0c78fa8a6ddc2613f6f71de"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"serde",
|
"serde",
|
||||||
]
|
]
|
||||||
|
@ -649,6 +649,12 @@ version = "0.1.1"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "fd16c4719339c4530435d38e511904438d07cce7950afa3718a84ac36c10e89e"
|
checksum = "fd16c4719339c4530435d38e511904438d07cce7950afa3718a84ac36c10e89e"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "cfg_aliases"
|
||||||
|
version = "0.2.1"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "chrono"
|
name = "chrono"
|
||||||
version = "0.4.37"
|
version = "0.4.37"
|
||||||
|
@ -1043,7 +1049,7 @@ version = "0.20.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "b28bfe653d79bd16c77f659305b195b82bb5ce0c0eb2a4846b82ddbd77586813"
|
checksum = "b28bfe653d79bd16c77f659305b195b82bb5ce0c0eb2a4846b82ddbd77586813"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"bitflags 2.5.0",
|
"bitflags 2.6.0",
|
||||||
"libloading 0.8.3",
|
"libloading 0.8.3",
|
||||||
"winapi",
|
"winapi",
|
||||||
]
|
]
|
||||||
|
@ -1206,7 +1212,6 @@ dependencies = [
|
||||||
"ring",
|
"ring",
|
||||||
"runtimelib",
|
"runtimelib",
|
||||||
"rustyline",
|
"rustyline",
|
||||||
"rustyline-derive",
|
|
||||||
"serde",
|
"serde",
|
||||||
"serde_json",
|
"serde_json",
|
||||||
"serde_repr",
|
"serde_repr",
|
||||||
|
@ -1612,7 +1617,7 @@ dependencies = [
|
||||||
"hyper 0.14.28",
|
"hyper 0.14.28",
|
||||||
"hyper 1.4.1",
|
"hyper 1.4.1",
|
||||||
"hyper-util",
|
"hyper-util",
|
||||||
"itertools",
|
"itertools 0.10.5",
|
||||||
"memmem",
|
"memmem",
|
||||||
"mime",
|
"mime",
|
||||||
"once_cell",
|
"once_cell",
|
||||||
|
@ -3238,7 +3243,7 @@ version = "0.6.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "fbcd2dba93594b227a1f57ee09b8b9da8892c34d55aa332e034a228d0fe6a171"
|
checksum = "fbcd2dba93594b227a1f57ee09b8b9da8892c34d55aa332e034a228d0fe6a171"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"bitflags 2.5.0",
|
"bitflags 2.6.0",
|
||||||
"gpu-alloc-types",
|
"gpu-alloc-types",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
@ -3248,7 +3253,7 @@ version = "0.3.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "98ff03b468aa837d70984d55f5d3f846f6ec31fe34bbb97c4f85219caeee1ca4"
|
checksum = "98ff03b468aa837d70984d55f5d3f846f6ec31fe34bbb97c4f85219caeee1ca4"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"bitflags 2.5.0",
|
"bitflags 2.6.0",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
|
@ -3257,7 +3262,7 @@ version = "0.3.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "9c08c1f623a8d0b722b8b99f821eb0ba672a1618f0d3b16ddbee1cedd2dd8557"
|
checksum = "9c08c1f623a8d0b722b8b99f821eb0ba672a1618f0d3b16ddbee1cedd2dd8557"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"bitflags 2.5.0",
|
"bitflags 2.6.0",
|
||||||
"gpu-descriptor-types",
|
"gpu-descriptor-types",
|
||||||
"hashbrown",
|
"hashbrown",
|
||||||
]
|
]
|
||||||
|
@ -3268,7 +3273,7 @@ version = "0.2.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "fdf242682df893b86f33a73828fb09ca4b2d3bb6cc95249707fc684d27484b91"
|
checksum = "fdf242682df893b86f33a73828fb09ca4b2d3bb6cc95249707fc684d27484b91"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"bitflags 2.5.0",
|
"bitflags 2.6.0",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
|
@ -3839,6 +3844,15 @@ dependencies = [
|
||||||
"either",
|
"either",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "itertools"
|
||||||
|
version = "0.12.1"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "ba291022dbbd398a455acf126c1e341954079855bc60dfdda641363bd6922569"
|
||||||
|
dependencies = [
|
||||||
|
"either",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "itoa"
|
name = "itoa"
|
||||||
version = "1.0.11"
|
version = "1.0.11"
|
||||||
|
@ -4052,9 +4066,9 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "libc"
|
name = "libc"
|
||||||
version = "0.2.153"
|
version = "0.2.155"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "9c198f91728a82281a64e1f4f9eeb25d82cb32a5de251c6bd1b5154d63a8e7bd"
|
checksum = "97b3888a4aecf77e811145cadf6eef5901f4782c53886191b2f693f24761847c"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "libffi"
|
name = "libffi"
|
||||||
|
@ -4092,7 +4106,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "0c2a198fb6b0eada2a8df47933734e6d35d350665a33a3593d7164fa52c75c19"
|
checksum = "0c2a198fb6b0eada2a8df47933734e6d35d350665a33a3593d7164fa52c75c19"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"cfg-if",
|
"cfg-if",
|
||||||
"windows-targets 0.52.4",
|
"windows-targets 0.48.5",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
|
@ -4107,7 +4121,7 @@ version = "0.1.3"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "c0ff37bd590ca25063e35af745c343cb7a0271906fb7b37e4813e8f79f00268d"
|
checksum = "c0ff37bd590ca25063e35af745c343cb7a0271906fb7b37e4813e8f79f00268d"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"bitflags 2.5.0",
|
"bitflags 2.6.0",
|
||||||
"libc",
|
"libc",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
@ -4178,9 +4192,9 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "log"
|
name = "log"
|
||||||
version = "0.4.21"
|
version = "0.4.22"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "90ed8c1e510134f979dbc4f070f87d4313098b704861a105fe34231c70a3901c"
|
checksum = "a7a70ba024b9dc04c27ea2f0c0548feb474ec5c54bba33a7f72f873a39d07b24"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"serde",
|
"serde",
|
||||||
]
|
]
|
||||||
|
@ -4312,7 +4326,7 @@ version = "0.28.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "5637e166ea14be6063a3f8ba5ccb9a4159df7d8f6d61c02fc3d480b1f90dcfcb"
|
checksum = "5637e166ea14be6063a3f8ba5ccb9a4159df7d8f6d61c02fc3d480b1f90dcfcb"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"bitflags 2.5.0",
|
"bitflags 2.6.0",
|
||||||
"block",
|
"block",
|
||||||
"core-graphics-types",
|
"core-graphics-types",
|
||||||
"foreign-types",
|
"foreign-types",
|
||||||
|
@ -4375,7 +4389,7 @@ checksum = "e536ae46fcab0876853bd4a632ede5df4b1c2527a58f6c5a4150fe86be858231"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"arrayvec",
|
"arrayvec",
|
||||||
"bit-set",
|
"bit-set",
|
||||||
"bitflags 2.5.0",
|
"bitflags 2.6.0",
|
||||||
"codespan-reporting",
|
"codespan-reporting",
|
||||||
"hexf-parse",
|
"hexf-parse",
|
||||||
"indexmap",
|
"indexmap",
|
||||||
|
@ -4464,12 +4478,13 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "nix"
|
name = "nix"
|
||||||
version = "0.27.1"
|
version = "0.29.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "2eb04e9c688eff1c89d72b407f168cf79bb9e867a9d3323ed6c01519eb9cc053"
|
checksum = "71e2746dc3a24dd78b3cfcb7be93368c6de9963d30f43a6a73998a9cf4b17b46"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"bitflags 2.5.0",
|
"bitflags 2.6.0",
|
||||||
"cfg-if",
|
"cfg-if",
|
||||||
|
"cfg_aliases 0.2.1",
|
||||||
"libc",
|
"libc",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
@ -4518,7 +4533,7 @@ version = "6.1.1"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "6205bd8bb1e454ad2e27422015fb5e4f2bcc7e08fa8f27058670d208324a4d2d"
|
checksum = "6205bd8bb1e454ad2e27422015fb5e4f2bcc7e08fa8f27058670d208324a4d2d"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"bitflags 2.5.0",
|
"bitflags 2.6.0",
|
||||||
"crossbeam-channel",
|
"crossbeam-channel",
|
||||||
"filetime",
|
"filetime",
|
||||||
"fsevent-sys",
|
"fsevent-sys",
|
||||||
|
@ -5277,7 +5292,7 @@ checksum = "119533552c9a7ffacc21e099c24a0ac8bb19c2a2a3f363de84cd9b844feab270"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"bytes",
|
"bytes",
|
||||||
"heck 0.4.1",
|
"heck 0.4.1",
|
||||||
"itertools",
|
"itertools 0.10.5",
|
||||||
"lazy_static",
|
"lazy_static",
|
||||||
"log",
|
"log",
|
||||||
"multimap",
|
"multimap",
|
||||||
|
@ -5298,7 +5313,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "e5d2d8d10f3c6ded6da8b05b5fb3b8a5082514344d56c9f871412d29b4e075b4"
|
checksum = "e5d2d8d10f3c6ded6da8b05b5fb3b8a5082514344d56c9f871412d29b4e075b4"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"anyhow",
|
"anyhow",
|
||||||
"itertools",
|
"itertools 0.10.5",
|
||||||
"proc-macro2",
|
"proc-macro2",
|
||||||
"quote",
|
"quote",
|
||||||
"syn 1.0.109",
|
"syn 1.0.109",
|
||||||
|
@ -5348,7 +5363,7 @@ version = "0.9.6"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "57206b407293d2bcd3af849ce869d52068623f19e1b5ff8e8778e3309439682b"
|
checksum = "57206b407293d2bcd3af849ce869d52068623f19e1b5ff8e8778e3309439682b"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"bitflags 2.5.0",
|
"bitflags 2.6.0",
|
||||||
"memchr",
|
"memchr",
|
||||||
"unicase",
|
"unicase",
|
||||||
]
|
]
|
||||||
|
@ -5704,7 +5719,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "b91f7eff05f748767f183df4320a63d6936e9c6107d97c9e6bdd9784f4289c94"
|
checksum = "b91f7eff05f748767f183df4320a63d6936e9c6107d97c9e6bdd9784f4289c94"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"base64 0.21.7",
|
"base64 0.21.7",
|
||||||
"bitflags 2.5.0",
|
"bitflags 2.6.0",
|
||||||
"serde",
|
"serde",
|
||||||
"serde_derive",
|
"serde_derive",
|
||||||
]
|
]
|
||||||
|
@ -5772,7 +5787,7 @@ version = "0.29.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "549b9d036d571d42e6e85d1c1425e2ac83491075078ca9a15be021c56b1641f2"
|
checksum = "549b9d036d571d42e6e85d1c1425e2ac83491075078ca9a15be021c56b1641f2"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"bitflags 2.5.0",
|
"bitflags 2.6.0",
|
||||||
"fallible-iterator",
|
"fallible-iterator",
|
||||||
"fallible-streaming-iterator",
|
"fallible-streaming-iterator",
|
||||||
"hashlink",
|
"hashlink",
|
||||||
|
@ -5825,7 +5840,7 @@ version = "0.38.32"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "65e04861e65f21776e67888bfbea442b3642beaa0138fdb1dd7a84a52dffdb89"
|
checksum = "65e04861e65f21776e67888bfbea442b3642beaa0138fdb1dd7a84a52dffdb89"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"bitflags 2.5.0",
|
"bitflags 2.6.0",
|
||||||
"errno 0.3.8",
|
"errno 0.3.8",
|
||||||
"libc",
|
"libc",
|
||||||
"linux-raw-sys",
|
"linux-raw-sys",
|
||||||
|
@ -5907,11 +5922,9 @@ checksum = "80af6f9131f277a45a3fba6ce8e2258037bb0477a67e610d3c1fe046ab31de47"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "rustyline"
|
name = "rustyline"
|
||||||
version = "13.0.0"
|
version = "14.0.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "02a2d683a4ac90aeef5b1013933f6d977bd37d51ff3f4dad829d4931a7e6be86"
|
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"bitflags 2.5.0",
|
"bitflags 2.6.0",
|
||||||
"cfg-if",
|
"cfg-if",
|
||||||
"clipboard-win",
|
"clipboard-win",
|
||||||
"fd-lock",
|
"fd-lock",
|
||||||
|
@ -5919,23 +5932,12 @@ dependencies = [
|
||||||
"libc",
|
"libc",
|
||||||
"log",
|
"log",
|
||||||
"memchr",
|
"memchr",
|
||||||
"nix 0.27.1",
|
"nix 0.29.0",
|
||||||
"radix_trie",
|
"radix_trie",
|
||||||
"unicode-segmentation",
|
"unicode-segmentation",
|
||||||
"unicode-width",
|
"unicode-width",
|
||||||
"utf8parse",
|
"utf8parse",
|
||||||
"winapi",
|
"windows-sys 0.59.0",
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "rustyline-derive"
|
|
||||||
version = "0.7.0"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "107c3d5d7f370ac09efa62a78375f94d94b8a33c61d8c278b96683fb4dbf2d8d"
|
|
||||||
dependencies = [
|
|
||||||
"proc-macro2",
|
|
||||||
"quote",
|
|
||||||
"syn 1.0.109",
|
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
|
@ -6397,7 +6399,7 @@ version = "0.3.0+sdk-1.3.268.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "eda41003dc44290527a59b13432d4a0379379fa074b70174882adfbdfd917844"
|
checksum = "eda41003dc44290527a59b13432d4a0379379fa074b70174882adfbdfd917844"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"bitflags 2.5.0",
|
"bitflags 2.6.0",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
|
@ -6644,7 +6646,7 @@ version = "0.117.4"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "a5da2f0310e8cd84b8c803095e75b2cbca872c71fc7f7404d4c9c8117d894960"
|
checksum = "a5da2f0310e8cd84b8c803095e75b2cbca872c71fc7f7404d4c9c8117d894960"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"bitflags 2.5.0",
|
"bitflags 2.6.0",
|
||||||
"is-macro",
|
"is-macro",
|
||||||
"num-bigint",
|
"num-bigint",
|
||||||
"phf 0.11.2",
|
"phf 0.11.2",
|
||||||
|
@ -6730,7 +6732,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "6df81c1cbb920d9c47abe6fb105363b0f78df2c8f6b0910c4fdd2ad7cbdfb23d"
|
checksum = "6df81c1cbb920d9c47abe6fb105363b0f78df2c8f6b0910c4fdd2ad7cbdfb23d"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"better_scoped_tls",
|
"better_scoped_tls",
|
||||||
"bitflags 2.5.0",
|
"bitflags 2.6.0",
|
||||||
"indexmap",
|
"indexmap",
|
||||||
"once_cell",
|
"once_cell",
|
||||||
"phf 0.11.2",
|
"phf 0.11.2",
|
||||||
|
@ -7392,7 +7394,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "1e9cd434a998747dd2c4276bc96ee2e0c7a2eadf3cae88e52be55a05fa9053f5"
|
checksum = "1e9cd434a998747dd2c4276bc96ee2e0c7a2eadf3cae88e52be55a05fa9053f5"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"async-compression",
|
"async-compression",
|
||||||
"bitflags 2.5.0",
|
"bitflags 2.6.0",
|
||||||
"bytes",
|
"bytes",
|
||||||
"futures-core",
|
"futures-core",
|
||||||
"http 1.1.0",
|
"http 1.1.0",
|
||||||
|
@ -7799,7 +7801,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "88a710d5b95bff79a90708203cf9f74384e080d21fc6664aa4df463f2c66ac83"
|
checksum = "88a710d5b95bff79a90708203cf9f74384e080d21fc6664aa4df463f2c66ac83"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"bindgen",
|
"bindgen",
|
||||||
"bitflags 2.5.0",
|
"bitflags 2.6.0",
|
||||||
"fslock",
|
"fslock",
|
||||||
"gzip-header",
|
"gzip-header",
|
||||||
"home",
|
"home",
|
||||||
|
@ -7815,7 +7817,7 @@ version = "0.1.1"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "97599c400fc79925922b58303e98fcb8fa88f573379a08ddb652e72cbd2e70f6"
|
checksum = "97599c400fc79925922b58303e98fcb8fa88f573379a08ddb652e72cbd2e70f6"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"bitflags 2.5.0",
|
"bitflags 2.6.0",
|
||||||
"encoding_rs",
|
"encoding_rs",
|
||||||
"indexmap",
|
"indexmap",
|
||||||
"num-bigint",
|
"num-bigint",
|
||||||
|
@ -8013,8 +8015,8 @@ checksum = "d50819ab545b867d8a454d1d756b90cd5f15da1f2943334ca314af10583c9d39"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"arrayvec",
|
"arrayvec",
|
||||||
"bit-vec",
|
"bit-vec",
|
||||||
"bitflags 2.5.0",
|
"bitflags 2.6.0",
|
||||||
"cfg_aliases",
|
"cfg_aliases 0.1.1",
|
||||||
"codespan-reporting",
|
"codespan-reporting",
|
||||||
"document-features",
|
"document-features",
|
||||||
"indexmap",
|
"indexmap",
|
||||||
|
@ -8044,9 +8046,9 @@ dependencies = [
|
||||||
"arrayvec",
|
"arrayvec",
|
||||||
"ash",
|
"ash",
|
||||||
"bit-set",
|
"bit-set",
|
||||||
"bitflags 2.5.0",
|
"bitflags 2.6.0",
|
||||||
"block",
|
"block",
|
||||||
"cfg_aliases",
|
"cfg_aliases 0.1.1",
|
||||||
"core-graphics-types",
|
"core-graphics-types",
|
||||||
"d3d12",
|
"d3d12",
|
||||||
"glow",
|
"glow",
|
||||||
|
@ -8082,7 +8084,7 @@ version = "0.20.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "1353d9a46bff7f955a680577f34c69122628cc2076e1d6f3a9be6ef00ae793ef"
|
checksum = "1353d9a46bff7f955a680577f34c69122628cc2076e1d6f3a9be6ef00ae793ef"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"bitflags 2.5.0",
|
"bitflags 2.6.0",
|
||||||
"js-sys",
|
"js-sys",
|
||||||
"serde",
|
"serde",
|
||||||
"web-sys",
|
"web-sys",
|
||||||
|
@ -8177,7 +8179,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "e48a53791691ab099e5e2ad123536d0fff50652600abaf43bbf952894110d0be"
|
checksum = "e48a53791691ab099e5e2ad123536d0fff50652600abaf43bbf952894110d0be"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"windows-core",
|
"windows-core",
|
||||||
"windows-targets 0.52.4",
|
"windows-targets 0.52.6",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
|
@ -8186,7 +8188,7 @@ version = "0.52.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9"
|
checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"windows-targets 0.52.4",
|
"windows-targets 0.52.6",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
|
@ -8204,7 +8206,16 @@ version = "0.52.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d"
|
checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"windows-targets 0.52.4",
|
"windows-targets 0.52.6",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "windows-sys"
|
||||||
|
version = "0.59.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b"
|
||||||
|
dependencies = [
|
||||||
|
"windows-targets 0.52.6",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
|
@ -8224,17 +8235,18 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "windows-targets"
|
name = "windows-targets"
|
||||||
version = "0.52.4"
|
version = "0.52.6"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "7dd37b7e5ab9018759f893a1952c9420d060016fc19a472b4bb20d1bdd694d1b"
|
checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"windows_aarch64_gnullvm 0.52.4",
|
"windows_aarch64_gnullvm 0.52.6",
|
||||||
"windows_aarch64_msvc 0.52.4",
|
"windows_aarch64_msvc 0.52.6",
|
||||||
"windows_i686_gnu 0.52.4",
|
"windows_i686_gnu 0.52.6",
|
||||||
"windows_i686_msvc 0.52.4",
|
"windows_i686_gnullvm",
|
||||||
"windows_x86_64_gnu 0.52.4",
|
"windows_i686_msvc 0.52.6",
|
||||||
"windows_x86_64_gnullvm 0.52.4",
|
"windows_x86_64_gnu 0.52.6",
|
||||||
"windows_x86_64_msvc 0.52.4",
|
"windows_x86_64_gnullvm 0.52.6",
|
||||||
|
"windows_x86_64_msvc 0.52.6",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
|
@ -8245,9 +8257,9 @@ checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "windows_aarch64_gnullvm"
|
name = "windows_aarch64_gnullvm"
|
||||||
version = "0.52.4"
|
version = "0.52.6"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "bcf46cf4c365c6f2d1cc93ce535f2c8b244591df96ceee75d8e83deb70a9cac9"
|
checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "windows_aarch64_msvc"
|
name = "windows_aarch64_msvc"
|
||||||
|
@ -8257,9 +8269,9 @@ checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "windows_aarch64_msvc"
|
name = "windows_aarch64_msvc"
|
||||||
version = "0.52.4"
|
version = "0.52.6"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "da9f259dd3bcf6990b55bffd094c4f7235817ba4ceebde8e6d11cd0c5633b675"
|
checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "windows_i686_gnu"
|
name = "windows_i686_gnu"
|
||||||
|
@ -8269,9 +8281,15 @@ checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "windows_i686_gnu"
|
name = "windows_i686_gnu"
|
||||||
version = "0.52.4"
|
version = "0.52.6"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "b474d8268f99e0995f25b9f095bc7434632601028cf86590aea5c8a5cb7801d3"
|
checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "windows_i686_gnullvm"
|
||||||
|
version = "0.52.6"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "windows_i686_msvc"
|
name = "windows_i686_msvc"
|
||||||
|
@ -8281,9 +8299,9 @@ checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "windows_i686_msvc"
|
name = "windows_i686_msvc"
|
||||||
version = "0.52.4"
|
version = "0.52.6"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "1515e9a29e5bed743cb4415a9ecf5dfca648ce85ee42e15873c3cd8610ff8e02"
|
checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "windows_x86_64_gnu"
|
name = "windows_x86_64_gnu"
|
||||||
|
@ -8293,9 +8311,9 @@ checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "windows_x86_64_gnu"
|
name = "windows_x86_64_gnu"
|
||||||
version = "0.52.4"
|
version = "0.52.6"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "5eee091590e89cc02ad514ffe3ead9eb6b660aedca2183455434b93546371a03"
|
checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "windows_x86_64_gnullvm"
|
name = "windows_x86_64_gnullvm"
|
||||||
|
@ -8305,9 +8323,9 @@ checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "windows_x86_64_gnullvm"
|
name = "windows_x86_64_gnullvm"
|
||||||
version = "0.52.4"
|
version = "0.52.6"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "77ca79f2451b49fa9e2af39f0747fe999fcda4f5e241b2898624dca97a1f2177"
|
checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "windows_x86_64_msvc"
|
name = "windows_x86_64_msvc"
|
||||||
|
@ -8317,9 +8335,9 @@ checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "windows_x86_64_msvc"
|
name = "windows_x86_64_msvc"
|
||||||
version = "0.52.4"
|
version = "0.52.6"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "32b752e52a2da0ddfbdbcc6fceadfeede4c939ed16d13e648833a61dfb611ed8"
|
checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "winnow"
|
name = "winnow"
|
||||||
|
|
|
@ -159,7 +159,7 @@ rustls = { version = "0.23.11", default-features = false, features = ["logging",
|
||||||
rustls-pemfile = "2"
|
rustls-pemfile = "2"
|
||||||
rustls-tokio-stream = "=0.3.0"
|
rustls-tokio-stream = "=0.3.0"
|
||||||
rustls-webpki = "0.102"
|
rustls-webpki = "0.102"
|
||||||
rustyline = "=13.0.0"
|
rustyline = { path = "../../rustyline" } # "14.0.0"
|
||||||
saffron = "=0.1.0"
|
saffron = "=0.1.0"
|
||||||
scopeguard = "1.2.0"
|
scopeguard = "1.2.0"
|
||||||
serde = { version = "1.0.149", features = ["derive"] }
|
serde = { version = "1.0.149", features = ["derive"] }
|
||||||
|
|
|
@ -138,7 +138,6 @@ rand = { workspace = true, features = ["small_rng"] }
|
||||||
regex.workspace = true
|
regex.workspace = true
|
||||||
ring.workspace = true
|
ring.workspace = true
|
||||||
rustyline.workspace = true
|
rustyline.workspace = true
|
||||||
rustyline-derive = "=0.7.0"
|
|
||||||
serde.workspace = true
|
serde.workspace = true
|
||||||
serde_repr.workspace = true
|
serde_repr.workspace = true
|
||||||
sha2.workspace = true
|
sha2.workspace = true
|
||||||
|
|
|
@ -119,6 +119,7 @@ impl ReplLanguageServer {
|
||||||
&mut self,
|
&mut self,
|
||||||
line_text: &str,
|
line_text: &str,
|
||||||
position: usize,
|
position: usize,
|
||||||
|
explicit: bool,
|
||||||
) -> Vec<ReplCompletionItem> {
|
) -> Vec<ReplCompletionItem> {
|
||||||
self.did_change(line_text).await;
|
self.did_change(line_text).await;
|
||||||
let text_info = deno_ast::SourceTextInfo::from_string(format!(
|
let text_info = deno_ast::SourceTextInfo::from_string(format!(
|
||||||
|
@ -147,7 +148,11 @@ impl ReplLanguageServer {
|
||||||
partial_result_token: None,
|
partial_result_token: None,
|
||||||
},
|
},
|
||||||
context: Some(CompletionContext {
|
context: Some(CompletionContext {
|
||||||
trigger_kind: CompletionTriggerKind::INVOKED,
|
trigger_kind: if explicit {
|
||||||
|
CompletionTriggerKind::INVOKED
|
||||||
|
} else {
|
||||||
|
CompletionTriggerKind::TRIGGER_CHARACTER
|
||||||
|
},
|
||||||
trigger_character: None,
|
trigger_character: None,
|
||||||
}),
|
}),
|
||||||
})
|
})
|
||||||
|
@ -155,28 +160,34 @@ impl ReplLanguageServer {
|
||||||
.ok()
|
.ok()
|
||||||
.unwrap_or_default();
|
.unwrap_or_default();
|
||||||
|
|
||||||
let mut items = match response {
|
let items = match response {
|
||||||
Some(CompletionResponse::Array(items)) => items,
|
Some(CompletionResponse::Array(items)) => items,
|
||||||
Some(CompletionResponse::List(list)) => list.items,
|
Some(CompletionResponse::List(list)) => list.items,
|
||||||
None => Vec::new(),
|
None => return vec![],
|
||||||
};
|
};
|
||||||
items.sort_by_key(|item| {
|
|
||||||
if let Some(sort_text) = &item.sort_text {
|
|
||||||
sort_text.clone()
|
|
||||||
} else {
|
|
||||||
item.label.clone()
|
|
||||||
}
|
|
||||||
});
|
|
||||||
items
|
items
|
||||||
.into_iter()
|
.into_iter()
|
||||||
.filter_map(|item| {
|
.filter_map(|item| {
|
||||||
item.text_edit.and_then(|edit| match edit {
|
if let Some(CompletionTextEdit::Edit(edit)) = item.text_edit {
|
||||||
CompletionTextEdit::Edit(edit) => Some(ReplCompletionItem {
|
return Some(ReplCompletionItem {
|
||||||
new_text: edit.new_text,
|
new_text: edit.new_text,
|
||||||
range: lsp_range_to_std_range(&text_info, &edit.range),
|
range: lsp_range_to_std_range(&text_info, &edit.range),
|
||||||
}),
|
});
|
||||||
CompletionTextEdit::InsertAndReplace(_) => None,
|
}
|
||||||
|
None
|
||||||
|
/*
|
||||||
|
if let Some(text) = item.insert_text {
|
||||||
|
return Some(ReplCompletionItem {
|
||||||
|
range:line_and_column.column_index..(line_and_column.column_index + text.len()),
|
||||||
|
new_text: text,
|
||||||
})
|
})
|
||||||
|
}
|
||||||
|
Some(ReplCompletionItem {
|
||||||
|
range: line_and_column.column_index..(line_and_column.column_index + item.label.len()),
|
||||||
|
new_text: item.label,
|
||||||
|
})
|
||||||
|
*/
|
||||||
})
|
})
|
||||||
.filter(|item| {
|
.filter(|item| {
|
||||||
// filter the results to only exact matches
|
// filter the results to only exact matches
|
||||||
|
|
|
@ -407,7 +407,7 @@ impl JupyterReplSession {
|
||||||
self
|
self
|
||||||
.repl_session
|
.repl_session
|
||||||
.language_server
|
.language_server
|
||||||
.completions(line_text, position)
|
.completions(line_text, position, true)
|
||||||
.await
|
.await
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -485,7 +485,7 @@ impl JupyterReplSession {
|
||||||
) -> Result<repl::TsEvaluateResponse, AnyError> {
|
) -> Result<repl::TsEvaluateResponse, AnyError> {
|
||||||
self
|
self
|
||||||
.repl_session
|
.repl_session
|
||||||
.evaluate_line_with_object_wrapping(line)
|
.evaluate_line_with_object_wrapping(line, false)
|
||||||
.await
|
.await
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -42,12 +42,17 @@ pub enum RustylineSyncMessage {
|
||||||
LspCompletions {
|
LspCompletions {
|
||||||
line_text: String,
|
line_text: String,
|
||||||
position: usize,
|
position: usize,
|
||||||
|
explicit: bool,
|
||||||
|
},
|
||||||
|
Preview {
|
||||||
|
line_text: String,
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
pub enum RustylineSyncResponse {
|
pub enum RustylineSyncResponse {
|
||||||
PostMessage(Result<Value, AnyError>),
|
PostMessage(Result<Value, AnyError>),
|
||||||
LspCompletions(Vec<ReplCompletionItem>),
|
LspCompletions(Vec<ReplCompletionItem>),
|
||||||
|
Preview(Option<(String, usize)>),
|
||||||
}
|
}
|
||||||
|
|
||||||
pub struct RustylineSyncMessageSender {
|
pub struct RustylineSyncMessageSender {
|
||||||
|
@ -75,7 +80,7 @@ impl RustylineSyncMessageSender {
|
||||||
} else {
|
} else {
|
||||||
match self.response_rx.borrow_mut().blocking_recv().unwrap() {
|
match self.response_rx.borrow_mut().blocking_recv().unwrap() {
|
||||||
RustylineSyncResponse::PostMessage(result) => result,
|
RustylineSyncResponse::PostMessage(result) => result,
|
||||||
RustylineSyncResponse::LspCompletions(_) => unreachable!(),
|
_ => unreachable!(),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -84,12 +89,14 @@ impl RustylineSyncMessageSender {
|
||||||
&self,
|
&self,
|
||||||
line_text: &str,
|
line_text: &str,
|
||||||
position: usize,
|
position: usize,
|
||||||
|
explicit: bool,
|
||||||
) -> Vec<ReplCompletionItem> {
|
) -> Vec<ReplCompletionItem> {
|
||||||
if self
|
if self
|
||||||
.message_tx
|
.message_tx
|
||||||
.blocking_send(RustylineSyncMessage::LspCompletions {
|
.blocking_send(RustylineSyncMessage::LspCompletions {
|
||||||
line_text: line_text.to_string(),
|
line_text: line_text.to_string(),
|
||||||
position,
|
position,
|
||||||
|
explicit,
|
||||||
})
|
})
|
||||||
.is_err()
|
.is_err()
|
||||||
{
|
{
|
||||||
|
@ -97,7 +104,24 @@ impl RustylineSyncMessageSender {
|
||||||
} else {
|
} else {
|
||||||
match self.response_rx.borrow_mut().blocking_recv().unwrap() {
|
match self.response_rx.borrow_mut().blocking_recv().unwrap() {
|
||||||
RustylineSyncResponse::LspCompletions(result) => result,
|
RustylineSyncResponse::LspCompletions(result) => result,
|
||||||
RustylineSyncResponse::PostMessage(_) => unreachable!(),
|
_ => unreachable!(),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn preview(&self, line_text: &str) -> Option<(String, usize)> {
|
||||||
|
if self
|
||||||
|
.message_tx
|
||||||
|
.blocking_send(RustylineSyncMessage::Preview {
|
||||||
|
line_text: line_text.to_string(),
|
||||||
|
})
|
||||||
|
.is_err()
|
||||||
|
{
|
||||||
|
None
|
||||||
|
} else {
|
||||||
|
match self.response_rx.borrow_mut().blocking_recv().unwrap() {
|
||||||
|
RustylineSyncResponse::Preview(result) => result,
|
||||||
|
_ => unreachable!(),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -14,6 +14,8 @@ use deno_core::serde_json;
|
||||||
use rustyline::completion::Completer;
|
use rustyline::completion::Completer;
|
||||||
use rustyline::error::ReadlineError;
|
use rustyline::error::ReadlineError;
|
||||||
use rustyline::highlight::Highlighter;
|
use rustyline::highlight::Highlighter;
|
||||||
|
use rustyline::hint::Hinter;
|
||||||
|
use rustyline::preview::Previewer;
|
||||||
use rustyline::validate::ValidationContext;
|
use rustyline::validate::ValidationContext;
|
||||||
use rustyline::validate::ValidationResult;
|
use rustyline::validate::ValidationResult;
|
||||||
use rustyline::validate::Validator;
|
use rustyline::validate::Validator;
|
||||||
|
@ -26,12 +28,11 @@ use rustyline::Editor;
|
||||||
use rustyline::Event;
|
use rustyline::Event;
|
||||||
use rustyline::EventContext;
|
use rustyline::EventContext;
|
||||||
use rustyline::EventHandler;
|
use rustyline::EventHandler;
|
||||||
|
use rustyline::Helper;
|
||||||
use rustyline::KeyCode;
|
use rustyline::KeyCode;
|
||||||
use rustyline::KeyEvent;
|
use rustyline::KeyEvent;
|
||||||
use rustyline::Modifiers;
|
use rustyline::Modifiers;
|
||||||
use rustyline::RepeatCount;
|
use rustyline::RepeatCount;
|
||||||
use rustyline_derive::Helper;
|
|
||||||
use rustyline_derive::Hinter;
|
|
||||||
use std::borrow::Cow;
|
use std::borrow::Cow;
|
||||||
use std::path::PathBuf;
|
use std::path::PathBuf;
|
||||||
use std::sync::atomic::AtomicBool;
|
use std::sync::atomic::AtomicBool;
|
||||||
|
@ -43,7 +44,6 @@ use super::session::REPL_INTERNALS_NAME;
|
||||||
|
|
||||||
// Provides helpers to the editor like validation for multi-line edits, completion candidates for
|
// Provides helpers to the editor like validation for multi-line edits, completion candidates for
|
||||||
// tab completion.
|
// tab completion.
|
||||||
#[derive(Helper, Hinter)]
|
|
||||||
pub struct EditorHelper {
|
pub struct EditorHelper {
|
||||||
pub context_id: u64,
|
pub context_id: u64,
|
||||||
pub sync_sender: RustylineSyncMessageSender,
|
pub sync_sender: RustylineSyncMessageSender,
|
||||||
|
@ -181,6 +181,8 @@ fn get_expr_from_line_at_pos(line: &str, cursor_pos: usize) -> &str {
|
||||||
word
|
word
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl Helper for EditorHelper {}
|
||||||
|
|
||||||
impl Completer for EditorHelper {
|
impl Completer for EditorHelper {
|
||||||
type Candidate = String;
|
type Candidate = String;
|
||||||
|
|
||||||
|
@ -190,7 +192,7 @@ impl Completer for EditorHelper {
|
||||||
pos: usize,
|
pos: usize,
|
||||||
_ctx: &Context<'_>,
|
_ctx: &Context<'_>,
|
||||||
) -> Result<(usize, Vec<String>), ReadlineError> {
|
) -> Result<(usize, Vec<String>), ReadlineError> {
|
||||||
let lsp_completions = self.sync_sender.lsp_completions(line, pos);
|
let lsp_completions = self.sync_sender.lsp_completions(line, pos, true);
|
||||||
if !lsp_completions.is_empty() {
|
if !lsp_completions.is_empty() {
|
||||||
// assumes all lsp completions have the same start position
|
// assumes all lsp completions have the same start position
|
||||||
return Ok((
|
return Ok((
|
||||||
|
@ -234,6 +236,51 @@ impl Completer for EditorHelper {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl Hinter for EditorHelper {
|
||||||
|
type Hint = String;
|
||||||
|
|
||||||
|
fn hint(&self, line: &str, pos: usize, ctx: &Context) -> Option<Self::Hint> {
|
||||||
|
if line.trim().is_empty() || line.ends_with(')') || line.ends_with('}') {
|
||||||
|
return None;
|
||||||
|
}
|
||||||
|
|
||||||
|
let (p, completions) = self.complete(line, pos, ctx).ok()?;
|
||||||
|
let candidate = completions.into_iter().next()?;
|
||||||
|
// let lsp_completions = self.sync_sender.lsp_completions(line, pos, false);
|
||||||
|
//let completion = completions.into_iter().next()?;
|
||||||
|
|
||||||
|
// let p = completion.range.start;
|
||||||
|
// let candidate = completion.new_text;
|
||||||
|
|
||||||
|
let mut i = 0;
|
||||||
|
for (a, b) in line[p..].chars().zip(candidate.chars()) {
|
||||||
|
if a == b {
|
||||||
|
i += 1;
|
||||||
|
} else {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Some(candidate[i..].to_owned())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Previewer for EditorHelper {
|
||||||
|
type Preview = String;
|
||||||
|
|
||||||
|
fn preview(
|
||||||
|
&self,
|
||||||
|
line: &str,
|
||||||
|
_pos: usize,
|
||||||
|
_ctx: &Context,
|
||||||
|
) -> Option<Self::Preview> {
|
||||||
|
if line.trim().is_empty() {
|
||||||
|
return None;
|
||||||
|
}
|
||||||
|
let (preview, counter) = self.sync_sender.preview(line)?;
|
||||||
|
Some(format!("Out[{counter}]: {preview}"))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
impl Validator for EditorHelper {
|
impl Validator for EditorHelper {
|
||||||
fn validate(
|
fn validate(
|
||||||
&self,
|
&self,
|
||||||
|
@ -326,7 +373,11 @@ fn validate(input: &str) -> ValidationResult {
|
||||||
|
|
||||||
impl Highlighter for EditorHelper {
|
impl Highlighter for EditorHelper {
|
||||||
fn highlight_hint<'h>(&self, hint: &'h str) -> Cow<'h, str> {
|
fn highlight_hint<'h>(&self, hint: &'h str) -> Cow<'h, str> {
|
||||||
hint.into()
|
format!("{}", colors::gray(hint)).into()
|
||||||
|
}
|
||||||
|
|
||||||
|
fn highlight_preview<'h>(&self, hint: &'h str) -> Cow<'h, str> {
|
||||||
|
format!("{}", colors::gray(hint)).into()
|
||||||
}
|
}
|
||||||
|
|
||||||
fn highlight_candidate<'c>(
|
fn highlight_candidate<'c>(
|
||||||
|
@ -477,8 +528,24 @@ impl ReplEditor {
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn readline(&self) -> Result<String, ReadlineError> {
|
pub fn readline(&self, counter: usize) -> Result<String, ReadlineError> {
|
||||||
self.inner.lock().readline("> ")
|
let prompt = format!(
|
||||||
|
"{}{}{}",
|
||||||
|
colors::green("In ["),
|
||||||
|
colors::green_bold(counter),
|
||||||
|
colors::green("]: ")
|
||||||
|
);
|
||||||
|
self.inner.lock().readline(&prompt)
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn output(&self, output: String, counter: usize) {
|
||||||
|
let prompt = format!(
|
||||||
|
"{}{}{}",
|
||||||
|
colors::red("Out["),
|
||||||
|
colors::red_bold(counter),
|
||||||
|
colors::red("]: ")
|
||||||
|
);
|
||||||
|
println!("{prompt}{output}\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn update_history(&self, entry: String) {
|
pub fn update_history(&self, entry: String) {
|
||||||
|
|
|
@ -44,18 +44,23 @@ struct Repl {
|
||||||
#[allow(clippy::print_stdout)]
|
#[allow(clippy::print_stdout)]
|
||||||
impl Repl {
|
impl Repl {
|
||||||
async fn run(&mut self) -> Result<(), AnyError> {
|
async fn run(&mut self) -> Result<(), AnyError> {
|
||||||
|
let mut counter = 1;
|
||||||
loop {
|
loop {
|
||||||
let line = read_line_and_poll(
|
let line = read_line_and_poll(
|
||||||
&mut self.session,
|
&mut self.session,
|
||||||
&mut self.message_handler,
|
&mut self.message_handler,
|
||||||
self.editor.clone(),
|
self.editor.clone(),
|
||||||
|
counter,
|
||||||
)
|
)
|
||||||
.await;
|
.await;
|
||||||
match line {
|
match line {
|
||||||
Ok(line) => {
|
Ok(line) => {
|
||||||
self.editor.set_should_exit_on_interrupt(false);
|
self.editor.set_should_exit_on_interrupt(false);
|
||||||
self.editor.update_history(line.clone());
|
self.editor.update_history(line.clone());
|
||||||
let output = self.session.evaluate_line_and_get_output(&line).await;
|
let output = self
|
||||||
|
.session
|
||||||
|
.evaluate_line_and_get_output(&line, counter)
|
||||||
|
.await;
|
||||||
|
|
||||||
// We check for close and break here instead of making it a loop condition to get
|
// We check for close and break here instead of making it a loop condition to get
|
||||||
// consistent behavior in when the user evaluates a call to close().
|
// consistent behavior in when the user evaluates a call to close().
|
||||||
|
@ -63,7 +68,15 @@ impl Repl {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
println!("{}", output);
|
match output {
|
||||||
|
EvaluationOutput::Value(s) => {
|
||||||
|
self.editor.output(s, counter);
|
||||||
|
}
|
||||||
|
EvaluationOutput::Error(s) => {
|
||||||
|
println!("{}\n", s);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
counter += 1;
|
||||||
}
|
}
|
||||||
Err(ReadlineError::Interrupted) => {
|
Err(ReadlineError::Interrupted) => {
|
||||||
if self.editor.should_exit_on_interrupt() {
|
if self.editor.should_exit_on_interrupt() {
|
||||||
|
@ -92,8 +105,9 @@ async fn read_line_and_poll(
|
||||||
repl_session: &mut ReplSession,
|
repl_session: &mut ReplSession,
|
||||||
message_handler: &mut RustylineSyncMessageHandler,
|
message_handler: &mut RustylineSyncMessageHandler,
|
||||||
editor: ReplEditor,
|
editor: ReplEditor,
|
||||||
|
counter: usize,
|
||||||
) -> Result<String, ReadlineError> {
|
) -> Result<String, ReadlineError> {
|
||||||
let mut line_fut = spawn_blocking(move || editor.readline());
|
let mut line_fut = spawn_blocking(move || editor.readline(counter));
|
||||||
let mut poll_worker = true;
|
let mut poll_worker = true;
|
||||||
let notifications_rc = repl_session.notifications.clone();
|
let notifications_rc = repl_session.notifications.clone();
|
||||||
let mut notifications = notifications_rc.lock().await;
|
let mut notifications = notifications_rc.lock().await;
|
||||||
|
@ -114,10 +128,29 @@ async fn read_line_and_poll(
|
||||||
Some(RustylineSyncMessage::LspCompletions {
|
Some(RustylineSyncMessage::LspCompletions {
|
||||||
line_text,
|
line_text,
|
||||||
position,
|
position,
|
||||||
|
explicit,
|
||||||
}) => {
|
}) => {
|
||||||
let result = repl_session.language_server.completions(&line_text, position).await;
|
let result = repl_session.language_server.completions(&line_text, position, explicit).await;
|
||||||
message_handler.send(RustylineSyncResponse::LspCompletions(result)).unwrap();
|
message_handler.send(RustylineSyncResponse::LspCompletions(result)).unwrap();
|
||||||
}
|
}
|
||||||
|
Some(RustylineSyncMessage::Preview { line_text }) => {
|
||||||
|
let result = repl_session.evaluate_line_with_object_wrapping(&line_text, true).await;
|
||||||
|
let result = match result {
|
||||||
|
Ok(evaluate_response) => {
|
||||||
|
let cdp::EvaluateResponse {
|
||||||
|
result,
|
||||||
|
exception_details,
|
||||||
|
} = evaluate_response.value;
|
||||||
|
if exception_details.is_some() {
|
||||||
|
None
|
||||||
|
} else {
|
||||||
|
repl_session.get_eval_value(&result, true).await.ok().map(|s| (s, counter))
|
||||||
|
}
|
||||||
|
},
|
||||||
|
_ => None,
|
||||||
|
};
|
||||||
|
message_handler.send(RustylineSyncResponse::Preview(result)).unwrap();
|
||||||
|
}
|
||||||
None => {}, // channel closed
|
None => {}, // channel closed
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -217,7 +250,7 @@ pub async fn run(
|
||||||
Ok(eval_source) => {
|
Ok(eval_source) => {
|
||||||
let output = repl
|
let output = repl
|
||||||
.session
|
.session
|
||||||
.evaluate_line_and_get_output(&eval_source)
|
.evaluate_line_and_get_output(&eval_source, 0)
|
||||||
.await;
|
.await;
|
||||||
// only output errors
|
// only output errors
|
||||||
if let EvaluationOutput::Error(error_text) = output {
|
if let EvaluationOutput::Error(error_text) = output {
|
||||||
|
@ -232,7 +265,7 @@ pub async fn run(
|
||||||
}
|
}
|
||||||
|
|
||||||
if let Some(eval) = repl_flags.eval {
|
if let Some(eval) = repl_flags.eval {
|
||||||
let output = repl.session.evaluate_line_and_get_output(&eval).await;
|
let output = repl.session.evaluate_line_and_get_output(&eval, 0).await;
|
||||||
// only output errors
|
// only output errors
|
||||||
if let EvaluationOutput::Error(error_text) = output {
|
if let EvaluationOutput::Error(error_text) = output {
|
||||||
println!("Error in --eval flag: {error_text}");
|
println!("Error in --eval flag: {error_text}");
|
||||||
|
|
|
@ -95,8 +95,6 @@ Object.defineProperty(globalThis, "{0}", {{
|
||||||
enumerable: false,
|
enumerable: false,
|
||||||
writable: false,
|
writable: false,
|
||||||
value: {{
|
value: {{
|
||||||
lastEvalResult: undefined,
|
|
||||||
lastThrownError: undefined,
|
|
||||||
inspectArgs: Deno[Deno.internal].inspectArgs,
|
inspectArgs: Deno[Deno.internal].inspectArgs,
|
||||||
noColor: Deno.noColor,
|
noColor: Deno.noColor,
|
||||||
get closed() {{
|
get closed() {{
|
||||||
|
@ -104,35 +102,6 @@ Object.defineProperty(globalThis, "{0}", {{
|
||||||
}}
|
}}
|
||||||
}},
|
}},
|
||||||
}});
|
}});
|
||||||
Object.defineProperty(globalThis, "_", {{
|
|
||||||
configurable: true,
|
|
||||||
get: () => {0}.lastEvalResult,
|
|
||||||
set: (value) => {{
|
|
||||||
Object.defineProperty(globalThis, "_", {{
|
|
||||||
value: value,
|
|
||||||
writable: true,
|
|
||||||
enumerable: true,
|
|
||||||
configurable: true,
|
|
||||||
}});
|
|
||||||
console.log("Last evaluation result is no longer saved to _.");
|
|
||||||
}},
|
|
||||||
}});
|
|
||||||
|
|
||||||
Object.defineProperty(globalThis, "_error", {{
|
|
||||||
configurable: true,
|
|
||||||
get: () => {0}.lastThrownError,
|
|
||||||
set: (value) => {{
|
|
||||||
Object.defineProperty(globalThis, "_error", {{
|
|
||||||
value: value,
|
|
||||||
writable: true,
|
|
||||||
enumerable: true,
|
|
||||||
configurable: true,
|
|
||||||
}});
|
|
||||||
|
|
||||||
console.log("Last thrown error is no longer saved to _error.");
|
|
||||||
}},
|
|
||||||
}});
|
|
||||||
|
|
||||||
globalThis.clear = console.clear.bind(console);
|
globalThis.clear = console.clear.bind(console);
|
||||||
"#,
|
"#,
|
||||||
*REPL_INTERNALS_NAME
|
*REPL_INTERNALS_NAME
|
||||||
|
@ -289,7 +258,9 @@ impl ReplSession {
|
||||||
};
|
};
|
||||||
|
|
||||||
// inject prelude
|
// inject prelude
|
||||||
repl_session.evaluate_expression(&get_prelude()).await?;
|
repl_session
|
||||||
|
.evaluate_expression(&get_prelude(), false)
|
||||||
|
.await?;
|
||||||
|
|
||||||
Ok(repl_session)
|
Ok(repl_session)
|
||||||
}
|
}
|
||||||
|
@ -304,7 +275,7 @@ impl ReplSession {
|
||||||
pub async fn closing(&mut self) -> Result<bool, AnyError> {
|
pub async fn closing(&mut self) -> Result<bool, AnyError> {
|
||||||
let expression = format!(r#"{}.closed"#, *REPL_INTERNALS_NAME);
|
let expression = format!(r#"{}.closed"#, *REPL_INTERNALS_NAME);
|
||||||
let closed = self
|
let closed = self
|
||||||
.evaluate_expression(&expression)
|
.evaluate_expression(&expression, false)
|
||||||
.await?
|
.await?
|
||||||
.result
|
.result
|
||||||
.value
|
.value
|
||||||
|
@ -343,6 +314,7 @@ impl ReplSession {
|
||||||
pub async fn evaluate_line_and_get_output(
|
pub async fn evaluate_line_and_get_output(
|
||||||
&mut self,
|
&mut self,
|
||||||
line: &str,
|
line: &str,
|
||||||
|
counter: usize,
|
||||||
) -> EvaluationOutput {
|
) -> EvaluationOutput {
|
||||||
fn format_diagnostic(diagnostic: &deno_ast::ParseDiagnostic) -> String {
|
fn format_diagnostic(diagnostic: &deno_ast::ParseDiagnostic) -> String {
|
||||||
let display_position = diagnostic.display_position();
|
let display_position = diagnostic.display_position();
|
||||||
|
@ -358,8 +330,12 @@ impl ReplSession {
|
||||||
async fn inner(
|
async fn inner(
|
||||||
session: &mut ReplSession,
|
session: &mut ReplSession,
|
||||||
line: &str,
|
line: &str,
|
||||||
|
counter: usize,
|
||||||
) -> Result<EvaluationOutput, AnyError> {
|
) -> Result<EvaluationOutput, AnyError> {
|
||||||
match session.evaluate_line_with_object_wrapping(line).await {
|
match session
|
||||||
|
.evaluate_line_with_object_wrapping(line, false)
|
||||||
|
.await
|
||||||
|
{
|
||||||
Ok(evaluate_response) => {
|
Ok(evaluate_response) => {
|
||||||
let cdp::EvaluateResponse {
|
let cdp::EvaluateResponse {
|
||||||
result,
|
result,
|
||||||
|
@ -390,8 +366,8 @@ impl ReplSession {
|
||||||
.commit_text(&evaluate_response.ts_code)
|
.commit_text(&evaluate_response.ts_code)
|
||||||
.await;
|
.await;
|
||||||
|
|
||||||
session.set_last_eval_result(&result).await?;
|
session.set_last_eval_result(&result, counter).await?;
|
||||||
let value = session.get_eval_value(&result).await?;
|
let value = session.get_eval_value(&result, false).await?;
|
||||||
EvaluationOutput::Value(value)
|
EvaluationOutput::Value(value)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
@ -417,13 +393,14 @@ impl ReplSession {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
let result = inner(self, line).await;
|
let result = inner(self, line, counter).await;
|
||||||
result_to_evaluation_output(result)
|
result_to_evaluation_output(result)
|
||||||
}
|
}
|
||||||
|
|
||||||
pub async fn evaluate_line_with_object_wrapping(
|
pub async fn evaluate_line_with_object_wrapping(
|
||||||
&mut self,
|
&mut self,
|
||||||
line: &str,
|
line: &str,
|
||||||
|
throw_on_side_effect: bool,
|
||||||
) -> Result<TsEvaluateResponse, AnyError> {
|
) -> Result<TsEvaluateResponse, AnyError> {
|
||||||
// Expressions like { "foo": "bar" } are interpreted as block expressions at the
|
// Expressions like { "foo": "bar" } are interpreted as block expressions at the
|
||||||
// statement level rather than an object literal so we interpret it as an expression statement
|
// statement level rather than an object literal so we interpret it as an expression statement
|
||||||
|
@ -436,7 +413,9 @@ impl ReplSession {
|
||||||
line.to_string()
|
line.to_string()
|
||||||
};
|
};
|
||||||
|
|
||||||
let evaluate_response = self.evaluate_ts_expression(&wrapped_line).await;
|
let evaluate_response = self
|
||||||
|
.evaluate_ts_expression(&wrapped_line, throw_on_side_effect)
|
||||||
|
.await;
|
||||||
|
|
||||||
// If that fails, we retry it without wrapping in parens letting the error bubble up to the
|
// If that fails, we retry it without wrapping in parens letting the error bubble up to the
|
||||||
// user if it is still an error.
|
// user if it is still an error.
|
||||||
|
@ -449,7 +428,9 @@ impl ReplSession {
|
||||||
.exception_details
|
.exception_details
|
||||||
.is_some())
|
.is_some())
|
||||||
{
|
{
|
||||||
self.evaluate_ts_expression(line).await
|
self
|
||||||
|
.evaluate_ts_expression(line, throw_on_side_effect)
|
||||||
|
.await
|
||||||
} else {
|
} else {
|
||||||
evaluate_response
|
evaluate_response
|
||||||
};
|
};
|
||||||
|
@ -486,10 +467,17 @@ impl ReplSession {
|
||||||
.post_message_with_event_loop(
|
.post_message_with_event_loop(
|
||||||
"Runtime.callFunctionOn",
|
"Runtime.callFunctionOn",
|
||||||
Some(cdp::CallFunctionOnArgs {
|
Some(cdp::CallFunctionOnArgs {
|
||||||
function_declaration: format!(
|
function_declaration: r#"
|
||||||
r#"function (object) {{ {}.lastThrownError = object; }}"#,
|
function (object) {
|
||||||
*REPL_INTERNALS_NAME
|
Object.defineProperty(globalThis, '_error', {
|
||||||
),
|
value: object,
|
||||||
|
enumerable: false,
|
||||||
|
configurable: true,
|
||||||
|
writable: true,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
"#
|
||||||
|
.to_string(),
|
||||||
object_id: None,
|
object_id: None,
|
||||||
arguments: Some(vec![error.into()]),
|
arguments: Some(vec![error.into()]),
|
||||||
silent: None,
|
silent: None,
|
||||||
|
@ -509,14 +497,25 @@ impl ReplSession {
|
||||||
async fn set_last_eval_result(
|
async fn set_last_eval_result(
|
||||||
&mut self,
|
&mut self,
|
||||||
evaluate_result: &cdp::RemoteObject,
|
evaluate_result: &cdp::RemoteObject,
|
||||||
|
counter: usize,
|
||||||
) -> Result<(), AnyError> {
|
) -> Result<(), AnyError> {
|
||||||
self
|
self
|
||||||
.post_message_with_event_loop(
|
.post_message_with_event_loop(
|
||||||
"Runtime.callFunctionOn",
|
"Runtime.callFunctionOn",
|
||||||
Some(cdp::CallFunctionOnArgs {
|
Some(cdp::CallFunctionOnArgs {
|
||||||
function_declaration: format!(
|
function_declaration: format!(
|
||||||
r#"function (object) {{ {}.lastEvalResult = object; }}"#,
|
r#"function (object) {{
|
||||||
*REPL_INTERNALS_NAME
|
const desc = {{
|
||||||
|
writable: true,
|
||||||
|
configurable: true,
|
||||||
|
enumerable: false,
|
||||||
|
value: object,
|
||||||
|
}};
|
||||||
|
Object.defineProperties(globalThis, {{
|
||||||
|
_: desc,
|
||||||
|
"_{counter}": desc,
|
||||||
|
}});
|
||||||
|
}}"#,
|
||||||
),
|
),
|
||||||
object_id: None,
|
object_id: None,
|
||||||
arguments: Some(vec![evaluate_result.into()]),
|
arguments: Some(vec![evaluate_result.into()]),
|
||||||
|
@ -572,6 +571,7 @@ impl ReplSession {
|
||||||
pub async fn get_eval_value(
|
pub async fn get_eval_value(
|
||||||
&mut self,
|
&mut self,
|
||||||
evaluate_result: &cdp::RemoteObject,
|
evaluate_result: &cdp::RemoteObject,
|
||||||
|
no_color: bool,
|
||||||
) -> Result<String, AnyError> {
|
) -> Result<String, AnyError> {
|
||||||
// TODO(caspervonb) we should investigate using previews here but to keep things
|
// TODO(caspervonb) we should investigate using previews here but to keep things
|
||||||
// consistent with the previous implementation we just get the preview result from
|
// consistent with the previous implementation we just get the preview result from
|
||||||
|
@ -581,12 +581,12 @@ impl ReplSession {
|
||||||
format!(
|
format!(
|
||||||
r#"function (object) {{
|
r#"function (object) {{
|
||||||
try {{
|
try {{
|
||||||
return {0}.inspectArgs(["%o", object], {{ colors: !{0}.noColor }});
|
return {0}.inspectArgs(["%o", object], {{ colors: (!{0}.noColor && !{1}) }});
|
||||||
}} catch (err) {{
|
}} catch (err) {{
|
||||||
return {0}.inspectArgs(["%o", err]);
|
return {0}.inspectArgs(["%o", err]);
|
||||||
}}
|
}}
|
||||||
}}"#,
|
}}"#,
|
||||||
*REPL_INTERNALS_NAME
|
*REPL_INTERNALS_NAME, no_color
|
||||||
),
|
),
|
||||||
&[evaluate_result.clone()],
|
&[evaluate_result.clone()],
|
||||||
)
|
)
|
||||||
|
@ -600,6 +600,7 @@ impl ReplSession {
|
||||||
async fn evaluate_ts_expression(
|
async fn evaluate_ts_expression(
|
||||||
&mut self,
|
&mut self,
|
||||||
expression: &str,
|
expression: &str,
|
||||||
|
throw_on_side_effect: bool,
|
||||||
) -> Result<TsEvaluateResponse, AnyError> {
|
) -> Result<TsEvaluateResponse, AnyError> {
|
||||||
let parsed_source =
|
let parsed_source =
|
||||||
match parse_source_as(expression.to_string(), deno_ast::MediaType::Tsx) {
|
match parse_source_as(expression.to_string(), deno_ast::MediaType::Tsx) {
|
||||||
|
@ -653,7 +654,7 @@ impl ReplSession {
|
||||||
.text;
|
.text;
|
||||||
|
|
||||||
let value = self
|
let value = self
|
||||||
.evaluate_expression(&format!("'use strict'; void 0;{transpiled_src}"))
|
.evaluate_expression(&transpiled_src, throw_on_side_effect)
|
||||||
.await?;
|
.await?;
|
||||||
|
|
||||||
Ok(TsEvaluateResponse {
|
Ok(TsEvaluateResponse {
|
||||||
|
@ -733,6 +734,7 @@ impl ReplSession {
|
||||||
async fn evaluate_expression(
|
async fn evaluate_expression(
|
||||||
&mut self,
|
&mut self,
|
||||||
expression: &str,
|
expression: &str,
|
||||||
|
throw_on_side_effect: bool,
|
||||||
) -> Result<cdp::EvaluateResponse, AnyError> {
|
) -> Result<cdp::EvaluateResponse, AnyError> {
|
||||||
self
|
self
|
||||||
.post_message_with_event_loop(
|
.post_message_with_event_loop(
|
||||||
|
@ -747,8 +749,12 @@ impl ReplSession {
|
||||||
generate_preview: None,
|
generate_preview: None,
|
||||||
user_gesture: None,
|
user_gesture: None,
|
||||||
await_promise: None,
|
await_promise: None,
|
||||||
throw_on_side_effect: None,
|
throw_on_side_effect: Some(throw_on_side_effect),
|
||||||
timeout: None,
|
timeout: if throw_on_side_effect {
|
||||||
|
Some(100)
|
||||||
|
} else {
|
||||||
|
None
|
||||||
|
},
|
||||||
disable_breaks: None,
|
disable_breaks: None,
|
||||||
repl_mode: Some(true),
|
repl_mode: Some(true),
|
||||||
allow_unsafe_eval_blocked_by_csp: None,
|
allow_unsafe_eval_blocked_by_csp: None,
|
||||||
|
|
|
@ -412,7 +412,7 @@ pub fn op_read_line_prompt(
|
||||||
let mut editor = Editor::<(), rustyline::history::DefaultHistory>::new()
|
let mut editor = Editor::<(), rustyline::history::DefaultHistory>::new()
|
||||||
.expect("Failed to create editor.");
|
.expect("Failed to create editor.");
|
||||||
|
|
||||||
editor.set_keyseq_timeout(1);
|
editor.set_keyseq_timeout(Some(1));
|
||||||
editor
|
editor
|
||||||
.bind_sequence(KeyEvent(KeyCode::Esc, Modifiers::empty()), Cmd::Interrupt);
|
.bind_sequence(KeyEvent(KeyCode::Esc, Modifiers::empty()), Cmd::Interrupt);
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue