summaryrefslogtreecommitdiff
path: root/cli/tsc
diff options
context:
space:
mode:
authorDavid Sherret <dsherret@users.noreply.github.com>2023-03-21 18:19:42 -0400
committerGitHub <noreply@github.com>2023-03-21 18:19:42 -0400
commit253b556e6f430012c3094d47838fe397fa588028 (patch)
tree0679662bfbd9caa85e191c68b5fef76e79aa49e7 /cli/tsc
parent7e61e8f0e0abbf8cbd1a8c2ea21cee9ff11403c2 (diff)
perf(check): type check local files only when not using `--all` (#18329)
Closes #18171
Diffstat (limited to 'cli/tsc')
-rw-r--r--cli/tsc/00_typescript.js3
-rw-r--r--cli/tsc/99_main_compiler.js30
-rw-r--r--cli/tsc/mod.rs4
3 files changed, 31 insertions, 6 deletions
diff --git a/cli/tsc/00_typescript.js b/cli/tsc/00_typescript.js
index 8bd168cd3..a54ab1e32 100644
--- a/cli/tsc/00_typescript.js
+++ b/cli/tsc/00_typescript.js
@@ -38066,6 +38066,7 @@ ${lanes.join("\n")}
name: "allowImportingTsExtensions",
type: "boolean",
affectsSemanticDiagnostics: true,
+ affectsBuildInfo: true,
category: Diagnostics.Modules,
description: Diagnostics.Allow_imports_to_include_TypeScript_file_extensions_Requires_moduleResolution_bundler_and_either_noEmit_or_emitDeclarationOnly_to_be_set,
defaultValueDescription: false
@@ -120426,7 +120427,7 @@ ${lanes.join("\n")}
const { optionsNameMap } = getOptionsNameMap();
for (const name of getOwnKeys(options).sort(compareStringsCaseSensitive)) {
const optionInfo = optionsNameMap.get(name.toLowerCase());
- if (optionInfo == null ? void 0 : optionInfo.affectsBuildInfo) {
+ if (optionInfo && (optionInfo.affectsBuildInfo || optionInfo.affectsSemanticDiagnostics)) {
(result || (result = {}))[name] = convertToReusableCompilerOptionValue(
optionInfo,
options[name],
diff --git a/cli/tsc/99_main_compiler.js b/cli/tsc/99_main_compiler.js
index cb844624c..c7df8e85d 100644
--- a/cli/tsc/99_main_compiler.js
+++ b/cli/tsc/99_main_compiler.js
@@ -328,7 +328,7 @@ delete Object.prototype.__proto__;
}
}
- /** @param {ts.Diagnostic[]} diagnostics */
+ /** @param {readonly ts.Diagnostic[]} diagnostics */
function fromTypeScriptDiagnostic(diagnostics) {
return diagnostics.map(({ relatedInformation: ri, source, ...diag }) => {
/** @type {any} */
@@ -750,6 +750,7 @@ delete Object.prototype.__proto__;
* @property {Record<string, any>} config
* @property {boolean} debug
* @property {string[]} rootNames
+ * @property {boolean} localOnly
*/
/**
@@ -776,7 +777,7 @@ delete Object.prototype.__proto__;
/** The API that is called by Rust when executing a request.
* @param {Request} request
*/
- function exec({ config, debug: debugFlag, rootNames }) {
+ function exec({ config, debug: debugFlag, rootNames, localOnly }) {
setLogDebug(debugFlag, "TS");
performanceStart();
if (logDebug) {
@@ -800,12 +801,31 @@ delete Object.prototype.__proto__;
configFileParsingDiagnostics,
});
+ const checkFiles = localOnly
+ ? rootNames
+ .filter((n) => !n.startsWith("http"))
+ .map((checkName) => {
+ const sourceFile = program.getSourceFile(checkName);
+ if (sourceFile == null) {
+ throw new Error("Could not find source file for: " + checkName);
+ }
+ return sourceFile;
+ })
+ : undefined;
const diagnostics = [
...program.getConfigFileParsingDiagnostics(),
- ...program.getSyntacticDiagnostics(),
+ ...(checkFiles == null
+ ? program.getSyntacticDiagnostics()
+ : ts.sortAndDeduplicateDiagnostics(
+ checkFiles.map((s) => program.getSyntacticDiagnostics(s)).flat(),
+ )),
...program.getOptionsDiagnostics(),
...program.getGlobalDiagnostics(),
- ...program.getSemanticDiagnostics(),
+ ...(checkFiles == null
+ ? program.getSemanticDiagnostics()
+ : ts.sortAndDeduplicateDiagnostics(
+ checkFiles.map((s) => program.getSemanticDiagnostics(s)).flat(),
+ )),
].filter((diagnostic) => !IGNORED_DIAGNOSTICS.includes(diagnostic.code));
// emit the tsbuildinfo file
@@ -867,7 +887,7 @@ delete Object.prototype.__proto__;
allowNonTsExtensions: true,
allowImportingTsExtensions: true,
});
- if (errors.length) {
+ if (errors.length > 0 && logDebug) {
debug(ts.formatDiagnostics(errors, host));
}
compilationSettings = options;
diff --git a/cli/tsc/mod.rs b/cli/tsc/mod.rs
index 43fccb37e..2f2015542 100644
--- a/cli/tsc/mod.rs
+++ b/cli/tsc/mod.rs
@@ -1,6 +1,7 @@
// Copyright 2018-2023 the Deno authors. All rights reserved. MIT license.
use crate::args::TsConfig;
+use crate::args::TypeCheckMode;
use crate::node;
use crate::node::node_resolve_npm_reference;
use crate::node::NodeResolution;
@@ -308,6 +309,7 @@ pub struct Request {
/// A vector of strings that represent the root/entry point modules for the
/// program.
pub root_names: Vec<(ModuleSpecifier, MediaType)>,
+ pub check_mode: TypeCheckMode,
}
#[derive(Debug, Clone, Eq, PartialEq)]
@@ -806,6 +808,7 @@ pub fn exec(request: Request) -> Result<Response, AnyError> {
"config": request.config,
"debug": request.debug,
"rootNames": root_names,
+ "localOnly": request.check_mode == TypeCheckMode::Local,
});
let request_str = request_value.to_string();
let exec_source = format!("globalThis.exec({request_str})");
@@ -962,6 +965,7 @@ mod tests {
maybe_npm_resolver: None,
maybe_tsbuildinfo: None,
root_names: vec![(specifier.clone(), MediaType::TypeScript)],
+ check_mode: TypeCheckMode::All,
};
exec(request)
}