mirror of
https://github.com/rust-lang/rust-analyzer.git
synced 2025-09-28 04:44:57 +00:00
internal: Make CompletionItem more POD-like
This commit is contained in:
parent
1f2d33fb40
commit
404a51f26a
4 changed files with 70 additions and 106 deletions
|
@ -108,10 +108,10 @@ fn completion_list_with_config(
|
|||
let items = get_all_items(config, ra_fixture, trigger_character);
|
||||
let items = items
|
||||
.into_iter()
|
||||
.filter(|it| it.kind() != CompletionItemKind::BuiltinType || it.label() == "u32")
|
||||
.filter(|it| include_keywords || it.kind() != CompletionItemKind::Keyword)
|
||||
.filter(|it| include_keywords || it.kind() != CompletionItemKind::Snippet)
|
||||
.sorted_by_key(|it| (it.kind(), it.label().to_owned(), it.detail().map(ToOwned::to_owned)))
|
||||
.filter(|it| it.kind != CompletionItemKind::BuiltinType || it.label == "u32")
|
||||
.filter(|it| include_keywords || it.kind != CompletionItemKind::Keyword)
|
||||
.filter(|it| include_keywords || it.kind != CompletionItemKind::Snippet)
|
||||
.sorted_by_key(|it| (it.kind, it.label.clone(), it.detail.as_ref().map(ToOwned::to_owned)))
|
||||
.collect();
|
||||
render_completion_list(items)
|
||||
}
|
||||
|
@ -138,8 +138,8 @@ pub(crate) fn do_completion_with_config(
|
|||
) -> Vec<CompletionItem> {
|
||||
get_all_items(config, code, None)
|
||||
.into_iter()
|
||||
.filter(|c| c.kind() == kind)
|
||||
.sorted_by(|l, r| l.label().cmp(r.label()))
|
||||
.filter(|c| c.kind == kind)
|
||||
.sorted_by(|l, r| l.label.cmp(&r.label))
|
||||
.collect()
|
||||
}
|
||||
|
||||
|
@ -148,18 +148,18 @@ fn render_completion_list(completions: Vec<CompletionItem>) -> String {
|
|||
s.chars().count()
|
||||
}
|
||||
let label_width =
|
||||
completions.iter().map(|it| monospace_width(it.label())).max().unwrap_or_default().min(22);
|
||||
completions.iter().map(|it| monospace_width(&it.label)).max().unwrap_or_default().min(22);
|
||||
completions
|
||||
.into_iter()
|
||||
.map(|it| {
|
||||
let tag = it.kind().tag();
|
||||
let var_name = format!("{tag} {}", it.label());
|
||||
let tag = it.kind.tag();
|
||||
let var_name = format!("{tag} {}", it.label);
|
||||
let mut buf = var_name;
|
||||
if let Some(detail) = it.detail() {
|
||||
let width = label_width.saturating_sub(monospace_width(it.label()));
|
||||
if let Some(detail) = it.detail {
|
||||
let width = label_width.saturating_sub(monospace_width(&it.label));
|
||||
format_to!(buf, "{:width$} {}", "", detail, width = width);
|
||||
}
|
||||
if it.deprecated() {
|
||||
if it.deprecated {
|
||||
format_to!(buf, " DEPRECATED");
|
||||
}
|
||||
format_to!(buf, "\n");
|
||||
|
@ -191,13 +191,13 @@ pub(crate) fn check_edit_with_config(
|
|||
.unwrap_or_else(|| panic!("can't find {what:?} completion in {completions:#?}"));
|
||||
let mut actual = db.file_text(position.file_id).to_string();
|
||||
|
||||
let mut combined_edit = completion.text_edit().to_owned();
|
||||
let mut combined_edit = completion.text_edit.clone();
|
||||
|
||||
resolve_completion_edits(
|
||||
&db,
|
||||
&config,
|
||||
position,
|
||||
completion.imports_to_add().iter().filter_map(|import_edit| {
|
||||
completion.import_to_add.iter().filter_map(|import_edit| {
|
||||
let import_path = &import_edit.import_path;
|
||||
let import_name = import_path.segments().last()?;
|
||||
Some((import_path.to_string(), import_name.to_string()))
|
||||
|
@ -225,7 +225,7 @@ pub(crate) fn get_all_items(
|
|||
.map_or_else(Vec::default, Into::into);
|
||||
// validate
|
||||
res.iter().for_each(|it| {
|
||||
let sr = it.source_range();
|
||||
let sr = it.source_range;
|
||||
assert!(
|
||||
sr.contains_inclusive(position.offset),
|
||||
"source range {sr:?} does not contain the offset {:?} of the completion request: {it:?}",
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue