mirror of
https://github.com/rust-lang/rust.git
synced 2024-11-25 16:24:46 +00:00
Rollup merge of #100768 - Facel3ss1:plugin-impl-translation, r=davidtwco
Migrate `rustc_plugin_impl` to `SessionDiagnostic` Migration of the `rustc_plugin_impl` crate. ~Draft PR because it is blocked on #100694 for `#[fatal(...)]` support~ (this has been merged, and I've changed over to `#[diag(...)]` now too), but I would also like to know if what I did with `LoadPluginError` is okay, because all it does is display the error message from `libloading` ([See conversation on zulip](https://rust-lang.zulipchat.com/#narrow/stream/147480-t-compiler.2Fwg-diagnostics/topic/.23100717.20diagnostic.20translation/near/294327843)). This crate is apparently for a deprecated feature which is used by servo, so I don't know how much this matters anyway.
This commit is contained in:
commit
35f2d125ca
@ -4321,6 +4321,7 @@ dependencies = [
|
||||
"rustc_ast",
|
||||
"rustc_errors",
|
||||
"rustc_lint",
|
||||
"rustc_macros",
|
||||
"rustc_metadata",
|
||||
"rustc_session",
|
||||
"rustc_span",
|
||||
|
@ -0,0 +1,4 @@
|
||||
plugin_impl_load_plugin_error = {$msg}
|
||||
|
||||
plugin_impl_malformed_plugin_attribute = malformed `plugin` attribute
|
||||
.label = malformed attribute
|
@ -41,6 +41,7 @@ fluent_messages! {
|
||||
lint => "../locales/en-US/lint.ftl",
|
||||
parser => "../locales/en-US/parser.ftl",
|
||||
passes => "../locales/en-US/passes.ftl",
|
||||
plugin_impl => "../locales/en-US/plugin_impl.ftl",
|
||||
privacy => "../locales/en-US/privacy.ftl",
|
||||
typeck => "../locales/en-US/typeck.ftl",
|
||||
}
|
||||
|
@ -11,6 +11,7 @@ doctest = false
|
||||
libloading = "0.7.1"
|
||||
rustc_errors = { path = "../rustc_errors" }
|
||||
rustc_lint = { path = "../rustc_lint" }
|
||||
rustc_macros = { path = "../rustc_macros" }
|
||||
rustc_metadata = { path = "../rustc_metadata" }
|
||||
rustc_ast = { path = "../rustc_ast" }
|
||||
rustc_session = { path = "../rustc_session" }
|
||||
|
20
compiler/rustc_plugin_impl/src/errors.rs
Normal file
20
compiler/rustc_plugin_impl/src/errors.rs
Normal file
@ -0,0 +1,20 @@
|
||||
//! Errors emitted by plugin_impl
|
||||
|
||||
use rustc_macros::SessionDiagnostic;
|
||||
use rustc_span::Span;
|
||||
|
||||
#[derive(SessionDiagnostic)]
|
||||
#[diag(plugin_impl::load_plugin_error)]
|
||||
pub struct LoadPluginError {
|
||||
#[primary_span]
|
||||
pub span: Span,
|
||||
pub msg: String,
|
||||
}
|
||||
|
||||
#[derive(SessionDiagnostic)]
|
||||
#[diag(plugin_impl::malformed_plugin_attribute, code = "E0498")]
|
||||
pub struct MalformedPluginAttribute {
|
||||
#[primary_span]
|
||||
#[label]
|
||||
pub span: Span,
|
||||
}
|
@ -8,9 +8,12 @@
|
||||
|
||||
#![doc(html_root_url = "https://doc.rust-lang.org/nightly/nightly-rustc/")]
|
||||
#![recursion_limit = "256"]
|
||||
#![deny(rustc::untranslatable_diagnostic)]
|
||||
#![deny(rustc::diagnostic_outside_of_impl)]
|
||||
|
||||
use rustc_lint::LintStore;
|
||||
|
||||
mod errors;
|
||||
pub mod load;
|
||||
|
||||
/// Structure used to register plugins.
|
||||
|
@ -1,16 +1,14 @@
|
||||
//! Used by `rustc` when loading a plugin.
|
||||
|
||||
use crate::errors::{LoadPluginError, MalformedPluginAttribute};
|
||||
use crate::Registry;
|
||||
use libloading::Library;
|
||||
use rustc_ast::Crate;
|
||||
use rustc_errors::struct_span_err;
|
||||
use rustc_metadata::locator;
|
||||
use rustc_session::cstore::MetadataLoader;
|
||||
use rustc_session::Session;
|
||||
use rustc_span::symbol::{sym, Ident};
|
||||
use rustc_span::Span;
|
||||
|
||||
use std::borrow::ToOwned;
|
||||
use std::env;
|
||||
use std::mem;
|
||||
use std::path::PathBuf;
|
||||
@ -18,12 +16,6 @@ use std::path::PathBuf;
|
||||
/// Pointer to a registrar function.
|
||||
type PluginRegistrarFn = fn(&mut Registry<'_>);
|
||||
|
||||
fn call_malformed_plugin_attribute(sess: &Session, span: Span) {
|
||||
struct_span_err!(sess, span, E0498, "malformed `plugin` attribute")
|
||||
.span_label(span, "malformed attribute")
|
||||
.emit();
|
||||
}
|
||||
|
||||
/// Read plugin metadata and dynamically load registrar functions.
|
||||
pub fn load_plugins(
|
||||
sess: &Session,
|
||||
@ -42,7 +34,9 @@ pub fn load_plugins(
|
||||
Some(ident) if plugin.is_word() => {
|
||||
load_plugin(&mut plugins, sess, metadata_loader, ident)
|
||||
}
|
||||
_ => call_malformed_plugin_attribute(sess, plugin.span()),
|
||||
_ => {
|
||||
sess.emit_err(MalformedPluginAttribute { span: plugin.span() });
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -60,7 +54,7 @@ fn load_plugin(
|
||||
let fun = dylink_registrar(lib).unwrap_or_else(|err| {
|
||||
// This is fatal: there are almost certainly macros we need inside this crate, so
|
||||
// continuing would spew "macro undefined" errors.
|
||||
sess.span_fatal(ident.span, &err.to_string());
|
||||
sess.emit_fatal(LoadPluginError { span: ident.span, msg: err.to_string() });
|
||||
});
|
||||
plugins.push(fun);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user