Skip to content

A lint suggesting .get(n) instead of if n < slice.len() { slice[n] } ... #16166

@nyurik

Description

@nyurik

What it does

When recently reviewing new Rust dev code, I saw this pattern, which is a clear dup of the Slice::get. It would be great to catch it. Note that in an ideal case, we shouldn't catch this specific case, but instead catch any kind of stdlib function patterns (ASTs), and suggest replacements (this might generate some false positives though)

Advantage

  • shorter, more readable code
  • clearer intent

Drawbacks

No response

Example

pub static GLOBAL_ARRAY: [&str; ...] = [...];

fn get_item(index: usize) -> Option<&'static str> {
  if index < GLOBAL_ARRAY.len() {
    Some(GLOBAL_ARRAY[index])
  } else {
    None
  }
}

Could be written as:

fn get_item(index: usize) -> Option<&'static str> {
  GLOBAL_ARRAY.get(index)
}

Comparison with existing lints

No response

Additional Context

No response

Metadata

Metadata

Assignees

No one assigned

    Labels

    A-lintArea: New lints

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions