diff --git a/.dprint.json b/.dprint.json index a0f502b943..1f1ff51e86 100644 --- a/.dprint.json +++ b/.dprint.json @@ -36,9 +36,9 @@ "tools/wpt/manifest.json" ], "plugins": [ - "https://plugins.dprint.dev/typescript-0.50.0.wasm", - "https://plugins.dprint.dev/json-0.12.1.wasm", - "https://plugins.dprint.dev/markdown-0.9.2.wasm", - "https://plugins.dprint.dev/toml-0.4.1.wasm" + "https://plugins.dprint.dev/typescript-0.53.0.wasm", + "https://plugins.dprint.dev/json-0.12.3.wasm", + "https://plugins.dprint.dev/markdown-0.9.6.wasm", + "https://plugins.dprint.dev/toml-0.5.1.wasm" ] } diff --git a/Cargo.lock b/Cargo.lock index 5623d11c5a..09b654c2d5 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -76,9 +76,9 @@ dependencies = [ [[package]] name = "anyhow" -version = "1.0.41" +version = "1.0.43" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "15af2628f6890fe2609a3b91bef4c83450512802e59489f9c1cb1fa5df064a61" +checksum = "28ae2b3dec75a406790005a200b1bd89785afc02517a00ca99ecfe093ee9e6cf" [[package]] name = "arrayvec" @@ -563,6 +563,7 @@ dependencies = [ "deno_doc", "deno_fetch", "deno_ffi", + "deno_graph", "deno_http", "deno_lint", "deno_net", @@ -713,10 +714,12 @@ dependencies = [ [[package]] name = "deno_doc" -version = "0.10.0" +version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81a543b39492532835f00b94758cf2b731b50c5168e8059608246aaf8e02c229" +checksum = "23c860b2359120f1565aafd4e9e5eddf7fcbdb70dc55a97719c00d327570ffce" dependencies = [ + "cfg-if 1.0.0", + "deno_graph", "futures", "lazy_static", "regex", @@ -755,6 +758,28 @@ dependencies = [ "serde", ] +[[package]] +name = "deno_graph" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec6c70108e13d63f6fa51975f0557d5c0fec80a247c3e51f2a215ef6614b53dc" +dependencies = [ + "anyhow", + "cfg-if 1.0.0", + "data-url", + "futures", + "lazy_static", + "regex", + "ring", + "serde", + "serde_json", + "swc_common", + "swc_ecmascript", + "termcolor", + "text_lines", + "url", +] + [[package]] name = "deno_http" version = "0.7.0" @@ -772,9 +797,9 @@ dependencies = [ [[package]] name = "deno_lint" -version = "0.12.0" +version = "0.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad9f741b34ff43cdf67f3c43d5b7824a4b6c330d1cfb644b1420d3ca68a1787d" +checksum = "c0cbb4f64c7884703198d8fb0f67a900e4dfbc456efaabebc419a4d3612da064" dependencies = [ "anyhow", "derive_more", @@ -1031,9 +1056,9 @@ dependencies = [ [[package]] name = "dprint-plugin-markdown" -version = "0.9.4" +version = "0.9.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "855bd2378afc656736bc05dddedfda2dce22d2485553c9abaa005e2a1bce028a" +checksum = "fdd7aeda8d9feccc49f178bf246fff6746afee584870c49ee4c4bd890cfb5da8" dependencies = [ "dprint-core", "pulldown-cmark", @@ -1043,9 +1068,9 @@ dependencies = [ [[package]] name = "dprint-plugin-typescript" -version = "0.50.2" +version = "0.53.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "99e1bd07c904835664ed50d0c04ecd5a4f2259a156e3cd2ae5ceeab02e0c9257" +checksum = "63674b5e577e3244436463aa8ab59947aba0a3d5b4de6d181c6bd7a3e190b336" dependencies = [ "dprint-core", "dprint-swc-ecma-ast-view", @@ -1057,9 +1082,9 @@ dependencies = [ [[package]] name = "dprint-swc-ecma-ast-view" -version = "0.25.0" +version = "0.33.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "31911862aff0e98a1864984450f842b108aa0f4e95aa314539605b093774d329" +checksum = "c44a27f32f2bc9347d08e4b8f47db055f4df9b8d9e1236cc2036a9e95707ba7b" dependencies = [ "bumpalo", "fnv", @@ -1067,6 +1092,7 @@ dependencies = [ "swc_atoms", "swc_common", "swc_ecmascript", + "text_lines", ] [[package]] @@ -1327,9 +1353,9 @@ dependencies = [ [[package]] name = "futures" -version = "0.3.15" +version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e7e43a803dae2fa37c1f6a8fe121e1f7bf9548b4dfc0522a42f34145dadfc27" +checksum = "a12aa0eb539080d55c3f2d45a67c3b58b6b0773c1a3ca2dfec66d58c97fd66ca" dependencies = [ "futures-channel", "futures-core", @@ -1342,9 +1368,9 @@ dependencies = [ [[package]] name = "futures-channel" -version = "0.3.15" +version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e682a68b29a882df0545c143dc3646daefe80ba479bcdede94d5a703de2871e2" +checksum = "5da6ba8c3bb3c165d3c7319fc1cc8304facf1fb8db99c5de877183c08a273888" dependencies = [ "futures-core", "futures-sink", @@ -1352,15 +1378,15 @@ dependencies = [ [[package]] name = "futures-core" -version = "0.3.15" +version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0402f765d8a89a26043b889b26ce3c4679d268fa6bb22cd7c6aad98340e179d1" +checksum = "88d1c26957f23603395cd326b0ffe64124b818f4449552f960d815cfba83a53d" [[package]] name = "futures-executor" -version = "0.3.15" +version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "badaa6a909fac9e7236d0620a2f57f7664640c56575b71a7552fbd68deafab79" +checksum = "45025be030969d763025784f7f355043dc6bc74093e4ecc5000ca4dc50d8745c" dependencies = [ "futures-core", "futures-task", @@ -1369,15 +1395,15 @@ dependencies = [ [[package]] name = "futures-io" -version = "0.3.15" +version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "acc499defb3b348f8d8f3f66415835a9131856ff7714bf10dadfc4ec4bdb29a1" +checksum = "522de2a0fe3e380f1bc577ba0474108faf3f6b18321dbf60b3b9c39a75073377" [[package]] name = "futures-macro" -version = "0.3.15" +version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4c40298486cdf52cc00cd6d6987892ba502c7656a16a4192a9992b1ccedd121" +checksum = "18e4a4b95cea4b4ccbcf1c5675ca7c4ee4e9e75eb79944d07defde18068f79bb" dependencies = [ "autocfg 1.0.1", "proc-macro-hack", @@ -1388,21 +1414,21 @@ dependencies = [ [[package]] name = "futures-sink" -version = "0.3.15" +version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a57bead0ceff0d6dde8f465ecd96c9338121bb7717d3e7b108059531870c4282" +checksum = "36ea153c13024fe480590b3e3d4cad89a0cfacecc24577b68f86c6ced9c2bc11" [[package]] name = "futures-task" -version = "0.3.15" +version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a16bef9fc1a4dddb5bee51c989e3fbba26569cbb0e31f5b303c184e3dd33dae" +checksum = "1d3d00f4eddb73e498a54394f228cd55853bdf059259e8e7bc6e69d408892e99" [[package]] name = "futures-util" -version = "0.3.15" +version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "feb5c238d27e2bf94ffdfd27b2c29e3df4a68c4193bb6427384259e2bf191967" +checksum = "36568465210a3a6ee45e1f165136d68671471a501e632e9a98d96872222b5481" dependencies = [ "autocfg 1.0.1", "futures-channel", @@ -2681,14 +2707,13 @@ dependencies = [ [[package]] name = "regex" -version = "1.4.3" +version = "1.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9251239e129e16308e70d853559389de218ac275b515068abc96829d05b948a" +checksum = "d07a8629359eb56f1e2fb1652bb04212c072a87ba68546a04065d525673ac461" dependencies = [ "aho-corasick", "memchr", "regex-syntax", - "thread_local", ] [[package]] @@ -3046,9 +3071,9 @@ dependencies = [ [[package]] name = "serde_json" -version = "1.0.64" +version = "1.0.67" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "799e97dc9fdae36a5c8b8f2cae9ce2ee9fdce2058c57a93e6099d919fd982f79" +checksum = "a7f9e390c27c3c0ce8bc5d725f6e4d30a29d26659494aa4b17535f7522c5c950" dependencies = [ "indexmap", "itoa", @@ -3295,9 +3320,9 @@ checksum = "1e81da0851ada1f3e9d4312c704aa4f8806f0f9d69faaf8df2f3464b4a9437c2" [[package]] name = "swc_atoms" -version = "0.2.6" +version = "0.2.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7bcdb70cb6ecee568e5acfda1a8c6e851ecf49443e5fb51f1b13613b5d04d2b0" +checksum = "837a3ef86c2817228e733b6f173c821fd76f9eb21a0bc9001a826be48b00b4e7" dependencies = [ "string_cache", "string_cache_codegen", @@ -3305,9 +3330,9 @@ dependencies = [ [[package]] name = "swc_bundler" -version = "0.50.0" +version = "0.56.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "543c7f91128363277dfbfbe0ac574e654b3671717f56f7ba360f1994e020a495" +checksum = "1e00938122669f1358a570dad80626ac9007053967aa3e4066440c7946609784" dependencies = [ "ahash 0.7.4", "anyhow", @@ -3334,10 +3359,11 @@ dependencies = [ [[package]] name = "swc_common" -version = "0.11.4" +version = "0.11.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f303985ebd578a033371a87be28cb54189d3ae5d492622523200f4de08db5275" +checksum = "0a873d7284ebc53a9051f41068dc2cb979e399a4a1fab25d9c0dee9f8db4d1f5" dependencies = [ + "ahash 0.7.4", "ast_node", "cfg-if 0.1.10", "either", @@ -3358,9 +3384,9 @@ dependencies = [ [[package]] name = "swc_ecma_ast" -version = "0.49.0" +version = "0.51.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "033da686d95b9663e6732c4021e002bc23173bef251db87857e1c3c8bfbfe8cb" +checksum = "0541aee098b52870ef6181deae2fbe3f3025605f2e6f27b3993e6f66607a46a1" dependencies = [ "is-macro", "num-bigint", @@ -3372,9 +3398,9 @@ dependencies = [ [[package]] name = "swc_ecma_codegen" -version = "0.66.2" +version = "0.69.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9bfa163c10ef74904d3bf45090314173d7cee261efd4d8095c08a0d4f320d1bb" +checksum = "58e7b482064bc6386168de843b85fddb6b70fc2cd86323962821642a253fa427" dependencies = [ "bitflags", "num-bigint", @@ -3401,9 +3427,9 @@ dependencies = [ [[package]] name = "swc_ecma_dep_graph" -version = "0.34.0" +version = "0.38.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46e294566d33d6b32b9f1988116b67d06f85c1d3163b68163a4cd9f9abfa0b6e" +checksum = "630fe1a1464a64c64cdc9ca8c0d0a8358c66e1ca79cb8acf577e429dff56a104" dependencies = [ "swc_atoms", "swc_common", @@ -3413,11 +3439,13 @@ dependencies = [ [[package]] name = "swc_ecma_loader" -version = "0.12.0" +version = "0.17.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b05e3b054b690e610384fc8f5d244182cbd62691423755ca1c4b05cb0bfa6b46" +checksum = "2e9796ff40909d124ac382bf89fd94bb3a108e1f6a5c7786e3dd54b9fb579dff" dependencies = [ "anyhow", + "fxhash", + "log", "swc_atoms", "swc_common", "swc_ecma_ast", @@ -3426,9 +3454,9 @@ dependencies = [ [[package]] name = "swc_ecma_parser" -version = "0.66.2" +version = "0.69.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3503941645d04d125e193d9b065f8e67fa63e394ab93e4f2cf2b6c257968a3b9" +checksum = "c7eb1f1c556118750c7871bef5c9f37cd9cac9f5d6479b922aa026cebf1fac18" dependencies = [ "either", "enum_kind", @@ -3447,9 +3475,9 @@ dependencies = [ [[package]] name = "swc_ecma_transforms" -version = "0.63.0" +version = "0.69.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f53f948b9fb8a315b1e0d5f121b8c88786feb11b7f01f8406c16301e0ad2227" +checksum = "9214e4c1349c7cbdaa364fb9f67c4db3b028425be605e05fb7c387af1e788113" dependencies = [ "swc_atoms", "swc_common", @@ -3467,9 +3495,9 @@ dependencies = [ [[package]] name = "swc_ecma_transforms_base" -version = "0.26.1" +version = "0.30.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4fe8f8f8e09b125d1d747c7693f757205e818d3e2179dc0f31ebaacd0cbcc3a" +checksum = "3b0aa724a347be8c2a14e3debdec192531a865388595114d7685f123e9780731" dependencies = [ "fxhash", "once_cell", @@ -3486,9 +3514,9 @@ dependencies = [ [[package]] name = "swc_ecma_transforms_classes" -version = "0.12.1" +version = "0.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c9ee5e9cf60a8d1ee222774b0dc10a7aea54898394813133f149ba9e29e46f58" +checksum = "5f55f90a828f89127ebf063e60b3ad97c3e6c339999e9304e350f72cd3187e5c" dependencies = [ "swc_atoms", "swc_common", @@ -3500,9 +3528,9 @@ dependencies = [ [[package]] name = "swc_ecma_transforms_optimization" -version = "0.33.0" +version = "0.39.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "47dc701cc94f8b4b8d2b4b79b91457b91b565edffe67e2a497adcb3f48b716fe" +checksum = "c28f88330eed13b1e58522ae42acd09d516ed65d3bf80b64d0bc794ffc4627b5" dependencies = [ "dashmap", "fxhash", @@ -3522,9 +3550,9 @@ dependencies = [ [[package]] name = "swc_ecma_transforms_proposal" -version = "0.30.0" +version = "0.36.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd2ce24868d4a97bcd6f38ab7e96798c16a1efa821564e32d07d137e3d904fc7" +checksum = "8f926eb4c5e1526f52da2b56d66649d64a0f77da417c30d144789fa7eb741007" dependencies = [ "either", "fxhash", @@ -3542,9 +3570,9 @@ dependencies = [ [[package]] name = "swc_ecma_transforms_react" -version = "0.31.1" +version = "0.37.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7174a06bfb2f507eb35dbb919679e3df73fc41f152261cbf191f1afe5e14823" +checksum = "2ce5289df2c034b45edf839cc3a356dcd035102f5e591b1eb5c37204e3007006" dependencies = [ "base64 0.13.0", "dashmap", @@ -3565,9 +3593,9 @@ dependencies = [ [[package]] name = "swc_ecma_transforms_typescript" -version = "0.32.0" +version = "0.38.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a6fe1a79c928e9844f199365746b482accb6ca7a25a9d0d8b6b1bf3277a357ec" +checksum = "86c22e8077c8fa6225d5d2ab4fcef223d155c1fa30304c06aaf0e6b6934396f3" dependencies = [ "fxhash", "serde", @@ -3582,9 +3610,9 @@ dependencies = [ [[package]] name = "swc_ecma_utils" -version = "0.41.0" +version = "0.43.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "725fb37b8f7ac49b9edd7001dba006f0aa9b9a85623337994ab89b0f2b12032b" +checksum = "7755b2d35e93fc371186335d0cc65b1cc647c113b60e1a44ab8f679bf09521d6" dependencies = [ "once_cell", "scoped-tls", @@ -3597,9 +3625,9 @@ dependencies = [ [[package]] name = "swc_ecma_visit" -version = "0.35.0" +version = "0.37.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b06818a3a50e6de46a81d3d9f51a46d08624ff0f9eb2b3f30de717b15133858d" +checksum = "253528a42ad8a646ff7904e3770464f014331f7647467166a8ad92725910d85c" dependencies = [ "num-bigint", "swc_atoms", @@ -3610,9 +3638,9 @@ dependencies = [ [[package]] name = "swc_ecmascript" -version = "0.52.1" +version = "0.60.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "12c0f3969671267e85a7a387e2db40d01c0e7e6e979d7fd27bdeef501a2f6d14" +checksum = "2cb79d3e236ce0118e370f75a37a85ccc527338cf8d4697a7d23419711a6169f" dependencies = [ "swc_ecma_ast", "swc_ecma_codegen", @@ -3772,6 +3800,12 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "288cb548dbe72b652243ea797201f3d481a0609a967980fcc5b2315ea811560a" +[[package]] +name = "text_lines" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "116279ecd8fa26fbdcf20c79ee6f85a5ce325a953486e11e71c51670bdaa308f" + [[package]] name = "textwrap" version = "0.11.0" @@ -3801,15 +3835,6 @@ dependencies = [ "syn 1.0.65", ] -[[package]] -name = "thread_local" -version = "1.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8018d24e04c95ac8790716a5987d0fec4f8b27249ffa0f7d33f1369bdfb88cbd" -dependencies = [ - "once_cell", -] - [[package]] name = "time" version = "0.1.44" diff --git a/cli/Cargo.toml b/cli/Cargo.toml index 3a7596b232..63b13c3251 100644 --- a/cli/Cargo.toml +++ b/cli/Cargo.toml @@ -44,8 +44,9 @@ winres = "0.1.11" [dependencies] deno_core = { version = "0.98.0", path = "../core" } -deno_doc = "0.10.0" -deno_lint = "0.12.0" +deno_doc = "0.12.1" +deno_graph = "0.3.1" +deno_lint = { version = "0.14.0", features = ["docs"] } deno_runtime = { version = "0.24.0", path = "../runtime" } deno_tls = { version = "0.3.0", path = "../ext/tls" } @@ -56,8 +57,8 @@ clap = "2.33.3" data-url = "0.1.0" dissimilar = "1.0.2" dprint-plugin-json = "0.12.3" -dprint-plugin-markdown = "0.9.4" -dprint-plugin-typescript = "0.50.2" +dprint-plugin-markdown = "0.9.6" +dprint-plugin-typescript = "0.53.0" encoding_rs = "0.8.28" env_logger = "0.8.4" fancy-regex = "0.5.0" @@ -83,9 +84,9 @@ semver-parser = "0.10.2" serde = { version = "1.0.126", features = ["derive"] } shell-escape = "0.1.5" sourcemap = "6.0.1" -swc_bundler = "0.50.0" -swc_common = { version = "0.11.4", features = ["sourcemap"] } -swc_ecmascript = { version = "0.52.1", features = ["codegen", "dep_graph", "parser", "proposal", "react", "transforms", "typescript", "visit"] } +swc_bundler = "0.56.0" +swc_common = { version = "0.11.9", features = ["sourcemap"] } +swc_ecmascript = { version = "0.60.0", features = ["codegen", "dep_graph", "parser", "proposal", "react", "transforms", "typescript", "visit"] } tempfile = "3.2.0" termcolor = "1.1.2" text-size = "1.1.0" diff --git a/cli/file_fetcher.rs b/cli/file_fetcher.rs index a1729825f1..17bbb76f0a 100644 --- a/cli/file_fetcher.rs +++ b/cli/file_fetcher.rs @@ -56,6 +56,8 @@ pub struct File { /// The _final_ specifier for the file. The requested specifier and the final /// specifier maybe different for remote files that have been redirected. pub specifier: ModuleSpecifier, + + pub maybe_headers: Option>, } /// Simple struct implementing in-process caching to prevent multiple @@ -137,6 +139,7 @@ fn fetch_local(specifier: &ModuleSpecifier) -> Result { media_type, source, specifier: specifier.clone(), + maybe_headers: None, }) } @@ -274,6 +277,7 @@ impl FileFetcher { media_type, source, specifier: specifier.clone(), + maybe_headers: Some(headers.clone()), }) } @@ -365,6 +369,7 @@ impl FileFetcher { media_type, source, specifier: specifier.clone(), + maybe_headers: None, }) } @@ -426,6 +431,7 @@ impl FileFetcher { media_type, source, specifier: specifier.clone(), + maybe_headers: None, }) } /// Asynchronously fetch remote source file specified by the URL following @@ -894,6 +900,7 @@ mod tests { media_type: MediaType::TypeScript, source: "some source code".to_string(), specifier: specifier.clone(), + maybe_headers: None, }; file_fetcher.insert_cached(file.clone()); diff --git a/cli/lsp/analysis.rs b/cli/lsp/analysis.rs index 17fdf5d4c1..4c5f1fea7e 100644 --- a/cli/lsp/analysis.rs +++ b/cli/lsp/analysis.rs @@ -120,12 +120,12 @@ impl Reference { fn as_lsp_range(range: &deno_lint::diagnostic::Range) -> Range { Range { start: Position { - line: (range.start.line - 1) as u32, - character: range.start.col as u32, + line: range.start.line_index as u32, + character: range.start.column_index as u32, }, end: Position { - line: (range.end.line - 1) as u32, - character: range.end.col as u32, + line: range.end.line_index as u32, + character: range.end.column_index as u32, }, } } @@ -1172,13 +1172,13 @@ mod tests { fn test_as_lsp_range() { let fixture = deno_lint::diagnostic::Range { start: deno_lint::diagnostic::Position { - line: 1, - col: 2, + line_index: 0, + column_index: 2, byte_pos: 23, }, end: deno_lint::diagnostic::Position { - line: 2, - col: 0, + line_index: 1, + column_index: 0, byte_pos: 33, }, }; diff --git a/cli/main.rs b/cli/main.rs index beb54cd233..b68539ad82 100644 --- a/cli/main.rs +++ b/cli/main.rs @@ -566,6 +566,7 @@ async fn eval_command( }, source: String::from_utf8(source_code)?, specifier: main_module.clone(), + maybe_headers: None, }; // Save our fake file into file fetcher cache @@ -815,6 +816,7 @@ async fn run_from_stdin(flags: Flags) -> Result<(), AnyError> { media_type: MediaType::TypeScript, source: String::from_utf8(source)?, specifier: main_module.clone(), + maybe_headers: None, }; // Save our fake file into file fetcher cache // to allow module access by TS compiler diff --git a/cli/tests/testdata/060_deno_doc_displays_all_overloads_in_details_view.ts.out b/cli/tests/testdata/060_deno_doc_displays_all_overloads_in_details_view.ts.out index f1a5077d8d..ac30268268 100644 --- a/cli/tests/testdata/060_deno_doc_displays_all_overloads_in_details_view.ts.out +++ b/cli/tests/testdata/060_deno_doc_displays_all_overloads_in_details_view.ts.out @@ -1,12 +1,12 @@ -Defined in [WILDCARD]/060_deno_doc_displays_all_overloads_in_details_view.ts:3:2 +Defined in [WILDCARD]/060_deno_doc_displays_all_overloads_in_details_view.ts:3:2 function test(name: string, fn: Function): void -Defined in [WILDCARD]/060_deno_doc_displays_all_overloads_in_details_view.ts:4:2 +Defined in [WILDCARD]/060_deno_doc_displays_all_overloads_in_details_view.ts:4:2 function test(options: object): void -Defined in [WILDCARD]/060_deno_doc_displays_all_overloads_in_details_view.ts:5:2 +Defined in [WILDCARD]/060_deno_doc_displays_all_overloads_in_details_view.ts:5:2 function test(name: string | object, fn?: Function): void diff --git a/cli/tests/testdata/bundle/fixture11.out b/cli/tests/testdata/bundle/fixture11.out index d143e8723b..4f333a513f 100644 --- a/cli/tests/testdata/bundle/fixture11.out +++ b/cli/tests/testdata/bundle/fixture11.out @@ -2,10 +2,10 @@ function a() { console.log("a"); } var O1; -(function(O1) { - O1[O1["A"] = 0] = "A"; - O1[O1["B"] = 1] = "B"; - O1[O1["C"] = 2] = "C"; +(function(O) { + O[O["A"] = 0] = "A"; + O[O["B"] = 1] = "B"; + O[O["C"] = 2] = "C"; })(O1 || (O1 = { })); export { O1 as O }; diff --git a/cli/tests/testdata/doc/types_header.out b/cli/tests/testdata/doc/types_header.out index ccff1a373d..c7eda2d873 100644 --- a/cli/tests/testdata/doc/types_header.out +++ b/cli/tests/testdata/doc/types_header.out @@ -1,6 +1,6 @@ Download http://127.0.0.1:4545/xTypeScriptTypes.js Download http://127.0.0.1:4545/xTypeScriptTypes.d.ts -Defined in http://127.0.0.1:4545/xTypeScriptTypes.d.ts:1:0 +Defined in http://127.0.0.1:4545/xTypeScriptTypes.d.ts:1:0 const foo: "foo" diff --git a/cli/tests/testdata/doc/types_hint.out b/cli/tests/testdata/doc/types_hint.out index 7eb05faed8..dd975360a5 100644 --- a/cli/tests/testdata/doc/types_hint.out +++ b/cli/tests/testdata/doc/types_hint.out @@ -1,4 +1,4 @@ -Defined in [WILDCARD]/type_definitions/foo.d.ts:2:0 +Defined in [WILDCARD]/type_definitions/foo.d.ts:2:0 const foo: string An exported value. diff --git a/cli/tests/testdata/doc/types_ref.out b/cli/tests/testdata/doc/types_ref.out index 7eb05faed8..dd975360a5 100644 --- a/cli/tests/testdata/doc/types_ref.out +++ b/cli/tests/testdata/doc/types_ref.out @@ -1,4 +1,4 @@ -Defined in [WILDCARD]/type_definitions/foo.d.ts:2:0 +Defined in [WILDCARD]/type_definitions/foo.d.ts:2:0 const foo: string An exported value. diff --git a/cli/tests/testdata/doc/use_import_map.out b/cli/tests/testdata/doc/use_import_map.out index 0b27ccf186..82de4dbb00 100644 --- a/cli/tests/testdata/doc/use_import_map.out +++ b/cli/tests/testdata/doc/use_import_map.out @@ -1,4 +1,4 @@ -Defined in [WILDCARD]/doc/module/fun.js:2:0 +Defined in [WILDCARD]/doc/module/fun.js:2:0 function fun(_a, _b) This is some documentation diff --git a/cli/tests/testdata/lint/expected_json.out b/cli/tests/testdata/lint/expected_json.out index dbeb8039b7..9af79ce3d3 100644 --- a/cli/tests/testdata/lint/expected_json.out +++ b/cli/tests/testdata/lint/expected_json.out @@ -58,7 +58,7 @@ "errors": [ { "file_path": "[WILDCARD]malformed.js", - "message": "Expected }, got at [WILDCARD]malformed.js:4:15" + "message": "Expected }, got at [WILDCARD]malformed.js:4:16" } ] } diff --git a/cli/tests/unit/event_target_test.ts b/cli/tests/unit/event_target_test.ts index 0d0d891544..a6c942773e 100644 --- a/cli/tests/unit/event_target_test.ts +++ b/cli/tests/unit/event_target_test.ts @@ -1,4 +1,5 @@ // Copyright 2018-2021 the Deno authors. All rights reserved. MIT license. +// deno-lint-ignore-file no-window-prefix import { assertEquals, unitTest } from "./test_util.ts"; unitTest(function addEventListenerTest() { diff --git a/cli/tests/unit/globals_test.ts b/cli/tests/unit/globals_test.ts index 0051dce490..d989ab54a9 100644 --- a/cli/tests/unit/globals_test.ts +++ b/cli/tests/unit/globals_test.ts @@ -1,4 +1,5 @@ // Copyright 2018-2021 the Deno authors. All rights reserved. MIT license. +// deno-lint-ignore-file no-window-prefix import { assert, unitTest } from "./test_util.ts"; unitTest(function globalThisExists() { diff --git a/cli/tools/doc.rs b/cli/tools/doc.rs index ab9ea127e6..339e046c32 100644 --- a/cli/tools/doc.rs +++ b/cli/tools/doc.rs @@ -5,75 +5,89 @@ use crate::colors; use crate::file_fetcher::File; use crate::flags::Flags; use crate::get_types; +use crate::import_map::ImportMap; use crate::media_type::MediaType; -use crate::module_graph; use crate::program_state::ProgramState; -use crate::specifier_handler::FetchHandler; use crate::write_json_to_stdout; use crate::write_to_stdout_ignore_sigpipe; use deno_core::error::AnyError; +use deno_core::futures::future; use deno_core::futures::future::FutureExt; -use deno_core::futures::Future; -use deno_core::parking_lot::Mutex; use deno_core::resolve_url_or_path; use deno_doc as doc; -use deno_doc::parser::DocFileLoader; +use deno_graph::create_graph; +use deno_graph::source::LoadFuture; +use deno_graph::source::LoadResponse; +use deno_graph::source::Loader; +use deno_graph::source::Resolver; +use deno_graph::ModuleSpecifier; use deno_runtime::permissions::Permissions; use std::path::PathBuf; -use std::pin::Pin; use std::sync::Arc; -use swc_ecmascript::parser::Syntax; -type DocResult = Result<(Syntax, String), doc::DocError>; - -/// When parsing lib.deno.d.ts, only `DocParser::parse_source` is used, -/// which never even references the loader, so this is just a stub for that scenario. -/// -/// TODO(Liamolucko): Refactor `deno_doc` so this isn't necessary. struct StubDocLoader; -impl DocFileLoader for StubDocLoader { - fn resolve( - &self, - _specifier: &str, - _referrer: &str, - ) -> Result { - unreachable!() - } - - fn load_source_code( - &self, - _specifier: &str, - ) -> Pin>> { - unreachable!() +impl Loader for StubDocLoader { + fn load( + &mut self, + specifier: &ModuleSpecifier, + _is_dynamic: bool, + ) -> LoadFuture { + Box::pin(future::ready((specifier.clone(), Ok(None)))) } } -impl DocFileLoader for module_graph::Graph { +#[derive(Debug)] +struct DocResolver { + import_map: Option, +} + +impl Resolver for DocResolver { fn resolve( &self, specifier: &str, - referrer: &str, - ) -> Result { - let referrer = - resolve_url_or_path(referrer).expect("Expected valid specifier"); - match self.resolve(specifier, &referrer, true) { - Ok(specifier) => Ok(specifier.to_string()), - Err(e) => Err(doc::DocError::Resolve(e.to_string())), + referrer: &ModuleSpecifier, + ) -> Result { + if let Some(import_map) = &self.import_map { + return import_map + .resolve(specifier, referrer.as_str()) + .map_err(AnyError::from); } - } - fn load_source_code( - &self, - specifier: &str, - ) -> Pin>> { - let specifier = - resolve_url_or_path(specifier).expect("Expected valid specifier"); - let source = self.get_source(&specifier).expect("Unknown dependency"); - let media_type = - self.get_media_type(&specifier).expect("Unknown media type"); - let syntax = ast::get_syntax(&media_type); - async move { Ok((syntax, source)) }.boxed_local() + let module_specifier = + deno_core::resolve_import(specifier, referrer.as_str())?; + + Ok(module_specifier) + } +} + +struct DocLoader { + program_state: Arc, +} + +impl Loader for DocLoader { + fn load( + &mut self, + specifier: &ModuleSpecifier, + _is_dynamic: bool, + ) -> LoadFuture { + let specifier = specifier.clone(); + let program_state = self.program_state.clone(); + async move { + let result = program_state + .file_fetcher + .fetch(&specifier, &mut Permissions::allow_all()) + .await + .map(|file| { + Some(LoadResponse { + specifier: specifier.clone(), + content: Arc::new(file.source), + maybe_headers: file.maybe_headers, + }) + }); + (specifier.clone(), result) + } + .boxed_local() } } @@ -88,12 +102,21 @@ pub async fn print_docs( let source_file = source_file.unwrap_or_else(|| "--builtin".to_string()); let parse_result = if source_file == "--builtin" { - let loader = Box::new(StubDocLoader); - let doc_parser = doc::DocParser::new(loader, private); - + let mut loader = StubDocLoader; + let source_file_specifier = + ModuleSpecifier::parse("deno://lib.deno.d.ts").unwrap(); + let graph = create_graph( + source_file_specifier.clone(), + &mut loader, + None, + None, + None, + ) + .await; + let doc_parser = doc::DocParser::new(graph, private); let syntax = ast::get_syntax(&MediaType::Dts); doc_parser.parse_source( - "lib.deno.d.ts", + &source_file_specifier, syntax, get_types(flags.unstable).as_str(), ) @@ -109,31 +132,28 @@ pub async fn print_docs( media_type: MediaType::TypeScript, source: format!("export * from \"{}\";", module_specifier), specifier: root_specifier.clone(), + maybe_headers: None, }; // Save our fake file into file fetcher cache. program_state.file_fetcher.insert_cached(root); - let handler = Arc::new(Mutex::new(FetchHandler::new( - &program_state, - Permissions::allow_all(), - Permissions::allow_all(), - )?)); - let mut builder = module_graph::GraphBuilder::new( - handler, - program_state.maybe_import_map.clone(), - program_state.lockfile.clone(), - ); - builder.add(&root_specifier, false).await?; - builder - .analyze_config_file(&program_state.maybe_config_file) - .await?; - let graph = builder.get_graph(); - - let doc_parser = doc::DocParser::new(Box::new(graph), private); - doc_parser - .parse_with_reexports(root_specifier.as_str()) - .await + let mut loader = DocLoader { + program_state: program_state.clone(), + }; + let resolver = DocResolver { + import_map: program_state.maybe_import_map.clone(), + }; + let graph = create_graph( + root_specifier.clone(), + &mut loader, + Some(&resolver), + None, + None, + ) + .await; + let doc_parser = doc::DocParser::new(graph, private); + doc_parser.parse_with_reexports(&root_specifier) }; let mut doc_nodes = match parse_result { diff --git a/cli/tools/lint.rs b/cli/tools/lint.rs index f87ad4359a..7e6d2e9230 100644 --- a/cli/tools/lint.rs +++ b/cli/tools/lint.rs @@ -239,8 +239,9 @@ impl LintReporter for PrettyLintReporter { d.hint.as_ref(), &fmt_errors::format_location(&JsStackFrame::from_location( Some(d.filename.clone()), - Some(d.range.start.line as i64), - Some(d.range.start.col as i64), + Some(d.range.start.line_index as i64 + 1), // 1-indexed + // todo(#11111): make 1-indexed as well + Some(d.range.start.column_index as i64), )), ); @@ -277,24 +278,32 @@ pub fn format_diagnostic( ) -> String { let mut lines = vec![]; - for i in range.start.line..=range.end.line { - lines.push(source_lines[i - 1].to_string()); - if range.start.line == range.end.line { + for (i, line) in source_lines + .iter() + .enumerate() + .take(range.end.line_index + 1) + .skip(range.start.line_index) + { + lines.push(line.to_string()); + if range.start.line_index == range.end.line_index { lines.push(format!( "{}{}", - " ".repeat(range.start.col), - colors::red(&"^".repeat(range.end.col - range.start.col)) + " ".repeat(range.start.column_index), + colors::red( + &"^".repeat(range.end.column_index - range.start.column_index) + ) )); } else { - let line_len = source_lines[i - 1].len(); - if range.start.line == i { + let line_len = line.len(); + if range.start.line_index == i { lines.push(format!( "{}{}", - " ".repeat(range.start.col), - colors::red(&"^".repeat(line_len - range.start.col)) + " ".repeat(range.start.column_index), + colors::red(&"^".repeat(line_len - range.start.column_index)) )); - } else if range.end.line == i { - lines.push(colors::red(&"^".repeat(range.end.col)).to_string()); + } else if range.end.line_index == i { + lines + .push(colors::red(&"^".repeat(range.end.column_index)).to_string()); } else if line_len != 0 { lines.push(colors::red(&"^".repeat(line_len)).to_string()); } @@ -363,9 +372,12 @@ fn sort_diagnostics(diagnostics: &mut Vec) { let file_order = a.filename.cmp(&b.filename); match file_order { Ordering::Equal => { - let line_order = a.range.start.line.cmp(&b.range.start.line); + let line_order = + a.range.start.line_index.cmp(&b.range.start.line_index); match line_order { - Ordering::Equal => a.range.start.col.cmp(&b.range.start.col), + Ordering::Equal => { + a.range.start.column_index.cmp(&b.range.start.column_index) + } _ => line_order, } } diff --git a/cli/tools/test.rs b/cli/tools/test.rs index 8111293b43..90293173b3 100644 --- a/cli/tools/test.rs +++ b/cli/tools/test.rs @@ -262,6 +262,7 @@ async fn test_specifier( media_type: MediaType::JavaScript, source: test_source.clone(), specifier: test_specifier.clone(), + maybe_headers: None, }; program_state.file_fetcher.insert_cached(test_file); @@ -381,6 +382,7 @@ fn extract_files_from_regex_blocks( media_type: file_media_type, source: file_source, specifier: file_specifier, + maybe_headers: None, }) }) .collect();