Skip to content

Commit 107d406

Browse files
committed
feat(tsconfig): support files / include / exclude (#659)
Related to rolldown/rolldown#5867
1 parent bd21291 commit 107d406

File tree

4 files changed

+39
-6
lines changed

4 files changed

+39
-6
lines changed

fixtures/tsconfig/cases/extends-compiler-options/base-tsconfig.json renamed to fixtures/tsconfig/cases/extends/base-tsconfig.json

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,5 +5,8 @@
55
"emitDecoratorMetadata": true,
66
"useDefineForClassFields": true,
77
"rewriteRelativeImportExtensions": true
8-
}
8+
},
9+
"files": ["files"],
10+
"include": ["include"],
11+
"exclude": ["exclude"]
912
}

src/tests/tsconfig_extends.rs

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,8 @@ use std::path::Path;
88
use crate::{ResolveOptions, Resolver, TsConfig, TsconfigOptions, TsconfigReferences};
99

1010
#[test]
11-
fn test_extend_tsconfig_compiler_options() {
12-
let f = super::fixture_root().join("tsconfig/cases/extends-compiler-options");
11+
fn test_extend_tsconfig() {
12+
let f = super::fixture_root().join("tsconfig/cases/extends");
1313

1414
let resolver = Resolver::new(ResolveOptions {
1515
tsconfig: Some(TsconfigOptions {
@@ -20,9 +20,13 @@ fn test_extend_tsconfig_compiler_options() {
2020
});
2121

2222
let resolution = resolver.resolve_tsconfig(&f).expect("resolved");
23-
let compiler_options = resolution.compiler_options();
2423

25-
// Should inherit compilerOptions from parent
24+
// Should inherit tsconfig from parent
25+
assert_eq!(resolution.files, Some(vec!["files".to_string()]));
26+
assert_eq!(resolution.include, Some(vec!["include".to_string()]));
27+
assert_eq!(resolution.exclude, Some(vec!["exclude".to_string()]));
28+
29+
let compiler_options = resolution.compiler_options();
2630
assert_eq!(compiler_options.base_url, Some(f.join("src")));
2731
assert_eq!(compiler_options.allow_js, Some(true));
2832
assert_eq!(compiler_options.emit_decorator_metadata, Some(true));

src/tsconfig.rs

Lines changed: 27 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,15 @@ pub struct TsConfig {
2727
#[serde(skip)]
2828
pub path: PathBuf,
2929

30+
#[serde(default)]
31+
pub files: Option<Vec<String>>,
32+
33+
#[serde(default)]
34+
pub include: Option<Vec<String>>,
35+
36+
#[serde(default)]
37+
pub exclude: Option<Vec<String>>,
38+
3039
#[serde(default)]
3140
pub extends: Option<ExtendsField>,
3241

@@ -135,9 +144,26 @@ impl TsConfig {
135144
/// Inherits settings from the given tsconfig into `self`.
136145
#[allow(clippy::cognitive_complexity, clippy::too_many_lines)]
137146
pub(crate) fn extend_tsconfig(&mut self, tsconfig: &Self) {
138-
let compiler_options = self.compiler_options_mut();
147+
if self.files.is_none() {
148+
if let Some(files) = &tsconfig.files {
149+
self.files = Some(files.clone());
150+
}
151+
}
152+
153+
if self.include.is_none() {
154+
if let Some(include) = &tsconfig.include {
155+
self.include = Some(include.clone());
156+
}
157+
}
158+
159+
if self.exclude.is_none() {
160+
if let Some(exclude) = &tsconfig.exclude {
161+
self.exclude = Some(exclude.clone());
162+
}
163+
}
139164

140165
let tsconfig_dir = tsconfig.directory();
166+
let compiler_options = self.compiler_options_mut();
141167

142168
if compiler_options.base_url().is_none() {
143169
if let Some(base_url) = tsconfig.compiler_options().base_url() {

0 commit comments

Comments
 (0)