fix: upgrade to swc_ecma_parser 27 (#31427)

This commit is contained in:
David Sherret 2025-11-27 13:07:50 -05:00 committed by GitHub
parent 24a0209fa1
commit 4876b41d59
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
24 changed files with 172 additions and 122 deletions

View file

@ -83,7 +83,7 @@
"tests/specs/run/error_syntax_empty_trailing_line/error_syntax_empty_trailing_line.mjs"
],
"plugins": [
"https://plugins.dprint.dev/typescript-0.95.11.wasm",
"https://plugins.dprint.dev/typescript-0.95.13.wasm",
"https://plugins.dprint.dev/json-0.21.0.wasm",
"https://plugins.dprint.dev/markdown-0.20.0.wasm",
"https://plugins.dprint.dev/toml-0.7.0.wasm",

133
Cargo.lock generated
View file

@ -273,9 +273,9 @@ dependencies = [
[[package]]
name = "ast_node"
version = "3.0.4"
version = "5.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0a184645bcc6f52d69d8e7639720699c6a99efb711f886e251ed1d16db8dd90e"
checksum = "2eb025ef00a6da925cf40870b9c8d008526b6004ece399cb0974209720f0b194"
dependencies = [
"quote",
"swc_macros_common",
@ -1725,9 +1725,9 @@ dependencies = [
[[package]]
name = "deno_ast"
version = "0.50.3"
version = "0.52.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6c6fca2bd99b9f4ac51e548a34b74f8e397d94694a6ced184315922156f70ed0"
checksum = "30c2f6f65154faed61e45d6578566f9fab9d2a330c35c87366706883701cce51"
dependencies = [
"base64 0.22.1",
"capacity_builder",
@ -1764,7 +1764,7 @@ dependencies = [
"swc_visit",
"text_lines",
"thiserror 2.0.12",
"unicode-width 0.2.0",
"unicode-width 0.2.2",
"url",
]
@ -1818,9 +1818,9 @@ dependencies = [
[[package]]
name = "deno_cache_dir"
version = "0.25.0"
version = "0.26.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "19ab8c76d18a8a7511825bfb93e8b35e79b3dd8404a48c570c536db2a3c88855"
checksum = "7862aa4b7aad895ee979a3078bd25da192a1810b30cb5a7e764fed38d065eba9"
dependencies = [
"async-trait",
"base32",
@ -1991,9 +1991,9 @@ dependencies = [
[[package]]
name = "deno_doc"
version = "0.186.0"
version = "0.187.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "92de7919430e4bd66edace9ca4ca1dba7599ddf627bfa35a8c919b99ed5f54cf"
checksum = "b76ea8ad99ec75f94c9fbfc5acfdf4803408dbe9c6563c1691970a768f6398f6"
dependencies = [
"anyhow",
"cfg-if",
@ -2144,9 +2144,9 @@ dependencies = [
[[package]]
name = "deno_graph"
version = "0.103.1"
version = "0.104.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "293db685464cf8a18785e32d6fdcfffb78a864465d8e9017bfb005ccacc560a8"
checksum = "166b59d27d3ef8a446bece020e1d72b629250a0cb6665b0c7929cd7bae93b9a1"
dependencies = [
"async-trait",
"boxed_error",
@ -2316,9 +2316,9 @@ dependencies = [
[[package]]
name = "deno_lint"
version = "0.80.0"
version = "0.82.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "816be0fe885ac88b200d73d99f8c9557278ff416acf8abc1661b46837f09a303"
checksum = "a39ab04b95caa7ed722680d1f93f919525e9b141663224629de297cd3ed39529"
dependencies = [
"anyhow",
"deno_ast",
@ -2355,9 +2355,9 @@ dependencies = [
[[package]]
name = "deno_media_type"
version = "0.2.9"
version = "0.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f0ec0dada9dc5ac4733b4175d36f6a150b7dd68fab46db35cb1ef00dd7366acb"
checksum = "ac0109d26ff08a089642a79b45c65f91a849404c1ef3ec78c837a412956d8808"
dependencies = [
"data-url",
"encoding_rs",
@ -3566,7 +3566,7 @@ dependencies = [
"indexmap 2.9.0",
"rustc-hash 2.1.1",
"serde",
"unicode-width 0.2.0",
"unicode-width 0.2.2",
]
[[package]]
@ -3623,9 +3623,9 @@ dependencies = [
[[package]]
name = "dprint-plugin-typescript"
version = "0.95.11"
version = "0.95.13"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "74aa5df06eb156f7df91bf17a0ca65fd349dfa22463c3eab0a019bab20df12df"
checksum = "f8c3e39abf274d7f85a017691da2d4c78db0141425d05201b7249de4a48cabd1"
dependencies = [
"anyhow",
"capacity_builder",
@ -3639,9 +3639,9 @@ dependencies = [
[[package]]
name = "dprint-swc-ext"
version = "0.25.1"
version = "0.26.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "cf592ae6a864437e98ef9c6ae7936b822077e9d038a3a48ee081ab92313afad4"
checksum = "33175ddb7a6d418589cab2966bd14a710b3b1139459d3d5ca9edf783c4833f4c"
dependencies = [
"allocator-api2",
"bumpalo",
@ -3914,9 +3914,9 @@ dependencies = [
[[package]]
name = "eszip"
version = "0.104.0"
version = "0.105.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "dde1007099ac5d0184579513aa0d5484ad25d9638a21c7c26203548aebe40d9b"
checksum = "4d70ac1a894658d4841901d4548020c97baa339cc1289ed28622cdd04b440091"
dependencies = [
"anyhow",
"async-trait",
@ -4222,9 +4222,9 @@ checksum = "c0f5d7f7b3eed2f771fc7f6fcb651f9560d7b0c483d75876082acb4649d266b3"
[[package]]
name = "from_variant"
version = "2.0.2"
version = "3.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "308530a56b099da144ebc5d8e179f343ad928fa2b3558d1eb3db9af18d6eff43"
checksum = "e5ff35a391aef949120a0340d690269b3d9f63460a6106e99bd07b961f345ea9"
dependencies = [
"swc_macros_common",
"syn 2.0.87",
@ -4857,14 +4857,15 @@ dependencies = [
[[package]]
name = "hstr"
version = "2.1.0"
version = "3.0.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "31f11d91d7befd2ffd9d216e9e5ea1fae6174b20a2a1b67a688138003d2f4122"
checksum = "0c43c0a9e8fbdb3bb9dc8eee85e1e2ac81605418b4c83b6b7413cbf14d56ca5c"
dependencies = [
"hashbrown 0.14.5",
"new_debug_unreachable",
"once_cell",
"rustc-hash 2.1.1",
"serde",
"triomphe",
]
@ -8656,9 +8657,9 @@ dependencies = [
[[package]]
name = "swc_atoms"
version = "7.0.0"
version = "9.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3500dcf04c84606b38464561edc5e46f5132201cb3e23cf9613ed4033d6b1bb2"
checksum = "d4ccbe2ecad10ad7432100f878a107b1d972a8aee83ca53184d00c23a078bb8a"
dependencies = [
"hstr",
"once_cell",
@ -8667,9 +8668,9 @@ dependencies = [
[[package]]
name = "swc_bundler"
version = "32.0.0"
version = "35.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "25cf8de492fb6069230a1f217b7becec73eff036d86e4736ff6c1d31017149a3"
checksum = "5d55007addadf4652418b6babff3106321d4505ed33b93a5e30365d2cd15c724"
dependencies = [
"anyhow",
"crc",
@ -8696,9 +8697,9 @@ dependencies = [
[[package]]
name = "swc_common"
version = "14.0.4"
version = "17.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c2bb772b3a26b8b71d4e8c112ced5b5867be2266364b58517407a270328a2696"
checksum = "259b675d633a26d24efe3802a9d88858c918e6e8f062d3222d3aa02d56a2cf4c"
dependencies = [
"anyhow",
"ast_node",
@ -8717,7 +8718,7 @@ dependencies = [
"swc_sourcemap",
"swc_visit",
"tracing",
"unicode-width 0.1.13",
"unicode-width 0.2.2",
"url",
]
@ -8749,9 +8750,9 @@ dependencies = [
[[package]]
name = "swc_ecma_ast"
version = "15.0.0"
version = "18.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "65c25af97d53cf8aab66a6c68f3418663313fc969ad267fc2a4d19402c329be1"
checksum = "a573a0c72850dec8d4d8085f152d5778af35a2520c3093b242d2d1d50776da7c"
dependencies = [
"bitflags 2.9.3",
"is-macro",
@ -8769,9 +8770,9 @@ dependencies = [
[[package]]
name = "swc_ecma_codegen"
version = "17.0.2"
version = "20.0.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bcf55c2d7555c93f4945e29f93b7529562be97ba16e60dd94c25724d746174ac"
checksum = "ff2a6ee1ec49dda8dedeac54e4147b4e8b3f278d9bb34ab28983257a393d34ed"
dependencies = [
"ascii",
"compact_str",
@ -8804,15 +8805,13 @@ dependencies = [
[[package]]
name = "swc_ecma_lexer"
version = "23.0.2"
version = "26.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "017d06ea85008234aa9fb34d805c7dc563f2ea6e03869ed5ac5a2dc27d561e4d"
checksum = "5e82f7747e052c6ff6e111fa4adeb14e33b46ee6e94fe5ef717601f651db48fc"
dependencies = [
"arrayvec",
"bitflags 2.9.3",
"either",
"num-bigint",
"phf",
"rustc-hash 2.1.1",
"seq-macro",
"serde",
@ -8822,14 +8821,15 @@ dependencies = [
"swc_atoms",
"swc_common",
"swc_ecma_ast",
"swc_ecma_parser",
"tracing",
]
[[package]]
name = "swc_ecma_loader"
version = "14.0.0"
version = "17.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c675d14700c92f12585049b22b02356f1e142f4b0c32a4d0eb4b7a968a4c0c1e"
checksum = "fbcababb48f0d46587a0a854b2c577eb3a56fa99687de558338021e93cd2c8f5"
dependencies = [
"anyhow",
"pathdiff",
@ -8842,25 +8842,30 @@ dependencies = [
[[package]]
name = "swc_ecma_parser"
version = "24.0.3"
version = "27.0.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2e9011783c975ba592ffc09cd208ced92b1dfabb2e5e0ef453559e2e25286127"
checksum = "7f1a51af1a92cd4904c073b293e491bbc0918400a45d58227b34c961dd6f52d7"
dependencies = [
"bitflags 2.9.3",
"either",
"num-bigint",
"phf",
"rustc-hash 2.1.1",
"seq-macro",
"serde",
"smartstring",
"stacker",
"swc_atoms",
"swc_common",
"swc_ecma_ast",
"swc_ecma_lexer",
"tracing",
]
[[package]]
name = "swc_ecma_transforms_base"
version = "27.0.0"
version = "30.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6c6f1b8f4232e7a7f614ff7c0f6ccb89c2d028cdf7629f79ad710cff5b28b62c"
checksum = "250f6f165578ca4fee47bd57585c1b9597c94bf4ea6591df47f2b5fa5b1883fe"
dependencies = [
"better_scoped_tls",
"indexmap 2.9.0",
@ -8880,9 +8885,9 @@ dependencies = [
[[package]]
name = "swc_ecma_transforms_classes"
version = "27.0.0"
version = "30.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "108d4d52db6151f768a516fe86e6f21fc783b03fa2d20292999f29275fd0c71d"
checksum = "3d3ab35eff4a980e02d708798ae4c35bc017612292adbffe7b7b554df772fdf5"
dependencies = [
"swc_common",
"swc_ecma_ast",
@ -8905,9 +8910,9 @@ dependencies = [
[[package]]
name = "swc_ecma_transforms_optimization"
version = "29.0.0"
version = "32.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "506bf81408ad780a3f696bb9f84a508d2024c6cd6803d440ededc25be5cee7c8"
checksum = "49b3eba5fd24fb4cf7b5092474711a40e47e4cff973b839a7c1c69c1557b272d"
dependencies = [
"bytes-str",
"dashmap",
@ -8929,9 +8934,9 @@ dependencies = [
[[package]]
name = "swc_ecma_transforms_proposal"
version = "27.0.0"
version = "30.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "39b3b34f6a28348416174912009d09994ab71c867682ec78d641a9feb3a96b4e"
checksum = "c2d7748d4112c87ce1885260035e4a43cebfe7661a40174b7d77a0a04760a257"
dependencies = [
"either",
"rustc-hash 2.1.1",
@ -8947,9 +8952,9 @@ dependencies = [
[[package]]
name = "swc_ecma_transforms_react"
version = "30.0.2"
version = "33.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "69ea0052ac23b5b9fbc85bbdb1791b36b918f9d55f594b0ed8e25babb4c32d16"
checksum = "03de12e38e47ac1c96ac576f793ad37a9d7b16fbf4f2203881f89152f2498682"
dependencies = [
"base64 0.22.1",
"bytes-str",
@ -8971,9 +8976,9 @@ dependencies = [
[[package]]
name = "swc_ecma_transforms_typescript"
version = "30.0.1"
version = "33.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3872c006ccfdcc19f1cf5c01c15915a69964ba7982c9f581cdb7e727e77b9a2c"
checksum = "4408800fdeb541fabf3659db622189a0aeb386f57b6103f9294ff19dfde4f7b0"
dependencies = [
"bytes-str",
"rustc-hash 2.1.1",
@ -8989,9 +8994,9 @@ dependencies = [
[[package]]
name = "swc_ecma_utils"
version = "21.0.0"
version = "24.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "83259addd99ed4022aa9fc4d39428c008d3d42533769e1a005529da18cde4568"
checksum = "0fb99e179988cabd473779a4452ab942bcb777176983ca3cbaf22a8f056a65b0"
dependencies = [
"indexmap 2.9.0",
"num_cpus",
@ -9008,9 +9013,9 @@ dependencies = [
[[package]]
name = "swc_ecma_visit"
version = "15.0.0"
version = "18.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "75a579aa8f9e212af521588df720ccead079c09fe5c8f61007cf724324aed3a0"
checksum = "a9611a72a4008d62608547a394e5d72a5245413104db096d95a52368a8cc1d63"
dependencies = [
"new_debug_unreachable",
"num-bigint",
@ -9963,9 +9968,9 @@ checksum = "0336d538f7abc86d282a4189614dfaa90810dfc2c6f6427eaf88e16311dd225d"
[[package]]
name = "unicode-width"
version = "0.2.0"
version = "0.2.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1fc81956842c57dac11422a97c3b8195a1ff727f06e85c84ed2e8aa277c9a0fd"
checksum = "b4ac048d71ede7ee76d585517add45da530660ef4390e49b098733c6e897f254"
[[package]]
name = "unicode-xid"

View file

@ -60,16 +60,16 @@ license = "MIT"
repository = "https://github.com/denoland/deno"
[workspace.dependencies]
deno_ast = { version = "=0.50.3", features = ["transpiling"] }
deno_ast = { version = "=0.52.0", features = ["transpiling"] }
deno_core = { version = "0.370.0" }
deno_cache_dir = "=0.25.0"
deno_doc = "=0.186.0"
deno_cache_dir = "=0.26.3"
deno_doc = "=0.187.0"
deno_error = "=0.7.0"
deno_graph = { version = "=0.103.1", default-features = false }
deno_lint = "=0.80.0"
deno_graph = { version = "=0.104.0", default-features = false }
deno_lint = "=0.82.0"
deno_lockfile = "=0.32.2"
deno_media_type = { version = "=0.2.9", features = ["module_specifier"] }
deno_media_type = { version = "=0.3.0", features = ["module_specifier"] }
deno_native_certs = "0.3.0"
deno_npm = "=0.42.0"
deno_path_util = "=0.6.4"
@ -78,7 +78,7 @@ deno_task_shell = "=0.26.0"
deno_terminal = "=0.2.3"
deno_unsync = { version = "0.4.4", default-features = false }
deno_whoami = "0.1.0"
eszip = "=0.104.0"
eszip = "=0.105.0"
denokv_proto = "0.13.0"
denokv_remote = "0.13.0"
@ -309,7 +309,7 @@ dprint-core = "=0.67.4"
dprint-plugin-json = "=0.21.0"
dprint-plugin-jupyter = "=0.2.1"
dprint-plugin-markdown = "=0.20.0"
dprint-plugin-typescript = "=0.95.11"
dprint-plugin-typescript = "=0.95.13"
env_logger = "=0.11.6"
fancy-regex = "=0.14.0"
libsui = "0.11.0"

View file

@ -305,12 +305,14 @@ fn serialize_media_type(media_type: MediaType) -> i64 {
Dcts => 10,
Tsx => 11,
Json => 12,
Wasm => 13,
Css => 14,
Html => 15,
SourceMap => 16,
Sql => 17,
Unknown => 18,
Jsonc => 13,
Json5 => 14,
Wasm => 15,
Css => 16,
Html => 17,
SourceMap => 18,
Sql => 19,
Unknown => 20,
}
}

View file

@ -244,12 +244,14 @@ fn serialize_media_type(media_type: MediaType) -> u8 {
MediaType::Dcts => 9,
MediaType::Tsx => 10,
MediaType::Json => 11,
MediaType::Wasm => 12,
MediaType::Css => 13,
MediaType::Html => 14,
MediaType::SourceMap => 15,
MediaType::Sql => 16,
MediaType::Unknown => 17,
MediaType::Jsonc => 12,
MediaType::Json5 => 13,
MediaType::Wasm => 14,
MediaType::Css => 15,
MediaType::Html => 16,
MediaType::SourceMap => 17,
MediaType::Sql => 18,
MediaType::Unknown => 19,
}
}
@ -269,12 +271,14 @@ impl<'a> DenoRtDeserializable<'a> for MediaType {
9 => MediaType::Dcts,
10 => MediaType::Tsx,
11 => MediaType::Json,
12 => MediaType::Wasm,
13 => MediaType::Css,
14 => MediaType::Html,
15 => MediaType::SourceMap,
16 => MediaType::Sql,
17 => MediaType::Unknown,
12 => MediaType::Jsonc,
13 => MediaType::Json5,
14 => MediaType::Wasm,
15 => MediaType::Css,
16 => MediaType::Html,
17 => MediaType::SourceMap,
18 => MediaType::Sql,
19 => MediaType::Unknown,
value => {
return Err(std::io::Error::new(
std::io::ErrorKind::InvalidData,

View file

@ -114,7 +114,7 @@ impl DenoTestCollector {
{
match key_value_prop.value.as_ref() {
ast::Expr::Lit(ast::Lit::Str(lit_str)) => {
let name = lit_str.value.to_string();
let name = lit_str.value.to_string_lossy().to_string();
self.add_code_lenses(name, range);
}
ast::Expr::Tpl(tpl) if tpl.quasis.len() == 1 => {
@ -133,7 +133,7 @@ impl DenoTestCollector {
}
}
ast::Expr::Lit(ast::Lit::Str(lit_str)) => {
let name = lit_str.value.to_string();
let name = lit_str.value.to_string_lossy().to_string();
self.add_code_lenses(name, range);
}
ast::Expr::Tpl(tpl) if tpl.quasis.len() == 1 => {

View file

@ -1053,6 +1053,8 @@ impl Config {
| MediaType::Dcts
| MediaType::Tsx => Some(&workspace_settings.typescript),
MediaType::Json
| MediaType::Jsonc
| MediaType::Json5
| MediaType::Wasm
| MediaType::Css
| MediaType::Html

View file

@ -1128,16 +1128,16 @@ impl Inner {
| MediaType::Dmts
| MediaType::Dcts
| MediaType::Json
| MediaType::Jsonc
| MediaType::Tsx => {}
MediaType::Wasm
| MediaType::SourceMap
| MediaType::Css
| MediaType::Html
| MediaType::Json5
| MediaType::Sql
| MediaType::Unknown => {
if path.extension().and_then(|s| s.to_str()) != Some("jsonc") {
continue;
}
continue;
}
}
dir_files.insert(path);

View file

@ -171,7 +171,7 @@ fn visit_call_expr(
// matches string literals (e.g. "test name" or
// 'test name')
ast::Expr::Lit(ast::Lit::Str(lit_str)) => {
maybe_name = Some(lit_str.value.to_string());
maybe_name = Some(lit_str.value.to_string_lossy().to_string());
}
// matches template literals with only a single quasis
// (e.g. `test name`)
@ -271,7 +271,7 @@ fn visit_call_expr(
}
}
ast::Expr::Lit(ast::Lit::Str(lit_str)) => {
let name = lit_str.value.to_string();
let name = lit_str.value.to_string_lossy().to_string();
let (id, _) = test_module.register(
name,
Some(range),

View file

@ -452,6 +452,8 @@ impl<'a> DenoCompileModuleData<'a> {
// just assume javascript if we made it here
MediaType::Css
| MediaType::Html
| MediaType::Jsonc
| MediaType::Json5
| MediaType::SourceMap
| MediaType::Sql
| MediaType::Unknown => {

View file

@ -1679,6 +1679,8 @@ fn media_type_to_loader(
Jsx | Tsx => esbuild_client::BuiltinLoader::Jsx,
Css => esbuild_client::BuiltinLoader::Css,
Json => esbuild_client::BuiltinLoader::Json,
Jsonc => esbuild_client::BuiltinLoader::Text,
Json5 => esbuild_client::BuiltinLoader::Text,
SourceMap => esbuild_client::BuiltinLoader::Text,
Html => esbuild_client::BuiltinLoader::Text,
Sql => esbuild_client::BuiltinLoader::Text,

View file

@ -238,6 +238,7 @@ pub async fn compile_eszip(
relative_file_base: Some(relative_file_base),
npm_packages: None,
module_kind_resolver: Default::default(),
npm_snapshot: Default::default(),
})?;
if let Some(import_map_specifier) = maybe_import_map_specifier {
@ -369,6 +370,8 @@ fn get_module_roots_and_include_paths(
| MediaType::Wasm => true,
MediaType::Css
| MediaType::Html
| MediaType::Jsonc
| MediaType::Json5
| MediaType::SourceMap
| MediaType::Sql
| MediaType::Unknown => false,

View file

@ -555,7 +555,9 @@ pub fn cover_files(
| MediaType::Wasm
| MediaType::Cjs
| MediaType::Mjs
| MediaType::Json => None,
| MediaType::Json
| MediaType::Jsonc
| MediaType::Json5 => None,
MediaType::Dts | MediaType::Dmts | MediaType::Dcts => Some(String::new()),
MediaType::TypeScript
| MediaType::Jsx

View file

@ -1,5 +1,7 @@
// Copyright 2018-2025 the Deno authors. MIT license.
use std::borrow::Cow;
use deno_ast::ParsedSource;
use deno_ast::swc::ast::AssignTarget;
use deno_ast::swc::ast::AssignTargetPat;
@ -52,6 +54,7 @@ use deno_ast::swc::ast::PropName;
use deno_ast::swc::ast::PropOrSpread;
use deno_ast::swc::ast::SimpleAssignTarget;
use deno_ast::swc::ast::Stmt;
use deno_ast::swc::ast::Str;
use deno_ast::swc::ast::SuperProp;
use deno_ast::swc::ast::TsEntityName;
use deno_ast::swc::ast::TsEnumMemberId;
@ -959,7 +962,7 @@ fn serialize_expr(ctx: &mut TsEsTreeBuilder, expr: &Expr) -> NodeRef {
&quasi
.cooked
.as_ref()
.map_or("".to_string(), |v| v.to_string()),
.map_or("".to_string(), |v| v.to_string_lossy().to_string()),
)
})
.collect::<Vec<_>>();
@ -1839,7 +1842,7 @@ fn serialize_jsx_opening_element(
};
let value = attr.value.as_ref().map(|value| match value {
JSXAttrValue::Lit(lit) => serialize_lit(ctx, lit),
JSXAttrValue::Str(str) => serialize_str(ctx, str),
JSXAttrValue::JSXExprContainer(container) => {
serialize_jsx_container_expr(ctx, container)
}
@ -2063,15 +2066,7 @@ fn serialize_prop_name(
fn serialize_lit(ctx: &mut TsEsTreeBuilder, lit: &Lit) -> NodeRef {
match lit {
Lit::Str(node) => {
let raw_value = if let Some(v) = &node.raw {
v.to_string()
} else {
format!("{}", node.value).to_string()
};
ctx.write_str_lit(&node.span, &node.value, &raw_value)
}
Lit::Str(node) => serialize_str(ctx, node),
Lit::Bool(node) => ctx.write_bool_lit(&node.span, node.value),
Lit::Null(node) => ctx.write_null_lit(&node.span),
Lit::Num(node) => {
@ -2123,6 +2118,16 @@ fn serialize_lit(ctx: &mut TsEsTreeBuilder, lit: &Lit) -> NodeRef {
}
}
fn serialize_str(ctx: &mut TsEsTreeBuilder, node: &Str) -> NodeRef {
let raw_value = if let Some(v) = &node.raw {
Cow::Borrowed(v.as_str())
} else {
node.value.to_string_lossy()
};
ctx.write_str_lit(&node.span, &node.value.to_string_lossy(), &raw_value)
}
fn serialize_class_member(
ctx: &mut TsEsTreeBuilder,
member: &ClassMember,
@ -2772,7 +2777,8 @@ fn serialize_ts_lit_type(
&quasi
.cooked
.as_ref()
.map_or("".to_string(), |v| v.to_string()),
.map(|v| v.to_string_lossy())
.unwrap_or(Cow::Borrowed("")),
)
})
.collect::<Vec<_>>();

View file

@ -92,6 +92,8 @@ impl<TSys: FsMetadata + FsRead> ModuleContentProvider<TSys> {
| MediaType::Html
| MediaType::Sql
| MediaType::Json
| MediaType::Jsonc
| MediaType::Json5
| MediaType::Wasm
| MediaType::Css => {
// not unfurlable data

View file

@ -979,7 +979,7 @@ impl Visit for ImportMetaResolveCollector {
self.specifiers.push((
// remove quotes
SourceRange::new(range.start + 1, range.end - 1),
arg.value.clone(),
arg.value.to_atom_lossy().into_owned(),
));
} else {
self.diagnostic_ranges.push(first_arg.expr.range());

View file

@ -16,6 +16,7 @@ use deno_ast::SourceRangedForSpanned;
use deno_ast::SourceTextInfo;
use deno_ast::diagnostics::Diagnostic;
use deno_ast::swc::ast as swc_ast;
use deno_ast::swc::atoms::Wtf8Atom;
use deno_ast::swc::common::comments::CommentKind;
use deno_ast::swc::ecma_visit::Visit;
use deno_ast::swc::ecma_visit::VisitWith;
@ -869,17 +870,18 @@ impl ReplSession {
.imports
.iter()
.flat_map(|i| {
let specifier = i.to_string_lossy();
self
.resolver
.resolve(
i,
&specifier,
&self.referrer,
deno_graph::Position::zeroed(),
ResolutionMode::Import,
NodeResolutionKind::Execution,
)
.ok()
.or_else(|| ModuleSpecifier::parse(i).ok())
.or_else(|| ModuleSpecifier::parse(&specifier).ok())
})
.collect::<Vec<_>>();
@ -938,7 +940,7 @@ impl ReplSession {
/// Walk an AST and get all import specifiers for analysis if any of them is
/// an npm specifier.
struct ImportCollector {
pub imports: Vec<String>,
pub imports: Vec<Wtf8Atom>,
}
impl ImportCollector {
@ -958,7 +960,7 @@ impl Visit for ImportCollector {
if !call_expr.args.is_empty() {
let arg = &call_expr.args[0];
if let swc_ast::Expr::Lit(swc_ast::Lit::Str(str_lit)) = &*arg.expr {
self.imports.push(str_lit.value.to_string());
self.imports.push(str_lit.value.clone());
}
}
}
@ -972,14 +974,14 @@ impl Visit for ImportCollector {
return;
}
self.imports.push(import_decl.src.value.to_string());
self.imports.push(import_decl.src.value.clone());
}
ModuleDecl::ExportAll(export_all) => {
self.imports.push(export_all.src.value.to_string());
self.imports.push(export_all.src.value.clone());
}
ModuleDecl::ExportNamed(export_named) => {
if let Some(src) = &export_named.src {
self.imports.push(src.value.to_string());
self.imports.push(src.value.clone());
}
}
_ => {}

View file

@ -516,6 +516,8 @@ pub fn as_ts_script_kind(media_type: MediaType) -> i32 {
MediaType::SourceMap
| MediaType::Css
| MediaType::Html
| MediaType::Jsonc
| MediaType::Json5
| MediaType::Sql
| MediaType::Wasm
| MediaType::Unknown => 0,

View file

@ -881,6 +881,8 @@ impl<'a> GraphWalker<'a> {
}
}
MediaType::Json
| MediaType::Jsonc
| MediaType::Json5
| MediaType::Wasm
| MediaType::Css
| MediaType::Html
@ -997,6 +999,8 @@ fn has_ts_check(media_type: MediaType, file_text: &str) -> bool {
| MediaType::Dmts
| MediaType::Tsx
| MediaType::Json
| MediaType::Jsonc
| MediaType::Json5
| MediaType::Wasm
| MediaType::Css
| MediaType::Html

View file

@ -352,7 +352,9 @@ impl Visit for ExportCollector {
self.named_exports.insert(ident.sym.clone());
}
ast::TsModuleName::Str(s) => {
self.named_exports.insert(s.value.clone());
self
.named_exports
.insert(s.value.to_atom_lossy().into_owned());
}
}
}
@ -403,7 +405,7 @@ impl Visit for ExportCollector {
fn get_atom(export_name: &ast::ModuleExportName) -> Atom {
match export_name {
ast::ModuleExportName::Ident(ident) => ident.sym.clone(),
ast::ModuleExportName::Str(s) => s.value.clone(),
ast::ModuleExportName::Str(s) => s.value.to_atom_lossy().into_owned(),
}
}
@ -798,7 +800,7 @@ fn wrap_in_deno_test(stmts: Vec<ast::Stmt>, test_name: Atom) -> ast::Stmt {
spread: None,
expr: Box::new(ast::Expr::Lit(ast::Lit::Str(ast::Str {
span: DUMMY_SP,
value: test_name,
value: test_name.into(),
raw: None,
}))),
},

View file

@ -212,6 +212,8 @@ impl<TInNpmPackageChecker: InNpmPackageChecker, TSys: FsRead + FsMetadata>
// treat these as unknown
| MediaType::Css
| MediaType::Html
| MediaType::Jsonc
| MediaType::Json5
| MediaType::SourceMap
| MediaType::Sql
| MediaType::Unknown => {
@ -260,6 +262,8 @@ impl<TInNpmPackageChecker: InNpmPackageChecker, TSys: FsRead + FsMetadata>
// treat these as unknown
| MediaType::Css
| MediaType::Html
| MediaType::Jsonc
| MediaType::Json5
| MediaType::SourceMap
| MediaType::Sql
| MediaType::Unknown => {

View file

@ -357,6 +357,8 @@ impl<TInNpmPackageChecker: InNpmPackageChecker, TSys: EmitterSys>
| MediaType::Dmts
| MediaType::Dcts
| MediaType::Json
| MediaType::Jsonc
| MediaType::Json5
| MediaType::Wasm
| MediaType::Css
| MediaType::Html

View file

@ -497,6 +497,8 @@ impl<TSys: ModuleLoaderSys> PreparedModuleLoader<TSys> {
}
MediaType::Css
| MediaType::Html
| MediaType::Jsonc
| MediaType::Json5
| MediaType::Sql
| MediaType::Wasm
| MediaType::SourceMap => {

View file

@ -543,6 +543,8 @@ impl<TSys: FsMetadata> SloppyImportsResolver<TSys> {
| MediaType::Dcts
| MediaType::Tsx
| MediaType::Json
| MediaType::Jsonc
| MediaType::Json5
| MediaType::Wasm
| MediaType::Css
| MediaType::Html