//! Used by `rustc` when loading a plugin.
+use crate::Registry;
use rustc::middle::cstore::MetadataLoader;
use rustc::session::Session;
use rustc_metadata::locator;
-use crate::Registry;
+use rustc_span::symbol::sym;
+use rustc_span::Span;
use std::borrow::ToOwned;
use std::env;
use std::mem;
use std::path::PathBuf;
use syntax::ast::{Crate, Ident};
use syntax::struct_span_err;
-use syntax::symbol::sym;
-use syntax_pos::Span;
use rustc_error_codes::*;
}
/// Read plugin metadata and dynamically load registrar functions.
-pub fn load_plugins(sess: &Session,
- metadata_loader: &dyn MetadataLoader,
- krate: &Crate) -> Vec<PluginRegistrarFn> {
+pub fn load_plugins(
+ sess: &Session,
+ metadata_loader: &dyn MetadataLoader,
+ krate: &Crate,
+) -> Vec<PluginRegistrarFn> {
let mut plugins = Vec::new();
for attr in &krate.attrs {
for plugin in attr.meta_item_list().unwrap_or_default() {
match plugin.ident() {
- Some(ident) if plugin.is_word() =>
- load_plugin(&mut plugins, sess, metadata_loader, ident),
+ Some(ident) if plugin.is_word() => {
+ load_plugin(&mut plugins, sess, metadata_loader, ident)
+ }
_ => call_malformed_plugin_attribute(sess, plugin.span()),
}
}
plugins
}
-fn load_plugin(plugins: &mut Vec<PluginRegistrarFn>,
- sess: &Session,
- metadata_loader: &dyn MetadataLoader,
- ident: Ident) {
+fn load_plugin(
+ plugins: &mut Vec<PluginRegistrarFn>,
+ sess: &Session,
+ metadata_loader: &dyn MetadataLoader,
+ ident: Ident,
+) {
let registrar = locator::find_plugin_registrar(sess, metadata_loader, ident.span, ident.name);
if let Some((lib, disambiguator)) = registrar {
}
// Dynamically link a registrar function into the compiler process.
-fn dylink_registrar(sess: &Session,
- span: Span,
- path: PathBuf,
- symbol: String) -> PluginRegistrarFn {
+fn dylink_registrar(
+ sess: &Session,
+ span: Span,
+ path: PathBuf,
+ symbol: String,
+) -> PluginRegistrarFn {
use rustc_metadata::dynamic_lib::DynamicLibrary;
// Make sure the path contains a / or the linker will search for it.
// this is fatal: there are almost certainly macros we need
// inside this crate, so continue would spew "macro undefined"
// errors
- Err(err) => {
- sess.span_fatal(span, &err)
- }
+ Err(err) => sess.span_fatal(span, &err),
};
unsafe {
- let registrar =
- match lib.symbol(&symbol) {
- Ok(registrar) => {
- mem::transmute::<*mut u8, PluginRegistrarFn>(registrar)
- }
- // again fatal if we can't register macros
- Err(err) => {
- sess.span_fatal(span, &err)
- }
- };
+ let registrar = match lib.symbol(&symbol) {
+ Ok(registrar) => mem::transmute::<*mut u8, PluginRegistrarFn>(registrar),
+ // again fatal if we can't register macros
+ Err(err) => sess.span_fatal(span, &err),
+ };
// Intentionally leak the dynamic library. We can't ever unload it
// since the library can make things that will live arbitrarily long