Clippy lints / Pedantic
Clippy lint · Pedantic · checked with Clippy 0.1.99
clippy::ip_constant: hand-coded well-known IP address
What it meansChecks for IP addresses that could be replaced with predefined constants such as Ipv4Addr::new(127, 0, 0, 1) instead of using the appropriate constants. It is in the pedantic group and off by default.
What you see
warning: hand-coded well-known IP address --> main.rs:6:15 | 6 | let addr_v4 = Ipv4Addr::new(127, 0, 0, 1); | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ | = help: for further information visit https://rust-lang.github.io/rust-clippy/stable/index.html#ip_constant = note: `-W clippy::ip-constant` implied by `-W clippy::pedantic` help: use | 6 - let addr_v4 = Ipv4Addr::new(127, 0, 0, 1); 6 + let addr_v4 = Ipv4Addr::LOCALHOST; |
Real output of Clippy 0.1.99 (Rust 1.99) on the example below. Names and line numbers in yours will differ.
Does it matter?
Using specific IP addresses like 127.0.0.1 or ::1 is less clear and less maintainable than using the predefined constants Ipv4Addr::LOCALHOST or Ipv6Addr::LOCALHOST. These constants improve code readability, make the intent explicit, and are less error-prone.
Stricter lints with some false positives. Off by default; opt in with clippy::pedantic.
How to fix it
Clippy can fix this one for you: run cargo clippy --fix (add --allow-dirty if you have uncommitted changes). Review the diff before you commit.
Flagged
use std::net::{Ipv4Addr, Ipv6Addr};
// IPv4 loopback
let addr_v4 = Ipv4Addr::new(127, 0, 0, 1);
// IPv6 loopback
let addr_v6 = Ipv6Addr::new(0, 0, 0, 0, 0, 0, 0, 1);
Write this instead
use std::net::{Ipv4Addr, Ipv6Addr};
// IPv4 loopback
let addr_v4 = Ipv4Addr::LOCALHOST;
// IPv6 loopback
let addr_v6 = Ipv6Addr::LOCALHOST;
Turn it off, or on
It is off by default. To use it, set it to warn or deny:
Whole crate (Cargo.toml)
[lints.clippy]
ip_constant = "warn"In code
#![warn(clippy::ip_constant)]One run
cargo clippy -- -W clippy::ip-constantThe [lints] table needs Rust 1.74 or newer. In a workspace, put it under [workspace.lints.clippy] and add [lints] workspace = true to each member.
Clippy's own documentation
What it does
Checks for IP addresses that could be replaced with predefined constants such as
Ipv4Addr::new(127, 0, 0, 1) instead of using the appropriate constants.
Why is this bad?
Using specific IP addresses like 127.0.0.1 or ::1 is less clear and less maintainable than using the
predefined constants Ipv4Addr::LOCALHOST or Ipv6Addr::LOCALHOST. These constants improve code
readability, make the intent explicit, and are less error-prone.
Example
use std::net::{Ipv4Addr, Ipv6Addr};
// IPv4 loopback
let addr_v4 = Ipv4Addr::new(127, 0, 0, 1);
// IPv6 loopback
let addr_v6 = Ipv6Addr::new(0, 0, 0, 0, 0, 0, 0, 1);
Use instead:
use std::net::{Ipv4Addr, Ipv6Addr};
// IPv4 loopback
let addr_v4 = Ipv4Addr::LOCALHOST;
// IPv6 loopback
let addr_v6 = Ipv6Addr::LOCALHOST;
From the Clippy lint list (0.1.99), part of the Rust project, MIT or Apache-2.0. Official entry.
Related lints
- too_many_linesChecks for functions with a large amount of lines
- missing_errors_docChecks the doc comments of publicly visible functions that return a Result type and warns if there is no # Errors section
- must_use_candidateChecks for public functions that have no #[must_use] attribute, but return something not already marked must-use, have no mutable arg and mutate no statics
- inline_alwaysChecks for items annotated with #[inline(always)], unless the annotated function is empty or simply panics
- into_iter_without_iterThis is the opposite of the iter_without_into_iter lint. It looks for IntoIterator for (&|&mut) Type implementations without an inherent iter or iter_mut method on the type or on any of the types in its Deref chain
- invalid_upcast_comparisonsbecause of the numeric bounds on `x` prior to casting, this expression is always false
- items_after_statementsadding items after statements is confusing, since items exist from the start of the scope
- iter_filter_is_ok`filter` for `is_ok` on iterator over `Result`s
- iter_filter_is_some`filter` for `is_some` on iterator over `Option`
All 847 Clippy lints · Rust compiler errors · Cargo.toml checker
Up next
Related lintclippy::too_many_linesChecks for functions with a large amount of linesRead it next →Did this answer your question?