Skip to content

Unconditionally enable location links in inlay hints again #13963

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 2 commits into from
Jan 16, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 1 addition & 13 deletions crates/ide/src/inlay_hints.rs
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,6 @@ mod discriminant;

#[derive(Clone, Debug, PartialEq, Eq)]
pub struct InlayHintsConfig {
pub location_links: bool,
pub render_colons: bool,
pub type_hints: bool,
pub discriminant_hints: DiscriminantHints,
Expand Down Expand Up @@ -240,7 +239,6 @@ struct InlayHintLabelBuilder<'a> {
db: &'a RootDatabase,
result: InlayHintLabel,
last_part: String,
location_link_enabled: bool,
location: Option<FileRange>,
}

Expand All @@ -252,9 +250,6 @@ impl fmt::Write for InlayHintLabelBuilder<'_> {

impl HirWrite for InlayHintLabelBuilder<'_> {
fn start_location_link(&mut self, def: ModuleDefId) {
if !self.location_link_enabled {
return;
}
if self.location.is_some() {
never!("location link is already started");
}
Expand All @@ -266,9 +261,6 @@ impl HirWrite for InlayHintLabelBuilder<'_> {
}

fn end_location_link(&mut self) {
if !self.location_link_enabled {
return;
}
self.make_new_part();
}
}
Expand Down Expand Up @@ -334,7 +326,6 @@ fn label_of_ty(
db: sema.db,
last_part: String::new(),
location: None,
location_link_enabled: config.location_links,
result: InlayHintLabel::default(),
};
let _ = rec(sema, famous_defs, config.max_length, ty, &mut label_builder);
Expand Down Expand Up @@ -495,7 +486,6 @@ mod tests {
use super::ClosureReturnTypeHints;

pub(super) const DISABLED_CONFIG: InlayHintsConfig = InlayHintsConfig {
location_links: false,
discriminant_hints: DiscriminantHints::Never,
render_colons: false,
type_hints: false,
Expand All @@ -513,16 +503,14 @@ mod tests {
max_length: None,
closing_brace_hints_min_lines: None,
};
pub(super) const DISABLED_CONFIG_WITH_LINKS: InlayHintsConfig =
InlayHintsConfig { location_links: true, ..DISABLED_CONFIG };
pub(super) const TEST_CONFIG: InlayHintsConfig = InlayHintsConfig {
type_hints: true,
parameter_hints: true,
chaining_hints: true,
closure_return_type_hints: ClosureReturnTypeHints::WithBlock,
binding_mode_hints: true,
lifetime_elision_hints: LifetimeElisionHints::Always,
..DISABLED_CONFIG_WITH_LINKS
..DISABLED_CONFIG
};

#[track_caller]
Expand Down
5 changes: 2 additions & 3 deletions crates/ide/src/inlay_hints/bind_pat.rs
Original file line number Diff line number Diff line change
Expand Up @@ -188,8 +188,7 @@ mod tests {
use crate::{fixture, inlay_hints::InlayHintsConfig};

use crate::inlay_hints::tests::{
check, check_expect, check_with_config, DISABLED_CONFIG, DISABLED_CONFIG_WITH_LINKS,
TEST_CONFIG,
check, check_expect, check_with_config, DISABLED_CONFIG, TEST_CONFIG,
};
use crate::ClosureReturnTypeHints;

Expand Down Expand Up @@ -285,7 +284,7 @@ fn main() {
fn iterator_hint_regression_issue_12674() {
// Ensure we don't crash while solving the projection type of iterators.
check_expect(
InlayHintsConfig { chaining_hints: true, ..DISABLED_CONFIG_WITH_LINKS },
InlayHintsConfig { chaining_hints: true, ..DISABLED_CONFIG },
r#"
//- minicore: iterators
struct S<T>(T);
Expand Down
47 changes: 33 additions & 14 deletions crates/ide/src/inlay_hints/chaining.rs
Original file line number Diff line number Diff line change
Expand Up @@ -72,10 +72,7 @@ mod tests {
use expect_test::expect;

use crate::{
inlay_hints::tests::{
check_expect, check_with_config, DISABLED_CONFIG, DISABLED_CONFIG_WITH_LINKS,
TEST_CONFIG,
},
inlay_hints::tests::{check_expect, check_with_config, DISABLED_CONFIG, TEST_CONFIG},
InlayHintsConfig,
};

Expand All @@ -87,11 +84,7 @@ mod tests {
#[test]
fn chaining_hints_ignore_comments() {
check_expect(
InlayHintsConfig {
type_hints: false,
chaining_hints: true,
..DISABLED_CONFIG_WITH_LINKS
},
InlayHintsConfig { type_hints: false, chaining_hints: true, ..DISABLED_CONFIG },
r#"
struct A(B);
impl A { fn into_b(self) -> B { self.0 } }
Expand Down Expand Up @@ -197,14 +190,40 @@ fn main() {
range: 143..190,
kind: Chaining,
label: [
"C",
"",
InlayHintLabelPart {
text: "C",
linked_location: Some(
FileRange {
file_id: FileId(
0,
),
range: 51..52,
},
),
tooltip: "",
},
"",
],
},
InlayHint {
range: 143..179,
kind: Chaining,
label: [
"B",
"",
InlayHintLabelPart {
text: "B",
linked_location: Some(
FileRange {
file_id: FileId(
0,
),
range: 29..30,
},
),
tooltip: "",
},
"",
],
},
]
Expand All @@ -215,7 +234,7 @@ fn main() {
#[test]
fn struct_access_chaining_hints() {
check_expect(
InlayHintsConfig { chaining_hints: true, ..DISABLED_CONFIG_WITH_LINKS },
InlayHintsConfig { chaining_hints: true, ..DISABLED_CONFIG },
r#"
struct A { pub b: B }
struct B { pub c: C }
Expand Down Expand Up @@ -284,7 +303,7 @@ fn main() {
#[test]
fn generic_chaining_hints() {
check_expect(
InlayHintsConfig { chaining_hints: true, ..DISABLED_CONFIG_WITH_LINKS },
InlayHintsConfig { chaining_hints: true, ..DISABLED_CONFIG },
r#"
struct A<T>(T);
struct B<T>(T);
Expand Down Expand Up @@ -380,7 +399,7 @@ fn main() {
#[test]
fn shorten_iterator_chaining_hints() {
check_expect(
InlayHintsConfig { chaining_hints: true, ..DISABLED_CONFIG_WITH_LINKS },
InlayHintsConfig { chaining_hints: true, ..DISABLED_CONFIG },
r#"
//- minicore: iterators
use core::iter;
Expand Down
5 changes: 1 addition & 4 deletions crates/ide/src/inlay_hints/closing_brace.rs
Original file line number Diff line number Diff line change
Expand Up @@ -107,10 +107,7 @@ pub(super) fn hints(
return None;
}

let linked_location = config
.location_links
.then(|| name_range.map(|range| FileRange { file_id, range }))
.flatten();
let linked_location = name_range.map(|range| FileRange { file_id, range });
acc.push(InlayHint {
range: closing_token.text_range(),
kind: InlayKind::ClosingBrace,
Expand Down
1 change: 0 additions & 1 deletion crates/ide/src/static_index.rs
Original file line number Diff line number Diff line change
Expand Up @@ -107,7 +107,6 @@ impl StaticIndex<'_> {
.analysis
.inlay_hints(
&InlayHintsConfig {
location_links: true,
render_colons: true,
discriminant_hints: crate::DiscriminantHints::Fieldless,
type_hints: true,
Expand Down
2 changes: 0 additions & 2 deletions crates/rust-analyzer/src/bin/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -183,8 +183,6 @@ fn run_server() -> Result<()> {
}
}

config.client_specific_adjustments(&initialize_params.client_info);

let server_capabilities = rust_analyzer::server_capabilities(&config);

let initialize_result = lsp_types::InitializeResult {
Expand Down
18 changes: 1 addition & 17 deletions crates/rust-analyzer/src/config.rs
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ use ide_db::{
SnippetCap,
};
use itertools::Itertools;
use lsp_types::{ClientCapabilities, ClientInfo, MarkupKind};
use lsp_types::{ClientCapabilities, MarkupKind};
use project_model::{
CargoConfig, CargoFeatures, ProjectJson, ProjectJsonData, ProjectManifest, RustcSource,
UnsetTestCrates,
Expand Down Expand Up @@ -342,8 +342,6 @@ config_data! {
inlayHints_lifetimeElisionHints_enable: LifetimeElisionDef = "\"never\"",
/// Whether to prefer using parameter names as the name for elided lifetime hints if possible.
inlayHints_lifetimeElisionHints_useParameterNames: bool = "false",
/// Whether to use location links for parts of type mentioned in inlay hints.
inlayHints_locationLinks: bool = "true",
/// Maximum length for inlay hints. Set to null to have an unlimited length.
inlayHints_maxLength: Option<usize> = "25",
/// Whether to show function parameter name inlay hints at the call
Expand Down Expand Up @@ -728,19 +726,6 @@ impl Config {
}
}

pub fn client_specific_adjustments(&mut self, client_info: &Option<ClientInfo>) {
// FIXME: remove this when we drop support for vscode 1.65 and below
if let Some(client) = client_info {
if client.name.contains("Code") || client.name.contains("Codium") {
if let Some(version) = &client.version {
if version.as_str() < "1.76" {
self.data.inlayHints_locationLinks = false;
}
}
}
}
}

pub fn update(&mut self, mut json: serde_json::Value) -> Result<(), ConfigUpdateError> {
tracing::info!("updating config from JSON: {:#}", json);
if json.is_null() || json.as_object().map_or(false, |it| it.is_empty()) {
Expand Down Expand Up @@ -1229,7 +1214,6 @@ impl Config {

pub fn inlay_hints(&self) -> InlayHintsConfig {
InlayHintsConfig {
location_links: self.data.inlayHints_locationLinks,
render_colons: self.data.inlayHints_renderColons,
type_hints: self.data.inlayHints_typeHints_enable,
parameter_hints: self.data.inlayHints_parameterHints_enable,
Expand Down
5 changes: 0 additions & 5 deletions docs/user/generated_config.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -486,11 +486,6 @@ Whether to show inlay type hints for elided lifetimes in function signatures.
--
Whether to prefer using parameter names as the name for elided lifetime hints if possible.
--
[[rust-analyzer.inlayHints.locationLinks]]rust-analyzer.inlayHints.locationLinks (default: `true`)::
+
--
Whether to use location links for parts of type mentioned in inlay hints.
--
[[rust-analyzer.inlayHints.maxLength]]rust-analyzer.inlayHints.maxLength (default: `25`)::
+
--
Expand Down
5 changes: 0 additions & 5 deletions editors/code/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -1038,11 +1038,6 @@
"default": false,
"type": "boolean"
},
"rust-analyzer.inlayHints.locationLinks": {
"markdownDescription": "Whether to use location links for parts of type mentioned in inlay hints.",
"default": true,
"type": "boolean"
},
"rust-analyzer.inlayHints.maxLength": {
"markdownDescription": "Maximum length for inlay hints. Set to null to have an unlimited length.",
"default": 25,
Expand Down