From 02be7d96283a43f99df64c5867045423de6bbd0b Mon Sep 17 00:00:00 2001 From: oxalica Date: Fri, 23 Sep 2022 18:04:11 +0800 Subject: [PATCH] Tweak builtins and hint user about missing docs --- crates/builtin/build.rs | 9 +++++---- crates/builtin/src/lib.rs | 6 +++--- crates/ide/src/ide/completion.rs | 2 +- crates/ide/src/ide/hover.rs | 23 ++++++++++++++--------- 4 files changed, 23 insertions(+), 17 deletions(-) diff --git a/crates/builtin/build.rs b/crates/builtin/build.rs index 2ba3718..fb496bf 100644 --- a/crates/builtin/build.rs +++ b/crates/builtin/build.rs @@ -68,13 +68,14 @@ fn main() { "true" | "false" | "null" => "Const", _ => "Function", }; - let summary = builtins_dump + let args = builtins_dump .get(name) .map(|b @ DumpBuiltin { args, arity, .. }| { assert_eq!(args.len(), *arity, "Arity mismatch: {b:?}"); - let args = args.iter().flat_map(|arg| [" ", arg]).collect::(); - format!("builtins.{name}{args}") - }); + args.iter().flat_map(|arg| [" ", arg]).collect::() + }) + .unwrap_or_default(); + let summary = format!("`builtins.{name}{args}`"); let doc = builtins_dump.get(name).map(|b| &b.doc); phf_gen.entry(name, &format!("crate::Builtin {{ kind: crate::BuiltinKind::{kind}, is_global: {is_global}, summary: {summary:?}, doc: {doc:?} }}")); } diff --git a/crates/builtin/src/lib.rs b/crates/builtin/src/lib.rs index 532959a..e70052d 100644 --- a/crates/builtin/src/lib.rs +++ b/crates/builtin/src/lib.rs @@ -2,7 +2,7 @@ pub struct Builtin { pub kind: BuiltinKind, pub is_global: bool, - pub summary: Option<&'static str>, + pub summary: &'static str, pub doc: Option<&'static str>, } @@ -27,7 +27,7 @@ mod tests { Builtin { kind: BuiltinKind::Const, is_global: true, - summary: None, + summary: "`builtins.true`", doc: None, }, ); @@ -37,7 +37,7 @@ mod tests { Builtin { kind: BuiltinKind::Function, is_global: false, - summary: Some("builtins.attrNames set"), + summary: "`builtins.attrNames set`", doc: Some( "\ Return the names of the attributes in the set *set* in an diff --git a/crates/ide/src/ide/completion.rs b/crates/ide/src/ide/completion.rs index 7058e4f..538903c 100644 --- a/crates/ide/src/ide/completion.rs +++ b/crates/ide/src/ide/completion.rs @@ -177,7 +177,7 @@ fn complete_expr( source_range, replace: name.into(), kind: b.kind.into(), - brief: b.summary.map(|s| s.to_owned()), + brief: Some(b.summary.into()), doc: b.doc.map(|s| s.to_owned()), }) .for_each(&mut feed); diff --git a/crates/ide/src/ide/hover.rs b/crates/ide/src/ide/hover.rs index e0db477..c50c7bb 100644 --- a/crates/ide/src/ide/hover.rs +++ b/crates/ide/src/ide/hover.rs @@ -42,14 +42,11 @@ pub(crate) fn hover( None => {} Some(ResolveResult::Builtin(name)) => { let b = &ALL_BUILTINS[*name]; - let mut markup = String::new(); - match b.summary { - None => writeln!(markup, "`builtins.{name}`").unwrap(), - Some(summary) => writeln!(markup, "`{summary}`").unwrap(), - } - if let Some(doc) = b.doc { - writeln!(markup, "\n{doc}").unwrap(); - } + let markup = format!( + "{}\n\n{}", + b.summary, + b.doc.unwrap_or("(No documentation from Nix)"), + ); return Some(HoverResult { range, markup }); } Some(ResolveResult::WithExprs(withs)) => { @@ -166,7 +163,15 @@ mod tests { #[test] fn builtin() { - check("$0true", "true", expect!["`builtins.true`"]); + check( + "$0true", + "true", + expect![[r#" + `builtins.true` + + (No documentation from Nix) + "#]], + ); check( "$0map", "map",