diff --git a/Cargo.lock b/Cargo.lock index 1c84e0a..64a40e0 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1,6 +1,6 @@ # This file is automatically @generated by Cargo. # It is not intended for manual editing. -version = 3 +version = 4 [[package]] name = "addr2line" @@ -700,7 +700,7 @@ dependencies = [ [[package]] name = "package-version-server" -version = "0.0.6" +version = "0.0.8" dependencies = [ "anyhow", "chrono", diff --git a/src/main.rs b/src/main.rs index d3c246c..ca638df 100644 --- a/src/main.rs +++ b/src/main.rs @@ -229,7 +229,7 @@ impl LanguageServer for Backend { break; } } - let mut completion_items: Vec<_> = response + let mut completion_items_with_labels: Vec<_> = response .package_versions .into_iter() .filter_map(|package_version| { @@ -237,17 +237,28 @@ impl LanguageServer for Backend { if !label.starts_with(&query) { return None; } + Some((package_version, label)) + }) + .collect(); + + completion_items_with_labels.sort_by(|(lhs, _), (rhs, _)| rhs.version.cmp(&lhs.version)); + + let completion_items: Vec<_> = completion_items_with_labels + .into_iter() + .enumerate() + .map(|(index, (package_version, label))| { let insert_text = Some(label.clone()); - Some(CompletionItem { + let sort_text = Some(format!("{:08}", index)); + CompletionItem { label, insert_text, + sort_text, detail: Some(package_version.date.format("%d/%m/%Y %H:%M").to_string()), ..Default::default() - }) + } }) .collect(); - completion_items - .sort_by(|lhs_version, rhs_version| rhs_version.label.cmp(&lhs_version.label)); + Ok(Some(CompletionResponse::Array(completion_items))) } }