1
Fork 0

Fix up comments.

Wrap overly long ones, etc.
This commit is contained in:
Nicholas Nethercote 2024-05-07 14:12:37 +10:00
parent a6416d8907
commit 22ca74f2b0
10 changed files with 69 additions and 51 deletions

View file

@ -1494,8 +1494,9 @@ impl<'tcx> LateLintPass<'tcx> for TypeAliasBounds {
let ty = cx.tcx.type_of(item.owner_id).skip_binder(); let ty = cx.tcx.type_of(item.owner_id).skip_binder();
if ty.has_inherent_projections() { if ty.has_inherent_projections() {
// Bounds of type aliases that contain opaque types or inherent projections are respected. // Bounds of type aliases that contain opaque types or inherent projections are
// E.g: `type X = impl Trait;`, `type X = (impl Trait, Y);`, `type X = Type::Inherent;`. // respected. E.g: `type X = impl Trait;`, `type X = (impl Trait, Y);`, `type X =
// Type::Inherent;`.
return; return;
} }
@ -2224,7 +2225,8 @@ impl<'tcx> LateLintPass<'tcx> for ExplicitOutlivesRequirements {
hir_generics.span.shrink_to_hi().to(where_span) hir_generics.span.shrink_to_hi().to(where_span)
}; };
// Due to macro expansions, the `full_where_span` might not actually contain all predicates. // Due to macro expansions, the `full_where_span` might not actually contain all
// predicates.
if where_lint_spans.iter().all(|&sp| full_where_span.contains(sp)) { if where_lint_spans.iter().all(|&sp| full_where_span.contains(sp)) {
lint_spans.push(full_where_span); lint_spans.push(full_where_span);
} else { } else {
@ -2601,7 +2603,8 @@ impl<'tcx> LateLintPass<'tcx> for InvalidValue {
}; };
// So we have at least one potentially inhabited variant. Might we have two? // So we have at least one potentially inhabited variant. Might we have two?
let Some(second_variant) = potential_variants.next() else { let Some(second_variant) = potential_variants.next() else {
// There is only one potentially inhabited variant. So we can recursively check that variant! // There is only one potentially inhabited variant. So we can recursively
// check that variant!
return variant_find_init_error( return variant_find_init_error(
cx, cx,
ty, ty,
@ -2611,10 +2614,10 @@ impl<'tcx> LateLintPass<'tcx> for InvalidValue {
init, init,
); );
}; };
// So we have at least two potentially inhabited variants. // So we have at least two potentially inhabited variants. If we can prove that
// If we can prove that we have at least two *definitely* inhabited variants, // we have at least two *definitely* inhabited variants, then we have a tag and
// then we have a tag and hence leaving this uninit is definitely disallowed. // hence leaving this uninit is definitely disallowed. (Leaving it zeroed could
// (Leaving it zeroed could be okay, depending on which variant is encoded as zero tag.) // be okay, depending on which variant is encoded as zero tag.)
if init == InitKind::Uninit { if init == InitKind::Uninit {
let definitely_inhabited = (first_variant.1 as usize) let definitely_inhabited = (first_variant.1 as usize)
+ (second_variant.1 as usize) + (second_variant.1 as usize)
@ -2825,7 +2828,8 @@ impl<'tcx> LateLintPass<'tcx> for NamedAsmLabels {
let mut found_labels = Vec::new(); let mut found_labels = Vec::new();
// A semicolon might not actually be specified as a separator for all targets, but it seems like LLVM accepts it always // A semicolon might not actually be specified as a separator for all targets, but
// it seems like LLVM accepts it always.
let statements = template_str.split(|c| matches!(c, '\n' | ';')); let statements = template_str.split(|c| matches!(c, '\n' | ';'));
for statement in statements { for statement in statements {
// If there's a comment, trim it from the statement // If there's a comment, trim it from the statement
@ -2838,7 +2842,8 @@ impl<'tcx> LateLintPass<'tcx> for NamedAsmLabels {
let mut chars = possible_label.chars(); let mut chars = possible_label.chars();
let Some(start) = chars.next() else { let Some(start) = chars.next() else {
// Empty string means a leading ':' in this section, which is not a label. // Empty string means a leading ':' in this section, which is not a
// label.
break 'label_loop; break 'label_loop;
}; };
@ -2855,12 +2860,15 @@ impl<'tcx> LateLintPass<'tcx> for NamedAsmLabels {
// Labels continue with ASCII alphanumeric characters, _, or $ // Labels continue with ASCII alphanumeric characters, _, or $
for c in chars { for c in chars {
// Inside a template format arg, any character is permitted for the puproses of label detection // Inside a template format arg, any character is permitted for the
// because we assume that it can be replaced with some other valid label string later. // puproses of label detection because we assume that it can be
// `options(raw)` asm blocks cannot have format args, so they are excluded from this special case. // replaced with some other valid label string later. `options(raw)`
// asm blocks cannot have format args, so they are excluded from this
// special case.
if !raw && in_bracket { if !raw && in_bracket {
if c == '{' { if c == '{' {
// Nested brackets are not allowed in format args, this cannot be a label. // Nested brackets are not allowed in format args, this cannot
// be a label.
break 'label_loop; break 'label_loop;
} }
@ -2873,7 +2881,8 @@ impl<'tcx> LateLintPass<'tcx> for NamedAsmLabels {
in_bracket = true; in_bracket = true;
} else { } else {
if !(c.is_ascii_alphanumeric() || matches!(c, '_' | '$')) { if !(c.is_ascii_alphanumeric() || matches!(c, '_' | '$')) {
// The potential label had an invalid character inside it, it cannot be a label. // The potential label had an invalid character inside it, it
// cannot be a label.
break 'label_loop; break 'label_loop;
} }
} }
@ -2892,7 +2901,8 @@ impl<'tcx> LateLintPass<'tcx> for NamedAsmLabels {
.into_iter() .into_iter()
.filter_map(|label| find_label_span(label)) .filter_map(|label| find_label_span(label))
.collect::<Vec<Span>>(); .collect::<Vec<Span>>();
// If there were labels but we couldn't find a span, combine the warnings and use the template span // If there were labels but we couldn't find a span, combine the warnings and
// use the template span.
let target_spans: MultiSpan = let target_spans: MultiSpan =
if spans.len() > 0 { spans.into() } else { (*template_span).into() }; if spans.len() > 0 { spans.into() } else { (*template_span).into() };

View file

@ -94,7 +94,8 @@ enum TargetLint {
/// A lint name that should give no warnings and have no effect. /// A lint name that should give no warnings and have no effect.
/// ///
/// This is used by rustc to avoid warning about old rustdoc lints before rustdoc registers them as tool lints. /// This is used by rustc to avoid warning about old rustdoc lints before rustdoc registers
/// them as tool lints.
Ignored, Ignored,
} }

View file

@ -16,7 +16,7 @@ pub struct OverruledAttribute<'a> {
#[subdiagnostic] #[subdiagnostic]
pub sub: OverruledAttributeSub, pub sub: OverruledAttributeSub,
} }
//
pub enum OverruledAttributeSub { pub enum OverruledAttributeSub {
DefaultSource { id: String }, DefaultSource { id: String },
NodeSource { span: Span, reason: Option<Symbol> }, NodeSource { span: Span, reason: Option<Symbol> },

View file

@ -18,11 +18,11 @@ use rustc_span::Span;
use tracing::debug; use tracing::debug;
declare_tool_lint! { declare_tool_lint! {
/// The `default_hash_type` lint detects use of [`std::collections::HashMap`]/[`std::collections::HashSet`], /// The `default_hash_type` lint detects use of [`std::collections::HashMap`] and
/// suggesting the use of `FxHashMap`/`FxHashSet`. /// [`std::collections::HashSet`], suggesting the use of `FxHashMap`/`FxHashSet`.
/// ///
/// This can help as `FxHasher` can perform better than the default hasher. DOS protection is not /// This can help as `FxHasher` can perform better than the default hasher. DOS protection is
/// required as input is assumed to be trusted. /// not required as input is assumed to be trusted.
pub rustc::DEFAULT_HASH_TYPES, pub rustc::DEFAULT_HASH_TYPES,
Allow, Allow,
"forbid HashMap and HashSet and suggest the FxHash* variants", "forbid HashMap and HashSet and suggest the FxHash* variants",
@ -35,7 +35,7 @@ impl LateLintPass<'_> for DefaultHashTypes {
fn check_path(&mut self, cx: &LateContext<'_>, path: &Path<'_>, hir_id: HirId) { fn check_path(&mut self, cx: &LateContext<'_>, path: &Path<'_>, hir_id: HirId) {
let Res::Def(rustc_hir::def::DefKind::Struct, def_id) = path.res else { return }; let Res::Def(rustc_hir::def::DefKind::Struct, def_id) = path.res else { return };
if matches!(cx.tcx.hir_node(hir_id), Node::Item(Item { kind: ItemKind::Use(..), .. })) { if matches!(cx.tcx.hir_node(hir_id), Node::Item(Item { kind: ItemKind::Use(..), .. })) {
// don't lint imports, only actual usages // Don't lint imports, only actual usages.
return; return;
} }
let preferred = match cx.tcx.get_diagnostic_name(def_id) { let preferred = match cx.tcx.get_diagnostic_name(def_id) {
@ -75,8 +75,8 @@ declare_tool_lint! {
/// potential query instability, such as iterating over a `HashMap`. /// potential query instability, such as iterating over a `HashMap`.
/// ///
/// Due to the [incremental compilation](https://rustc-dev-guide.rust-lang.org/queries/incremental-compilation.html) model, /// Due to the [incremental compilation](https://rustc-dev-guide.rust-lang.org/queries/incremental-compilation.html) model,
/// queries must return deterministic, stable results. `HashMap` iteration order can change between compilations, /// queries must return deterministic, stable results. `HashMap` iteration order can change
/// and will introduce instability if query results expose the order. /// between compilations, and will introduce instability if query results expose the order.
pub rustc::POTENTIAL_QUERY_INSTABILITY, pub rustc::POTENTIAL_QUERY_INSTABILITY,
Allow, Allow,
"require explicit opt-in when using potentially unstable methods or functions", "require explicit opt-in when using potentially unstable methods or functions",

View file

@ -113,11 +113,11 @@ impl<'tcx> LateLintPass<'tcx> for LetUnderscore {
let mut top_level = true; let mut top_level = true;
// We recursively walk through all patterns, so that we can catch cases where the lock is nested in a pattern. // We recursively walk through all patterns, so that we can catch cases where the lock is
// For the basic `let_underscore_drop` lint, we only look at the top level, since there are many legitimate reasons // nested in a pattern. For the basic `let_underscore_drop` lint, we only look at the top
// to bind a sub-pattern to an `_`, if we're only interested in the rest. // level, since there are many legitimate reasons to bind a sub-pattern to an `_`, if we're
// But with locks, we prefer having the chance of "false positives" over missing cases, since the effects can be // only interested in the rest. But with locks, we prefer having the chance of "false
// quite catastrophic. // positives" over missing cases, since the effects can be quite catastrophic.
local.pat.walk_always(|pat| { local.pat.walk_always(|pat| {
let is_top_level = top_level; let is_top_level = top_level;
top_level = false; top_level = false;

View file

@ -750,7 +750,8 @@ impl<'s, P: LintLevelsProvider> LintLevelsBuilder<'s, P> {
let level = match Level::from_attr(attr) { let level = match Level::from_attr(attr) {
None => continue, None => continue,
// This is the only lint level with a `LintExpectationId` that can be created from an attribute // This is the only lint level with a `LintExpectationId` that can be created from
// an attribute.
Some(Level::Expect(unstable_id)) if let Some(hir_id) = source_hir_id => { Some(Level::Expect(unstable_id)) if let Some(hir_id) = source_hir_id => {
let LintExpectationId::Unstable { attr_id, lint_index } = unstable_id else { let LintExpectationId::Unstable { attr_id, lint_index } = unstable_id else {
bug!("stable id Level::from_attr") bug!("stable id Level::from_attr")
@ -760,8 +761,8 @@ impl<'s, P: LintLevelsProvider> LintLevelsBuilder<'s, P> {
hir_id, hir_id,
attr_index: attr_index.try_into().unwrap(), attr_index: attr_index.try_into().unwrap(),
lint_index, lint_index,
// we pass the previous unstable attr_id such that we can trace the ast id when building a map // We pass the previous unstable attr_id such that we can trace the ast id
// to go from unstable to stable id. // when building a map to go from unstable to stable id.
attr_id: Some(attr_id), attr_id: Some(attr_id),
}; };
@ -860,13 +861,15 @@ impl<'s, P: LintLevelsProvider> LintLevelsBuilder<'s, P> {
self.store.check_lint_name(&name, tool_name, self.registered_tools); self.store.check_lint_name(&name, tool_name, self.registered_tools);
match &lint_result { match &lint_result {
CheckLintNameResult::Ok(ids) => { CheckLintNameResult::Ok(ids) => {
// This checks for instances where the user writes `#[expect(unfulfilled_lint_expectations)]` // This checks for instances where the user writes
// in that case we want to avoid overriding the lint level but instead add an expectation that // `#[expect(unfulfilled_lint_expectations)]` in that case we want to avoid
// can't be fulfilled. The lint message will include an explanation, that the // overriding the lint level but instead add an expectation that can't be
// fulfilled. The lint message will include an explanation, that the
// `unfulfilled_lint_expectations` lint can't be expected. // `unfulfilled_lint_expectations` lint can't be expected.
if let Level::Expect(expect_id) = level { if let Level::Expect(expect_id) = level {
// The `unfulfilled_lint_expectations` lint is not part of any lint groups. Therefore. we // The `unfulfilled_lint_expectations` lint is not part of any lint
// only need to check the slice if it contains a single lint. // groups. Therefore. we only need to check the slice if it contains a
// single lint.
let is_unfulfilled_lint_expectations = match ids { let is_unfulfilled_lint_expectations = match ids {
[lint] => *lint == LintId::of(UNFULFILLED_LINT_EXPECTATIONS), [lint] => *lint == LintId::of(UNFULFILLED_LINT_EXPECTATIONS),
_ => false, _ => false,
@ -997,7 +1000,8 @@ impl<'s, P: LintLevelsProvider> LintLevelsBuilder<'s, P> {
// we don't warn about the name change. // we don't warn about the name change.
if let CheckLintNameResult::Renamed(new_name) = lint_result { if let CheckLintNameResult::Renamed(new_name) = lint_result {
// Ignore any errors or warnings that happen because the new name is inaccurate // Ignore any errors or warnings that happen because the new name is inaccurate
// NOTE: `new_name` already includes the tool name, so we don't have to add it again. // NOTE: `new_name` already includes the tool name, so we don't have to add it
// again.
let CheckLintNameResult::Ok(ids) = let CheckLintNameResult::Ok(ids) =
self.store.check_lint_name(&new_name, None, self.registered_tools) self.store.check_lint_name(&new_name, None, self.registered_tools)
else { else {

View file

@ -25,9 +25,9 @@ declare_lint! {
/// ///
/// The inner pointer of a `CString` lives only as long as the `CString` it /// The inner pointer of a `CString` lives only as long as the `CString` it
/// points to. Getting the inner pointer of a *temporary* `CString` allows the `CString` /// points to. Getting the inner pointer of a *temporary* `CString` allows the `CString`
/// to be dropped at the end of the statement, as it is not being referenced as far as the typesystem /// to be dropped at the end of the statement, as it is not being referenced as far as the
/// is concerned. This means outside of the statement the pointer will point to freed memory, which /// typesystem is concerned. This means outside of the statement the pointer will point to
/// causes undefined behavior if the pointer is later dereferenced. /// freed memory, which causes undefined behavior if the pointer is later dereferenced.
pub TEMPORARY_CSTRING_AS_PTR, pub TEMPORARY_CSTRING_AS_PTR,
Warn, Warn,
"detects getting the inner pointer of a temporary `CString`" "detects getting the inner pointer of a temporary `CString`"

View file

@ -306,7 +306,7 @@ impl<'tcx> LateLintPass<'tcx> for NonLocalDefinitions {
} }
} }
// Detecting if the impl definition is leaking outside of it's defining scope. // Detecting if the impl definition is leaking outside of its defining scope.
// //
// Rule: for each impl, instantiate all local types with inference vars and // Rule: for each impl, instantiate all local types with inference vars and
// then assemble candidates for that goal, if there are more than 1 (non-private // then assemble candidates for that goal, if there are more than 1 (non-private

View file

@ -297,14 +297,14 @@ impl NonSnakeCase {
// We cannot provide meaningful suggestions // We cannot provide meaningful suggestions
// if the characters are in the category of "Uppercase Letter". // if the characters are in the category of "Uppercase Letter".
let sub = if name != sc { let sub = if name != sc {
// We have a valid span in almost all cases, but we don't have one when linting a crate // We have a valid span in almost all cases, but we don't have one when linting a
// name provided via the command line. // crate name provided via the command line.
if !span.is_dummy() { if !span.is_dummy() {
let sc_ident = Ident::from_str_and_span(&sc, span); let sc_ident = Ident::from_str_and_span(&sc, span);
if sc_ident.is_reserved() { if sc_ident.is_reserved() {
// We shouldn't suggest a reserved identifier to fix non-snake-case identifiers. // We shouldn't suggest a reserved identifier to fix non-snake-case
// Instead, recommend renaming the identifier entirely or, if permitted, // identifiers. Instead, recommend renaming the identifier entirely or, if
// escaping it to create a raw identifier. // permitted, escaping it to create a raw identifier.
if sc_ident.name.can_be_raw() { if sc_ident.name.can_be_raw() {
NonSnakeCaseDiagSub::RenameOrConvertSuggestion { NonSnakeCaseDiagSub::RenameOrConvertSuggestion {
span, span,

View file

@ -387,7 +387,8 @@ impl<'tcx> LateLintPass<'tcx> for UnusedResults {
} }
} }
// Returns whether further errors should be suppressed because either a lint has been emitted or the type should be ignored. // Returns whether further errors should be suppressed because either a lint has been
// emitted or the type should be ignored.
fn check_must_use_def( fn check_must_use_def(
cx: &LateContext<'_>, cx: &LateContext<'_>,
def_id: DefId, def_id: DefId,
@ -677,7 +678,8 @@ trait UnusedDelimLint {
return true; return true;
} }
// Check if LHS needs parens to prevent false-positives in cases like `fn x() -> u8 { ({ 0 } + 1) }`. // Check if LHS needs parens to prevent false-positives in cases like
// `fn x() -> u8 { ({ 0 } + 1) }`.
// //
// FIXME: https://github.com/rust-lang/rust/issues/119426 // FIXME: https://github.com/rust-lang/rust/issues/119426
// The syntax tree in this code is from after macro expansion, so the // The syntax tree in this code is from after macro expansion, so the
@ -722,7 +724,8 @@ trait UnusedDelimLint {
} }
} }
// Check if RHS needs parens to prevent false-positives in cases like `if (() == return) {}`. // Check if RHS needs parens to prevent false-positives in cases like `if (() == return)
// {}`.
if !followed_by_block { if !followed_by_block {
return false; return false;
} }