diff options
| author | Mark Rousskov <mark.simulacrum@gmail.com> | 2019-11-15 08:32:31 -0500 |
|---|---|---|
| committer | Mark Rousskov <mark.simulacrum@gmail.com> | 2019-11-15 08:45:43 -0500 |
| commit | 3f93ffc3334b77cc9025f68dfcea92098987abf3 (patch) | |
| tree | 8e532f41f4ddb5f1203d29c4b17114f70694ad3a | |
| parent | 942f0a6f7a82facc30501232e28759cab54a21b3 (diff) | |
| download | rust-3f93ffc3334b77cc9025f68dfcea92098987abf3.tar.gz rust-3f93ffc3334b77cc9025f68dfcea92098987abf3.zip | |
Remove SourceMapper trait
SourceMap is now in the root of all rustc-specific crates, syntax_pos, so there's no need for the trait object to decouple the dependencies between librustc_errors and libsyntax as was needed previously.
| -rw-r--r-- | src/librustc_codegen_ssa/back/write.rs | 5 | ||||
| -rw-r--r-- | src/librustc_errors/annotate_snippet_emitter_writer.rs | 11 | ||||
| -rw-r--r-- | src/librustc_errors/emitter.rs | 25 | ||||
| -rw-r--r-- | src/librustc_errors/lib.rs | 33 | ||||
| -rw-r--r-- | src/libsyntax/json.rs | 6 | ||||
| -rw-r--r-- | src/libsyntax_pos/source_map.rs | 42 |
6 files changed, 38 insertions, 84 deletions
diff --git a/src/librustc_codegen_ssa/back/write.rs b/src/librustc_codegen_ssa/back/write.rs index ed901fa064a..f35a31d59fe 100644 --- a/src/librustc_codegen_ssa/back/write.rs +++ b/src/librustc_codegen_ssa/back/write.rs @@ -23,7 +23,8 @@ use rustc_data_structures::profiling::SelfProfilerRef; use rustc_fs_util::link_or_copy; use rustc_data_structures::svh::Svh; use rustc_data_structures::sync::Lrc; -use rustc_errors::{Handler, Level, FatalError, DiagnosticId, SourceMapperDyn}; +use rustc_errors::{Handler, Level, FatalError, DiagnosticId}; +use syntax_pos::source_map::SourceMap; use rustc_errors::emitter::{Emitter}; use rustc_target::spec::MergeFunctions; use syntax::attr; @@ -1679,7 +1680,7 @@ impl Emitter for SharedEmitter { } drop(self.sender.send(SharedEmitterMessage::AbortIfErrors)); } - fn source_map(&self) -> Option<&Lrc<SourceMapperDyn>> { + fn source_map(&self) -> Option<&Lrc<SourceMap>> { None } } diff --git a/src/librustc_errors/annotate_snippet_emitter_writer.rs b/src/librustc_errors/annotate_snippet_emitter_writer.rs index 491bc2aa6a2..4c5d0178b2c 100644 --- a/src/librustc_errors/annotate_snippet_emitter_writer.rs +++ b/src/librustc_errors/annotate_snippet_emitter_writer.rs @@ -6,9 +6,10 @@ //! [annotate_snippets]: https://docs.rs/crate/annotate-snippets/ use syntax_pos::{SourceFile, MultiSpan, Loc}; +use syntax_pos::source_map::SourceMap; use crate::{ Level, CodeSuggestion, Diagnostic, Emitter, - SourceMapperDyn, SubDiagnostic, DiagnosticId + SubDiagnostic, DiagnosticId }; use crate::emitter::FileWithAnnotatedLines; use rustc_data_structures::sync::Lrc; @@ -20,7 +21,7 @@ use annotate_snippets::formatter::DisplayListFormatter; /// Generates diagnostics using annotate-snippet pub struct AnnotateSnippetEmitterWriter { - source_map: Option<Lrc<SourceMapperDyn>>, + source_map: Option<Lrc<SourceMap>>, /// If true, hides the longer explanation text short_message: bool, /// If true, will normalize line numbers with `LL` to prevent noise in UI test diffs. @@ -49,7 +50,7 @@ impl Emitter for AnnotateSnippetEmitterWriter { &suggestions); } - fn source_map(&self) -> Option<&Lrc<SourceMapperDyn>> { + fn source_map(&self) -> Option<&Lrc<SourceMap>> { self.source_map.as_ref() } @@ -61,7 +62,7 @@ impl Emitter for AnnotateSnippetEmitterWriter { /// Collects all the data needed to generate the data structures needed for the /// `annotate-snippets` library. struct DiagnosticConverter<'a> { - source_map: Option<Lrc<SourceMapperDyn>>, + source_map: Option<Lrc<SourceMap>>, level: Level, message: String, code: Option<DiagnosticId>, @@ -168,7 +169,7 @@ impl<'a> DiagnosticConverter<'a> { impl AnnotateSnippetEmitterWriter { pub fn new( - source_map: Option<Lrc<SourceMapperDyn>>, + source_map: Option<Lrc<SourceMap>>, short_message: bool, external_macro_backtrace: bool, ) -> Self { diff --git a/src/librustc_errors/emitter.rs b/src/librustc_errors/emitter.rs index 291920f17f6..ea779982ba9 100644 --- a/src/librustc_errors/emitter.rs +++ b/src/librustc_errors/emitter.rs @@ -10,10 +10,11 @@ use Destination::*; use syntax_pos::{SourceFile, Span, MultiSpan}; +use syntax_pos::source_map::SourceMap; use crate::{ Level, CodeSuggestion, Diagnostic, SubDiagnostic, pluralize, - SuggestionStyle, SourceMapper, SourceMapperDyn, DiagnosticId, + SuggestionStyle, DiagnosticId, }; use crate::Level::Error; use crate::snippet::{Annotation, AnnotationType, Line, MultilineAnnotation, StyledString, Style}; @@ -49,7 +50,7 @@ impl HumanReadableErrorType { pub fn new_emitter( self, dst: Box<dyn Write + Send>, - source_map: Option<Lrc<SourceMapperDyn>>, + source_map: Option<Lrc<SourceMap>>, teach: bool, terminal_width: Option<usize>, external_macro_backtrace: bool, @@ -192,7 +193,7 @@ pub trait Emitter { true } - fn source_map(&self) -> Option<&Lrc<SourceMapperDyn>>; + fn source_map(&self) -> Option<&Lrc<SourceMap>>; /// Formats the substitutions of the primary_span /// @@ -271,7 +272,7 @@ pub trait Emitter { // point directly at <*macros>. Since these are often difficult to read, this // will change the span to point at the use site. fn fix_multispans_in_std_macros(&self, - source_map: &Option<Lrc<SourceMapperDyn>>, + source_map: &Option<Lrc<SourceMap>>, span: &mut MultiSpan, children: &mut Vec<SubDiagnostic>, level: &Level, @@ -311,7 +312,7 @@ pub trait Emitter { // <*macros>. Since these locations are often difficult to read, we move these Spans from // <*macros> to their corresponding use site. fn fix_multispan_in_std_macros(&self, - source_map: &Option<Lrc<SourceMapperDyn>>, + source_map: &Option<Lrc<SourceMap>>, span: &mut MultiSpan, always_backtrace: bool) -> bool { let sm = match source_map { @@ -397,7 +398,7 @@ pub trait Emitter { } impl Emitter for EmitterWriter { - fn source_map(&self) -> Option<&Lrc<SourceMapperDyn>> { + fn source_map(&self) -> Option<&Lrc<SourceMap>> { self.sm.as_ref() } @@ -428,7 +429,7 @@ impl Emitter for EmitterWriter { pub struct SilentEmitter; impl Emitter for SilentEmitter { - fn source_map(&self) -> Option<&Lrc<SourceMapperDyn>> { None } + fn source_map(&self) -> Option<&Lrc<SourceMap>> { None } fn emit_diagnostic(&mut self, _: &Diagnostic) {} } @@ -476,7 +477,7 @@ impl ColorConfig { /// Handles the writing of `HumanReadableErrorType::Default` and `HumanReadableErrorType::Short` pub struct EmitterWriter { dst: Destination, - sm: Option<Lrc<SourceMapperDyn>>, + sm: Option<Lrc<SourceMap>>, short_message: bool, teach: bool, ui_testing: bool, @@ -495,7 +496,7 @@ pub struct FileWithAnnotatedLines { impl EmitterWriter { pub fn stderr( color_config: ColorConfig, - source_map: Option<Lrc<SourceMapperDyn>>, + source_map: Option<Lrc<SourceMap>>, short_message: bool, teach: bool, terminal_width: Option<usize>, @@ -515,7 +516,7 @@ impl EmitterWriter { pub fn new( dst: Box<dyn Write + Send>, - source_map: Option<Lrc<SourceMapperDyn>>, + source_map: Option<Lrc<SourceMap>>, short_message: bool, teach: bool, colored: bool, @@ -1685,7 +1686,7 @@ impl FileWithAnnotatedLines { /// This helps us quickly iterate over the whole message (including secondary file spans) pub fn collect_annotations( msp: &MultiSpan, - source_map: &Option<Lrc<SourceMapperDyn>> + source_map: &Option<Lrc<SourceMap>> ) -> Vec<FileWithAnnotatedLines> { fn add_annotation_to_file(file_vec: &mut Vec<FileWithAnnotatedLines>, file: Lrc<SourceFile>, @@ -2067,7 +2068,7 @@ impl<'a> Drop for WritableDst<'a> { } /// Whether the original and suggested code are visually similar enough to warrant extra wording. -pub fn is_case_difference(sm: &dyn SourceMapper, suggested: &str, sp: Span) -> bool { +pub fn is_case_difference(sm: &SourceMap, suggested: &str, sp: Span) -> bool { // FIXME: this should probably be extended to also account for `FO0` → `FOO` and unicode. let found = sm.span_to_snippet(sp).unwrap(); let ascii_confusables = &['c', 'f', 'i', 'k', 'o', 's', 'u', 'v', 'w', 'x', 'y', 'z']; diff --git a/src/librustc_errors/lib.rs b/src/librustc_errors/lib.rs index ee35d23af34..1a6ac328a47 100644 --- a/src/librustc_errors/lib.rs +++ b/src/librustc_errors/lib.rs @@ -18,6 +18,8 @@ use registry::Registry; use rustc_data_structures::sync::{self, Lrc, Lock}; use rustc_data_structures::fx::{FxHashSet, FxIndexMap}; use rustc_data_structures::stable_hasher::StableHasher; +use syntax_pos::source_map::SourceMap; +use syntax_pos::{Loc, Span, MultiSpan}; use std::borrow::Cow; use std::cell::Cell; @@ -36,17 +38,6 @@ pub mod registry; mod styled_buffer; mod lock; -use syntax_pos::{ - BytePos, - FileLinesResult, - FileName, - Loc, - MultiSpan, - SourceFile, - Span, - SpanSnippetError, -}; - pub type PResult<'a, T> = Result<T, DiagnosticBuilder<'a>>; // `PResult` is used a lot. Make sure it doesn't unintentionally get bigger. @@ -150,26 +141,12 @@ pub struct SubstitutionPart { pub snippet: String, } -pub type SourceMapperDyn = dyn SourceMapper + sync::Send + sync::Sync; - -pub trait SourceMapper { - fn lookup_char_pos(&self, pos: BytePos) -> Loc; - fn span_to_lines(&self, sp: Span) -> FileLinesResult; - fn span_to_string(&self, sp: Span) -> String; - fn span_to_snippet(&self, sp: Span) -> Result<String, SpanSnippetError>; - fn span_to_filename(&self, sp: Span) -> FileName; - fn merge_spans(&self, sp_lhs: Span, sp_rhs: Span) -> Option<Span>; - fn call_span_if_macro(&self, sp: Span) -> Span; - fn ensure_source_file_source_present(&self, source_file: Lrc<SourceFile>) -> bool; - fn doctest_offset_line(&self, file: &FileName, line: usize) -> usize; -} - impl CodeSuggestion { /// Returns the assembled code suggestions, whether they should be shown with an underline /// and whether the substitution only differs in capitalization. pub fn splice_lines( &self, - cm: &SourceMapperDyn, + cm: &SourceMap, ) -> Vec<(String, Vec<SubstitutionPart>, bool)> { use syntax_pos::{CharPos, Pos}; @@ -376,7 +353,7 @@ impl Handler { color_config: ColorConfig, can_emit_warnings: bool, treat_err_as_bug: Option<usize>, - cm: Option<Lrc<SourceMapperDyn>>, + cm: Option<Lrc<SourceMap>>, ) -> Self { Self::with_tty_emitter_and_flags( color_config, @@ -391,7 +368,7 @@ impl Handler { pub fn with_tty_emitter_and_flags( color_config: ColorConfig, - cm: Option<Lrc<SourceMapperDyn>>, + cm: Option<Lrc<SourceMap>>, flags: HandlerFlags, ) -> Self { let emitter = Box::new(EmitterWriter::stderr( diff --git a/src/libsyntax/json.rs b/src/libsyntax/json.rs index 0b157938375..6096a930acf 100644 --- a/src/libsyntax/json.rs +++ b/src/libsyntax/json.rs @@ -12,7 +12,7 @@ use crate::source_map::{SourceMap, FilePathMapping}; use errors::registry::Registry; -use errors::{SubDiagnostic, CodeSuggestion, SourceMapper, SourceMapperDyn}; +use errors::{SubDiagnostic, CodeSuggestion}; use errors::{DiagnosticId, Applicability}; use errors::emitter::{Emitter, HumanReadableErrorType}; @@ -31,7 +31,7 @@ mod tests; pub struct JsonEmitter { dst: Box<dyn Write + Send>, registry: Option<Registry>, - sm: Lrc<dyn SourceMapper + sync::Send + sync::Sync>, + sm: Lrc<SourceMap>, pretty: bool, ui_testing: bool, json_rendered: HumanReadableErrorType, @@ -116,7 +116,7 @@ impl Emitter for JsonEmitter { } } - fn source_map(&self) -> Option<&Lrc<SourceMapperDyn>> { + fn source_map(&self) -> Option<&Lrc<SourceMap>> { Some(&self.sm) } diff --git a/src/libsyntax_pos/source_map.rs b/src/libsyntax_pos/source_map.rs index 035e61f9dea..77d9807225e 100644 --- a/src/libsyntax_pos/source_map.rs +++ b/src/libsyntax_pos/source_map.rs @@ -22,8 +22,6 @@ use std::fs; use std::io; use log::debug; -use errors::SourceMapper; - #[cfg(test)] mod tests; @@ -956,28 +954,15 @@ impl SourceMap { None } -} - -impl SourceMapper for SourceMap { - fn lookup_char_pos(&self, pos: BytePos) -> Loc { - self.lookup_char_pos(pos) - } - fn span_to_lines(&self, sp: Span) -> FileLinesResult { - self.span_to_lines(sp) - } - fn span_to_string(&self, sp: Span) -> String { - self.span_to_string(sp) - } - fn span_to_snippet(&self, sp: Span) -> Result<String, SpanSnippetError> { - self.span_to_snippet(sp) - } - fn span_to_filename(&self, sp: Span) -> FileName { - self.span_to_filename(sp) - } - fn merge_spans(&self, sp_lhs: Span, sp_rhs: Span) -> Option<Span> { - self.merge_spans(sp_lhs, sp_rhs) + pub fn ensure_source_file_source_present(&self, source_file: Lrc<SourceFile>) -> bool { + source_file.add_external_src( + || match source_file.name { + FileName::Real(ref name) => self.file_loader.read_file(name).ok(), + _ => None, + } + ) } - fn call_span_if_macro(&self, sp: Span) -> Span { + pub fn call_span_if_macro(&self, sp: Span) -> Span { if self.span_to_filename(sp.clone()).is_macros() { let v = sp.macro_backtrace(); if let Some(use_site) = v.last() { @@ -986,17 +971,6 @@ impl SourceMapper for SourceMap { } sp } - fn ensure_source_file_source_present(&self, source_file: Lrc<SourceFile>) -> bool { - source_file.add_external_src( - || match source_file.name { - FileName::Real(ref name) => self.file_loader.read_file(name).ok(), - _ => None, - } - ) - } - fn doctest_offset_line(&self, file: &FileName, line: usize) -> usize { - self.doctest_offset_line(file, line) - } } #[derive(Clone)] |
