Skip to content

Commit e21d7c2

Browse files
authored
Add flag for preserve jsx mode to rescript.json (#7547)
* Add flag feature to json parsing * Add test * Pass jsx flags to compiler
1 parent 6deee63 commit e21d7c2

File tree

4 files changed

+54
-0
lines changed

4 files changed

+54
-0
lines changed

rewatch/src/build/compile.rs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -394,6 +394,10 @@ pub fn compiler_args(
394394
};
395395

396396
let uncurried_args = root_config.get_uncurried_args(version);
397+
let jsx_args = root_config.get_jsx_args();
398+
let jsx_module_args = root_config.get_jsx_module_args();
399+
let jsx_mode_args = root_config.get_jsx_mode_args();
400+
let jsx_preserve_args = root_config.get_jsx_preserve_args();
397401
let gentype_arg = config.get_gentype_arg();
398402

399403
let warning_args: Vec<String> = match config.warnings.to_owned() {
@@ -476,6 +480,10 @@ pub fn compiler_args(
476480
Path::new("..").join("ocaml").to_string_lossy().to_string(),
477481
],
478482
dependency_paths.concat(),
483+
jsx_args,
484+
jsx_module_args,
485+
jsx_mode_args,
486+
jsx_preserve_args,
479487
uncurried_args,
480488
bsc_flags.to_owned(),
481489
warning_args,

rewatch/src/build/packages.rs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -839,6 +839,10 @@ impl Package {
839839
self.config.get_jsx_module_args()
840840
}
841841

842+
pub fn get_jsx_preserve_args(&self) -> Vec<String> {
843+
self.config.get_jsx_preserve_args()
844+
}
845+
842846
pub fn get_uncurried_args(&self, version: &str, root_package: &packages::Package) -> Vec<String> {
843847
root_package.config.get_uncurried_args(version)
844848
}

rewatch/src/build/parse.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -272,6 +272,7 @@ pub fn parser_args(
272272
let jsx_args = root_config.get_jsx_args();
273273
let jsx_module_args = root_config.get_jsx_module_args();
274274
let jsx_mode_args = root_config.get_jsx_mode_args();
275+
let jsx_preserve_args = root_config.get_jsx_preserve_args();
275276
let uncurried_args = root_config.get_uncurried_args(version);
276277
let bsc_flags = config::flatten_flags(&config.bsc_flags);
277278

@@ -285,6 +286,7 @@ pub fn parser_args(
285286
jsx_args,
286287
jsx_module_args,
287288
jsx_mode_args,
289+
jsx_preserve_args,
288290
uncurried_args,
289291
bsc_flags,
290292
vec![

rewatch/src/config.rs

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -184,6 +184,7 @@ pub struct JsxSpecs {
184184
pub mode: Option<JsxMode>,
185185
#[serde(rename = "v3-dependencies")]
186186
pub v3_dependencies: Option<Vec<String>>,
187+
pub preserve: Option<bool>,
187188
}
188189

189190
/// We do not care about the internal structure because the gentype config is loaded by bsc.
@@ -434,6 +435,16 @@ impl Config {
434435
}
435436
}
436437

438+
pub fn get_jsx_preserve_args(&self) -> Vec<String> {
439+
match self.jsx.to_owned() {
440+
Some(jsx) => match jsx.preserve {
441+
Some(true) => vec!["-bs-jsx-preserve".to_string()],
442+
_ => vec![],
443+
},
444+
_ => vec![],
445+
}
446+
}
447+
437448
pub fn get_uncurried_args(&self, version: &str) -> Vec<String> {
438449
match check_if_rescript11_or_higher(version) {
439450
Ok(true) => match self.uncurried.to_owned() {
@@ -614,6 +625,35 @@ mod tests {
614625
module: Some(JsxModule::Other(String::from("Voby.JSX"))),
615626
mode: None,
616627
v3_dependencies: None,
628+
preserve: None,
629+
},
630+
);
631+
}
632+
633+
#[test]
634+
fn test_jsx_preserve() {
635+
let json = r#"
636+
{
637+
"name": "my-monorepo",
638+
"sources": [ { "dir": "src/", "subdirs": true } ],
639+
"package-specs": [ { "module": "es6", "in-source": true } ],
640+
"suffix": ".mjs",
641+
"pinned-dependencies": [ "@teamwalnut/app" ],
642+
"bs-dependencies": [ "@teamwalnut/app" ],
643+
"jsx": { "version": 4, "preserve": true }
644+
}
645+
"#;
646+
647+
let config = serde_json::from_str::<Config>(json).unwrap();
648+
assert!(config.jsx.is_some());
649+
assert_eq!(
650+
config.jsx.unwrap(),
651+
JsxSpecs {
652+
version: Some(4),
653+
module: None,
654+
mode: None,
655+
v3_dependencies: None,
656+
preserve: Some(true),
617657
},
618658
);
619659
}

0 commit comments

Comments
 (0)