summaryrefslogtreecommitdiff
path: root/cli/lsp/tsc.rs
diff options
context:
space:
mode:
Diffstat (limited to 'cli/lsp/tsc.rs')
-rw-r--r--cli/lsp/tsc.rs114
1 files changed, 28 insertions, 86 deletions
diff --git a/cli/lsp/tsc.rs b/cli/lsp/tsc.rs
index ec1eb29fa..fa35f63bd 100644
--- a/cli/lsp/tsc.rs
+++ b/cli/lsp/tsc.rs
@@ -22,9 +22,6 @@ use super::urls::INVALID_SPECIFIER;
use crate::args::jsr_url;
use crate::args::FmtOptionsConfig;
-use crate::cache::HttpCache;
-use crate::lsp::cache::CacheMetadata;
-use crate::lsp::documents::Documents;
use crate::lsp::logging::lsp_warn;
use crate::tsc;
use crate::tsc::ResolveArgs;
@@ -220,7 +217,6 @@ fn normalize_diagnostic(
pub struct TsServer {
performance: Arc<Performance>,
- cache: Arc<dyn HttpCache>,
sender: mpsc::UnboundedSender<Request>,
receiver: Mutex<Option<mpsc::UnboundedReceiver<Request>>>,
specifier_map: Arc<TscSpecifierMap>,
@@ -232,7 +228,6 @@ impl std::fmt::Debug for TsServer {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
f.debug_struct("TsServer")
.field("performance", &self.performance)
- .field("cache", &self.cache)
.field("sender", &self.sender)
.field("receiver", &self.receiver)
.field("specifier_map", &self.specifier_map)
@@ -331,11 +326,10 @@ impl PendingChange {
}
impl TsServer {
- pub fn new(performance: Arc<Performance>, cache: Arc<dyn HttpCache>) -> Self {
+ pub fn new(performance: Arc<Performance>) -> Self {
let (tx, request_rx) = mpsc::unbounded_channel::<Request>();
Self {
performance,
- cache,
sender: tx,
receiver: Mutex::new(Some(request_rx)),
specifier_map: Arc::new(TscSpecifierMap::new()),
@@ -363,13 +357,11 @@ impl TsServer {
// on the `TsServer` struct.
let receiver = self.receiver.lock().take().unwrap();
let performance = self.performance.clone();
- let cache = self.cache.clone();
let specifier_map = self.specifier_map.clone();
let _join_handle = thread::spawn(move || {
run_tsc_thread(
receiver,
performance.clone(),
- cache.clone(),
specifier_map.clone(),
maybe_inspector_server,
)
@@ -4340,7 +4332,6 @@ impl TscRuntime {
fn run_tsc_thread(
mut request_rx: UnboundedReceiver<Request>,
performance: Arc<Performance>,
- cache: Arc<dyn HttpCache>,
specifier_map: Arc<TscSpecifierMap>,
maybe_inspector_server: Option<Arc<InspectorServer>>,
) {
@@ -4349,7 +4340,7 @@ fn run_tsc_thread(
// supplied snapshot is an isolate that contains the TypeScript language
// server.
let mut tsc_runtime = JsRuntime::new(RuntimeOptions {
- extensions: vec![deno_tsc::init_ops(performance, cache, specifier_map)],
+ extensions: vec![deno_tsc::init_ops(performance, specifier_map)],
startup_snapshot: Some(tsc::compiler_snapshot()),
inspector: maybe_inspector_server.is_some(),
..Default::default()
@@ -4422,19 +4413,11 @@ deno_core::extension!(deno_tsc,
],
options = {
performance: Arc<Performance>,
- cache: Arc<dyn HttpCache>,
specifier_map: Arc<TscSpecifierMap>,
},
state = |state, options| {
state.put(State::new(
- Arc::new(StateSnapshot {
- project_version: 0,
- assets: Default::default(),
- cache_metadata: CacheMetadata::new(options.cache.clone()),
- config: Default::default(),
- documents: Documents::new(options.cache.clone()),
- resolver: Default::default(),
- }),
+ Default::default(),
options.specifier_map,
options.performance,
));
@@ -5078,11 +5061,9 @@ impl TscRequest {
#[cfg(test)]
mod tests {
use super::*;
- use crate::cache::GlobalHttpCache;
use crate::cache::HttpCache;
- use crate::cache::RealDenoCacheEnv;
use crate::http_util::HeadersMap;
- use crate::lsp::cache::CacheMetadata;
+ use crate::lsp::cache::LspCache;
use crate::lsp::config::Config;
use crate::lsp::config::WorkspaceSettings;
use crate::lsp::documents::Documents;
@@ -5090,29 +5071,14 @@ mod tests {
use crate::lsp::resolver::LspResolver;
use crate::lsp::text::LineIndex;
use pretty_assertions::assert_eq;
- use std::path::Path;
use test_util::TempDir;
- async fn mock_state_snapshot(
- fixtures: &[(&str, &str, i32, LanguageId)],
- location: &Path,
+ async fn setup(
ts_config: Value,
- ) -> StateSnapshot {
- let cache = Arc::new(GlobalHttpCache::new(
- location.to_path_buf(),
- RealDenoCacheEnv,
- ));
- let mut documents = Documents::new(cache.clone());
- for (specifier, source, version, language_id) in fixtures {
- let specifier =
- resolve_url(specifier).expect("failed to create specifier");
- documents.open(
- specifier.clone(),
- *version,
- *language_id,
- (*source).into(),
- );
- }
+ sources: &[(&str, &str, i32, LanguageId)],
+ ) -> (TsServer, Arc<StateSnapshot>, LspCache) {
+ let temp_dir = TempDir::new();
+ let cache = LspCache::new(Some(temp_dir.uri()));
let mut config = Config::default();
config
.tree
@@ -5129,30 +5095,29 @@ mod tests {
)
.await;
let resolver = LspResolver::default()
- .with_new_config(&config, cache.clone(), None, None)
+ .with_new_config(&config, &cache, None)
.await;
- StateSnapshot {
+ let mut documents = Documents::default();
+ documents.update_config(&config, &resolver, &cache, &Default::default());
+ for (specifier, source, version, language_id) in sources {
+ let specifier =
+ resolve_url(specifier).expect("failed to create specifier");
+ documents.open(
+ specifier.clone(),
+ *version,
+ *language_id,
+ (*source).into(),
+ );
+ }
+ let snapshot = Arc::new(StateSnapshot {
project_version: 0,
documents,
assets: Default::default(),
- cache_metadata: CacheMetadata::new(cache),
config: Arc::new(config),
resolver,
- }
- }
-
- async fn setup(
- temp_dir: &TempDir,
- config: Value,
- sources: &[(&str, &str, i32, LanguageId)],
- ) -> (TsServer, Arc<StateSnapshot>, Arc<GlobalHttpCache>) {
- let location = temp_dir.path().join("deps").to_path_buf();
- let cache =
- Arc::new(GlobalHttpCache::new(location.clone(), RealDenoCacheEnv));
- let snapshot =
- Arc::new(mock_state_snapshot(sources, &location, config).await);
+ });
let performance = Arc::new(Performance::default());
- let ts_server = TsServer::new(performance, cache.clone());
+ let ts_server = TsServer::new(performance);
ts_server.start(None).unwrap();
(ts_server, snapshot, cache)
}
@@ -5182,9 +5147,7 @@ mod tests {
#[tokio::test]
async fn test_get_diagnostics() {
- let temp_dir = TempDir::new();
let (ts_server, snapshot, _) = setup(
- &temp_dir,
json!({
"target": "esnext",
"module": "esnext",
@@ -5230,9 +5193,7 @@ mod tests {
#[tokio::test]
async fn test_get_diagnostics_lib() {
- let temp_dir = TempDir::new();
let (ts_server, snapshot, _) = setup(
- &temp_dir,
json!({
"target": "esnext",
"module": "esnext",
@@ -5258,9 +5219,7 @@ mod tests {
#[tokio::test]
async fn test_module_resolution() {
- let temp_dir = TempDir::new();
let (ts_server, snapshot, _) = setup(
- &temp_dir,
json!({
"target": "esnext",
"module": "esnext",
@@ -5291,9 +5250,7 @@ mod tests {
#[tokio::test]
async fn test_bad_module_specifiers() {
- let temp_dir = TempDir::new();
let (ts_server, snapshot, _) = setup(
- &temp_dir,
json!({
"target": "esnext",
"module": "esnext",
@@ -5339,9 +5296,7 @@ mod tests {
#[tokio::test]
async fn test_remote_modules() {
- let temp_dir = TempDir::new();
let (ts_server, snapshot, _) = setup(
- &temp_dir,
json!({
"target": "esnext",
"module": "esnext",
@@ -5372,9 +5327,7 @@ mod tests {
#[tokio::test]
async fn test_partial_modules() {
- let temp_dir = TempDir::new();
let (ts_server, snapshot, _) = setup(
- &temp_dir,
json!({
"target": "esnext",
"module": "esnext",
@@ -5441,9 +5394,7 @@ mod tests {
#[tokio::test]
async fn test_no_debug_failure() {
- let temp_dir = TempDir::new();
let (ts_server, snapshot, _) = setup(
- &temp_dir,
json!({
"target": "esnext",
"module": "esnext",
@@ -5489,8 +5440,7 @@ mod tests {
#[tokio::test]
async fn test_request_assets() {
- let temp_dir = TempDir::new();
- let (ts_server, snapshot, _) = setup(&temp_dir, json!({}), &[]).await;
+ let (ts_server, snapshot, _) = setup(json!({}), &[]).await;
let assets = get_isolate_assets(&ts_server, snapshot).await;
let mut asset_names = assets
.iter()
@@ -5522,9 +5472,7 @@ mod tests {
#[tokio::test]
async fn test_modify_sources() {
- let temp_dir = TempDir::new();
let (ts_server, snapshot, cache) = setup(
- &temp_dir,
json!({
"target": "esnext",
"module": "esnext",
@@ -5547,6 +5495,7 @@ mod tests {
let specifier_dep =
resolve_url("https://deno.land/x/example/a.ts").unwrap();
cache
+ .global()
.set(
&specifier_dep,
HeadersMap::default(),
@@ -5581,6 +5530,7 @@ mod tests {
})
);
cache
+ .global()
.set(
&specifier_dep,
HeadersMap::default(),
@@ -5656,9 +5606,7 @@ mod tests {
character: 16,
})
.unwrap();
- let temp_dir = TempDir::new();
let (ts_server, snapshot, _) = setup(
- &temp_dir,
json!({
"target": "esnext",
"module": "esnext",
@@ -5807,9 +5755,7 @@ mod tests {
character: 33,
})
.unwrap();
- let temp_dir = TempDir::new();
let (ts_server, snapshot, _) = setup(
- &temp_dir,
json!({
"target": "esnext",
"module": "esnext",
@@ -5916,9 +5862,7 @@ mod tests {
#[tokio::test]
async fn test_get_edits_for_file_rename() {
- let temp_dir = TempDir::new();
let (ts_server, snapshot, _) = setup(
- &temp_dir,
json!({
"target": "esnext",
"module": "esnext",
@@ -5994,9 +5938,7 @@ mod tests {
#[tokio::test]
async fn resolve_unknown_dependency() {
- let temp_dir = TempDir::new();
let (_, snapshot, _) = setup(
- &temp_dir,
json!({
"target": "esnext",
"module": "esnext",