MCPcopy Index your code
hub / github.com/dtolnay/inherent

github.com/dtolnay/inherent @1.0.13

Chat with this repo
repository ↗ · DeepWiki ↗ · release 1.0.13 ↗ · + Follow
32 symbols 40 edges 10 files 2 documented · 6%
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

#[inherent]

github crates.io docs.rs build status

This crate provides an attribute macro to make trait methods callable without the trait in scope.

[dependencies]
inherent = "1.0"

Example

mod types {
    use inherent::inherent;

    trait Trait {
        fn f(self);
    }

    pub struct Struct;

    #[inherent]
    impl Trait for Struct {
        pub fn f(self) {}
    }
}

fn main() {
    // types::Trait is not in scope, but method can be called.
    types::Struct.f();
}

Without the inherent macro on the trait impl, this would have failed with the following error:

error[E0599]: no method named `f` found for type `types::Struct` in the current scope
  --> src/main.rs:18:19
   |
8  |     pub struct Struct;
   |     ------------------ method `f` not found for this
...
18 |     types::Struct.f();
   |                   ^
   |
   = help: items from traits can only be used if the trait is implemented and in scope
   = note: the following trait defines an item `f`, perhaps you need to implement it:
           candidate #1: `types::Trait`

The inherent macro expands to inherent methods on the Self type of the trait impl that forward to the trait methods. In the case above, the generated code would be:

impl Struct {
    pub fn f(self) {
        <Self as Trait>::f(self)
    }
}

License

Licensed under either of Apache License, Version 2.0 or MIT license at your option.

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in this crate by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.

Extension points exported contracts — how you extend this code

Trait (Interface)
(no doc) [1 implementers]
tests/test.rs
Trait (Interface)
(no doc) [1 implementers]
tests/ui/not-visible.rs
Trait (Interface)
(no doc) [1 implementers]
tests/ui/associated-type.rs
A (Interface)
(no doc) [1 implementers]
tests/ui/blanket-impl.rs

Core symbols most depended-on inside this repo

fwd_method
called by 2
src/expand.rs
parse
called by 0
src/parse.rs
to_tokens
called by 0
src/parse.rs
inherent
called by 0
src/lib.rs
inherent
called by 0
src/expand.rs
parse
called by 0
src/verbatim.rs
to_tokens
called by 0
src/verbatim.rs
f
called by 0
tests/ui/not-trait-impl.rs

Shape

Function 11
Method 11
Class 6
Interface 4

Languages

Rust100%

Modules by API surface

tests/test.rs8 symbols
tests/ui/not-visible.rs4 symbols
tests/ui/associated-type.rs4 symbols
tests/ui/not-trait-impl.rs3 symbols
tests/ui/blanket-impl.rs3 symbols
src/verbatim.rs3 symbols
src/parse.rs3 symbols
src/expand.rs2 symbols
tests/compiletest.rs1 symbols
src/lib.rs1 symbols

For agents

$ claude mcp add inherent \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact