diff --git a/crates/ty_server/src/server/api/diagnostics.rs b/crates/ty_server/src/server/api/diagnostics.rs index 56a85a0cd7ef83..c687b65fd8e2fb 100644 --- a/crates/ty_server/src/server/api/diagnostics.rs +++ b/crates/ty_server/src/server/api/diagnostics.rs @@ -24,6 +24,7 @@ use crate::system::{AnySystemPath, file_to_url}; use crate::{DIAGNOSTIC_NAME, Db, DiagnosticMode}; use crate::{PositionEncoding, Session}; +#[derive(Debug)] pub(super) struct Diagnostics { items: Vec, encoding: PositionEncoding, diff --git a/crates/ty_server/src/server/api/notifications/did_open.rs b/crates/ty_server/src/server/api/notifications/did_open.rs index 942c1a193b49b0..c47b2854552293 100644 --- a/crates/ty_server/src/server/api/notifications/did_open.rs +++ b/crates/ty_server/src/server/api/notifications/did_open.rs @@ -2,6 +2,7 @@ use lsp_types::notification::DidOpenTextDocument; use lsp_types::{DidOpenTextDocumentParams, TextDocumentItem}; use crate::TextDocument; +use crate::document::LanguageId; use crate::server::Result; use crate::server::api::diagnostics::publish_diagnostics_if_needed; use crate::server::api::traits::{NotificationHandler, SyncNotificationHandler}; @@ -30,10 +31,12 @@ impl SyncNotificationHandler for DidOpenTextDocumentHandler { }, } = params; - let document = session.open_text_document( - TextDocument::new(uri, text, version).with_language_id(&language_id), - ); + let text_doc = TextDocument::new(uri, text, version).with_language_id(&language_id); + if matches!(text_doc.language_id(), Some(LanguageId::Other)) { + return Ok(()); + } + let document = session.open_text_document(text_doc); publish_diagnostics_if_needed(&document, session, client); Ok(()) diff --git a/crates/ty_server/src/session.rs b/crates/ty_server/src/session.rs index d30e2e2a8018ec..764825740e3f7f 100644 --- a/crates/ty_server/src/session.rs +++ b/crates/ty_server/src/session.rs @@ -24,7 +24,7 @@ use ruff_python_ast::PySourceType; use ty_combine::Combine; use ty_project::metadata::Options; use ty_project::watch::{ChangeEvent, CreatedKind}; -use ty_project::{ChangeResult, CheckMode, Db as _, ProjectDatabase, ProjectMetadata}; +use ty_project::{ChangeResult, Db as _, ProjectDatabase, ProjectMetadata}; use index::DocumentError; use ty_python_semantic::MisconfigurationMode; @@ -530,13 +530,13 @@ impl Session { if let Some(global_options) = global_options { let global_settings = global_options.into_settings(); - if global_settings.diagnostic_mode().is_workspace() { - for project in self.projects.values_mut() { - project.db.set_check_mode(CheckMode::AllFiles); - } - } self.global_settings = Arc::new(global_settings); } + if let Some(check_mode) = self.global_settings.diagnostic_mode().to_check_mode() { + for project in self.projects.values_mut() { + project.db.set_check_mode(check_mode); + } + } self.register_capabilities(client); } diff --git a/crates/ty_server/src/session/options.rs b/crates/ty_server/src/session/options.rs index cafd80a5735a32..1abcafdebd15f1 100644 --- a/crates/ty_server/src/session/options.rs +++ b/crates/ty_server/src/session/options.rs @@ -8,6 +8,7 @@ use serde::{Deserialize, Serialize}; use serde_json::{Map, Value}; use ty_combine::Combine; use ty_ide::{CompletionSettings, InlayHintSettings}; +use ty_project::CheckMode; use ty_project::metadata::Options as TyOptions; use ty_project::metadata::options::ProjectOptionsOverrides; use ty_project::metadata::value::{RangedValue, RelativePathBuf, ValueSource}; @@ -369,6 +370,17 @@ impl DiagnosticMode { matches!(self, DiagnosticMode::OpenFilesOnly) } + /// Returns this diagnostic mode as a check mode. + /// + /// This returns `None` when diagnostics are disabled. + pub(crate) const fn to_check_mode(self) -> Option { + match self { + DiagnosticMode::Off => None, + DiagnosticMode::OpenFilesOnly => Some(CheckMode::OpenFiles), + DiagnosticMode::Workspace => Some(CheckMode::AllFiles), + } + } + pub(crate) const fn is_off(self) -> bool { matches!(self, DiagnosticMode::Off) } diff --git a/crates/ty_server/tests/e2e/publish_diagnostics.rs b/crates/ty_server/tests/e2e/publish_diagnostics.rs index 6c4be0c25ba0cf..1d0077c1a122d2 100644 --- a/crates/ty_server/tests/e2e/publish_diagnostics.rs +++ b/crates/ty_server/tests/e2e/publish_diagnostics.rs @@ -326,8 +326,6 @@ def foo() -> str: }, }; server.send_notification::(params); - let _close_diagnostics = server.await_notification::(); - let diagnostics = server.await_notification::(); insta::assert_debug_snapshot!(diagnostics); diff --git a/crates/ty_server/tests/e2e/snapshots/e2e__publish_diagnostics__changing_language_of_file_without_extension-2.snap b/crates/ty_server/tests/e2e/snapshots/e2e__publish_diagnostics__changing_language_of_file_without_extension-2.snap index 91a4a10b81dc0a..f29237130921a3 100644 --- a/crates/ty_server/tests/e2e/snapshots/e2e__publish_diagnostics__changing_language_of_file_without_extension-2.snap +++ b/crates/ty_server/tests/e2e/snapshots/e2e__publish_diagnostics__changing_language_of_file_without_extension-2.snap @@ -15,7 +15,5 @@ PublishDiagnosticsParams { fragment: None, }, diagnostics: [], - version: Some( - 1, - ), + version: None, }