mirror of
https://github.com/rust-lang/rust.git
synced 2024-11-22 14:55:26 +00:00
implement -Z ignore-directory-in-diagnostics-source-blocks
This commit is contained in:
parent
56e1aaadb3
commit
d695b95e3b
@ -169,6 +169,7 @@ impl AnnotateSnippetEmitterWriter {
|
||||
.map(|line| {
|
||||
// Ensure the source file is present before we try
|
||||
// to load a string from it.
|
||||
// FIXME(#115869): support -Z ignore-directory-in-diagnostics-source-blocks
|
||||
source_map.ensure_source_file_source_present(&file);
|
||||
(
|
||||
format!("{}", source_map.filename_for_diagnostics(&file.name)),
|
||||
|
@ -8,7 +8,7 @@
|
||||
//! The output types are defined in `rustc_session::config::ErrorOutputType`.
|
||||
|
||||
use rustc_span::source_map::SourceMap;
|
||||
use rustc_span::{FileLines, SourceFile, Span};
|
||||
use rustc_span::{FileLines, FileName, SourceFile, Span};
|
||||
|
||||
use crate::snippet::{
|
||||
Annotation, AnnotationColumn, AnnotationType, Line, MultilineAnnotation, Style, StyledString,
|
||||
@ -635,6 +635,7 @@ pub struct EmitterWriter {
|
||||
short_message: bool,
|
||||
teach: bool,
|
||||
ui_testing: bool,
|
||||
ignored_directories_in_source_blocks: Vec<String>,
|
||||
diagnostic_width: Option<usize>,
|
||||
|
||||
macro_backtrace: bool,
|
||||
@ -664,6 +665,7 @@ impl EmitterWriter {
|
||||
short_message: false,
|
||||
teach: false,
|
||||
ui_testing: false,
|
||||
ignored_directories_in_source_blocks: Vec::new(),
|
||||
diagnostic_width: None,
|
||||
macro_backtrace: false,
|
||||
track_diagnostics: false,
|
||||
@ -1193,7 +1195,7 @@ impl EmitterWriter {
|
||||
let will_be_emitted = |span: Span| {
|
||||
!span.is_dummy() && {
|
||||
let file = sm.lookup_source_file(span.hi());
|
||||
sm.ensure_source_file_source_present(&file)
|
||||
should_show_source_code(&self.ignored_directories_in_source_blocks, sm, &file)
|
||||
}
|
||||
};
|
||||
|
||||
@ -1388,7 +1390,11 @@ impl EmitterWriter {
|
||||
// Print out the annotate source lines that correspond with the error
|
||||
for annotated_file in annotated_files {
|
||||
// we can't annotate anything if the source is unavailable.
|
||||
if !sm.ensure_source_file_source_present(&annotated_file.file) {
|
||||
if !should_show_source_code(
|
||||
&self.ignored_directories_in_source_blocks,
|
||||
sm,
|
||||
&annotated_file.file,
|
||||
) {
|
||||
if !self.short_message {
|
||||
// We'll just print an unannotated message.
|
||||
for (annotation_id, line) in annotated_file.lines.iter().enumerate() {
|
||||
@ -2737,3 +2743,18 @@ pub fn is_case_difference(sm: &SourceMap, suggested: &str, sp: Span) -> bool {
|
||||
// bug, but be defensive against that here.
|
||||
&& found != suggested
|
||||
}
|
||||
|
||||
pub(crate) fn should_show_source_code(
|
||||
ignored_directories: &[String],
|
||||
sm: &SourceMap,
|
||||
file: &SourceFile,
|
||||
) -> bool {
|
||||
if !sm.ensure_source_file_source_present(file) {
|
||||
return false;
|
||||
}
|
||||
|
||||
let FileName::Real(name) = &file.name else { return true };
|
||||
name.local_path()
|
||||
.map(|path| ignored_directories.iter().all(|dir| !path.starts_with(dir)))
|
||||
.unwrap_or(true)
|
||||
}
|
||||
|
@ -12,7 +12,7 @@
|
||||
use rustc_span::source_map::{FilePathMapping, SourceMap};
|
||||
use termcolor::{ColorSpec, WriteColor};
|
||||
|
||||
use crate::emitter::{Emitter, HumanReadableErrorType};
|
||||
use crate::emitter::{should_show_source_code, Emitter, HumanReadableErrorType};
|
||||
use crate::registry::Registry;
|
||||
use crate::translation::{to_fluent_args, Translate};
|
||||
use crate::DiagnosticId;
|
||||
@ -45,6 +45,7 @@ pub struct JsonEmitter {
|
||||
fallback_bundle: LazyFallbackBundle,
|
||||
pretty: bool,
|
||||
ui_testing: bool,
|
||||
ignored_directories_in_source_blocks: Vec<String>,
|
||||
json_rendered: HumanReadableErrorType,
|
||||
diagnostic_width: Option<usize>,
|
||||
macro_backtrace: bool,
|
||||
@ -73,6 +74,7 @@ impl JsonEmitter {
|
||||
fallback_bundle,
|
||||
pretty,
|
||||
ui_testing: false,
|
||||
ignored_directories_in_source_blocks: Vec::new(),
|
||||
json_rendered,
|
||||
diagnostic_width,
|
||||
macro_backtrace,
|
||||
@ -127,6 +129,7 @@ impl JsonEmitter {
|
||||
fallback_bundle,
|
||||
pretty,
|
||||
ui_testing: false,
|
||||
ignored_directories_in_source_blocks: Vec::new(),
|
||||
json_rendered,
|
||||
diagnostic_width,
|
||||
macro_backtrace,
|
||||
@ -138,6 +141,10 @@ impl JsonEmitter {
|
||||
pub fn ui_testing(self, ui_testing: bool) -> Self {
|
||||
Self { ui_testing, ..self }
|
||||
}
|
||||
|
||||
pub fn ignored_directories_in_source_blocks(self, value: Vec<String>) -> Self {
|
||||
Self { ignored_directories_in_source_blocks: value, ..self }
|
||||
}
|
||||
}
|
||||
|
||||
impl Translate for JsonEmitter {
|
||||
@ -381,6 +388,7 @@ impl Diagnostic {
|
||||
.track_diagnostics(je.track_diagnostics)
|
||||
.terminal_url(je.terminal_url)
|
||||
.ui_testing(je.ui_testing)
|
||||
.ignored_directories_in_source_blocks(je.ignored_directories_in_source_blocks.clone())
|
||||
.emit_diagnostic(diag);
|
||||
let output = Arc::try_unwrap(output.0).unwrap().into_inner().unwrap();
|
||||
let output = String::from_utf8(output).unwrap();
|
||||
@ -558,7 +566,11 @@ impl DiagnosticSpanLine {
|
||||
.span_to_lines(span)
|
||||
.map(|lines| {
|
||||
// We can't get any lines if the source is unavailable.
|
||||
if !je.sm.ensure_source_file_source_present(&lines.file) {
|
||||
if !should_show_source_code(
|
||||
&je.ignored_directories_in_source_blocks,
|
||||
&je.sm,
|
||||
&lines.file,
|
||||
) {
|
||||
return vec![];
|
||||
}
|
||||
|
||||
|
@ -1536,6 +1536,8 @@ options! {
|
||||
"generate human-readable, predictable names for codegen units (default: no)"),
|
||||
identify_regions: bool = (false, parse_bool, [UNTRACKED],
|
||||
"display unnamed regions as `'<id>`, using a non-ident unique id (default: no)"),
|
||||
ignore_directory_in_diagnostics_source_blocks: Vec<String> = (Vec::new(), parse_string_push, [UNTRACKED],
|
||||
"do not display the source code block in diagnostics for files in the directory"),
|
||||
incremental_ignore_spans: bool = (false, parse_bool, [TRACKED],
|
||||
"ignore spans during ICH computation -- used for testing (default: no)"),
|
||||
incremental_info: bool = (false, parse_bool, [UNTRACKED],
|
||||
|
@ -1295,7 +1295,10 @@ fn default_emitter(
|
||||
.diagnostic_width(sopts.diagnostic_width)
|
||||
.macro_backtrace(macro_backtrace)
|
||||
.track_diagnostics(track_diagnostics)
|
||||
.terminal_url(terminal_url);
|
||||
.terminal_url(terminal_url)
|
||||
.ignored_directories_in_source_blocks(
|
||||
sopts.unstable_opts.ignore_directory_in_diagnostics_source_blocks.clone(),
|
||||
);
|
||||
Box::new(emitter.ui_testing(sopts.unstable_opts.ui_testing))
|
||||
}
|
||||
}
|
||||
@ -1312,7 +1315,10 @@ fn default_emitter(
|
||||
track_diagnostics,
|
||||
terminal_url,
|
||||
)
|
||||
.ui_testing(sopts.unstable_opts.ui_testing),
|
||||
.ui_testing(sopts.unstable_opts.ui_testing)
|
||||
.ignored_directories_in_source_blocks(
|
||||
sopts.unstable_opts.ignore_directory_in_diagnostics_source_blocks.clone(),
|
||||
),
|
||||
),
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user