Replace str path utils with new PathLookup type
This commit is contained in:
parent
ea13461967
commit
b768fbe4bc
70 changed files with 799 additions and 1400 deletions
|
|
@ -86,7 +86,7 @@ arguments have to be checked separately.
|
|||
|
||||
```rust
|
||||
use clippy_utils::ty::{is_type_diagnostic_item, is_type_lang_item};
|
||||
use clippy_utils::{paths, match_def_path};
|
||||
use clippy_utils::paths;
|
||||
use rustc_span::symbol::sym;
|
||||
use rustc_hir::LangItem;
|
||||
|
||||
|
|
@ -108,7 +108,7 @@ impl LateLintPass<'_> for MyStructLint {
|
|||
|
||||
// 3. Using the type path
|
||||
// This method should be avoided if possible
|
||||
if match_def_path(cx, def_id, &paths::RESULT) {
|
||||
if paths::RESULT.matches_ty(cx, ty) {
|
||||
// The type is a `core::result::Result`
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -73,22 +73,24 @@ impl LateLintPass<'_> for CheckDropTraitLint {
|
|||
## Using Type Path
|
||||
|
||||
If neither diagnostic item nor a language item is available, we can use
|
||||
[`clippy_utils::paths`][paths] with the `match_trait_method` to determine trait
|
||||
implementation.
|
||||
[`clippy_utils::paths`][paths] to determine get a trait's `DefId`.
|
||||
|
||||
> **Note**: This approach should be avoided if possible, the best thing to do would be to make a PR to [`rust-lang/rust`][rust] adding a diagnostic item.
|
||||
|
||||
Below, we check if the given `expr` implements the `Iterator`'s trait method `cloned` :
|
||||
Below, we check if the given `expr` implements [`core::iter::Step`](https://doc.rust-lang.org/std/iter/trait.Step.html):
|
||||
|
||||
```rust
|
||||
use clippy_utils::{match_trait_method, paths};
|
||||
use clippy_utils::{implements_trait, paths};
|
||||
use rustc_hir::Expr;
|
||||
use rustc_lint::{LateContext, LateLintPass};
|
||||
|
||||
impl LateLintPass<'_> for CheckTokioAsyncReadExtTrait {
|
||||
impl LateLintPass<'_> for CheckIterStep {
|
||||
fn check_expr(&mut self, cx: &LateContext<'_>, expr: &Expr<'_>) {
|
||||
if match_trait_method(cx, expr, &paths::CORE_ITER_CLONED) {
|
||||
println!("`expr` implements `CORE_ITER_CLONED` trait!");
|
||||
let ty = cx.typeck_results().expr_ty(expr);
|
||||
if let Some(trait_def_id) = paths::ITER_STEP.first(cx)
|
||||
&& implements_trait(cx, ty, trait_def_id, &[])
|
||||
{
|
||||
println!("`expr` implements the `core::iter::Step` trait!");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue