mirror of
https://github.com/rust-lang/rust.git
synced 2024-12-01 19:23:50 +00:00
Auto merge of #13963 - Veykril:location-links, r=Veykril
Unconditionally enable location links in inlay hints again While the goto functionality still doesn't work in VSCode, the hover part actually does. Also the way this was gated before, one only had to update their config while r-a was running to have the links enabled automatically due to the check only living in the startup code.
This commit is contained in:
commit
1d02474cd2
@ -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,
|
||||
|
@ -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`)::
|
||||
+
|
||||
--
|
||||
|
@ -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,
|
||||
|
Loading…
Reference in New Issue
Block a user