From 5498c80e60ce1bdeb938f9c5020d2496835511d1 Mon Sep 17 00:00:00 2001 From: David Sherret Date: Thu, 14 Sep 2023 12:14:16 -0400 Subject: [PATCH] fix: enable explicit resource management transform (#156) --- src/transpiling/mod.rs | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/src/transpiling/mod.rs b/src/transpiling/mod.rs index c565f61..c90f096 100644 --- a/src/transpiling/mod.rs +++ b/src/transpiling/mod.rs @@ -313,6 +313,7 @@ pub fn fold_program( ), options.transform_jsx ), + proposal::explicit_resource_management::explicit_resource_management(), Optional::new( react::react( source_map.clone(), @@ -537,6 +538,37 @@ export class A { assert!(transpiled_source.source_map.is_none()); } + #[test] + fn test_explicit_resource_management() { + let specifier = + ModuleSpecifier::parse("https://deno.land/x/mod.ts").unwrap(); + let source = "using data = create();\nconsole.log(data);"; + let module = parse_module(ParseParams { + specifier: specifier.as_str().to_string(), + text_info: SourceTextInfo::from_string(source.to_string()), + media_type: MediaType::TypeScript, + capture_tokens: false, + maybe_syntax: None, + scope_analysis: false, + }) + .unwrap(); + let transpiled_source = module.transpile(&EmitOptions::default()).unwrap(); + let expected_text = r#"try { + var _stack = []; + var data = _using(_stack, create()); + console.log(data); +} catch (_) { + var _error = _; + var _hasError = true; +} finally{ + _dispose(_stack, _error, _hasError); +}"#; + assert_eq!( + &transpiled_source.text[..expected_text.len()], + expected_text + ); + } + #[test] fn test_transpile_tsx() { let specifier =