What it does
-Checks for usage of indexing or slicing. Arrays are special cases, this lint
-does report on arrays if we can tell that slicing operations are in bounds and does not
-lint on constant usize
indexing on arrays because that is handled by rustc’s const_err
lint.
Checks for usage of indexing or slicing that may panic at runtime.
+This lint does not report on indexing or slicing operations
+that always panic, clippy’s out_of_bound_indexing
already
+handles those cases.
Why restrict this?
-To avoid implicit panics from indexing and slicing.
-There are “checked” alternatives which do not panic, and can be used with unwrap()
to make
+
To avoid implicit panics from indexing and slicing.
+There are “checked” alternatives which do not panic, and can be used with unwrap()
to make
an explicit panic when it is desired.
Limitations
This lint does not check for the usage of indexing or slicing on strings. These are covered
by the more specific string_slice
lint.
Example
// Vector
-let x = vec![0; 5];
+let x = vec![0, 1, 2, 3];
x[2];
+x[100];
&x[2..100];
// Array
let y = [0, 1, 2, 3];
-&y[10..100];
-&y[10..];
+let i = 10; // Could be a runtime value
+let j = 20;
+&y[i..j];
Use instead:
x.get(2);
+x.get(100);
x.get(2..100);
-y.get(10);
-y.get(10..100);
+let i = 10;
+let j = 20;
+y.get(i..j);