Skip to content

Commit 0a6b526

Browse files
authored
fix: resolve default jsxImportSource for jsx automatic (#159)
1 parent 5471736 commit 0a6b526

File tree

1 file changed

+38
-1
lines changed

1 file changed

+38
-1
lines changed

src/workspace/mod.rs

+38-1
Original file line numberDiff line numberDiff line change
@@ -1486,6 +1486,10 @@ impl WorkspaceDirectory {
14861486
.map(|r| r.to_raw_jsx_compiler_options())
14871487
.unwrap_or_default();
14881488
let member = config.member.to_raw_jsx_compiler_options();
1489+
let is_jsx_automatic = matches!(
1490+
member.jsx.as_deref().or(base.jsx.as_deref()),
1491+
Some("react-jsx" | "react-jsxdev" | "precompile"),
1492+
);
14891493
let import_source = member
14901494
.jsx_import_source
14911495
.map(|specifier| JsxImportSourceSpecifierConfig {
@@ -1499,6 +1503,12 @@ impl WorkspaceDirectory {
14991503
specifier,
15001504
})
15011505
})
1506+
})
1507+
.or_else(|| {
1508+
is_jsx_automatic.then(|| JsxImportSourceSpecifierConfig {
1509+
base: config.member.specifier.clone(),
1510+
specifier: "react".to_string(),
1511+
})
15021512
});
15031513
let import_source_types = member
15041514
.jsx_import_source_types
@@ -1513,7 +1523,8 @@ impl WorkspaceDirectory {
15131523
specifier,
15141524
})
15151525
})
1516-
});
1526+
})
1527+
.or_else(|| import_source.clone());
15171528
let module = match member.jsx.as_deref().or(base.jsx.as_deref()) {
15181529
Some("react-jsx") => "jsx-runtime".to_string(),
15191530
Some("react-jsxdev") => "jsx-dev-runtime".to_string(),
@@ -5712,6 +5723,32 @@ pub mod test {
57125723
assert!(member.to_maybe_jsx_import_source_config().is_ok());
57135724
}
57145725

5726+
#[test]
5727+
fn test_jsx_import_source_defaults() {
5728+
let member = workspace_for_root_and_member(
5729+
json!({
5730+
"compilerOptions": { "jsx": "react-jsx" }
5731+
}),
5732+
json!({}),
5733+
);
5734+
let config = member.to_maybe_jsx_import_source_config().unwrap().unwrap();
5735+
assert_eq!(config.import_source.unwrap().specifier, "react");
5736+
assert_eq!(config.import_source_types.unwrap().specifier, "react");
5737+
}
5738+
5739+
#[test]
5740+
fn test_jsx_import_source_types_defaults_import_source() {
5741+
let member = workspace_for_root_and_member(
5742+
json!({
5743+
"compilerOptions": { "jsx": "react-jsx", "jsxImportSource": "jsx" }
5744+
}),
5745+
json!({}),
5746+
);
5747+
let config = member.to_maybe_jsx_import_source_config().unwrap().unwrap();
5748+
assert_eq!(config.import_source.unwrap().specifier, "jsx");
5749+
assert_eq!(config.import_source_types.unwrap().specifier, "jsx");
5750+
}
5751+
57155752
#[test]
57165753
fn test_jsx_precompile_skip_setting() {
57175754
let member = workspace_for_root_and_member(

0 commit comments

Comments
 (0)