|
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