mirror of
https://github.com/rust-lang/rust-analyzer.git
synced 2025-09-28 21:05:02 +00:00
Improve parameter hints a bit & add emacs support
- just include the name, not e.g. `mut` - don't return empty hints (or `_`)
This commit is contained in:
parent
d1d91dfe4d
commit
18ec4e3403
3 changed files with 38 additions and 23 deletions
|
@ -169,9 +169,22 @@ impl From<&'_ ast::FnDef> for FunctionSignature {
|
||||||
res.push(self_param.syntax().text().to_string())
|
res.push(self_param.syntax().text().to_string())
|
||||||
}
|
}
|
||||||
|
|
||||||
res.extend(param_list.params().map(|param| {
|
res.extend(
|
||||||
param.pat().map(|pat| pat.syntax().text().to_string()).unwrap_or_default()
|
param_list
|
||||||
}));
|
.params()
|
||||||
|
.map(|param| {
|
||||||
|
Some(
|
||||||
|
param
|
||||||
|
.pat()?
|
||||||
|
.syntax()
|
||||||
|
.descendants()
|
||||||
|
.find_map(ast::Name::cast)?
|
||||||
|
.text()
|
||||||
|
.to_string(),
|
||||||
|
)
|
||||||
|
})
|
||||||
|
.map(|param| param.unwrap_or_default()),
|
||||||
|
);
|
||||||
}
|
}
|
||||||
res
|
res
|
||||||
}
|
}
|
||||||
|
|
|
@ -116,7 +116,7 @@ fn get_param_name_hints(
|
||||||
let hints = parameters
|
let hints = parameters
|
||||||
.zip(args)
|
.zip(args)
|
||||||
.filter_map(|(param, arg)| {
|
.filter_map(|(param, arg)| {
|
||||||
if arg.syntax().kind() == SyntaxKind::LITERAL {
|
if arg.syntax().kind() == SyntaxKind::LITERAL && !param.is_empty() {
|
||||||
Some((arg.syntax().text_range(), param))
|
Some((arg.syntax().text_range(), param))
|
||||||
} else {
|
} else {
|
||||||
None
|
None
|
||||||
|
@ -683,12 +683,12 @@ fn main() {
|
||||||
struct Test {}
|
struct Test {}
|
||||||
|
|
||||||
impl Test {
|
impl Test {
|
||||||
fn method(&self, param: i32) -> i32 {
|
fn method(&self, mut param: i32) -> i32 {
|
||||||
param * 2
|
param * 2
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn test_func(foo: i32, bar: i32, msg: &str, _: i32, last: i32) -> i32 {
|
fn test_func(mut foo: i32, bar: i32, msg: &str, _: i32, last: i32) -> i32 {
|
||||||
foo + bar
|
foo + bar
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -704,37 +704,32 @@ fn main() {
|
||||||
assert_debug_snapshot!(analysis.inlay_hints(file_id, None).unwrap(), @r###"
|
assert_debug_snapshot!(analysis.inlay_hints(file_id, None).unwrap(), @r###"
|
||||||
[
|
[
|
||||||
InlayHint {
|
InlayHint {
|
||||||
range: [207; 218),
|
range: [215; 226),
|
||||||
kind: TypeHint,
|
kind: TypeHint,
|
||||||
label: "i32",
|
label: "i32",
|
||||||
},
|
},
|
||||||
InlayHint {
|
InlayHint {
|
||||||
range: [251; 252),
|
range: [259; 260),
|
||||||
kind: ParameterHint,
|
kind: ParameterHint,
|
||||||
label: "foo",
|
label: "foo",
|
||||||
},
|
},
|
||||||
InlayHint {
|
InlayHint {
|
||||||
range: [254; 255),
|
range: [262; 263),
|
||||||
kind: ParameterHint,
|
kind: ParameterHint,
|
||||||
label: "bar",
|
label: "bar",
|
||||||
},
|
},
|
||||||
InlayHint {
|
InlayHint {
|
||||||
range: [257; 264),
|
range: [265; 272),
|
||||||
kind: ParameterHint,
|
kind: ParameterHint,
|
||||||
label: "msg",
|
label: "msg",
|
||||||
},
|
},
|
||||||
InlayHint {
|
InlayHint {
|
||||||
range: [266; 267),
|
range: [331; 334),
|
||||||
kind: ParameterHint,
|
|
||||||
label: "_",
|
|
||||||
},
|
|
||||||
InlayHint {
|
|
||||||
range: [323; 326),
|
|
||||||
kind: ParameterHint,
|
kind: ParameterHint,
|
||||||
label: "param",
|
label: "param",
|
||||||
},
|
},
|
||||||
InlayHint {
|
InlayHint {
|
||||||
range: [350; 354),
|
range: [358; 362),
|
||||||
kind: ParameterHint,
|
kind: ParameterHint,
|
||||||
label: "param",
|
label: "param",
|
||||||
},
|
},
|
||||||
|
|
|
@ -210,9 +210,9 @@
|
||||||
;; inlay hints
|
;; inlay hints
|
||||||
(defun rust-analyzer--update-inlay-hints (buffer)
|
(defun rust-analyzer--update-inlay-hints (buffer)
|
||||||
(if (and (rust-analyzer--initialized?) (eq buffer (current-buffer)))
|
(if (and (rust-analyzer--initialized?) (eq buffer (current-buffer)))
|
||||||
(lsp-send-request-async
|
(lsp-request-async
|
||||||
(lsp-make-request "rust-analyzer/inlayHints"
|
"rust-analyzer/inlayHints"
|
||||||
(list :textDocument (lsp--text-document-identifier)))
|
(list :textDocument (lsp--text-document-identifier))
|
||||||
(lambda (res)
|
(lambda (res)
|
||||||
(remove-overlays (point-min) (point-max) 'rust-analyzer--inlay-hint t)
|
(remove-overlays (point-min) (point-max) 'rust-analyzer--inlay-hint t)
|
||||||
(dolist (hint res)
|
(dolist (hint res)
|
||||||
|
@ -221,9 +221,16 @@
|
||||||
(overlay (make-overlay beg end)))
|
(overlay (make-overlay beg end)))
|
||||||
(overlay-put overlay 'rust-analyzer--inlay-hint t)
|
(overlay-put overlay 'rust-analyzer--inlay-hint t)
|
||||||
(overlay-put overlay 'evaporate t)
|
(overlay-put overlay 'evaporate t)
|
||||||
(overlay-put overlay 'after-string (propertize (concat ": " label)
|
(cond
|
||||||
'font-lock-face 'font-lock-comment-face)))))
|
((string= kind "TypeHint")
|
||||||
'tick))
|
(overlay-put overlay 'after-string (propertize (concat ": " label)
|
||||||
|
'font-lock-face 'font-lock-comment-face)))
|
||||||
|
((string= kind "ParameterHint")
|
||||||
|
(overlay-put overlay 'before-string (propertize (concat label ": ")
|
||||||
|
'font-lock-face 'font-lock-comment-face)))
|
||||||
|
)
|
||||||
|
)))
|
||||||
|
:mode 'tick))
|
||||||
nil)
|
nil)
|
||||||
|
|
||||||
(defvar-local rust-analyzer--inlay-hints-timer nil)
|
(defvar-local rust-analyzer--inlay-hints-timer nil)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue