Skip to content

Commit 2c71254

Browse files
authored
chore: resolve module option in tsconfig#compilerOptions (#479)
1 parent 549c4ea commit 2c71254

File tree

4 files changed

+125
-2
lines changed

4 files changed

+125
-2
lines changed

fixtures/tsconfig/cases/merge_compiler_options/base-tsconfig.json

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44
"jsx": "react-jsx",
55
"jsxFactory": "h",
66
"jsxFragmentFactory": "Fragment",
7-
"jsxImportSource": "xxx"
7+
"jsxImportSource": "xxx",
8+
"module": "ESNext",
9+
"target": "ESNext"
810
}
911
}

src/tests/tsconfig_paths.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -236,6 +236,8 @@ fn test_merge_tsconfig() {
236236
assert_eq!(compiler_options.jsx_factory, Some("h".to_string()));
237237
assert_eq!(compiler_options.jsx_fragment_factory, Some("Fragment".to_string()));
238238
assert_eq!(compiler_options.jsx_import_source, Some("xxx".to_string()));
239+
assert_eq!(compiler_options.module, Some("ESNext".to_string()));
240+
assert_eq!(compiler_options.target, Some("ESNext".to_string()));
239241
}
240242

241243
#[test]

src/tsconfig.rs

Lines changed: 77 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -126,8 +126,44 @@ pub trait TsConfig: Sized + Debug {
126126
compiler_options.set_jsx_import_source(jsx_import_source.to_string());
127127
}
128128
}
129-
}
130129

130+
if compiler_options.verbatim_module_syntax().is_none() {
131+
if let Some(verbatim_module_syntax) =
132+
tsconfig.compiler_options().verbatim_module_syntax()
133+
{
134+
compiler_options.set_verbatim_module_syntax(*verbatim_module_syntax);
135+
}
136+
}
137+
138+
if compiler_options.preserve_value_imports().is_none() {
139+
if let Some(preserve_value_imports) =
140+
tsconfig.compiler_options().preserve_value_imports()
141+
{
142+
compiler_options.set_preserve_value_imports(*preserve_value_imports);
143+
}
144+
}
145+
146+
if compiler_options.imports_not_used_as_values().is_none() {
147+
if let Some(imports_not_used_as_values) =
148+
tsconfig.compiler_options().imports_not_used_as_values()
149+
{
150+
compiler_options
151+
.set_imports_not_used_as_values(imports_not_used_as_values.to_string());
152+
}
153+
}
154+
155+
if compiler_options.target().is_none() {
156+
if let Some(target) = tsconfig.compiler_options().target() {
157+
compiler_options.set_target(target.to_string());
158+
}
159+
}
160+
161+
if compiler_options.module().is_none() {
162+
if let Some(module) = tsconfig.compiler_options().module() {
163+
compiler_options.set_module(module.to_string());
164+
}
165+
}
166+
}
131167
/// "Build" the root tsconfig, resolve:
132168
///
133169
/// * `{configDir}` template variable
@@ -347,6 +383,46 @@ pub trait CompilerOptions {
347383

348384
/// Sets JSX import source.
349385
fn set_jsx_import_source(&mut self, _jsx_import_source: String) {}
386+
387+
/// Whether to use verbatim module syntax.
388+
fn verbatim_module_syntax(&self) -> Option<&bool> {
389+
None
390+
}
391+
392+
/// Sets whether to use verbatim module syntax.
393+
fn set_verbatim_module_syntax(&mut self, _verbatim_module_syntax: bool) {}
394+
395+
/// Whether to preserve value imports.
396+
fn preserve_value_imports(&self) -> Option<&bool> {
397+
None
398+
}
399+
400+
/// Sets whether to preserve value imports.
401+
fn set_preserve_value_imports(&mut self, _preserve_value_imports: bool) {}
402+
403+
/// Whether to use imports not used as values.
404+
fn imports_not_used_as_values(&self) -> Option<&str> {
405+
None
406+
}
407+
408+
/// Sets whether to use imports not used as values.
409+
fn set_imports_not_used_as_values(&mut self, _imports_not_used_as_values: String) {}
410+
411+
/// Target.
412+
fn target(&self) -> Option<&str> {
413+
None
414+
}
415+
416+
/// Sets the target.
417+
fn set_target(&mut self, _target: String) {}
418+
419+
/// Module.
420+
fn module(&self) -> Option<&str> {
421+
None
422+
}
423+
424+
/// Sets the module.
425+
fn set_module(&mut self, _module: String) {}
350426
}
351427

352428
/// Project Reference.

src/tsconfig_serde.rs

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -145,6 +145,9 @@ pub struct CompilerOptionsSerde {
145145

146146
/// <https://www.typescriptlang.org/tsconfig/#target>
147147
pub target: Option<String>,
148+
149+
/// <https://www.typescriptlang.org/tsconfig/#module>
150+
pub module: Option<String>,
148151
}
149152

150153
impl CompilerOptions for CompilerOptionsSerde {
@@ -223,6 +226,46 @@ impl CompilerOptions for CompilerOptionsSerde {
223226
fn set_jsx_import_source(&mut self, jsx_import_source: String) {
224227
self.jsx_import_source = Some(jsx_import_source);
225228
}
229+
230+
fn verbatim_module_syntax(&self) -> Option<&bool> {
231+
self.verbatim_module_syntax.as_ref()
232+
}
233+
234+
fn set_verbatim_module_syntax(&mut self, verbatim_module_syntax: bool) {
235+
self.verbatim_module_syntax = Some(verbatim_module_syntax);
236+
}
237+
238+
fn preserve_value_imports(&self) -> Option<&bool> {
239+
self.preserve_value_imports.as_ref()
240+
}
241+
242+
fn set_preserve_value_imports(&mut self, preserve_value_imports: bool) {
243+
self.preserve_value_imports = Some(preserve_value_imports);
244+
}
245+
246+
fn imports_not_used_as_values(&self) -> Option<&str> {
247+
self.imports_not_used_as_values.as_deref()
248+
}
249+
250+
fn set_imports_not_used_as_values(&mut self, imports_not_used_as_values: String) {
251+
self.imports_not_used_as_values = Some(imports_not_used_as_values);
252+
}
253+
254+
fn target(&self) -> Option<&str> {
255+
self.target.as_deref()
256+
}
257+
258+
fn set_target(&mut self, target: String) {
259+
self.target = Some(target);
260+
}
261+
262+
fn module(&self) -> Option<&str> {
263+
self.module.as_deref()
264+
}
265+
266+
fn set_module(&mut self, module: String) {
267+
self.module = Some(module);
268+
}
226269
}
227270

228271
/// Value for the "extends" field.

0 commit comments

Comments
 (0)