|
10 | 10 |
|
11 | 11 | use Span; |
12 | 12 |
|
13 | | -use rustc_errors as rustc; |
| 13 | +use rustc_errors as errors; |
| 14 | +use syntax_pos::MultiSpan; |
14 | 15 |
|
15 | 16 | /// An enum representing a diagnostic level. |
16 | 17 | #[unstable(feature = "proc_macro_diagnostic", issue = "38356")] |
@@ -97,38 +98,21 @@ impl Diagnostic { |
97 | 98 | /// Emit the diagnostic. |
98 | 99 | #[unstable(feature = "proc_macro_diagnostic", issue = "38356")] |
99 | 100 | pub fn emit(self) { |
100 | | - ::__internal::with_sess(move |sess, _| { |
101 | | - let handler = &sess.span_diagnostic; |
102 | | - let level = __internal::level_to_internal_level(self.level); |
103 | | - let mut diag = rustc::DiagnosticBuilder::new(handler, level, &*self.message); |
| 101 | + let level = self.level.to_internal(); |
| 102 | + let mut diag = errors::Diagnostic::new(level, &*self.message); |
104 | 103 |
|
105 | | - if let Some(span) = self.span { |
106 | | - diag.set_span(span.0); |
107 | | - } |
| 104 | + if let Some(span) = self.span { |
| 105 | + diag.set_span(span.0); |
| 106 | + } |
108 | 107 |
|
109 | | - for child in self.children { |
110 | | - let span = child.span.map(|s| s.0); |
111 | | - let level = __internal::level_to_internal_level(child.level); |
112 | | - diag.sub(level, &*child.message, span); |
113 | | - } |
| 108 | + for child in self.children { |
| 109 | + let span = child.span.map_or(MultiSpan::new(), |s| s.0.into()); |
| 110 | + let level = child.level.to_internal(); |
| 111 | + diag.sub(level, &*child.message, span, None); |
| 112 | + } |
114 | 113 |
|
115 | | - diag.emit(); |
| 114 | + ::__internal::with_sess(move |sess, _| { |
| 115 | + errors::DiagnosticBuilder::new_diagnostic(&sess.span_diagnostic, diag).emit(); |
116 | 116 | }); |
117 | 117 | } |
118 | 118 | } |
119 | | - |
120 | | -#[unstable(feature = "proc_macro_internals", issue = "27812")] |
121 | | -#[doc(hidden)] |
122 | | -pub mod __internal { |
123 | | - use super::{Level, rustc}; |
124 | | - |
125 | | - pub fn level_to_internal_level(level: Level) -> rustc::Level { |
126 | | - match level { |
127 | | - Level::Error => rustc::Level::Error, |
128 | | - Level::Warning => rustc::Level::Warning, |
129 | | - Level::Note => rustc::Level::Note, |
130 | | - Level::Help => rustc::Level::Help, |
131 | | - Level::__Nonexhaustive => unreachable!("Level::__Nonexhaustive") |
132 | | - } |
133 | | - } |
134 | | -} |
0 commit comments