diff --git a/crates/ty_ide/src/inlay_hints.rs b/crates/ty_ide/src/inlay_hints.rs index b38e50a011..4e1e76cefb 100644 --- a/crates/ty_ide/src/inlay_hints.rs +++ b/crates/ty_ide/src/inlay_hints.rs @@ -67,7 +67,7 @@ pub fn inlay_hints<'db>( } /// Settings to control the behavior of inlay hints. -#[derive(Clone, Default, Debug)] +#[derive(Clone, Debug)] pub struct InlayHintSettings { /// Whether to show variable type hints. /// @@ -76,6 +76,7 @@ pub struct InlayHintSettings { /// x": Literal[1]" = 1 /// ``` pub variable_types: bool, + /// Whether to show function argument names. /// /// For example, this would enable / disable hints like the ones quoted below: @@ -86,6 +87,15 @@ pub struct InlayHintSettings { pub function_argument_names: bool, } +impl Default for InlayHintSettings { + fn default() -> Self { + Self { + variable_types: true, + function_argument_names: true, + } + } +} + struct InlayHintVisitor<'a, 'db> { db: &'db dyn Db, model: SemanticModel<'db>, @@ -818,7 +828,7 @@ mod tests { def foo(x: str) -> int: ... def foo(x): return x - + foo(42) foo('hello')", ); diff --git a/crates/ty_server/src/session/options.rs b/crates/ty_server/src/session/options.rs index 009c9e016b..25ac0595ea 100644 --- a/crates/ty_server/src/session/options.rs +++ b/crates/ty_server/src/session/options.rs @@ -243,8 +243,8 @@ struct InlayHintOptions { impl InlayHintOptions { fn into_settings(self) -> InlayHintSettings { InlayHintSettings { - variable_types: self.variable_types.unwrap_or_default(), - function_argument_names: self.function_argument_names.unwrap_or_default(), + variable_types: self.variable_types.unwrap_or(true), + function_argument_names: self.function_argument_names.unwrap_or(true), } } } diff --git a/crates/ty_server/tests/e2e/inlay_hints.rs b/crates/ty_server/tests/e2e/inlay_hints.rs index b95c1bdf5b..9516bc9d96 100644 --- a/crates/ty_server/tests/e2e/inlay_hints.rs +++ b/crates/ty_server/tests/e2e/inlay_hints.rs @@ -5,6 +5,60 @@ use ty_server::ClientOptions; use crate::TestServerBuilder; +/// Tests that the default value of inlay hints settings is correct i.e., they're all enabled +/// by default. +#[test] +fn default_inlay_hints() -> Result<()> { + let workspace_root = SystemPath::new("src"); + let foo = SystemPath::new("src/foo.py"); + let foo_content = "\ +x = 1 + +def foo(a: int) -> int: + return a + 1 + +foo(1) +"; + + let mut server = TestServerBuilder::new()? + .with_initialization_options(ClientOptions::default()) + .with_workspace(workspace_root, None)? + .with_file(foo, foo_content)? + .enable_inlay_hints(true) + .build()? + .wait_until_workspaces_are_initialized()?; + + server.open_text_document(foo, &foo_content, 1); + let _ = server.await_notification::()?; + + let hints = server + .inlay_hints_request(foo, Range::new(Position::new(0, 0), Position::new(6, 0)))? + .unwrap(); + + insta::assert_json_snapshot!(hints, @r#" + [ + { + "position": { + "line": 0, + "character": 1 + }, + "label": ": Literal[1]", + "kind": 1 + }, + { + "position": { + "line": 5, + "character": 4 + }, + "label": "a=", + "kind": 1 + } + ] + "#); + + Ok(()) +} + /// Tests that disabling variable types inlay hints works correctly. #[test] fn variable_inlay_hints_disabled() -> Result<()> {