mirror of
https://github.com/rust-lang/rust.git
synced 2024-11-25 16:24:46 +00:00
Rollup merge of #100780 - wonchulee:translation_save_analysis, r=davidtwco
save_analysis: Migrate diagnostic * Migrate the `rustc_save_analysis` crate's diagnostic to translatable diagnostic structs. Depends on https://github.com/rust-lang/rust/pull/100694 and https://github.com/rust-lang/rust/pull/100754 for #[fatal(..)] support, thenaa68eb4179
,f5219a3960
,7da52f694a
can be removed. (I copied commits from https://github.com/rust-lang/rust/pull/100754)
This commit is contained in:
commit
2e4760c7e7
@ -4421,9 +4421,11 @@ dependencies = [
|
||||
"rustc_ast",
|
||||
"rustc_ast_pretty",
|
||||
"rustc_data_structures",
|
||||
"rustc_errors",
|
||||
"rustc_hir",
|
||||
"rustc_hir_pretty",
|
||||
"rustc_lexer",
|
||||
"rustc_macros",
|
||||
"rustc_middle",
|
||||
"rustc_session",
|
||||
"rustc_span",
|
||||
|
@ -0,0 +1 @@
|
||||
save_analysis_could_not_open = Could not open `{$file_name}`: `{$err}`
|
@ -43,6 +43,7 @@ fluent_messages! {
|
||||
passes => "../locales/en-US/passes.ftl",
|
||||
plugin_impl => "../locales/en-US/plugin_impl.ftl",
|
||||
privacy => "../locales/en-US/privacy.ftl",
|
||||
save_analysis => "../locales/en-US/save_analysis.ftl",
|
||||
typeck => "../locales/en-US/typeck.ftl",
|
||||
}
|
||||
|
||||
|
@ -13,6 +13,7 @@ use rustc_span::{edition::Edition, Span, DUMMY_SP};
|
||||
use std::borrow::Cow;
|
||||
use std::fmt;
|
||||
use std::hash::{Hash, Hasher};
|
||||
use std::path::{Path, PathBuf};
|
||||
|
||||
/// Error type for `Diagnostic`'s `suggestions` field, indicating that
|
||||
/// `.disable_suggestions()` was called on the `Diagnostic`.
|
||||
@ -83,6 +84,7 @@ into_diagnostic_arg_using_display!(
|
||||
u64,
|
||||
i128,
|
||||
u128,
|
||||
std::io::Error,
|
||||
std::num::NonZeroU32,
|
||||
hir::Target,
|
||||
Edition,
|
||||
@ -124,6 +126,18 @@ impl IntoDiagnosticArg for String {
|
||||
}
|
||||
}
|
||||
|
||||
impl<'a> IntoDiagnosticArg for &'a Path {
|
||||
fn into_diagnostic_arg(self) -> DiagnosticArgValue<'static> {
|
||||
DiagnosticArgValue::Str(Cow::Owned(self.display().to_string()))
|
||||
}
|
||||
}
|
||||
|
||||
impl IntoDiagnosticArg for PathBuf {
|
||||
fn into_diagnostic_arg(self) -> DiagnosticArgValue<'static> {
|
||||
DiagnosticArgValue::Str(Cow::Owned(self.display().to_string()))
|
||||
}
|
||||
}
|
||||
|
||||
impl IntoDiagnosticArg for usize {
|
||||
fn into_diagnostic_arg(self) -> DiagnosticArgValue<'static> {
|
||||
DiagnosticArgValue::Number(self)
|
||||
|
@ -9,9 +9,11 @@ rustc_middle = { path = "../rustc_middle" }
|
||||
rustc_ast = { path = "../rustc_ast" }
|
||||
rustc_ast_pretty = { path = "../rustc_ast_pretty" }
|
||||
rustc_data_structures = { path = "../rustc_data_structures" }
|
||||
rustc_errors = { path = "../rustc_errors" }
|
||||
rustc_hir = { path = "../rustc_hir" }
|
||||
rustc_hir_pretty = { path = "../rustc_hir_pretty" }
|
||||
rustc_lexer = { path = "../rustc_lexer" }
|
||||
rustc_macros = { path = "../rustc_macros" }
|
||||
serde_json = "1"
|
||||
rustc_session = { path = "../rustc_session" }
|
||||
rustc_span = { path = "../rustc_span" }
|
||||
|
10
compiler/rustc_save_analysis/src/errors.rs
Normal file
10
compiler/rustc_save_analysis/src/errors.rs
Normal file
@ -0,0 +1,10 @@
|
||||
use rustc_macros::SessionDiagnostic;
|
||||
|
||||
use std::path::Path;
|
||||
|
||||
#[derive(SessionDiagnostic)]
|
||||
#[diag(save_analysis::could_not_open)]
|
||||
pub(crate) struct CouldNotOpen<'a> {
|
||||
pub file_name: &'a Path,
|
||||
pub err: std::io::Error,
|
||||
}
|
@ -3,11 +3,15 @@
|
||||
#![feature(let_else)]
|
||||
#![recursion_limit = "256"]
|
||||
#![allow(rustc::potential_query_instability)]
|
||||
#![feature(never_type)]
|
||||
#![deny(rustc::untranslatable_diagnostic)]
|
||||
#![deny(rustc::diagnostic_outside_of_impl)]
|
||||
|
||||
mod dump_visitor;
|
||||
mod dumper;
|
||||
#[macro_use]
|
||||
mod span_utils;
|
||||
mod errors;
|
||||
mod sig;
|
||||
|
||||
use rustc_ast as ast;
|
||||
@ -928,7 +932,7 @@ impl<'a> DumpHandler<'a> {
|
||||
info!("Writing output to {}", file_name.display());
|
||||
|
||||
let output_file = BufWriter::new(File::create(&file_name).unwrap_or_else(|e| {
|
||||
sess.fatal(&format!("Could not open {}: {}", file_name.display(), e))
|
||||
sess.emit_fatal(errors::CouldNotOpen { file_name: file_name.as_path(), err: e })
|
||||
}));
|
||||
|
||||
(output_file, file_name)
|
||||
|
Loading…
Reference in New Issue
Block a user