Skip to content

Commit bc83875

Browse files
authored
refactor(es/react): Add preserve supports (#11025)
**Related issue:** - Closes #9929
1 parent e495403 commit bc83875

6 files changed

Lines changed: 33 additions & 3 deletions

File tree

.changeset/cyan-tables-provide.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
swc_ecma_transforms_react: major
3+
---
4+
5+
refactor(es/react): Add `preserve` supports

crates/swc/src/config/mod.rs

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -763,6 +763,9 @@ impl Options {
763763
{
764764
plugin_transforms.unwrap()
765765
} else {
766+
let jsx_enabled =
767+
syntax.jsx() && transform.react.runtime != Some(react::Runtime::Preserve);
768+
766769
let decorator_pass: Box<dyn Pass> =
767770
match transform.decorator_version.unwrap_or_default() {
768771
DecoratorVersion::V202112 => Box::new(decorators(decorators::Config {
@@ -831,7 +834,7 @@ impl Options {
831834
(
832835
Optional::new(
833836
typescript::typescript(ts_config, unresolved_mark, top_level_mark),
834-
syntax.typescript() && !syntax.jsx(),
837+
syntax.typescript() && !jsx_enabled,
835838
),
836839
Optional::new(
837840
typescript::tsx::<Option<&dyn Comments>>(
@@ -857,7 +860,7 @@ impl Options {
857860
unresolved_mark,
858861
top_level_mark,
859862
),
860-
syntax.typescript() && syntax.jsx(),
863+
syntax.typescript() && jsx_enabled,
861864
),
862865
)
863866
},
@@ -874,7 +877,7 @@ impl Options {
874877
top_level_mark,
875878
unresolved_mark,
876879
),
877-
syntax.jsx(),
880+
jsx_enabled,
878881
),
879882
built_pass,
880883
Optional::new(jest::jest(), transform.hidden.jest.into_bool()),
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
{
2+
"jsc": {
3+
"target": "es5",
4+
"parser": {
5+
"syntax": "ecmascript",
6+
"jsx": true
7+
},
8+
"transform": {
9+
"react": {
10+
"runtime": "preserve"
11+
}
12+
}
13+
}
14+
}
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
export default () => <View>Hello world</View>;
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
export default function() {
2+
return <View>Hello world</View>;
3+
};

crates/swc_ecma_transforms_react/src/jsx/mod.rs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,8 @@ pub enum Runtime {
4141
Automatic,
4242
/// `classic`
4343
Classic,
44+
/// `preserve`
45+
Preserve,
4446
}
4547

4648
/// Note: This will changed in v2
@@ -636,6 +638,7 @@ where
636638
}
637639
.into()
638640
}
641+
Runtime::Preserve => unreachable!(),
639642
}
640643
}
641644

@@ -924,6 +927,7 @@ where
924927
}
925928
.into()
926929
}
930+
Runtime::Preserve => unreachable!(),
927931
}
928932
}
929933

0 commit comments

Comments
 (0)