use rls_data::{SigElement, Signature};
use rustc::hir::def::{Res, DefKind};
-use syntax::ast::{self, NodeId};
+use syntax::ast::{self, Extern, NodeId};
use syntax::print::pprust;
-use syntax_pos::sym;
pub fn item_signature(item: &ast::Item, scx: &SaveContext<'_, '_>) -> Option<Signature> {
if !scx.config.signatures {
}
}
-fn push_abi(text: &mut String, abi: ast::Abi) {
- if abi.symbol != sym::Rust {
- text.push_str(&format!("extern \"{}\" ", abi.symbol));
+fn push_extern(text: &mut String, ext: Extern) {
+ match ext {
+ Extern::None => {}
+ Extern::Implicit => text.push_str("extern "),
+ Extern::Explicit(abi) => text.push_str(&format!("extern \"{}\" ", abi.symbol)),
}
}
if f.unsafety == ast::Unsafety::Unsafe {
text.push_str("unsafe ");
}
- push_abi(&mut text, f.abi);
+ push_extern(&mut text, f.ext);
text.push_str("fn(");
let mut defs = vec![];
if header.unsafety == ast::Unsafety::Unsafe {
text.push_str("unsafe ");
}
- push_abi(&mut text, header.abi);
+ push_extern(&mut text, header.ext);
text.push_str("fn ");
let mut sig = name_and_generics(text, offset, generics, self.id, self.ident, scx)?;
Ok(merge_sigs(sig.text.clone(), vec![sig, ty]))
}
- ast::ItemKind::OpaqueTy(ref bounds, ref generics) => {
- let text = "type ".to_owned();
- let mut sig = name_and_generics(text, offset, generics, self.id, self.ident, scx)?;
-
- sig.text.push_str(" = impl ");
- sig.text.push_str(&pprust::bounds_to_string(bounds));
- sig.text.push(';');
-
- Ok(sig)
- }
ast::ItemKind::Enum(_, ref generics) => {
let text = "enum ".to_owned();
let mut sig = name_and_generics(text, offset, generics, self.id, self.ident, scx)?;
if m.header.unsafety == ast::Unsafety::Unsafe {
text.push_str("unsafe ");
}
- push_abi(&mut text, m.header.abi);
+ push_extern(&mut text, m.header.ext);
text.push_str("fn ");
let mut sig = name_and_generics(text, 0, generics, id, ident, scx)?;