use ParseSess instead of Session in into_diagnostic

This commit is contained in:
Christian Poveda 2022-04-25 22:53:09 +02:00
parent fedbe5dabc
commit eb55cdce4b
No known key found for this signature in database
GPG Key ID: 27525EF5E7420A50
3 changed files with 30 additions and 8 deletions

View File

@ -119,7 +119,9 @@ fn span_err(span: impl proc_macro::MultiSpan, msg: &str) -> proc_macro::Diagnost
/// Emit a diagnostic on span `$span` with msg `$msg` (optionally performing additional decoration /// Emit a diagnostic on span `$span` with msg `$msg` (optionally performing additional decoration
/// using the `FnOnce` passed in `diag`) and return `Err(ErrorHandled)`. /// using the `FnOnce` passed in `diag`) and return `Err(ErrorHandled)`.
macro_rules! throw_span_err { macro_rules! throw_span_err {
($span:expr, $msg:expr) => {{ throw_span_err!($span, $msg, |diag| diag) }}; ($span:expr, $msg:expr) => {{
throw_span_err!($span, $msg, |diag| diag)
}};
($span:expr, $msg:expr, $f:expr) => {{ ($span:expr, $msg:expr, $f:expr) => {{
return Err(_throw_span_err($span, $msg, $f)); return Err(_throw_span_err($span, $msg, $f));
}}; }};
@ -308,7 +310,7 @@ impl<'a> SessionDiagnosticDerive<'a> {
{ {
fn into_diagnostic( fn into_diagnostic(
self, self,
#sess: &'__session_diagnostic_sess rustc_session::Session #sess: &'__session_diagnostic_sess rustc_session::parse::ParseSess
) -> rustc_errors::DiagnosticBuilder<'__session_diagnostic_sess, #param_ty> { ) -> rustc_errors::DiagnosticBuilder<'__session_diagnostic_sess, #param_ty> {
use rustc_errors::IntoDiagnosticArg; use rustc_errors::IntoDiagnosticArg;
#implementation #implementation

View File

@ -3,13 +3,14 @@
use crate::config::CheckCfg; use crate::config::CheckCfg;
use crate::lint::{BufferedEarlyLint, BuiltinLintDiagnostics, Lint, LintId}; use crate::lint::{BufferedEarlyLint, BuiltinLintDiagnostics, Lint, LintId};
use crate::SessionDiagnostic;
use rustc_ast::node_id::NodeId; use rustc_ast::node_id::NodeId;
use rustc_data_structures::fx::{FxHashMap, FxHashSet}; use rustc_data_structures::fx::{FxHashMap, FxHashSet};
use rustc_data_structures::sync::{Lock, Lrc}; use rustc_data_structures::sync::{Lock, Lrc};
use rustc_errors::{emitter::SilentEmitter, ColorConfig, Handler}; use rustc_errors::{emitter::SilentEmitter, ColorConfig, Handler};
use rustc_errors::{ use rustc_errors::{
error_code, fallback_fluent_bundle, Applicability, Diagnostic, DiagnosticBuilder, error_code, fallback_fluent_bundle, Applicability, Diagnostic, DiagnosticBuilder,
ErrorGuaranteed, MultiSpan, DiagnosticMessage, ErrorGuaranteed, MultiSpan,
}; };
use rustc_feature::{find_feature_issue, GateIssue, UnstableFeatures}; use rustc_feature::{find_feature_issue, GateIssue, UnstableFeatures};
use rustc_span::edition::Edition; use rustc_span::edition::Edition;
@ -287,4 +288,19 @@ impl ParseSess {
pub fn proc_macro_quoted_spans(&self) -> Vec<Span> { pub fn proc_macro_quoted_spans(&self) -> Vec<Span> {
self.proc_macro_quoted_spans.lock().clone() self.proc_macro_quoted_spans.lock().clone()
} }
pub fn emit_err<'a>(&'a self, err: impl SessionDiagnostic<'a>) -> ErrorGuaranteed {
err.into_diagnostic(self).emit()
}
pub fn emit_warning<'a>(&'a self, warning: impl SessionDiagnostic<'a, ()>) {
warning.into_diagnostic(self).emit()
}
pub fn struct_err(
&self,
msg: impl Into<DiagnosticMessage>,
) -> DiagnosticBuilder<'_, ErrorGuaranteed> {
self.span_diagnostic.struct_err(msg)
}
} }

View File

@ -212,7 +212,7 @@ pub struct PerfStats {
pub trait SessionDiagnostic<'a, T: EmissionGuarantee = ErrorGuaranteed> { pub trait SessionDiagnostic<'a, T: EmissionGuarantee = ErrorGuaranteed> {
/// Write out as a diagnostic out of `sess`. /// Write out as a diagnostic out of `sess`.
#[must_use] #[must_use]
fn into_diagnostic(self, sess: &'a Session) -> DiagnosticBuilder<'a, T>; fn into_diagnostic(self, sess: &'a ParseSess) -> DiagnosticBuilder<'a, T>;
} }
impl Session { impl Session {
@ -334,7 +334,7 @@ impl Session {
&self, &self,
msg: impl Into<DiagnosticMessage>, msg: impl Into<DiagnosticMessage>,
) -> DiagnosticBuilder<'_, ErrorGuaranteed> { ) -> DiagnosticBuilder<'_, ErrorGuaranteed> {
self.diagnostic().struct_err(msg) self.parse_sess.struct_err(msg)
} }
pub fn struct_err_with_code( pub fn struct_err_with_code(
&self, &self,
@ -414,10 +414,10 @@ impl Session {
self.diagnostic().err(msg) self.diagnostic().err(msg)
} }
pub fn emit_err<'a>(&'a self, err: impl SessionDiagnostic<'a>) -> ErrorGuaranteed { pub fn emit_err<'a>(&'a self, err: impl SessionDiagnostic<'a>) -> ErrorGuaranteed {
err.into_diagnostic(self).emit() self.parse_sess.emit_err(err)
} }
pub fn emit_warning<'a>(&'a self, warning: impl SessionDiagnostic<'a, ()>) { pub fn emit_warning<'a>(&'a self, warning: impl SessionDiagnostic<'a, ()>) {
warning.into_diagnostic(self).emit() self.parse_sess.emit_warning(warning)
} }
#[inline] #[inline]
pub fn err_count(&self) -> usize { pub fn err_count(&self) -> usize {
@ -783,7 +783,11 @@ impl Session {
Path::new(&rustlib_path), Path::new(&rustlib_path),
Path::new("bin"), Path::new("bin"),
]); ]);
if self_contained { vec![p.clone(), p.join("self-contained")] } else { vec![p] } if self_contained {
vec![p.clone(), p.join("self-contained")]
} else {
vec![p]
}
} }
pub fn init_incr_comp_session( pub fn init_incr_comp_session(