Auto merge of #101777 - matthiaskrgr:rollup-x2dyaa2, r=matthiaskrgr
Rollup of 7 pull requests Successful merges: - #101266 (translations(rustc_session): migrates rustc_session to use SessionDiagnostic - Final) - #101737 (rustdoc: remove no-op CSS `.search-results .result-name > span`) - #101752 (Improve Attribute doc methods) - #101754 (Fix doc of log function) - #101759 (⬆️ rust-analyzer) - #101765 (Add documentation for TyCtxt::visibility) - #101770 (Rustdoc-Json: Don't loose subitems of foreign traits.) Failed merges: r? `@ghost` `@rustbot` modify labels: rollup
This commit is contained in:
commit
17cbdfd071
39 changed files with 698 additions and 180 deletions
|
@ -232,7 +232,8 @@ impl AttrItem {
|
|||
|
||||
impl Attribute {
|
||||
/// Returns `true` if it is a sugared doc comment (`///` or `//!` for example).
|
||||
/// So `#[doc = "doc"]` will return `false`.
|
||||
/// So `#[doc = "doc"]` (which is a doc comment) and `#[doc(...)]` (which is not
|
||||
/// a doc comment) will return `false`.
|
||||
pub fn is_doc_comment(&self) -> bool {
|
||||
match self.kind {
|
||||
AttrKind::Normal(..) => false,
|
||||
|
@ -240,6 +241,11 @@ impl Attribute {
|
|||
}
|
||||
}
|
||||
|
||||
/// Returns the documentation and its kind if this is a doc comment or a sugared doc comment.
|
||||
/// * `///doc` returns `Some(("doc", CommentKind::Line))`.
|
||||
/// * `/** doc */` returns `Some(("doc", CommentKind::Block))`.
|
||||
/// * `#[doc = "doc"]` returns `Some(("doc", CommentKind::Line))`.
|
||||
/// * `#[doc(...)]` returns `None`.
|
||||
pub fn doc_str_and_comment_kind(&self) -> Option<(Symbol, CommentKind)> {
|
||||
match self.kind {
|
||||
AttrKind::DocComment(kind, data) => Some((data, kind)),
|
||||
|
@ -252,6 +258,10 @@ impl Attribute {
|
|||
}
|
||||
}
|
||||
|
||||
/// Returns the documentation if this is a doc comment or a sugared doc comment.
|
||||
/// * `///doc` returns `Some("doc")`.
|
||||
/// * `#[doc = "doc"]` returns `Some("doc")`.
|
||||
/// * `#[doc(...)]` returns `None`.
|
||||
pub fn doc_str(&self) -> Option<Symbol> {
|
||||
match self.kind {
|
||||
AttrKind::DocComment(.., data) => Some(data),
|
||||
|
|
|
@ -56,3 +56,13 @@ session_target_invalid_bits_size = {$err}
|
|||
session_target_stack_protector_not_supported = `-Z stack-protector={$stack_protector}` is not supported for target {$target_triple} and will be ignored
|
||||
|
||||
session_split_debuginfo_unstable_platform = `-Csplit-debuginfo={$debuginfo}` is unstable on this platform
|
||||
|
||||
session_file_is_not_writeable = output file {$file} is not writeable -- check its permissions
|
||||
|
||||
session_crate_name_does_not_match = `--crate-name` and `#[crate_name]` are required to match, but `{$s}` != `{$name}`
|
||||
|
||||
session_crate_name_invalid = crate names cannot start with a `-`, but `{$s}` has a leading hyphen
|
||||
|
||||
session_crate_name_empty = crate name must not be empty
|
||||
|
||||
session_invalid_character_in_create_name = invalid character `{$character}` in crate name: `{$crate_name}`
|
||||
|
|
|
@ -13,9 +13,9 @@ rustc_serialize = { path = "../rustc_serialize" }
|
|||
rustc_span = { path = "../rustc_span" }
|
||||
rustc_macros = { path = "../rustc_macros" }
|
||||
rustc_data_structures = { path = "../rustc_data_structures" }
|
||||
rustc_target = { path = "../rustc_target" }
|
||||
rustc_hir = { path = "../rustc_hir" }
|
||||
rustc_lint_defs = { path = "../rustc_lint_defs" }
|
||||
rustc_target = { path = "../rustc_target" }
|
||||
unicode-width = "0.1.4"
|
||||
atty = "0.2"
|
||||
termcolor = "1.0"
|
||||
|
|
|
@ -1611,6 +1611,16 @@ rustc_queries! {
|
|||
desc { "looking up late bound vars" }
|
||||
}
|
||||
|
||||
/// Computes the visibility of the provided `def_id`.
|
||||
///
|
||||
/// If the item from the `def_id` doesn't have a visibility, it will panic. For example
|
||||
/// a generic type parameter will panic if you call this method on it:
|
||||
///
|
||||
/// ```
|
||||
/// pub trait Foo<T: Debug> {}
|
||||
/// ```
|
||||
///
|
||||
/// In here, if you call `visibility` on `T`, it'll panic.
|
||||
query visibility(def_id: DefId) -> ty::Visibility<DefId> {
|
||||
desc { |tcx| "computing visibility of `{}`", tcx.def_path_str(def_id) }
|
||||
separate_provide_extern
|
||||
|
|
|
@ -2,7 +2,7 @@ use std::num::NonZeroU32;
|
|||
|
||||
use crate::cgu_reuse_tracker::CguReuse;
|
||||
use crate::{self as rustc_session, SessionDiagnostic};
|
||||
use rustc_errors::{fluent, DiagnosticBuilder, Handler, MultiSpan};
|
||||
use rustc_errors::{fluent, DiagnosticBuilder, ErrorGuaranteed, Handler, MultiSpan};
|
||||
use rustc_macros::SessionDiagnostic;
|
||||
use rustc_span::{Span, Symbol};
|
||||
use rustc_target::abi::TargetDataLayoutErrors;
|
||||
|
@ -170,3 +170,52 @@ pub struct StackProtectorNotSupportedForTarget<'a> {
|
|||
pub struct SplitDebugInfoUnstablePlatform {
|
||||
pub debuginfo: SplitDebuginfo,
|
||||
}
|
||||
|
||||
#[derive(SessionDiagnostic)]
|
||||
#[diag(session::file_is_not_writeable)]
|
||||
pub struct FileIsNotWriteable<'a> {
|
||||
pub file: &'a std::path::Path,
|
||||
}
|
||||
|
||||
#[derive(SessionDiagnostic)]
|
||||
#[diag(session::crate_name_does_not_match)]
|
||||
pub struct CrateNameDoesNotMatch<'a> {
|
||||
#[primary_span]
|
||||
pub span: Span,
|
||||
pub s: &'a str,
|
||||
pub name: Symbol,
|
||||
}
|
||||
|
||||
#[derive(SessionDiagnostic)]
|
||||
#[diag(session::crate_name_invalid)]
|
||||
pub struct CrateNameInvalid<'a> {
|
||||
pub s: &'a str,
|
||||
}
|
||||
|
||||
#[derive(SessionDiagnostic)]
|
||||
#[diag(session::crate_name_empty)]
|
||||
pub struct CrateNameEmpty {
|
||||
#[primary_span]
|
||||
pub span: Option<Span>,
|
||||
}
|
||||
|
||||
pub struct InvalidCharacterInCrateName<'a> {
|
||||
pub span: Option<Span>,
|
||||
pub character: char,
|
||||
pub crate_name: &'a str,
|
||||
}
|
||||
|
||||
impl crate::SessionDiagnostic<'_> for InvalidCharacterInCrateName<'_> {
|
||||
fn into_diagnostic(
|
||||
self,
|
||||
sess: &Handler,
|
||||
) -> rustc_errors::DiagnosticBuilder<'_, ErrorGuaranteed> {
|
||||
let mut diag = sess.struct_err(fluent::session::invalid_character_in_create_name);
|
||||
if let Some(sp) = self.span {
|
||||
diag.set_span(sp);
|
||||
}
|
||||
diag.set_arg("character", self.character);
|
||||
diag.set_arg("crate_name", self.crate_name);
|
||||
diag
|
||||
}
|
||||
}
|
||||
|
|
|
@ -9,6 +9,8 @@
|
|||
#![feature(map_many_mut)]
|
||||
#![recursion_limit = "256"]
|
||||
#![allow(rustc::potential_query_instability)]
|
||||
#![deny(rustc::untranslatable_diagnostic)]
|
||||
#![deny(rustc::diagnostic_outside_of_impl)]
|
||||
|
||||
#[macro_use]
|
||||
extern crate rustc_macros;
|
||||
|
|
|
@ -1,5 +1,9 @@
|
|||
//! Related to out filenames of compilation (e.g. save analysis, binaries).
|
||||
use crate::config::{CrateType, Input, OutputFilenames, OutputType};
|
||||
use crate::errors::{
|
||||
CrateNameDoesNotMatch, CrateNameEmpty, CrateNameInvalid, FileIsNotWriteable,
|
||||
InvalidCharacterInCrateName,
|
||||
};
|
||||
use crate::Session;
|
||||
use rustc_ast as ast;
|
||||
use rustc_span::symbol::sym;
|
||||
|
@ -30,11 +34,7 @@ pub fn out_filename(
|
|||
/// read-only file. We should be consistent.
|
||||
pub fn check_file_is_writeable(file: &Path, sess: &Session) {
|
||||
if !is_writeable(file) {
|
||||
sess.fatal(&format!(
|
||||
"output file {} is not writeable -- check its \
|
||||
permissions",
|
||||
file.display()
|
||||
));
|
||||
sess.emit_fatal(FileIsNotWriteable { file });
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -61,11 +61,7 @@ pub fn find_crate_name(sess: &Session, attrs: &[ast::Attribute], input: &Input)
|
|||
if let Some(ref s) = sess.opts.crate_name {
|
||||
if let Some((attr, name)) = attr_crate_name {
|
||||
if name.as_str() != s {
|
||||
let msg = format!(
|
||||
"`--crate-name` and `#[crate_name]` are \
|
||||
required to match, but `{s}` != `{name}`"
|
||||
);
|
||||
sess.span_err(attr.span, &msg);
|
||||
sess.emit_err(CrateNameDoesNotMatch { span: attr.span, s, name });
|
||||
}
|
||||
}
|
||||
return validate(s.clone(), None);
|
||||
|
@ -77,11 +73,7 @@ pub fn find_crate_name(sess: &Session, attrs: &[ast::Attribute], input: &Input)
|
|||
if let Input::File(ref path) = *input {
|
||||
if let Some(s) = path.file_stem().and_then(|s| s.to_str()) {
|
||||
if s.starts_with('-') {
|
||||
let msg = format!(
|
||||
"crate names cannot start with a `-`, but \
|
||||
`{s}` has a leading hyphen"
|
||||
);
|
||||
sess.err(&msg);
|
||||
sess.emit_err(CrateNameInvalid { s });
|
||||
} else {
|
||||
return validate(s.replace('-', "_"), None);
|
||||
}
|
||||
|
@ -94,15 +86,9 @@ pub fn find_crate_name(sess: &Session, attrs: &[ast::Attribute], input: &Input)
|
|||
pub fn validate_crate_name(sess: &Session, s: &str, sp: Option<Span>) {
|
||||
let mut err_count = 0;
|
||||
{
|
||||
let mut say = |s: &str| {
|
||||
match sp {
|
||||
Some(sp) => sess.span_err(sp, s),
|
||||
None => sess.err(s),
|
||||
};
|
||||
err_count += 1;
|
||||
};
|
||||
if s.is_empty() {
|
||||
say("crate name must not be empty");
|
||||
err_count += 1;
|
||||
sess.emit_err(CrateNameEmpty { span: sp });
|
||||
}
|
||||
for c in s.chars() {
|
||||
if c.is_alphanumeric() {
|
||||
|
@ -111,7 +97,8 @@ pub fn validate_crate_name(sess: &Session, s: &str, sp: Option<Span>) {
|
|||
if c == '_' {
|
||||
continue;
|
||||
}
|
||||
say(&format!("invalid character `{c}` in crate name: `{s}`"));
|
||||
err_count += 1;
|
||||
sess.emit_err(InvalidCharacterInCrateName { span: sp, character: c, crate_name: s });
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -297,6 +297,8 @@ impl Session {
|
|||
}
|
||||
|
||||
#[rustc_lint_diagnostics]
|
||||
#[allow(rustc::untranslatable_diagnostic)]
|
||||
#[allow(rustc::diagnostic_outside_of_impl)]
|
||||
pub fn struct_span_warn<S: Into<MultiSpan>>(
|
||||
&self,
|
||||
sp: S,
|
||||
|
@ -305,6 +307,8 @@ impl Session {
|
|||
self.diagnostic().struct_span_warn(sp, msg)
|
||||
}
|
||||
#[rustc_lint_diagnostics]
|
||||
#[allow(rustc::untranslatable_diagnostic)]
|
||||
#[allow(rustc::diagnostic_outside_of_impl)]
|
||||
pub fn struct_span_warn_with_expectation<S: Into<MultiSpan>>(
|
||||
&self,
|
||||
sp: S,
|
||||
|
@ -314,6 +318,8 @@ impl Session {
|
|||
self.diagnostic().struct_span_warn_with_expectation(sp, msg, id)
|
||||
}
|
||||
#[rustc_lint_diagnostics]
|
||||
#[allow(rustc::untranslatable_diagnostic)]
|
||||
#[allow(rustc::diagnostic_outside_of_impl)]
|
||||
pub fn struct_span_warn_with_code<S: Into<MultiSpan>>(
|
||||
&self,
|
||||
sp: S,
|
||||
|
@ -323,10 +329,14 @@ impl Session {
|
|||
self.diagnostic().struct_span_warn_with_code(sp, msg, code)
|
||||
}
|
||||
#[rustc_lint_diagnostics]
|
||||
#[allow(rustc::untranslatable_diagnostic)]
|
||||
#[allow(rustc::diagnostic_outside_of_impl)]
|
||||
pub fn struct_warn(&self, msg: impl Into<DiagnosticMessage>) -> DiagnosticBuilder<'_, ()> {
|
||||
self.diagnostic().struct_warn(msg)
|
||||
}
|
||||
#[rustc_lint_diagnostics]
|
||||
#[allow(rustc::untranslatable_diagnostic)]
|
||||
#[allow(rustc::diagnostic_outside_of_impl)]
|
||||
pub fn struct_warn_with_expectation(
|
||||
&self,
|
||||
msg: impl Into<DiagnosticMessage>,
|
||||
|
@ -335,6 +345,8 @@ impl Session {
|
|||
self.diagnostic().struct_warn_with_expectation(msg, id)
|
||||
}
|
||||
#[rustc_lint_diagnostics]
|
||||
#[allow(rustc::untranslatable_diagnostic)]
|
||||
#[allow(rustc::diagnostic_outside_of_impl)]
|
||||
pub fn struct_span_allow<S: Into<MultiSpan>>(
|
||||
&self,
|
||||
sp: S,
|
||||
|
@ -343,10 +355,14 @@ impl Session {
|
|||
self.diagnostic().struct_span_allow(sp, msg)
|
||||
}
|
||||
#[rustc_lint_diagnostics]
|
||||
#[allow(rustc::untranslatable_diagnostic)]
|
||||
#[allow(rustc::diagnostic_outside_of_impl)]
|
||||
pub fn struct_allow(&self, msg: impl Into<DiagnosticMessage>) -> DiagnosticBuilder<'_, ()> {
|
||||
self.diagnostic().struct_allow(msg)
|
||||
}
|
||||
#[rustc_lint_diagnostics]
|
||||
#[allow(rustc::untranslatable_diagnostic)]
|
||||
#[allow(rustc::diagnostic_outside_of_impl)]
|
||||
pub fn struct_expect(
|
||||
&self,
|
||||
msg: impl Into<DiagnosticMessage>,
|
||||
|
@ -355,6 +371,8 @@ impl Session {
|
|||
self.diagnostic().struct_expect(msg, id)
|
||||
}
|
||||
#[rustc_lint_diagnostics]
|
||||
#[allow(rustc::untranslatable_diagnostic)]
|
||||
#[allow(rustc::diagnostic_outside_of_impl)]
|
||||
pub fn struct_span_err<S: Into<MultiSpan>>(
|
||||
&self,
|
||||
sp: S,
|
||||
|
@ -363,6 +381,8 @@ impl Session {
|
|||
self.diagnostic().struct_span_err(sp, msg)
|
||||
}
|
||||
#[rustc_lint_diagnostics]
|
||||
#[allow(rustc::untranslatable_diagnostic)]
|
||||
#[allow(rustc::diagnostic_outside_of_impl)]
|
||||
pub fn struct_span_err_with_code<S: Into<MultiSpan>>(
|
||||
&self,
|
||||
sp: S,
|
||||
|
@ -373,6 +393,8 @@ impl Session {
|
|||
}
|
||||
// FIXME: This method should be removed (every error should have an associated error code).
|
||||
#[rustc_lint_diagnostics]
|
||||
#[allow(rustc::untranslatable_diagnostic)]
|
||||
#[allow(rustc::diagnostic_outside_of_impl)]
|
||||
pub fn struct_err(
|
||||
&self,
|
||||
msg: impl Into<DiagnosticMessage>,
|
||||
|
@ -380,6 +402,8 @@ impl Session {
|
|||
self.parse_sess.struct_err(msg)
|
||||
}
|
||||
#[rustc_lint_diagnostics]
|
||||
#[allow(rustc::untranslatable_diagnostic)]
|
||||
#[allow(rustc::diagnostic_outside_of_impl)]
|
||||
pub fn struct_err_with_code(
|
||||
&self,
|
||||
msg: impl Into<DiagnosticMessage>,
|
||||
|
@ -388,6 +412,8 @@ impl Session {
|
|||
self.diagnostic().struct_err_with_code(msg, code)
|
||||
}
|
||||
#[rustc_lint_diagnostics]
|
||||
#[allow(rustc::untranslatable_diagnostic)]
|
||||
#[allow(rustc::diagnostic_outside_of_impl)]
|
||||
pub fn struct_warn_with_code(
|
||||
&self,
|
||||
msg: impl Into<DiagnosticMessage>,
|
||||
|
@ -396,6 +422,8 @@ impl Session {
|
|||
self.diagnostic().struct_warn_with_code(msg, code)
|
||||
}
|
||||
#[rustc_lint_diagnostics]
|
||||
#[allow(rustc::untranslatable_diagnostic)]
|
||||
#[allow(rustc::diagnostic_outside_of_impl)]
|
||||
pub fn struct_span_fatal<S: Into<MultiSpan>>(
|
||||
&self,
|
||||
sp: S,
|
||||
|
@ -404,6 +432,8 @@ impl Session {
|
|||
self.diagnostic().struct_span_fatal(sp, msg)
|
||||
}
|
||||
#[rustc_lint_diagnostics]
|
||||
#[allow(rustc::untranslatable_diagnostic)]
|
||||
#[allow(rustc::diagnostic_outside_of_impl)]
|
||||
pub fn struct_span_fatal_with_code<S: Into<MultiSpan>>(
|
||||
&self,
|
||||
sp: S,
|
||||
|
@ -413,15 +443,21 @@ impl Session {
|
|||
self.diagnostic().struct_span_fatal_with_code(sp, msg, code)
|
||||
}
|
||||
#[rustc_lint_diagnostics]
|
||||
#[allow(rustc::untranslatable_diagnostic)]
|
||||
#[allow(rustc::diagnostic_outside_of_impl)]
|
||||
pub fn struct_fatal(&self, msg: impl Into<DiagnosticMessage>) -> DiagnosticBuilder<'_, !> {
|
||||
self.diagnostic().struct_fatal(msg)
|
||||
}
|
||||
|
||||
#[rustc_lint_diagnostics]
|
||||
#[allow(rustc::untranslatable_diagnostic)]
|
||||
#[allow(rustc::diagnostic_outside_of_impl)]
|
||||
pub fn span_fatal<S: Into<MultiSpan>>(&self, sp: S, msg: impl Into<DiagnosticMessage>) -> ! {
|
||||
self.diagnostic().span_fatal(sp, msg)
|
||||
}
|
||||
#[rustc_lint_diagnostics]
|
||||
#[allow(rustc::untranslatable_diagnostic)]
|
||||
#[allow(rustc::diagnostic_outside_of_impl)]
|
||||
pub fn span_fatal_with_code<S: Into<MultiSpan>>(
|
||||
&self,
|
||||
sp: S,
|
||||
|
@ -431,10 +467,14 @@ impl Session {
|
|||
self.diagnostic().span_fatal_with_code(sp, msg, code)
|
||||
}
|
||||
#[rustc_lint_diagnostics]
|
||||
#[allow(rustc::untranslatable_diagnostic)]
|
||||
#[allow(rustc::diagnostic_outside_of_impl)]
|
||||
pub fn fatal(&self, msg: impl Into<DiagnosticMessage>) -> ! {
|
||||
self.diagnostic().fatal(msg).raise()
|
||||
}
|
||||
#[rustc_lint_diagnostics]
|
||||
#[allow(rustc::untranslatable_diagnostic)]
|
||||
#[allow(rustc::diagnostic_outside_of_impl)]
|
||||
pub fn span_err_or_warn<S: Into<MultiSpan>>(
|
||||
&self,
|
||||
is_warning: bool,
|
||||
|
@ -448,6 +488,8 @@ impl Session {
|
|||
}
|
||||
}
|
||||
#[rustc_lint_diagnostics]
|
||||
#[allow(rustc::untranslatable_diagnostic)]
|
||||
#[allow(rustc::diagnostic_outside_of_impl)]
|
||||
pub fn span_err<S: Into<MultiSpan>>(
|
||||
&self,
|
||||
sp: S,
|
||||
|
@ -456,6 +498,8 @@ impl Session {
|
|||
self.diagnostic().span_err(sp, msg)
|
||||
}
|
||||
#[rustc_lint_diagnostics]
|
||||
#[allow(rustc::untranslatable_diagnostic)]
|
||||
#[allow(rustc::diagnostic_outside_of_impl)]
|
||||
pub fn span_err_with_code<S: Into<MultiSpan>>(
|
||||
&self,
|
||||
sp: S,
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue