diff --git a/.clippy.toml b/.clippy.toml new file mode 100644 index 0000000..a3c649d --- /dev/null +++ b/.clippy.toml @@ -0,0 +1,10 @@ +# Prefer using `SourcePos` from deno_ast because it abstracts +# away swc's non-zero-indexed based positioning +disallowed-methods = [ + "swc_common::Spanned::span", +] +disallowed-types = [ + "swc_common::BytePos", + "swc_common::Span", + "swc_common::Spanned", +] diff --git a/Cargo.lock b/Cargo.lock index 8ff3ffe..6b0421d 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -18,7 +18,7 @@ version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fcb51a0695d8f838b1ee009b3fbf66bda078cd64590202a864a8f3e8c4315c47" dependencies = [ - "getrandom 0.2.3", + "getrandom", "once_cell", "version_check", ] @@ -63,9 +63,15 @@ dependencies = [ [[package]] name = "autocfg" -version = "1.0.1" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" + +[[package]] +name = "base64" +version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cdb031dd78e28731d87d56cc8ffef4a8f36ca26c38fe2de700543e627f8a464a" +checksum = "b41b7ea54a0c9d92199de89e20e58d49f02f8e699814ef3fdf266f6f748d15c7" [[package]] name = "base64" @@ -209,15 +215,13 @@ dependencies = [ [[package]] name = "deno_ast" -version = "0.13.2" +version = "0.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad2c02ed64d2d4a8ca2a3f7d96cba60af6ee57cd8033ca1d071481afd7d2cfa0" +checksum = "a2989afff97ba7da10f186e9a45e946b4ef943b9d4babd2ee7b4b24cc9906b69" dependencies = [ "data-url", - "dprint-swc-ecma-ast-view", + "dprint-swc-ext", "serde", - "swc_atoms", - "swc_common", "swc_ecmascript", "text_lines", "url", @@ -225,9 +229,9 @@ dependencies = [ [[package]] name = "deno_graph" -version = "0.25.0" +version = "0.27.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3439f9c0ef8526fa6ee07cd1fe40ce5da94c7efc8c8e130e87e02a4e087ba6d8" +checksum = "99110bbe6cc90fc653a6bd51cf56d8545cd210f3da913aab63d7e362ab9dbaa4" dependencies = [ "anyhow", "cfg-if 1.0.0", @@ -235,11 +239,12 @@ dependencies = [ "deno_ast", "futures", "lazy_static", - "parking_lot", + "parking_lot 0.12.0", "regex", "ring", "serde", "serde_json", + "sourcemap", "termcolor", "url", ] @@ -249,7 +254,7 @@ name = "deno_node_transform" version = "0.5.0" dependencies = [ "anyhow", - "base64", + "base64 0.13.0", "deno_ast", "deno_graph", "futures", @@ -285,10 +290,10 @@ dependencies = [ ] [[package]] -name = "dprint-swc-ecma-ast-view" -version = "0.54.0" +name = "dprint-swc-ext" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a88404348c269ecfe3c753f44caddf954cdb5fba5b55d68d3653202a96b200af" +checksum = "3df529037ff02f1c43ae8c6cce54d9ad85546ff89cb5c1988f56130c16e16a48" dependencies = [ "bumpalo", "num-bigint", @@ -463,17 +468,6 @@ dependencies = [ "slab", ] -[[package]] -name = "getrandom" -version = "0.1.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8fc3cb4d91f53b50155bdcfd23f6a4c39ae1969c2ae85982b135750cccaf5fce" -dependencies = [ - "cfg-if 1.0.0", - "libc", - "wasi 0.9.0+wasi-snapshot-preview1", -] - [[package]] name = "getrandom" version = "0.2.3" @@ -482,7 +476,7 @@ checksum = "7fcd999463524c52659517fe2cea98493cfe485d10565e7b0fb07dbba7ad2753" dependencies = [ "cfg-if 1.0.0", "libc", - "wasi 0.10.2+wasi-snapshot-preview1", + "wasi", ] [[package]] @@ -607,6 +601,12 @@ dependencies = [ "unicode-normalization", ] +[[package]] +name = "if_chain" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb56e1aa765b4b4f3aadfab769793b7087bb03a4ea4920644a6d238e2df5b9ed" + [[package]] name = "import_map" version = "0.9.0" @@ -638,9 +638,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c" dependencies = [ "cfg-if 1.0.0", - "js-sys", - "wasm-bindgen", - "web-sys", ] [[package]] @@ -770,10 +767,11 @@ checksum = "1b03d17f364a3a042d5e5d46b053bbbf82c92c9430c592dd4c064dc6ee997125" [[package]] name = "lock_api" -version = "0.4.5" +version = "0.4.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "712a4d093c9976e24e7dbca41db895dabcbac38eb5f4045393d17a95bdfb1109" +checksum = "327fa5b6a6940e4699ec49a9beae1ea4845c6bab9314e4f84ac68742139d8c53" dependencies = [ + "autocfg", "scopeguard", ] @@ -962,7 +960,17 @@ checksum = "7d17b78036a60663b797adeaee46f5c9dfebb86948d1255007a1d6be0271ff99" dependencies = [ "instant", "lock_api", - "parking_lot_core", + "parking_lot_core 0.8.5", +] + +[[package]] +name = "parking_lot" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87f5ec2493a61ac0506c0f4199f99070cbe83857b0337006a30f3e6719b8ef58" +dependencies = [ + "lock_api", + "parking_lot_core 0.9.2", ] [[package]] @@ -979,6 +987,19 @@ dependencies = [ "winapi", ] +[[package]] +name = "parking_lot_core" +version = "0.9.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "995f667a6c822200b0433ac218e05582f0e2efa1b922a3fd2fbaadc5f87bab37" +dependencies = [ + "cfg-if 1.0.0", + "libc", + "redox_syscall", + "smallvec", + "windows-sys", +] + [[package]] name = "pathdiff" version = "0.2.1" @@ -998,28 +1019,18 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fabbf1ead8a5bcbc20f5f8b939ee3f5b0f6f281b6ad3468b84656b658b455259" dependencies = [ "phf_macros", - "phf_shared 0.10.0", + "phf_shared", "proc-macro-hack", ] -[[package]] -name = "phf_generator" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17367f0cc86f2d25802b2c26ee58a7b23faeccf78a396094c13dced0d0182526" -dependencies = [ - "phf_shared 0.8.0", - "rand 0.7.3", -] - [[package]] name = "phf_generator" version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5d5285893bb5eb82e6aaf5d59ee909a06a16737a8970984dd7746ba9283498d6" dependencies = [ - "phf_shared 0.10.0", - "rand 0.8.4", + "phf_shared", + "rand", ] [[package]] @@ -1028,23 +1039,14 @@ version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "58fdf3184dd560f160dd73922bea2d5cd6e8f064bf4b13110abd81b03697b4e0" dependencies = [ - "phf_generator 0.10.0", - "phf_shared 0.10.0", + "phf_generator", + "phf_shared", "proc-macro-hack", "proc-macro2", "quote", "syn", ] -[[package]] -name = "phf_shared" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c00cf8b9eafe68dde5e9eaa2cef8ee84a9336a47d566ec55ca16589633b65af7" -dependencies = [ - "siphasher", -] - [[package]] name = "phf_shared" version = "0.10.0" @@ -1137,20 +1139,6 @@ dependencies = [ "proc-macro2", ] -[[package]] -name = "rand" -version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a6b1679d49b24bbfe0c803429aa1874472f50d9b363131f0e89fc356b544d03" -dependencies = [ - "getrandom 0.1.16", - "libc", - "rand_chacha 0.2.2", - "rand_core 0.5.1", - "rand_hc 0.2.0", - "rand_pcg", -] - [[package]] name = "rand" version = "0.8.4" @@ -1158,19 +1146,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2e7573632e6454cf6b99d7aac4ccca54be06da05aca2ef7423d22d27d4d4bcd8" dependencies = [ "libc", - "rand_chacha 0.3.1", - "rand_core 0.6.3", - "rand_hc 0.3.1", -] - -[[package]] -name = "rand_chacha" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4c8ed856279c9737206bf725bf36935d8666ead7aa69b52be55af369d193402" -dependencies = [ - "ppv-lite86", - "rand_core 0.5.1", + "rand_chacha", + "rand_core", + "rand_hc", ] [[package]] @@ -1180,16 +1158,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" dependencies = [ "ppv-lite86", - "rand_core 0.6.3", -] - -[[package]] -name = "rand_core" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19" -dependencies = [ - "getrandom 0.1.16", + "rand_core", ] [[package]] @@ -1198,16 +1167,7 @@ version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d34f1408f55294453790c48b2f1ebbb1c5b4b7563eb1f418bcfcfdbb06ebb4e7" dependencies = [ - "getrandom 0.2.3", -] - -[[package]] -name = "rand_hc" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca3129af7b92a17112d59ad498c6f81eaf463253766b90396d39ea7a39d6613c" -dependencies = [ - "rand_core 0.5.1", + "getrandom", ] [[package]] @@ -1216,16 +1176,7 @@ version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d51e9f596de227fda2ea6c84607f5558e196eeaf43c986b724ba4fb8fdf497e7" dependencies = [ - "rand_core 0.6.3", -] - -[[package]] -name = "rand_pcg" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "16abd0c1b639e9eb4d7c50c0b8100b0d0f849be2349829c740fe8e6eb4816429" -dependencies = [ - "rand_core 0.5.1", + "rand_core", ] [[package]] @@ -1269,7 +1220,7 @@ version = "0.11.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "07bea77bc708afa10e59905c3d4af7c8fd43c9214251673095ff8b14345fcbc5" dependencies = [ - "base64", + "base64 0.13.0", "bytes", "encoding_rs", "futures-core", @@ -1320,6 +1271,15 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" +[[package]] +name = "rustc_version" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a" +dependencies = [ + "semver", +] + [[package]] name = "rustls" version = "0.20.2" @@ -1393,6 +1353,21 @@ dependencies = [ "libc", ] +[[package]] +name = "semver" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403" +dependencies = [ + "semver-parser", +] + +[[package]] +name = "semver-parser" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" + [[package]] name = "serde" version = "1.0.133" @@ -1474,6 +1449,22 @@ dependencies = [ "winapi", ] +[[package]] +name = "sourcemap" +version = "6.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e031f2463ecbdd5f34c950f89f5c1e1032f22c0f8e3dc4bdb2e8b6658cf61eb" +dependencies = [ + "base64 0.11.0", + "if_chain", + "lazy_static", + "regex", + "rustc_version", + "serde", + "serde_json", + "url", +] + [[package]] name = "spin" version = "0.5.2" @@ -1488,26 +1479,26 @@ checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" [[package]] name = "string_cache" -version = "0.8.3" +version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33994d0838dc2d152d17a62adf608a869b5e846b65b389af7f3dbc1de45c5b26" +checksum = "213494b7a2b503146286049378ce02b482200519accc31872ee8be91fa820a08" dependencies = [ - "lazy_static", "new_debug_unreachable", - "parking_lot", - "phf_shared 0.10.0", + "once_cell", + "parking_lot 0.12.0", + "phf_shared", "precomputed-hash", "serde", ] [[package]] name = "string_cache_codegen" -version = "0.5.1" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f24c8e5e19d22a726626f1a5e16fe15b132dcf21d10177fa5a45ce7962996b97" +checksum = "6bb30289b722be4ff74a408c3cc27edeaad656e06cb1fe8fa9231fa59c728988" dependencies = [ - "phf_generator 0.8.0", - "phf_shared 0.8.0", + "phf_generator", + "phf_shared", "proc-macro2", "quote", ] @@ -1533,9 +1524,9 @@ checksum = "6446ced80d6c486436db5c078dde11a9f73d42b57fb273121e160b84f63d894c" [[package]] name = "swc_atoms" -version = "0.2.9" +version = "0.2.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f5229fe227ff0060e13baa386d6e368797700eab909523f730008d191ee53ae" +checksum = "ba8735ce37e421749498e038955abc1135eec6a4af0b54a173e55d2e5542d472" dependencies = [ "string_cache", "string_cache_codegen", @@ -1543,9 +1534,9 @@ dependencies = [ [[package]] name = "swc_common" -version = "0.17.18" +version = "0.18.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "278ad1cbb3fb3b2686c86a7dd5f307ef791918d249a6da60fa6cd3388f4c6a78" +checksum = "a27ecfcd5b720e06616ccf6aa2aefbdfae785be8524e84b07f1e839ce07a3539" dependencies = [ "ahash", "ast_node", @@ -1569,12 +1560,13 @@ dependencies = [ [[package]] name = "swc_ecma_ast" -version = "0.71.0" +version = "0.78.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ae7b943caae6d3fbae0534ce2df9866efa3d0415199ce7d20c6ef7e4e0b233d" +checksum = "21f40169fe465e9a93cda5fe397c3afcb69be5ba2f76c4ab22137af6effaebcc" dependencies = [ "is-macro", "num-bigint", + "scoped-tls", "serde", "string_enum", "swc_atoms", @@ -1584,9 +1576,9 @@ dependencies = [ [[package]] name = "swc_ecma_dep_graph" -version = "0.67.0" +version = "0.76.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "357351d97268fce258c4b2b684ad1143e37c087a2b8314c48dd8e3cd6b1fd138" +checksum = "553628795fd79a45f3e23b1a732684d887356f9177128cd8c3e90c3631075116" dependencies = [ "swc_atoms", "swc_common", @@ -1596,9 +1588,9 @@ dependencies = [ [[package]] name = "swc_ecma_parser" -version = "0.95.3" +version = "0.104.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3dd176a7677116309b98ac01b57b1c6d574e37c84e6a7975b46f66db121a7927" +checksum = "efb97dc6efc95313dedc5158055cc811da77395ef7b54be61948b5ad097a3671" dependencies = [ "either", "enum_kind", @@ -1616,9 +1608,9 @@ dependencies = [ [[package]] name = "swc_ecma_transforms" -version = "0.136.0" +version = "0.154.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6ed0ab832bbd43221108c4777cab793f888f8810f3e2d80069ba95ba2813136" +checksum = "2bce21d9e8ff785aaf9b4ac11375d9f5767630fcaf882f72e6af0516224085a6" dependencies = [ "swc_atoms", "swc_common", @@ -1630,13 +1622,14 @@ dependencies = [ [[package]] name = "swc_ecma_transforms_base" -version = "0.70.2" +version = "0.85.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0baae39520eefd4dd7e22d44d4beb9d3c6f75f48c1bda40c9d03f7bc6ff821d7" +checksum = "8262876d5387887776f23c4894fbddff26e5f184edadf2375f3dc19fca2b42a4" dependencies = [ "better_scoped_tls", "once_cell", "phf", + "rustc-hash", "serde", "smallvec", "swc_atoms", @@ -1650,9 +1643,9 @@ dependencies = [ [[package]] name = "swc_ecma_utils" -version = "0.74.0" +version = "0.85.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "daa3ba57f53fc15882d2ea288f9a4b6c3a6e97c015d7b9603035be424bc19007" +checksum = "dff9d469b284a48317a695a81346a9609d04ce3a31da4493aac508e0d48a4257" dependencies = [ "indexmap", "once_cell", @@ -1665,9 +1658,9 @@ dependencies = [ [[package]] name = "swc_ecma_visit" -version = "0.57.0" +version = "0.64.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7588bf6b02705a25356a130acdfec125b6a1dcd5390a5718082ae4f2ede85ee3" +checksum = "f2d3783a0dd1e301ae2945ab1241405f913427f9512ec62756d3d2072f7c21bb" dependencies = [ "num-bigint", "swc_atoms", @@ -1679,9 +1672,9 @@ dependencies = [ [[package]] name = "swc_ecmascript" -version = "0.137.0" +version = "0.157.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c7417fbd813809f69e34ec64c2047befc219e99fa25b0678870ca17ae3b5805" +checksum = "bd35679e1dc392f776b691b125692d90a7bebd5d23ec96699cfe37d8ae8633b1" dependencies = [ "swc_ecma_ast", "swc_ecma_dep_graph", @@ -1758,7 +1751,7 @@ checksum = "dac1c663cfc93810f88aed9b8941d48cabf856a1b111c29a40439018d870eb22" dependencies = [ "cfg-if 1.0.0", "libc", - "rand 0.8.4", + "rand", "redox_syscall", "remove_dir_all", "winapi", @@ -1809,7 +1802,7 @@ dependencies = [ "mio", "num_cpus", "once_cell", - "parking_lot", + "parking_lot 0.11.2", "pin-project-lite", "signal-hook-registry", "tokio-macros", @@ -1990,12 +1983,6 @@ dependencies = [ "try-lock", ] -[[package]] -name = "wasi" -version = "0.9.0+wasi-snapshot-preview1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519" - [[package]] name = "wasi" version = "0.10.2+wasi-snapshot-preview1" @@ -2157,6 +2144,49 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" +[[package]] +name = "windows-sys" +version = "0.34.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5acdd78cb4ba54c0045ac14f62d8f94a03d10047904ae2a40afa1e99d8f70825" +dependencies = [ + "windows_aarch64_msvc", + "windows_i686_gnu", + "windows_i686_msvc", + "windows_x86_64_gnu", + "windows_x86_64_msvc", +] + +[[package]] +name = "windows_aarch64_msvc" +version = "0.34.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "17cffbe740121affb56fad0fc0e421804adf0ae00891205213b5cecd30db881d" + +[[package]] +name = "windows_i686_gnu" +version = "0.34.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2564fde759adb79129d9b4f54be42b32c89970c18ebf93124ca8870a498688ed" + +[[package]] +name = "windows_i686_msvc" +version = "0.34.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9cd9d32ba70453522332c14d38814bceeb747d80b3958676007acadd7e166956" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.34.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cfce6deae227ee8d356d19effc141a509cc503dfd1f850622ec4b0f84428e1f4" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.34.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d19538ccc21819d01deaf88d6a17eae6596a12e9aafdbb97916fb49896d89de9" + [[package]] name = "winreg" version = "0.7.0" diff --git a/deno.jsonc b/deno.jsonc index e630524..5c145ed 100644 --- a/deno.jsonc +++ b/deno.jsonc @@ -2,7 +2,7 @@ "tasks": { // todo: exclude going into node_modules folders once we add support for globbing "test": "deno test -A", - "wasm": "deno run -A _build.ts" + "wasm": "deno run -A --no-check _build.ts" }, "fmt": { "options": { diff --git a/rs-lib/Cargo.toml b/rs-lib/Cargo.toml index e2b04fe..2636f46 100644 --- a/rs-lib/Cargo.toml +++ b/rs-lib/Cargo.toml @@ -15,8 +15,8 @@ serialization = ["serde"] [dependencies] anyhow = "1.0.51" base64 = "0.13.0" -deno_ast = { version = "0.13.2", features = ["module_specifier", "transforms", "view", "visit", "utils"] } -deno_graph = { version = "0.25.0", features = [] } +deno_ast = { version = "0.15.0", features = ["module_specifier", "transforms", "view", "visit", "utils"] } +deno_graph = { version = "0.27.0", features = [] } futures = "0.3.17" import_map = "0.9.0" once_cell = "1.9.0" diff --git a/rs-lib/src/analyze/get_ignore_line_indexes.rs b/rs-lib/src/analyze/get_ignore_line_indexes.rs index 18de727..72b300f 100644 --- a/rs-lib/src/analyze/get_ignore_line_indexes.rs +++ b/rs-lib/src/analyze/get_ignore_line_indexes.rs @@ -1,6 +1,8 @@ use std::collections::HashSet; use deno_ast::view::*; +use deno_ast::RootNode; +use deno_ast::SourceRangedForSpanned; pub struct IgnoredLineIndexes { pub warnings: Vec, @@ -13,7 +15,7 @@ pub fn get_ignore_line_indexes( ) -> IgnoredLineIndexes { let mut warnings = Vec::new(); let mut line_indexes = HashSet::new(); - for comment in program.comment_container().unwrap().all_comments() { + for comment in program.comment_container().all_comments() { let lowercase_text = comment.text.trim().to_lowercase(); let starts_with_deno_shim_ignore = lowercase_text.starts_with("deno-shim-ignore"); diff --git a/rs-lib/src/analyze/get_top_level_decls.rs b/rs-lib/src/analyze/get_top_level_decls.rs index 05c58d6..ba944cf 100644 --- a/rs-lib/src/analyze/get_top_level_decls.rs +++ b/rs-lib/src/analyze/get_top_level_decls.rs @@ -2,58 +2,66 @@ use std::collections::HashSet; -use deno_ast::swc::common::Spanned; use deno_ast::swc::common::SyntaxContext; use deno_ast::view::*; +use deno_ast::SourceRanged; pub fn get_top_level_decls( program: &Program, - top_level_context: SyntaxContext, + unresolved_context: SyntaxContext, ) -> HashSet { let mut results = HashSet::new(); - visit_children(program.into(), top_level_context, &mut results); + visit_children(program.into(), unresolved_context, &mut results); results } fn visit_children( node: Node, - top_level_context: SyntaxContext, + unresolved_context: SyntaxContext, results: &mut HashSet, ) { if let Node::Ident(ident) = node { - if ident.ctxt() == top_level_context && is_local_declaration_ident(node) { + if ident.ctxt() == unresolved_context && is_local_declaration_ident(node) { results.insert(ident.sym().to_string()); } } for child in node.children() { - visit_children(child, top_level_context, results); + visit_children(child, unresolved_context, results); } } fn is_local_declaration_ident(node: Node) -> bool { if let Some(parent) = node.parent() { match parent { - Node::BindingIdent(decl) => decl.id.span().contains(node.span()), - Node::ClassDecl(decl) => decl.ident.span().contains(node.span()), - Node::ClassExpr(decl) => decl.ident.span().contains(node.span()), - Node::TsInterfaceDecl(decl) => decl.id.span().contains(node.span()), - Node::FnDecl(decl) => decl.ident.span().contains(node.span()), - Node::FnExpr(decl) => decl.ident.span().contains(node.span()), - Node::TsModuleDecl(decl) => decl.id.span().contains(node.span()), - Node::TsNamespaceDecl(decl) => decl.id.span().contains(node.span()), - Node::VarDeclarator(decl) => decl.name.span().contains(node.span()), + Node::BindingIdent(decl) => decl.id.range().contains(&node.range()), + Node::ClassDecl(decl) => decl.ident.range().contains(&node.range()), + Node::ClassExpr(decl) => decl + .ident + .as_ref() + .map(|i| i.range().contains(&node.range())) + .unwrap_or(false), + Node::TsInterfaceDecl(decl) => decl.id.range().contains(&node.range()), + Node::FnDecl(decl) => decl.ident.range().contains(&node.range()), + Node::FnExpr(decl) => decl + .ident + .as_ref() + .map(|i| i.range().contains(&node.range())) + .unwrap_or(false), + Node::TsModuleDecl(decl) => decl.id.range().contains(&node.range()), + Node::TsNamespaceDecl(decl) => decl.id.range().contains(&node.range()), + Node::VarDeclarator(decl) => decl.name.range().contains(&node.range()), Node::ImportNamedSpecifier(decl) => { - decl.local.span().contains(node.span()) + decl.local.range().contains(&node.range()) } Node::ImportDefaultSpecifier(decl) => { - decl.local.span().contains(node.span()) + decl.local.range().contains(&node.range()) } - Node::ImportStarAsSpecifier(decl) => decl.span().contains(node.span()), - Node::KeyValuePatProp(decl) => decl.key.span().contains(node.span()), - Node::AssignPatProp(decl) => decl.key.span().contains(node.span()), + Node::ImportStarAsSpecifier(decl) => decl.range().contains(&node.range()), + Node::KeyValuePatProp(decl) => decl.key.range().contains(&node.range()), + Node::AssignPatProp(decl) => decl.key.range().contains(&node.range()), _ => false, } } else { diff --git a/rs-lib/src/analyze/helpers.rs b/rs-lib/src/analyze/helpers.rs index 392088b..2f2c2c5 100644 --- a/rs-lib/src/analyze/helpers.rs +++ b/rs-lib/src/analyze/helpers.rs @@ -1,7 +1,7 @@ // Copyright 2018-2022 the Deno authors. All rights reserved. MIT license. -use deno_ast::swc::common::Spanned; use deno_ast::view::*; +use deno_ast::SourceRanged; pub fn is_in_type(mut node: Node) -> bool { // todo: add unit tests and investigate if there's something in swc that does this? @@ -169,9 +169,11 @@ pub fn is_in_type(mut node: Node) -> bool { // may be a type Node::TsTypeAssertion(expr) => { - Some(expr.type_ann.span().contains(node.span())) + Some(expr.type_ann.range().contains(&node.range())) + } + Node::TsAsExpr(expr) => { + Some(expr.type_ann.range().contains(&node.range())) } - Node::TsAsExpr(expr) => Some(expr.type_ann.span().contains(node.span())), // still need more info Node::BigInt(_) diff --git a/rs-lib/src/lib.rs b/rs-lib/src/lib.rs index 477efb8..c0ea208 100644 --- a/rs-lib/src/lib.rs +++ b/rs-lib/src/lib.rs @@ -1,5 +1,8 @@ // Copyright 2018-2022 the Deno authors. All rights reserved. MIT license. +#![deny(clippy::disallowed_methods)] +#![deny(clippy::disallowed_types)] + use std::collections::BTreeMap; use std::collections::HashMap; use std::collections::HashSet; @@ -341,18 +344,18 @@ pub async fn transform(options: TransformOptions) -> Result { let text_changes = parsed_source .with_view(|program| -> Result> { - let top_level_context = parsed_source.top_level_context(); + let unresolved_context = parsed_source.unresolved_context(); let ignore_line_indexes = get_ignore_line_indexes(parsed_source.specifier(), &program); let top_level_decls = - get_top_level_decls(&program, top_level_context); + get_top_level_decls(&program, unresolved_context); warnings.extend(ignore_line_indexes.warnings); fill_polyfills(&mut FillPolyfillsParams { found_polyfills: &mut env_context.found_polyfills, searching_polyfills: &mut env_context.searching_polyfills, program: &program, - top_level_context: parsed_source.top_level_context(), + unresolved_context: parsed_source.unresolved_context(), top_level_decls: &top_level_decls, }); @@ -367,7 +370,7 @@ pub async fn transform(options: TransformOptions) -> Result { let result = get_global_text_changes(&GetGlobalTextChangesParams { program: &program, - top_level_context, + unresolved_context, shim_specifier: &shim_relative_specifier, shim_global_names: &env_context.shim_global_names, ignore_line_indexes: &ignore_line_indexes.line_indexes, @@ -401,7 +404,7 @@ pub async fn transform(options: TransformOptions) -> Result { })?; eprintln!("{:#?}", text_changes); - apply_text_changes(parsed_source.source().text_str(), text_changes) + apply_text_changes(parsed_source.text_info().text_str(), text_changes) } ModuleKind::Asserted => { if let Some(source) = &module.maybe_source { diff --git a/rs-lib/src/loader/mod.rs b/rs-lib/src/loader/mod.rs index 03b091e..c792787 100644 --- a/rs-lib/src/loader/mod.rs +++ b/rs-lib/src/loader/mod.rs @@ -114,7 +114,7 @@ impl<'a> deno_graph::source::Loader for SourceLoader<'a> { resp.map(|r| { r.map(|r| deno_graph::source::LoadResponse::Module { specifier: r.specifier, - content: Arc::new(r.content), + content: r.content.into(), maybe_headers: r.headers, }) }) @@ -133,7 +133,7 @@ fn get_dummy_module( Box::pin(future::ready(Ok(Some( deno_graph::source::LoadResponse::Module { specifier: specifier.clone(), - content: Arc::new(String::new()), + content: "".into(), maybe_headers: Some(headers), }, )))) diff --git a/rs-lib/src/parser.rs b/rs-lib/src/parser.rs index f2d6482..9bb9fb8 100644 --- a/rs-lib/src/parser.rs +++ b/rs-lib/src/parser.rs @@ -25,12 +25,12 @@ impl SourceParser for ScopeAnalysisParser { fn parse_module( &self, specifier: &ModuleSpecifier, - source: Arc, + source: Arc, media_type: MediaType, ) -> Result { parse_module(ParseParams { specifier: specifier.to_string(), - source: SourceTextInfo::new(source), + text_info: SourceTextInfo::new(source), media_type, capture_tokens: true, scope_analysis: true, diff --git a/rs-lib/src/polyfills/error_cause.rs b/rs-lib/src/polyfills/error_cause.rs index 43cb6fa..cd3f5f9 100644 --- a/rs-lib/src/polyfills/error_cause.rs +++ b/rs-lib/src/polyfills/error_cause.rs @@ -1,7 +1,7 @@ // Copyright 2018-2022 the Deno authors. All rights reserved. MIT license. use deno_ast::view::Node; -use deno_ast::view::SpannedExt; +use deno_ast::SourceRanged; use super::Polyfill; use super::PolyfillVisitContext; diff --git a/rs-lib/src/polyfills/mod.rs b/rs-lib/src/polyfills/mod.rs index 3a168e7..c3faec2 100644 --- a/rs-lib/src/polyfills/mod.rs +++ b/rs-lib/src/polyfills/mod.rs @@ -20,7 +20,7 @@ pub trait Polyfill { pub struct PolyfillVisitContext<'a> { pub program: &'a Program<'a>, - pub top_level_context: SyntaxContext, + pub unresolved_context: SyntaxContext, pub top_level_decls: &'a HashSet, } @@ -78,18 +78,18 @@ impl PolyfillTester { let parsed_source = parser .parse_module( &ModuleSpecifier::parse("file://test.ts").unwrap(), - std::sync::Arc::new(text.to_string()), + text.into(), MediaType::TypeScript, ) .unwrap(); parsed_source.with_view(|program| { let mut searching_polyfills = vec![(self.create_polyfill)()]; let mut found_polyfills = Vec::new(); - let top_level_context = parsed_source.top_level_context(); - let top_level_decls = get_top_level_decls(&program, top_level_context); + let unresolved_context = parsed_source.unresolved_context(); + let top_level_decls = get_top_level_decls(&program, unresolved_context); fill_polyfills(&mut FillPolyfillsParams { program: &program, - top_level_context, + unresolved_context, top_level_decls: &top_level_decls, searching_polyfills: &mut searching_polyfills, found_polyfills: &mut found_polyfills, diff --git a/rs-lib/src/polyfills/object_has_own.rs b/rs-lib/src/polyfills/object_has_own.rs index 98fdc58..56e208f 100644 --- a/rs-lib/src/polyfills/object_has_own.rs +++ b/rs-lib/src/polyfills/object_has_own.rs @@ -1,12 +1,11 @@ // Copyright 2018-2022 the Deno authors. All rights reserved. MIT license. -use deno_ast::swc::common::Spanned; use deno_ast::view::Expr; use deno_ast::view::Node; use deno_ast::view::ObjectPatProp; use deno_ast::view::Pat; use deno_ast::view::PropName; -use deno_ast::view::SpannedExt; +use deno_ast::SourceRanged; use super::Polyfill; use super::PolyfillVisitContext; @@ -23,10 +22,14 @@ impl Polyfill for ObjectHasOwnPolyfill { match node { // Object.hasOwn Node::MemberExpr(member_expr) => { - member_expr.obj.span().ctxt == context.top_level_context - && !context.top_level_decls.contains("Object") - && member_expr.obj.text_fast(context.program) == "Object" - && member_expr.prop.text_fast(context.program) == "hasOwn" + if let Expr::Ident(obj_ident) = &member_expr.obj { + obj_ident.ctxt() == context.unresolved_context + && !context.top_level_decls.contains("Object") + && obj_ident.text_fast(context.program) == "Object" + && member_expr.prop.text_fast(context.program) == "hasOwn" + } else { + false + } } // const { hasOwn } = Object; Node::VarDeclarator(decl) => { @@ -38,7 +41,7 @@ impl Polyfill for ObjectHasOwnPolyfill { Pat::Object(obj) => &obj.props, _ => return false, }; - init.span().ctxt == context.top_level_context + init.ctxt() == context.unresolved_context && !context.top_level_decls.contains("Object") && init.text_fast(context.program) == "Object" && props.iter().any(|prop| { diff --git a/rs-lib/src/polyfills/string_replace_all.rs b/rs-lib/src/polyfills/string_replace_all.rs index f9e4e18..c6dc52c 100644 --- a/rs-lib/src/polyfills/string_replace_all.rs +++ b/rs-lib/src/polyfills/string_replace_all.rs @@ -3,7 +3,7 @@ use deno_ast::view::Callee; use deno_ast::view::Expr; use deno_ast::view::Node; -use deno_ast::view::SpannedExt; +use deno_ast::SourceRanged; use super::Polyfill; use super::PolyfillVisitContext; diff --git a/rs-lib/src/utils.rs b/rs-lib/src/utils.rs index 9e24654..bc4d14b 100644 --- a/rs-lib/src/utils.rs +++ b/rs-lib/src/utils.rs @@ -10,10 +10,11 @@ use deno_ast::apply_text_changes; use deno_ast::parse_module; use deno_ast::view::NodeTrait; use deno_ast::view::Program; -use deno_ast::view::SpannedExt; use deno_ast::ModuleSpecifier; use deno_ast::ParseParams; +use deno_ast::SourceRangedForSpanned; use deno_ast::SourceTextInfo; +use deno_ast::SourceTextInfoProvider; use deno_ast::TextChange; pub const BOM_CHAR: char = '\u{FEFF}'; @@ -157,24 +158,24 @@ pub fn prepend_statement_to_text( ) { // It's not great to have to reparse the file for this. Perhaps there is a utility // function in swc or maybe add one to deno_ast for parsing out the leading comments - let source = SourceTextInfo::from_string(std::mem::take(file_text)); + let text_info = SourceTextInfo::from_string(std::mem::take(file_text)); let parsed_module = parse_module(ParseParams { specifier: file_path.to_string_lossy().to_string(), capture_tokens: true, maybe_syntax: None, media_type: file_path.into(), scope_analysis: false, - source: source.clone(), + text_info: text_info.clone(), }); match parsed_module { Ok(parsed_module) => parsed_module.with_view(|program| { let text_change = text_change_for_prepend_statement_to_text(&program, statement_text); - *file_text = apply_text_changes(source.text_str(), vec![text_change]); + *file_text = apply_text_changes(text_info.text_str(), vec![text_change]); }), Err(_) => { // should never happen... fallback... - *file_text = format!("{}\n{}", statement_text, source.text_str(),); + *file_text = format!("{}\n{}", statement_text, text_info.text_str(),); } } } @@ -201,7 +202,9 @@ fn top_file_insert_pos(program: &Program) -> usize { if comment.text_fast(program).to_lowercase().contains("@ts-") { break; } - pos = comment.hi().0 as usize; + pos = comment + .end() + .as_byte_index(program.text_info().range().start); } pos } diff --git a/rs-lib/src/visitors/deno_comment_directives.rs b/rs-lib/src/visitors/deno_comment_directives.rs index 7f888f3..13169a9 100644 --- a/rs-lib/src/visitors/deno_comment_directives.rs +++ b/rs-lib/src/visitors/deno_comment_directives.rs @@ -1,8 +1,11 @@ // Copyright 2018-2022 the Deno authors. All rights reserved. MIT license. use deno_ast::swc::common::comments::Comment; -use deno_ast::swc::common::Spanned; use deno_ast::view::*; +use deno_ast::RootNode; +use deno_ast::SourceRanged; +use deno_ast::SourceRangedForSpanned; +use deno_ast::SourceTextInfoProvider; use deno_ast::TextChange; use once_cell::sync::Lazy; use regex::Regex; @@ -46,7 +49,7 @@ pub fn get_deno_comment_directive_text_changes( } // strip all `@deno-types` comments - for comment in program.comment_container().unwrap().all_comments() { + for comment in program.comment_container().all_comments() { if DENO_TYPES_RE.is_match(&comment.text) { text_changes.push(TextChange { new_text: String::new(), @@ -62,10 +65,15 @@ fn get_extended_comment_range( program: &Program, comment: &Comment, ) -> std::ops::Range { - let file_text = program.source_file().unwrap().text(); - let span = comment.span(); - let end_pos = get_next_non_whitespace_pos(file_text, span.hi.0 as usize); - (span.lo.0 as usize)..end_pos + let text_info = program.text_info(); + let start_pos = text_info.range().start; + let file_text = text_info.text_str(); + let range = comment.range(); + let end_pos = get_next_non_whitespace_pos( + file_text, + range.end().as_byte_index(start_pos), + ); + range.start().as_byte_index(start_pos)..end_pos } fn get_next_non_whitespace_pos(text: &str, start_pos: usize) -> usize { diff --git a/rs-lib/src/visitors/globals.rs b/rs-lib/src/visitors/globals.rs index cb0695d..b44cb9e 100644 --- a/rs-lib/src/visitors/globals.rs +++ b/rs-lib/src/visitors/globals.rs @@ -2,10 +2,12 @@ use std::collections::HashSet; -use deno_ast::swc::common::Spanned; use deno_ast::swc::common::SyntaxContext; -use deno_ast::swc::utils::ident::IdentLike; use deno_ast::view::*; +use deno_ast::SourcePos; +use deno_ast::SourceRange; +use deno_ast::SourceRanged; +use deno_ast::SourceTextInfoProvider; use deno_ast::TextChange; use crate::analyze::is_in_type; @@ -13,7 +15,7 @@ use crate::utils::text_change_for_prepend_statement_to_text; pub struct GetGlobalTextChangesParams<'a> { pub program: &'a Program<'a>, - pub top_level_context: SyntaxContext, + pub unresolved_context: SyntaxContext, pub shim_specifier: &'a str, pub shim_global_names: &'a HashSet<&'a str>, pub ignore_line_indexes: &'a HashSet, @@ -27,7 +29,7 @@ pub struct GetGlobalTextChangesResult { struct Context<'a> { program: &'a Program<'a>, - top_level_context: SyntaxContext, + unresolved_context: SyntaxContext, top_level_decls: &'a HashSet, shim_global_names: &'a HashSet<&'a str>, import_shim: bool, @@ -40,7 +42,7 @@ pub fn get_global_text_changes( ) -> GetGlobalTextChangesResult { let mut context = Context { program: params.program, - top_level_context: params.top_level_context, + unresolved_context: params.unresolved_context, top_level_decls: params.top_level_decls, shim_global_names: params.shim_global_names, import_shim: false, @@ -81,10 +83,10 @@ fn visit_children(node: Node, import_name: &str, context: &mut Context) { if let Node::Ident(ident) = node { let id = ident.inner.to_id(); - let is_top_level_context = id.1 == context.top_level_context; + let is_unresolved_context = id.1 == context.unresolved_context; let ident_text = ident.text_fast(context.program); - if is_top_level_context { + if is_unresolved_context { // change `window` -> `globalThis` if ident_text == "window" { if !context.top_level_decls.contains("window") @@ -96,10 +98,10 @@ fn visit_children(node: Node, import_name: &str, context: &mut Context) { context.text_changes.push(text_change); context.import_shim = true; } else { - context.text_changes.push(TextChange::from_span_and_text( - ident.span(), - "globalThis".to_string(), - )); + context.text_changes.push(TextChange { + range: create_range(ident.start(), ident.end(), context), + new_text: "globalThis".to_string(), + }); } } return; @@ -122,10 +124,10 @@ fn visit_children(node: Node, import_name: &str, context: &mut Context) { && !context.top_level_decls.contains(name) && !should_ignore(ident.into(), context) { - context.text_changes.push(TextChange::from_span_and_text( - ident.span(), - format!("{}.{}", import_name, ident_text), - )); + context.text_changes.push(TextChange { + range: create_range(ident.start(), ident.end(), context), + new_text: format!("{}.{}", import_name, ident_text), + }); context.import_shim = true; return; } @@ -147,15 +149,15 @@ fn get_global_this_text_change( Node::TsQualifiedName(parent) => { let right_name = parent.right.text_fast(context.program); if context.shim_global_names.contains(&right_name) { - Some(TextChange::from_span_and_text( - parent.span(), - format!( + Some(TextChange { + range: create_range(parent.start(), parent.end(), context), + new_text: format!( "{}.{}", import_name, // doesn't seem exactly right... will wait for a bug to open parent.right.text_fast(context.program), ), - )) + }) } else { None } @@ -163,10 +165,10 @@ fn get_global_this_text_change( _ => None, } } else { - Some(TextChange::from_span_and_text( - ident.span(), - format!("{}.dntGlobalThis", import_name), - )) + Some(TextChange { + range: create_range(ident.start(), ident.end(), context), + new_text: format!("{}.dntGlobalThis", import_name), + }) } } @@ -180,7 +182,7 @@ fn should_ignore_global_this(ident: &Ident, context: &Context) -> bool { // don't inject the globals when it's a member expression // not like `globalThis.` if let Some(parent_member_expr) = ident.parent().to::() { - if parent_member_expr.obj.span().contains(ident.span()) { + if parent_member_expr.obj.range().contains(&ident.range()) { match parent_member_expr.prop { MemberProp::Ident(prop_ident) => { if !context @@ -212,29 +214,43 @@ fn should_ignore(node: Node, context: &Context) -> bool { fn has_ignore_comment(node: Node, context: &Context) -> bool { context .ignore_line_indexes - .contains(&node.span().start_line_fast(context.program)) + .contains(&node.start_line_fast(context.program)) } fn is_declaration_ident(node: Node) -> bool { if let Some(parent) = node.parent() { match parent { - Node::BindingIdent(decl) => decl.id.span().contains(node.span()), - Node::ClassDecl(decl) => decl.ident.span().contains(node.span()), - Node::ClassExpr(decl) => decl.ident.span().contains(node.span()), - Node::TsInterfaceDecl(decl) => decl.id.span().contains(node.span()), - Node::FnDecl(decl) => decl.ident.span().contains(node.span()), - Node::FnExpr(decl) => decl.ident.span().contains(node.span()), - Node::TsModuleDecl(decl) => decl.id.span().contains(node.span()), - Node::TsNamespaceDecl(decl) => decl.id.span().contains(node.span()), - Node::VarDeclarator(decl) => decl.name.span().contains(node.span()), - Node::ImportNamedSpecifier(decl) => decl.span().contains(node.span()), - Node::ExportNamedSpecifier(decl) => decl.span().contains(node.span()), - Node::ImportDefaultSpecifier(decl) => decl.span().contains(node.span()), - Node::ExportDefaultSpecifier(decl) => decl.span().contains(node.span()), - Node::ImportStarAsSpecifier(decl) => decl.span().contains(node.span()), - Node::ExportNamespaceSpecifier(decl) => decl.span().contains(node.span()), - Node::KeyValuePatProp(decl) => decl.key.span().contains(node.span()), - Node::AssignPatProp(decl) => decl.key.span().contains(node.span()), + Node::BindingIdent(decl) => decl.id.range().contains(&node.range()), + Node::ClassDecl(decl) => decl.ident.range().contains(&node.range()), + Node::ClassExpr(decl) => decl + .ident + .as_ref() + .map(|i| i.range().contains(&node.range())) + .unwrap_or(false), + Node::TsInterfaceDecl(decl) => decl.id.range().contains(&node.range()), + Node::FnDecl(decl) => decl.ident.range().contains(&node.range()), + Node::FnExpr(decl) => decl + .ident + .as_ref() + .map(|i| i.range().contains(&node.range())) + .unwrap_or(false), + Node::TsModuleDecl(decl) => decl.id.range().contains(&node.range()), + Node::TsNamespaceDecl(decl) => decl.id.range().contains(&node.range()), + Node::VarDeclarator(decl) => decl.name.range().contains(&node.range()), + Node::ImportNamedSpecifier(decl) => decl.range().contains(&node.range()), + Node::ExportNamedSpecifier(decl) => decl.range().contains(&node.range()), + Node::ImportDefaultSpecifier(decl) => { + decl.range().contains(&node.range()) + } + Node::ExportDefaultSpecifier(decl) => { + decl.range().contains(&node.range()) + } + Node::ImportStarAsSpecifier(decl) => decl.range().contains(&node.range()), + Node::ExportNamespaceSpecifier(decl) => { + decl.range().contains(&node.range()) + } + Node::KeyValuePatProp(decl) => decl.key.range().contains(&node.range()), + Node::AssignPatProp(decl) => decl.key.range().contains(&node.range()), _ => false, } } else { @@ -267,3 +283,12 @@ fn get_unique_name(name: &str, all_idents: &HashSet) -> String { } new_name } + +fn create_range( + start: SourcePos, + end: SourcePos, + context: &Context, +) -> std::ops::Range { + SourceRange::new(start, end) + .as_byte_range(context.program.text_info().range().start) +} diff --git a/rs-lib/src/visitors/imports_exports.rs b/rs-lib/src/visitors/imports_exports.rs index 0bbe7c6..6059904 100644 --- a/rs-lib/src/visitors/imports_exports.rs +++ b/rs-lib/src/visitors/imports_exports.rs @@ -4,9 +4,13 @@ use std::collections::HashMap; use std::path::PathBuf; use anyhow::Result; -use deno_ast::swc::common::Spanned; use deno_ast::view::*; use deno_ast::ModuleSpecifier; +use deno_ast::SourcePos; +use deno_ast::SourceRange; +use deno_ast::SourceRanged; +use deno_ast::SourceRangedForSpanned; +use deno_ast::SourceTextInfoProvider; use deno_ast::TextChange; use crate::graph::ModuleGraph; @@ -83,8 +87,11 @@ fn visit_children(node: Node, context: &mut Context) -> Result<()> { let comma_token = assert_arg.previous_token_fast(context.program).unwrap(); context.text_changes.push(TextChange { - range: (comma_token.span().lo.0 as usize) - ..(assert_arg.span().hi.0 as usize), + range: create_range( + comma_token.start(), + assert_arg.end(), + context, + ), new_text: String::new(), }); } @@ -122,7 +129,7 @@ fn visit_module_specifier(str: &Str, context: &mut Context) { }; context.text_changes.push(TextChange { - range: (str.span().lo.0 as usize + 1)..(str.span().hi.0 as usize - 1), + range: create_range(str.start() + 1, str.end() - 1, context), new_text, }); } @@ -133,8 +140,16 @@ fn visit_asserts(asserts: &ObjectLit, context: &mut Context) { let previous_token = assert_token.previous_token_fast(context.program).unwrap(); context.text_changes.push(TextChange { - range: (previous_token.span().hi.0 as usize) - ..(asserts.span().hi.0 as usize), + range: create_range(previous_token.end(), asserts.end(), context), new_text: String::new(), }); } + +fn create_range( + start: SourcePos, + end: SourcePos, + context: &Context, +) -> std::ops::Range { + SourceRange::new(start, end) + .as_byte_range(context.program.text_info().range().start) +} diff --git a/rs-lib/src/visitors/polyfill.rs b/rs-lib/src/visitors/polyfill.rs index 0bf5b6b..e756d78 100644 --- a/rs-lib/src/visitors/polyfill.rs +++ b/rs-lib/src/visitors/polyfill.rs @@ -10,7 +10,7 @@ use crate::polyfills::PolyfillVisitContext; pub struct FillPolyfillsParams<'a> { pub program: &'a Program<'a>, - pub top_level_context: SyntaxContext, + pub unresolved_context: SyntaxContext, pub top_level_decls: &'a HashSet, pub searching_polyfills: &'a mut Vec>, pub found_polyfills: &'a mut Vec>, @@ -26,7 +26,7 @@ pub fn fill_polyfills(params: &mut FillPolyfillsParams<'_>) { let mut context = Context { visit_context: PolyfillVisitContext { program: params.program, - top_level_context: params.top_level_context, + unresolved_context: params.unresolved_context, top_level_decls: params.top_level_decls, }, searching_polyfills: params.searching_polyfills, diff --git a/rust-toolchain.toml b/rust-toolchain.toml index 7930d28..47fd09e 100644 --- a/rust-toolchain.toml +++ b/rust-toolchain.toml @@ -1,3 +1,3 @@ [toolchain] -channel = "1.59.0" +channel = "1.60.0" components = ["clippy", "rustfmt"]