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