mirror of
https://github.com/rust-lang/rust-analyzer
synced 2024-12-28 14:03:35 +00:00
Unconditionally enable location links in inlay hints again
This commit is contained in:
parent
5306eb06cc
commit
3a95864df5
7 changed files with 38 additions and 54 deletions
|
@ -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,
|
||||
|
@ -240,7 +239,6 @@ struct InlayHintLabelBuilder<'a> {
|
|||
db: &'a RootDatabase,
|
||||
result: InlayHintLabel,
|
||||
last_part: String,
|
||||
location_link_enabled: bool,
|
||||
location: Option<FileRange>,
|
||||
}
|
||||
|
||||
|
@ -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");
|
||||
}
|
||||
|
@ -266,9 +261,6 @@ impl HirWrite for InlayHintLabelBuilder<'_> {
|
|||
}
|
||||
|
||||
fn end_location_link(&mut self) {
|
||||
if !self.location_link_enabled {
|
||||
return;
|
||||
}
|
||||
self.make_new_part();
|
||||
}
|
||||
}
|
||||
|
@ -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);
|
||||
|
@ -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,
|
||||
|
@ -513,8 +503,6 @@ 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,
|
||||
|
@ -522,7 +510,7 @@ mod tests {
|
|||
closure_return_type_hints: ClosureReturnTypeHints::WithBlock,
|
||||
binding_mode_hints: true,
|
||||
lifetime_elision_hints: LifetimeElisionHints::Always,
|
||||
..DISABLED_CONFIG_WITH_LINKS
|
||||
..DISABLED_CONFIG
|
||||
};
|
||||
|
||||
#[track_caller]
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
@ -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);
|
||||
|
|
|
@ -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,
|
||||
};
|
||||
|
||||
|
@ -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 } }
|
||||
|
@ -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: "",
|
||||
},
|
||||
"",
|
||||
],
|
||||
},
|
||||
]
|
||||
|
@ -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 }
|
||||
|
@ -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);
|
||||
|
@ -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;
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -107,7 +107,6 @@ impl StaticIndex<'_> {
|
|||
.analysis
|
||||
.inlay_hints(
|
||||
&InlayHintsConfig {
|
||||
location_links: true,
|
||||
render_colons: true,
|
||||
discriminant_hints: crate::DiscriminantHints::Fieldless,
|
||||
type_hints: true,
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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,
|
||||
|
@ -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
|
||||
|
@ -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()) {
|
||||
|
@ -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,
|
||||
|
|
Loading…
Reference in a new issue