regexident / cargo-modules Goto Github PK
View Code? Open in Web Editor NEWVisualize/analyze a Rust crate's internal structure
License: Mozilla Public License 2.0
Visualize/analyze a Rust crate's internal structure
License: Mozilla Public License 2.0
Running cargo +nightly install cargo-modules
gives
$ rustup run nightly cargo install cargo-modules
rustc 1.29.0-nightly (254f8796b 2018-07-13)
$ cargo +nightly install cargo-modules
<snip successful module compilations>
Compiling rustc-ap-arena v154.0.0
error[E0658]: use of unstable library feature 'raw_vec_internals': implemention detailrustc-ap-rustc_target, rust...
--> /Users/nick/.cargo/registry/src/github.com-1ecc6299db9ec823/rustc-ap-arena-154.0.0/lib.rs:46:5
|
46 | use alloc::raw_vec::RawVec;
| ^^^^^^^^^^^^^^^^^^^^^^
|
= help: add #![feature(raw_vec_internals)] to the crate attributes to enable
error[E0658]: use of unstable library feature 'raw_vec_internals': implemention detail
--> /Users/nick/.cargo/registry/src/github.com-1ecc6299db9ec823/rustc-ap-arena-154.0.0/lib.rs:67:14
|
67 | storage: RawVec<T>,
| ^^^^^^^^^
|
= help: add #![feature(raw_vec_internals)] to the crate attributes to enable
<snip multiple repetitions of the previous error>
error: Could not compile `rustc-ap-arena`.
warning: build failed, waiting for other jobs to finish...
error: failed to compile `cargo-modules v0.4.1`, intermediate artifacts can be found at `/var/folders/vt/d9_pfw9j10l8jn69g02rjy1h0000gn/T/cargo-installsyJ6gK`
As of Rust 1.30.0, the crate
keyword indicates that a path should begin from the crate root. It's a lot like a leading ::
on a path. But cargo-modules's graph command doesn't understand it, and simply omits imports that use the new keyword.
For example, cargo-modules understands an import like use ::foo::bar;
, but not use crate::foo::bar
.
Hello, this project seems really promising! But I'm having trouble installing the tool. Please let me know if I'm doing something wrong. Here is my error message:
olega@DESKTOP-B47K2S5 MINGW64 ~/Documents/Rust/udemy (master)
$ rustup default nightly
info: using existing install for 'nightly-x86_64-pc-windows-msvc'
info: default toolchain set to 'nightly-x86_64-pc-windows-msvc'
nightly-x86_64-pc-windows-msvc unchanged - rustc 1.40.0-nightly (518deda77 2019-10-18)
olega@DESKTOP-B47K2S5 MINGW64 ~/Documents/Rust/udemy (master)
$ cargo install cargo-modules
Updating crates.io index
Installing cargo-modules v0.4.4
Compiling winapi v0.3.8
Compiling cfg-if v0.1.10
Compiling lazy_static v1.4.0
Compiling semver-parser v0.7.0
Compiling arrayvec v0.4.12
Compiling scopeguard v0.3.3
Compiling bitflags v1.2.1
Compiling libc v0.2.65
Compiling nodrop v0.1.14
Compiling memoffset v0.2.1
Compiling rand_core v0.4.2
Compiling log v0.4.8
Compiling unicode-width v0.1.6
Compiling rustc-rayon-core v0.1.2
Compiling byteorder v1.3.2
Compiling stable_deref_trait v1.1.1
Compiling smallvec v0.6.10
Compiling rustc-rayon v0.1.2
Compiling autocfg v0.1.6
Compiling either v1.5.3
Compiling proc-macro2 v0.4.30
Compiling rustc-ap-graphviz v373.0.0
Compiling unicode-xid v0.1.0
Compiling cgmath v0.16.1
Compiling syn v0.15.44
Compiling unicode-segmentation v1.3.0
Compiling rustc-ap-rustc_target v373.0.0
Compiling approx v0.1.1
Compiling scoped-tls v0.1.2
error: allow_internal_unstable expects list of feature names
--> C:\Users\olega\.cargo\registry\src\github.com-1ecc6299db9ec823\scoped-tls-0.1.2\src\lib.rs:71:1
|
71 | #[allow_internal_unstable]
| ^^^^^^^^^^^^^^^^^^^^^^^^^^
error: aborting due to previous error
Compiling rgb v0.8.14
error: could not compile `scoped-tls`.
warning: build failed, waiting for other jobs to finish...
error: failed to compile `cargo-modules v0.4.4`, intermediate artifacts can be found at `C:\Users\olega\AppData\Local\Temp\cargo-installPd81Wa`
Caused by:
build failed
After updating to the latest nightly using rustup update
and installing cargo-modules using cargo +nightly install cargo-modules
, this build error occured:
error[E0635]: unknown feature `array_value_iter_slice`
--> /home/kangalioo/.cargo/registry/src/github.com-1ecc6299db9ec823/rustc-ap-rustc_arena-693.0.0/src/lib.rs:14:12
|
14 | #![feature(array_value_iter_slice)]
| ^^^^^^^^^^^^^^^^^^^^^^
Presumably, the latest nightly has stabilized the array_value_iter_slice feature which the rustc-ap-rustc_arena crate is not prepared to deal with. Not sure what the best way to resolve this is on cargo-module's side.
The issue can be worked around by manually navigating into the faulty source file and commenting out the #![feature(array_value_iter_slice)]
line.
Rust Version: 1.25
Cargo Version: 0.26
error[E0433]: failed to resolve. Could not find `VisibilityKind` in `ast`
--> src/builder.rs:86:59
|
86 | let visibility = if item.vis.node == ast::VisibilityKind::Public {
| ^^^^^^^^^^^^^^ Could not find `VisibilityKind` in `ast`
error[E0554]: #![feature] may not be used on the stable release channel
--> src/main.rs:1:1
|
1 | #![feature(rustc_private)]
| ^^^^^^^^^^^^^^^^^^^^^^^^^^
error: aborting due to 2 previous errors
error: failed to compile `cargo-modules v0.3.6`, intermediate artifacts can be found at `/var/folders/gl/j2cw1zks3ws2qkwqfl_bjwyw0000gp/T/cargo-install.kgfHsMtbq1IV`
When executing cargo modules tree
(as well as probably the other subcommands as well) will fail if the corresponding directory you're in is not a rust project with the following error message:
$ cargo modules tree
Error: Failed to parse JSON response.
UnexpectedEndOfJson
It would be awesome if I could get a message like 'There is no rust project here'. Nice project!
error[E0046]: not all trait items implemented, missing: mixed_site
--> /home/leandro/.cargo/registry/src/github.com-1ecc6299db9ec823/rustc-ap-syntax-583.0.0/ext/proc_macro_server.rs:657:1
|
657 | impl server::Span for Rustc<'_> {
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ missing mixed_site
in implementation
|
= note: mixed_site
from trait: fn(&mut Self) -> <Self as proc_macro::bridge::server::Types>::Span
error: aborting due to previous error
For more information about this error, try rustc --explain E0046
.
error: could not compile rustc-ap-syntax
.
warning: build failed, waiting for other jobs to finish...
error: build failed
Hi, I tried to install cargo-modules but I got the following error:
$ cargo install cargo-modules
...
Compiling rustc-ap-rustc_arena v693.0.0
error[E0635]: unknown feature `array_value_iter_slice`
--> /home/albtam/.cargo/registry/src/github.com-1ecc6299db9ec823/rustc-ap-rustc_arena-693.0.0/src/lib.rs:14:12
|
14 | #![feature(array_value_iter_slice)]
| ^^^^^^^^^^^^^^^^^^^^^^
Compiling getopts v0.2.21
error: aborting due to previous error
For more information about this error, try `rustc --explain E0635`.
error: could not compile `rustc-ap-rustc_arena`
and with verbose if that helps:
Compiling rustc-ap-rustc_arena v693.0.0
Running `rustc --crate-name rustc_ap_rustc_arena --edition=2018 /home/albtam/.cargo/registry/src/github.com-1ecc6299db9ec823/rustc-ap-rustc_arena-693.0.0/src/lib.rs --error-format=json --json=diagnostic-rendered-ansi,artifacts --crate-type lib --emit=dep-info,metadata,link -C opt-level=3 -C embed-bitcode=no -C metadata=10bb1db7a81609ce -C extra-filename=-10bb1db7a81609ce --out-dir /tmp/cargo-install7GR5hG/release/deps -L dependency=/tmp/cargo-install7GR5hG/release/deps --extern smallvec=/tmp/cargo-install7GR5hG/release/deps/libsmallvec-6532dd85c8bdaefe.rmeta --cap-lints allow`
Running `/tmp/cargo-install7GR5hG/release/build/maybe-uninit-7ed2d5a787a172fd/build-script-build`
Running `/tmp/cargo-install7GR5hG/release/build/getrandom-790df76103279c00/build-script-build`
Running `/tmp/cargo-install7GR5hG/release/build/typenum-7c639c7a3a22b461/build-script-main`
error[E0635]: unknown feature `array_value_iter_slice`
--> /home/albtam/.cargo/registry/src/github.com-1ecc6299db9ec823/rustc-ap-rustc_arena-693.0.0/src/lib.rs:14:12
|
14 | #![feature(array_value_iter_slice)]
| ^^^^^^^^^^^^^^^^^^^^^^
I am using Rust nightly:
$ rustup default nightly
info: using existing install for 'nightly-x86_64-unknown-linux-gnu'
info: default toolchain set to 'nightly-x86_64-unknown-linux-gnu'
nightly-x86_64-unknown-linux-gnu unchanged - rustc 1.52.0-nightly (107896c32 2021-03-15)
Am I doing something wrong? (I'm a Rust newbie)
$ rustc -V
rustc 1.30.0-nightly (aaa170beb 2018-08-31)
$ cargo install cargo-modules
...
error: found removed `do catch` syntax
--> /Users/ykoma/.cargo/registry/src/github.com-1ecc6299db9ec823/rustc-ap-syntax-230.0.0/parse/parser.rs:1761:43
|
1761 | let pat_arg: PResult<'a, _> = do catch {
| ^^
|
= help: Following RFC #2388, the new non-placeholder syntax is `try`
error: aborting due to previous error
error: failed to compile `cargo-modules v0.4.2`, intermediate artifacts can be found at `/var/folders/0v/t6gp2nld5ndggd9lr_mg47lc0000gn/T/cargo-installk3A2XA`
Caused by:
Could not compile `rustc-ap-syntax`.
To learn more, run the command again with --verbose.
$
Hi,
Thanks for the awesome tool!
I would like to work on updating the documentation to match the current CLI. When I run cargo test
on current HEAD, I get:
$ cargo test
Compiling semver-parser v0.7.0
Compiling nodrop v0.1.13
Compiling libc v0.2.45
Compiling cfg-if v0.1.6
Compiling void v1.0.2
Compiling rand_core v0.3.0
Compiling memoffset v0.2.1
Compiling lazy_static v1.2.0
Compiling scopeguard v0.3.3
Compiling stable_deref_trait v1.1.1
Compiling rustc-rayon-core v0.1.1
Compiling either v1.5.0
Compiling unicode-width v0.1.5
Compiling proc-macro2 v0.4.24
Compiling bitflags v1.0.4
Compiling byteorder v1.2.7
Compiling unicode-xid v0.1.0
Compiling rustc-ap-graphviz v312.0.0
Compiling scoped-tls v0.1.2
Compiling unicode-segmentation v1.2.1
error[E0277]: the trait bound `std::borrow::Cow<'_, str>: std::convert::From<core::str::EscapeDefault<'_>>` is not satisfied
--> /home/muhuk/.cargo/registry/src/github.com-1ecc6299db9ec823/rustc-ap-graphviz-312.0.0/lib.rs:551:44
|
551 | (&*s).escape_default().into()
| ^^^^ the trait `std::convert::From<core::str::EscapeDefault<'_>>` is not implemented for `std::borrow::Cow<'_, str>`
|
= help: the following implementations were found:
<std::borrow::Cow<'a, [T]> as std::convert::From<&'a [T]>>
<std::borrow::Cow<'a, [T]> as std::convert::From<&'a std::vec::Vec<T>>>
<std::borrow::Cow<'a, [T]> as std::convert::From<std::vec::Vec<T>>>
<std::borrow::Cow<'a, std::ffi::CStr> as std::convert::From<&'a std::ffi::CStr>>
and 11 others
= note: required because of the requirements on the impl of `std::convert::Into<std::borrow::Cow<'_, str>>` for `core::str::EscapeDefault<'_>`
error: aborting due to previous error
For more information about this error, try `rustc --explain E0277`.
Compiling rustc-ap-rustc_target v312.0.0
error: Could not compile `rustc-ap-graphviz`.
warning: build failed, waiting for other jobs to finish...
error: build failed
I have tried with rustc-ap-graphviz v312.
Version 373.0.0
seems to work, though I haven't yet do a manual test on an actual project.
cargo-modules -V
doesn't print the version.
$ cargo-modules -V
cargo-modules
Surely the version info can be retrieved from ~/.cargo/.crates.toml
however it's a bit inconvenient.
I tried to install cargo-modules
with latest rust version 1.55 (rustc 1.55.0 (c8dfcfe04 2021-09-06) using latest docker image rust:1.55 and nativ on MacOSX). The command cargo install cargo-modules
print the error message
Compiling ra_ap_ide_db v0.0.72
error[E0432]: unresolved import `base_db::salsa::SweepStrategy`
--> /usr/local/cargo/registry/src/github.com-1ecc6299db9ec823/ra_ap_ide_db-0.0.72/src/apply_change.rs:6:35
|
6 | salsa::{Database, Durability, SweepStrategy},
| ^^^^^^^^^^^^^ no `SweepStrategy` in `salsa`
error[E0599]: no method named `sweep` found for struct `QueryTable` in the current scope
--> /usr/local/cargo/registry/src/github.com-1ecc6299db9ec823/ra_ap_ide_db-0.0.72/src/apply_change.rs:50:41
|
50 | base_db::ParseQuery.in_db(self).sweep(sweep);
| ^^^^^ method not found in `QueryTable<'_, ParseQuery>`
and many more (see attached file). It ends with
error: failed to compile `cargo-modules v0.5.4`, intermediate artifacts can be found at `/tmp/cargo-installSx2FpJ`
Caused by:
build failed
When the context of dependencies and analyzing them, the need is most burning in the larger project. Just recently, Microsoft opensourced OneFuzz, Rust based fuzzing tool, that has quite a bunch of crates.
However, I cannot get the dependency graphs extracted with cargo-modules
from OneFuzz. There is a big number of Cargo.toml files and I cannot figure out how to use cargo-modules
properly to get the dependencies extracted from all of the crates to build up a holistic dependency data model of that project.
Below shell excerpt shows how I can improve the result of the data by removing main level Cargo.toml file but am still out of clue how to get stuff executed properly to identify all the dependencies between each create.
➜ onefuzz git:(main) cargo modules -p -o tree
atexit : crate
├── asan : orphan
├── az_copy : orphan
├── blob : orphan
├── cmd : orphan
├── expand : orphan
├── fs : orphan
├── input_tester : orphan
├── libfuzzer : orphan
├── machine_id : orphan
├── monitor : orphan
├── sha256 : orphan
├── system : orphan
├── telemetry : orphan
├── triage : orphan
└── uploader : orphan
➜ onefuzz git:(main) rm ../Cargo.toml
➜ onefuzz git:(main) ✗ cargo modules -p -o tree
onefuzz : crate
├── asan : public
├── az_copy : public
├── blob : public
│ ├── client : orphan
│ └── url : orphan
├── cmd : public
├── expand : public
├── fs : public
├── input_tester : public
├── libfuzzer : public
├── machine_id : public
├── monitor : public
├── sha256 : public
├── system : public
├── telemetry : public
├── triage : public @ #[cfg(target_os = "linux")]
└── uploader : public
Sorry for my mediocre Rust competence here. I am seeking for something similar like madge but for Rust, that would enable easy extraction of the dependency data from Rust projects.
This code produces output as expected:
pub mod mod1 {
mod mod2 {
pub fn mod2_fn() {}
}
mod mod3 {
use crate::mod1::mod2;
pub fn mod3_fn() {
mod2::mod2_fn()
}
}
pub use mod3::mod3_fn;
}
pub fn crate_fn() {
mod1::mod3_fn()
}
# cargo modules tree
temp : crate
└── mod1 : public
├── mod2 : private
└── mod3 : private
However when I move the same code into a standard directory structure there is almost no output from cargo modules
:
# find . -name "*.rs"
./src/lib.rs
./src/mod1/mod.rs
./src/mod1/mod3.rs
./src/mod1/mod2.rs
# cargo modules tree
temp : crate
└── mod1 : public
cargo modules graph
is affected in the same way.
I installed cargo modules
using nightly toolchain 2020-10-19.
As of lately cargo detects build.rs
build-scripts even if they are not listed:
[package] # ... build = "build.rs"
"The Rust file designated by the build command (relative to the package root) will be compiled and invoked before anything else is compiled in the package, allowing your Rust code to depend on the built or generated artifacts. Note that if you do not specify a value for build but your package root does contains a "build.rs" file, Cargo will compile and invoke this file for you." – http://doc.crates.io/build-script.html
As such cargo modules
should do so, too.
I'd love to use cargo modules as a tool to optimize my project's module structure. When rendering items and their interdependencies, the output looks very messy:
If it were possible to disable modules nodes, this graph would look significantly cleaner but still contain the information about item interdependencies.
Trying to install this crate with
cargo install cargo-modules
or
cargo +nightly install --git https://github.com/regexident/cargo-modules cargo-modules
fails with a following error:
Compiling rustc-ap-arena v460.0.0
error[E0599]: no method named `cap` found for type `alloc::raw_vec::RawVec<T>` in the current scope
--> /home/user/.cargo/registry/src/github.com-1ecc6299db9ec823/rustc-ap-arena-460.0.0/lib.rs:102:47
|
102 | self.start().add(self.storage.cap())
| ^^^ private field, not a method
error[E0599]: no method named `cap` found for type `alloc::raw_vec::RawVec<T>` in the current scope
--> /home/user/.cargo/registry/src/github.com-1ecc6299db9ec823/rustc-ap-arena-460.0.0/lib.rs:273:55
|
273 | new_capacity = last_chunk.storage.cap();
| ^^^ private field, not a method
error[E0599]: no method named `cap` found for type `alloc::raw_vec::RawVec<u8>` in the current scope
--> /home/user/.cargo/registry/src/github.com-1ecc6299db9ec823/rustc-ap-arena-460.0.0/lib.rs:408:55
|
408 | new_capacity = last_chunk.storage.cap();
| ^^^ private field, not a method
error: aborting due to 3 previous errors
For more information about this error, try `rustc --explain E0599`.
error: could not compile `rustc-ap-arena`.
warning: build failed, waiting for other jobs to finish...
error: failed to compile `cargo-modules v0.4.4 (https://github.com/regexident/cargo-modules#47498fa0)`, intermediate artifacts can be found at `/tmp/cargo-install51cOgo`
Caused by:
build failed
Compiler: rustc 1.39.0-nightly (9b9d2aff8 2019-09-19)
cargo-modules
uses gold
for some edges and it's almost invisible when printed on BW laser printer.
So I've tried to use --plain
option but with no luck:
$ cargo modules --plain graph | grep color | head -1
"::storage-units" [label="storage-units",color=green];
$ cargo modules graph | grep color | head -1
"::storage-units" [label="storage-units",color=green];
i.e. the end result stays the same
I tried to install cargo-modules
with latest rust version 1.53 (rustc 1.53.0 (53cb7b09b 2021-06-17) using latest docker image rust:1.53 and nativ on MacOSX). The command cargo install cargo-modules
print the error message
Compiling synstructure v0.12.5
Compiling env_logger v0.8.4
Compiling ra_ap_vfs-notify v0.0.49
error[E0599]: no function or associated item named `new_immediate` found for trait object `dyn Watcher` in the current scope
--> /usr/local/cargo/registry/src/github.com-1ecc6299db9ec823/ra_ap_vfs-notify-0.0.49/src/lib.rs:83:69
|
83 | ... let watcher = log_notify_error(Watcher::new_immediate(move |event| {
| ^^^^^^^^^^^^^ function or associated item not found in `dyn Watcher`
error: aborting due to previous error
For more information about this error, try `rustc --explain E0599`.
error: could not compile `ra_ap_vfs-notify`
It would be great to be able to list all public types, instead of just modules. Is this feasible and desired?
Thank you!
Hi all! This is one great project, and I'm looking forward to use to for good.
Just trying it on WebRender, I'm missing quite a few links in the generated module graph:
This was generated via the following command, using the code from #50 :
cargo-modules --enable-edition-2018 graph | dot -Tpng > mod-graph.png
I removed the top-level Cargo.toml
to convince it that it's not a cargo workspace (otherwise it doesn't work at all, see #8 (comment)).
It shows the graph to be pretty flat, even though the modules clearly depend on each other a lot. For example, no arrows originate from batch
module, even though it clearly uses a whole bunch of stuff.
Is this a known issue? Is it related to 2018 edition (cc @muhuk)? Anything I could help with to investigate?
As a test, I created the following project structure:
// src/lib.rs
mod a;
mod b;
mod c;
mod d;
// src/a.rs
use crate::*;
struct A(C);
// src/b.rs
use crate::*;
struct B(C);
// src/c.rs
use crate::*;
struct C;
// src/d.rs
use crate::*;
struct D(A, C);
And ran cargo-modules on it (0.5.0-beta.2
) :
cargo modules generate graph | dot -Tpng > modules.png
It runs successfully and yields:
As you can see, it does show the parent-child module relations quite well. I was wondering if it's possible to also show inter-module dependencies, to the spirit of the following?
cargo-modules
in its current and initial release makes use of ANSI terminal colors for distinguishing between different "types" of modules. This unfortunately not only alienates Windows users (due to a lack of Windows support by the colored crate), and those with a dark-on-light terminal theme, but even worse: it alienates color-blind users. That's unacceptable to me.
There are currently four different colors used for distinguishing between:
How would you for an alternative plain display mode prefer the tree to be presented?
Please feel free to leave comments and/or alternative suggestions in the comments.
There are basically three usage scenarios to cover here:
So looking at this I'm wondering if colored output should actually be made opt-in via --colors
?
As a rule, I try to organize my code so that the relationships between modules are acyclic - if I import something from module a into module b, I don't import anything from module b into module a.
Since this can construct the graph of import relationships between modules, it would be great for it to have a way to identify cycles in that graph, to help find the parts of your program that are getting "spaghetti."
Alternatively, though, I suspect there's already a common utility that can identify cycles in dot graph data (though I don't know what it is), and possibly just documenting and recommending you pipe the data into that could be a good solution.
I think this is as simple as bumping the syntex dependency to 0.42. The current failure is:
$ cargo modules
error: internal compiler error: Error constructed but not emitted
thread 'main' panicked at 'explicit panic', ~/.cargo/registry/src/github.com-1ecc6299db9ec823/syntex_syntax-0.36.0/src/errors/mod.rs:370
note: Run with `RUST_BACKTRACE=1` for a backtrace.
error[E0554]: #![feature] may not be used on the stable release channel
--> .cargo\registry\src\github.com-1ecc6299db9ec823\cargo-modules-0.3.5\src\main.rs:1:1
|
1 | #![feature(rustc_private)]
| ^^^^^^^^^^^^^^^^^^^^^^^^^^
error: aborting due to previous error
error: failed to compile cargo-modules v0.3.5
error[E0061]: this function takes 1 argument but 0 arguments were supplied
--> /Users/dmalyshau/.cargo/registry/src/github.com-1ecc6299db9ec823/rustc-ap-rustc_data_structures-637.0.0/box_region.rs:34:58
|
34 | let init = match Pin::new(&mut result.generator).resume() {
| ^^^^^^- supplied 0 arguments
|
help: expected the unit value `()`; create it with empty parentheses
|
34 | let init = match Pin::new(&mut result.generator).resume(()) {
| ^^
error[E0061]: this function takes 1 argument but 0 arguments were supplied
--> /Users/dmalyshau/.cargo/registry/src/github.com-1ecc6299db9ec823/rustc-ap-rustc_data_structures-637.0.0/box_region.rs:48:76
|
48 | if let GeneratorState::Complete(_) = Pin::new(&mut self.generator).resume() {
| ^^^^^^- supplied 0 arguments
|
help: expected the unit value `()`; create it with empty parentheses
|
48 | if let GeneratorState::Complete(_) = Pin::new(&mut self.generator).resume(()) {
| ^^
error[E0061]: this function takes 1 argument but 0 arguments were supplied
--> /Users/dmalyshau/.cargo/registry/src/github.com-1ecc6299db9ec823/rustc-ap-rustc_data_structures-637.0.0/box_region.rs:57:52
|
57 | let result = Pin::new(&mut self.generator).resume();
| ^^^^^^- supplied 0 arguments
|
help: expected the unit value `()`; create it with empty parentheses
|
57 | let result = Pin::new(&mut self.generator).resume(());
| ^^
error: aborting due to 3 previous errors
For more information about this error, try `rustc --explain E0061`.
error: could not compile `rustc-ap-rustc_data_structures`.
I just thought it was a bug when I've ran this extension and got a big panic backtrace. It took me a while when I actually noticed a readable error message and suggestion with fix at the top.
May be it will be better to remove useless panic backtrace printing?
Cargo-modules tries to show the full dependency graph including all conditional dependencies. However, it doesn't understand the popular cfg-if
macro, leading to missing dependencies. As an example, create a crate with four empty files: src/{foo, bar, baz, bean}.rs, and main.rs having the following content:
use cfg_if::cfg_if;
cfg_if! {
if #[cfg(test)] {
pub use self::foo;
} else {
pub use self::bar;
}
}
#[cfg(test)]
pub use self::baz;
#[cfg(not(test))]
pub use self::bean;
cargo-modules gives the following output:
digraph {
label="cmci";
pad=0.4;
// Modules
"cmci" [label="cmci", color=green4, fontcolor=green4 style=filled, fillcolor=greenyellow]
// Hierarchy
"cmci" -> "cmci::bar" [weight=50, color=firebrick4, penwidth=1]
"cmci" -> "cmci::foo" [weight=50, color=firebrick4, penwidth=1]
"cmci" -> "cmci::baz" [weight=50, color=firebrick4, penwidth=1]
"cmci" -> "cmci::bean" [weight=50, color=firebrick4, penwidth=1]
// Dependencies
"cmci" -> "cmci::baz" [weight=90, color=azure3, penwidth=2, label=<<FONT POINT-SIZE="10" COLOR="azure3">use <B>self</B></FONT>>]
"cmci" -> "cmci::bean" [weight=90, color=azure3, penwidth=2, label=<<FONT POINT-SIZE="10" COLOR="azure3">use <B>self</B></FONT>>]
}
Notice that the cmci->cmci::foo and cmci->cmci::bar dependencies are missing.
cargo --version
cargo 1.50.0-nightly (bfca1cd22 2020-11-24)
cargo +nightly install cargo-modules
--> /home/alexandre/.cargo/registry/src/github.com-1ecc6299db9ec823/rustc-ap-rustc_data_structures-693.0.0/src/sync.rs:30:9
|
30 | pub auto trait Send {}
| ^^^^^^^^^^^^^^^^^^^^^^
|
= note: see issue #13231 <https://github.com/rust-lang/rust/issues/13231> for more information
= help: add `#![feature(optin_builtin_traits)]` to the crate attributes to enable
error[E0658]: auto traits are experimental and possibly buggy
--> /home/alexandre/.cargo/registry/src/github.com-1ecc6299db9ec823/rustc-ap-rustc_data_structures-693.0.0/src/sync.rs:31:9
|
31 | pub auto trait Sync {}
| ^^^^^^^^^^^^^^^^^^^^^^
|
= note: see issue #13231 <https://github.com/rust-lang/rust/issues/13231> for more information
= help: add `#![feature(optin_builtin_traits)]` to the crate attributes to enable
error: aborting due to 2 previous errors
For more information about this error, try `rustc --explain E0658`.
error: failed to compile `cargo-modules v0.4.10`, intermediate artifacts can be found at `/tmp/cargo-installKkbYC7`
Caused by:
could not compile `rustc-ap-rustc_data_structures`
To learn more, run the command again with --verbose.
Repo on which it breaks: https://github.com/hackndev/zinc
I would like to be able to generate a graph for a structure. I have a heavy numbers of structure for a parsing crate that contains each other a lot, and I would like to generate a visual graph of it. I know this is not the purpose of this repo but I search I didn't find anything.
So I wonder, if anyone know something that do it, or if that could be an additional feature of this crate.
Example:
struct A {
b: B,
c: C,
}
struct B {
c: C,
}
struct C {
foo: i32,
}
struct D {
a: A,
b: B,
}
will produce:
digraph {
A [shape=record, label="{ struct A | { <b> b| <c> c } }"];
B [shape=record, label="{ struct B | { <c> c } }"];
C [shape=record, label="{ struct C | { <foo> foo } }"];
D [shape=record, label="{ struct D | { <a> a | <b> b } }"];
A:b -> B;
A:c -> C;
B:c -> C;
C:foo -> i32;
D:a -> A;
D:b -> B;
}
and so will produce:
When running cargo modules tree
(cargo-modules 0.4.3
) on a crate which cannot compile, an internal compiler error is emitted. For example, create a crate and introduce an obvious error:
$ cargo init reproduce --lib
$ cd reproduce
$ cat > src/lib.rs <<EOF
# src/lib.rs
mod does_not_exist;
EOF
$ RUST_BACKTRACE=1 rustup run nightly cargo modules tree
error: internal compiler error: Error constructed but not emitted
thread 'main' panicked at 'explicit panic', /home/evnu/.cargo/registry/src/github.com-1ecc6299db9ec823/rustc-ap-rustc_errors-263.0.0/diagnostic_builder.rs:308:13
stack backtrace:
0: std::sys::unix::backtrace::tracing::imp::unwind_backtrace
at libstd/sys/unix/backtrace/tracing/gcc_s.rs:49
1: std::sys_common::backtrace::print
at libstd/sys_common/backtrace.rs:71
at libstd/sys_common/backtrace.rs:59
2: std::panicking::default_hook::{{closure}}
at libstd/panicking.rs:211
3: std::panicking::default_hook
at libstd/panicking.rs:227
4: std::panicking::rust_panic_with_hook
at libstd/panicking.rs:476
5: std::panicking::begin_panic
6: <rustc_errors::diagnostic_builder::DiagnosticBuilder<'a> as core::ops::drop::Drop>::drop
7: <scoped_tls::ScopedKey<T>>::set
8: syntax::with_globals
9: cargo_modules::main
10: std::rt::lang_start::{{closure}}
11: std::panicking::try::do_call
at libstd/rt.rs:59
at libstd/panicking.rs:310
12: __rust_maybe_catch_panic
at libpanic_unwind/lib.rs:102
13: std::rt::lang_start_internal
at libstd/panicking.rs:289
at libstd/panic.rs:392
at libstd/rt.rs:58
14: main
15: __libc_start_main
16: _start
Can this be handled by cargo-modules
?
It's valid in Rust to have equally named modules to appear in different places of module hierarchy. cargo-modules
shows them as 2 entries with the same name and just looking at that picture there is no way to understand where which modules is shown. One option to resolve this is to allow full module paths to be used or just to show with a parent module if there are any name clashes.
Based on http://www.pathsensitive.com/2021/03/developer-tools-can-be-magic-instead.html
The first part speaks about reflection models. It seems to me that should be something powerful but easy to add to cargo modules:
It is starts as basically an option to point to a file with a mapping between modules (files in the original tool, but I suspect modules work better in rust context) and self defined categories. And instead of drawing the modules as nodes for the usage/dependency graph you use the categories and aggregate what is in de modules grouped by that category..
To implement the full model you could also add stuff to draw the graph into an existing dot graph which could contain the hypothesis graph (that should roughly work if the node ids match). However that might not even be needed to make it useful
Sorry if this is not caused by cargo-modules.
Running cargo modules
panics.
$ cargo new modules-test
Created binary (application) `modules-test` project
$ cd modules-test/
$ cargo +nightly modules
thread 'main' panicked at 'cannot access a scoped thread local variable without calling `set` first', /cargo/registry/src/github.com-1ecc6299db9ec823/scoped-tls-0.1.1/src/lib.rs:186:9
note: Run with `RUST_BACKTRACE=1` for a backtrace.
Meta:
$ rustc +nightly --version
rustc 1.27.0-nightly (4b9b70c39 2018-04-09)
$ cargo +nightly modules --version
cargo-modules 0.3.6
Backtrace:
$ RUST_BACKTRACE=1 cargo +nightly modules
thread 'main' panicked at 'cannot access a scoped thread local variable without calling `set` first', /cargo/registry/src/github.com-1ecc6299db9ec823/scoped-tls-0.1.1/src/lib.rs:186:9
stack backtrace:
0: std::sys::unix::backtrace::tracing::imp::unwind_backtrace
at libstd/sys/unix/backtrace/tracing/gcc_s.rs:49
1: std::sys_common::backtrace::print
at libstd/sys_common/backtrace.rs:71
at libstd/sys_common/backtrace.rs:59
2: std::panicking::default_hook::{{closure}}
at libstd/panicking.rs:206
3: std::panicking::default_hook
at libstd/panicking.rs:222
4: std::panicking::rust_panic_with_hook
at libstd/panicking.rs:400
5: std::panicking::begin_panic
6: <scoped_tls::ScopedKey<T>>::with
7: syntax_pos::symbol::Ident::from_str
8: syntax::parse::lexer::StringReader::next_token_inner
9: syntax::parse::lexer::StringReader::advance_token
10: syntax::parse::lexer::StringReader::new
11: syntax::parse::filemap_to_stream
12: syntax::parse::filemap_to_parser
13: syntax::parse::parse_crate_from_file
14: cargo_modules::main
15: std::rt::lang_start::{{closure}}
16: std::panicking::try::do_call
at libstd/rt.rs:59
at libstd/panicking.rs:305
17: __rust_maybe_catch_panic
at libpanic_unwind/lib.rs:102
18: std::rt::lang_start_internal
at libstd/panicking.rs:284
at libstd/panic.rs:361
at libstd/rt.rs:58
19: main
20: __libc_start_main
21: _start
From rust-lang/rust-analyzer#4405, you guys can use RA to run this.
I have a visitor trait code (I can extract this to a separate crate) you guys can use.
But from what I understand, you guys do not need it and can do something like this
Edition 2018 changes the way use
works in a few different ways. I would like to add support resolving dependencies in projects that use edition = "2018"
.
My plan is as below:
--enable-edition-2018
. Initially this will be ignored. Current code does not take edition
into consideration anyway. New option will be documented in --help
.--enable-edition-2018
is given and edition
is "2018"
in Cargo.toml
, use the alternate implementation. Otherwise keep everything same.This issue should also close #29 when implemented fully.
Here is output:
←[1;32mPublic modules←[0m
←[1;33mPrivate modules←[0m
←[1;32msciter←[0m
←[1;34m ├── ←[0m←[1;33mcapi←[0m
←[1;34m │ ├── ←[0m←[1;33mscapi←[0m
←[1;34m │ ├── ←[0m←[1;33mscbehavior←[0m
←[1;34m │ ├── ←[0m←[1;33mscdef←[0m
←[1;34m │ ├── ←[0m←[1;33mscdom←[0m
←[1;34m │ ├── ←[0m←[1;33mscgraphics←[0m
←[1;34m │ ├── ←[0m←[1;33mschandler←[0m
←[1;34m │ ├── ←[0m←[1;33mscrequest←[0m
←[1;34m │ ├── ←[0m←[1;33msctiscript←[0m
←[1;34m │ ├── ←[0m←[1;33msctypes←[0m
←[1;34m │ └── ←[0m←[1;33mscvalue←[0m
←[1;34m ├── ←[0m←[1;32mdom←[0m
A common pattern is for a module to define an inner private module, then reexport parts of that private module as its own public API. Two ways of doing this are pub use
and pub type
. But cargo-modules doesn't seem to generate the correct output for either. For example, when using this input as lib.rs:
pub mod a {
use self::b::X;
use self::d::Y;
pub mod b {
use self::c;
pub use c::X;
mod c {
pub struct X{}
}
}
pub mod d {
use self::e;
pub type Y = e::Y;
mod e {
pub struct Y{}
}
}
}
I would expect the output to include the following uses edges:
a -> b
a -> d
b -> c
d -> e
However, cargo-modules omits the d -> e
edge, and changes the a -> b
edge into a -> c
. Here are the actual uses edges it generates:
"pub_use::a::b" -> "pub_use::a::b::c" [label="uses", color="#7f7f7f", style="Dashed"]; // "uses" edge
"pub_use::a" -> "pub_use::a::d" [label="uses", color="#7f7f7f", style="Dashed"]; // "uses" edge
"pub_use::a" -> "pub_use::a::b::c" [label="uses", color="#7f7f7f", style="Dashed"]; // "uses" edge
Issue #20 has regressed. cargo-modules is once again unconditionally enabling test mode. For example, with the following input:
use crate::a::X;
#[cfg(not(test))]
use crate::b::Y;
#[cfg(test)]
use crate::c::Z;
pub mod a {
pub struct X{}
}
pub mod b {
pub struct Y{}
}
pub mod c {
pub struct Z{}
}
I would expect the following uses edges:
crate -> a
crate -> b
But cargo-modules doesn't show crate -> b
. Instead it shows crate -> c
, indicating that cfg(test)
is set. It doesn't matter whether I use the --with-tests
option. Here are the complete uses edges:
"cfg_not_test" -> "cfg_not_test::a" [label="uses", color="#7f7f7f", style="Dashed"]; // "uses" edge
"cfg_not_test" -> "cfg_not_test::c" [label="uses", color="#7f7f7f", style="Dashed"]; // "uses" edge
"cargo modules --graph" analyzes the crate in test mode. This frequently includes extra modules that aren't interesting for understanding the design of a crate, like modules that only contain tests. Sometimes, a crate's module dependencies can differ more radically in test mode, such as when the test_double crate is in use. It would be better to analyze the module graph in non-test mode.
cargo modules generate graph --with-uses
is very useful for understanding a crate. However, I notice that it doesn't generate uses
edges when one module uses another's components by their fully namespaced names, rather than through a uses
statement. Ideally it would, because whether or not the programmer uses a uses
statement is just a syntactical detail. For example, I would expect the following crate to have uses
edges for both "a -> b" and "a -> c". But it only has the former.
pub mod a {
use self::b::X;
pub mod b {
pub struct X{}
}
pub mod c {
pub struct Y{}
}
pub struct Z {
x: X,
y: c::Y
}
}
digraph {
graph [
label="cargo_modules_test",
labelloc=t,
pad=0.4,
// Consider rendering the graph using a different layout algorithm, such as:
// [dot, neato, twopi, circo, fdp, sfdp]
layout=neato,
overlap=false,
splines="line",
rankdir=LR,
fontname="Helvetica",
fontsize="36",
];
node [
fontname="monospace",
fontsize="10",
shape="record",
style="filled",
];
edge [
fontname="monospace",
fontsize="10",
];
"cargo_modules_test" [label="crate|cargo_modules_test", fillcolor="#5397c8"]; // "crate" node
"cargo_modules_test::a" [label="pub mod|a", fillcolor="#81c169"]; // "mod" node
"cargo_modules_test::a::b" [label="pub mod|a::b", fillcolor="#81c169"]; // "mod" node
"cargo_modules_test::a::c" [label="pub mod|a::c", fillcolor="#81c169"]; // "mod" node
"cargo_modules_test" -> "cargo_modules_test::a" [label="owns", color="#000000", style="solid"]; // "owns" edge
"cargo_modules_test::a" -> "cargo_modules_test::a::b" [label="owns", color="#000000", style="solid"]; // "owns" edge
"cargo_modules_test::a" -> "cargo_modules_test::a::c" [label="owns", color="#000000", style="solid"]; // "owns" edge
"cargo_modules_test::a" -> "cargo_modules_test::a::b" [label="uses", color="#7f7f7f", style="Dashed"]; // "uses" edge
}
The cargo-modules
version on crates.io is 0.4.10
(see here). However I can't find a corresponding tag for that version in this repo. Which commit was uploaded to crates.io as 0.4.10
? Thanks!
cargo-modules
fails to compile when building its dependency rustc-ap-rustc_data_structures
. It probably should use a newer version - 692.0.0 instead of 673.0.0.
Checked on rustc 1.50.0-nightly (e792288df 2020-12-05).
cargo +nightly install cargo-modules
(...)
Compiling rustc-ap-rustc_data_structures v673.0.0
error[E0557]: feature has been removed
--> /home/user/.cargo/registry/src/github.com-1ecc6299db9ec823/rustc-ap-rustc_data_structures-673.0.0/lib.rs:16:12
|
16 | #![feature(optin_builtin_traits)]
| ^^^^^^^^^^^^^^^^^^^^ feature has been removed
|
= note: renamed to `auto_traits`
error[E0658]: auto traits are experimental and possibly buggy
--> /home/user/.cargo/registry/src/github.com-1ecc6299db9ec823/rustc-ap-rustc_data_structures-673.0.0/sync.rs:30:9
|
30 | pub auto trait Send {}
| ^^^^^^^^^^^^^^^^^^^^^^
|
= note: see issue #13231 <https://github.com/rust-lang/rust/issues/13231> for more information
= help: add `#![feature(auto_traits)]` to the crate attributes to enable
error[E0658]: auto traits are experimental and possibly buggy
--> /home/user/.cargo/registry/src/github.com-1ecc6299db9ec823/rustc-ap-rustc_data_structures-673.0.0/sync.rs:31:9
|
31 | pub auto trait Sync {}
| ^^^^^^^^^^^^^^^^^^^^^^
|
= note: see issue #13231 <https://github.com/rust-lang/rust/issues/13231> for more information
= help: add `#![feature(auto_traits)]` to the crate attributes to enable
Compiling structopt v0.3.21
error: aborting due to 3 previous errors
Some errors have detailed explanations: E0557, E0658.
For more information about an error, try `rustc --explain E0557`.
error: failed to compile `cargo-modules v0.4.9`, intermediate artifacts can be found at `/tmp/cargo-installK6pcGj`
Caused by:
could not compile `rustc-ap-rustc_data_structures`
To learn more, run the command again with --verbose.
$ rustup run nightly cargo install cargo-modules
Updating crates.io index
Installing cargo-modules v0.4.7
Compiling libc v0.2.71
Compiling autocfg v1.0.0
Compiling cfg-if v0.1.10
Compiling maybe-uninit v2.0.0
Compiling unicode-xid v0.2.1
Compiling lazy_static v1.4.0
Compiling semver-parser v0.7.0
Compiling scopeguard v1.1.0
Compiling proc-macro2 v1.0.18
Compiling syn v1.0.33
Compiling byteorder v1.3.4
Compiling cc v1.0.57
Compiling typenum v1.12.0
Compiling smallvec v1.4.1
Compiling bitflags v1.2.1
Compiling log v0.4.8
Compiling rustc-rayon-core v0.3.0
Compiling unicode-width v0.1.8
Compiling byte-tools v0.3.1
Compiling either v1.5.3
Compiling rustc-hash v1.1.0
Compiling stable_deref_trait v1.1.1
Compiling opaque-debug v0.2.3
Compiling rustc-ap-graphviz v662.0.0
Compiling fake-simd v0.1.2
Compiling scoped-tls v1.0.0
Compiling version_check v0.9.2
Compiling rustc-ap-rustc_target v662.0.0
Compiling rustc-ap-rustc_ast v662.0.0
Compiling annotate-snippets v0.6.1
Compiling termcolor v1.1.0
Compiling unicode-segmentation v1.6.0
Compiling rustc-ap-rustc_fs_util v662.0.0
Compiling ansi_term v0.11.0
Compiling tinyvec v0.3.3
Compiling strsim v0.8.0
Compiling vec_map v0.8.2
Compiling fixedbitset v0.2.0
Compiling arrayvec v0.5.1
Compiling json v0.12.4
Compiling rustc-ap-rustc_lexer v662.0.0
Compiling crossbeam-utils v0.6.6
Compiling semver v0.9.0
Compiling lock_api v0.3.4
Compiling memoffset v0.5.5
Compiling crossbeam-utils v0.7.2
Compiling crossbeam-epoch v0.8.2
Compiling indexmap v1.4.0
Compiling textwrap v0.11.0
Compiling getopts v0.2.21
Compiling block-padding v0.1.5
Compiling proc-macro-error-attr v1.0.3
Compiling proc-macro-error v1.0.3
Compiling heck v0.3.1
Compiling unicode-normalization v0.1.13
Compiling crossbeam-queue v0.1.2
Compiling rustc_version v0.2.3
Compiling psm v0.1.10
Compiling stacker v0.1.9
Compiling smallvec v0.6.13
Compiling parking_lot_core v0.6.2
Compiling parking_lot v0.9.0
Compiling quote v1.0.7
Compiling num_cpus v1.13.0
Compiling parking_lot_core v0.7.2
Compiling memmap v0.7.0
Compiling jobserver v0.1.21
Compiling atty v0.2.14
Compiling termize v0.1.1
Compiling ena v0.14.0
Compiling generic-array v0.12.3
Compiling parking_lot v0.10.2
Compiling clap v2.33.1
Compiling colored v1.9.3
Compiling block-buffer v0.7.3
Compiling digest v0.8.1
Compiling rustc-ap-serialize v662.0.0
Compiling petgraph v0.5.1
Compiling once_cell v1.4.0
Compiling crossbeam-deque v0.7.3
Compiling sha-1 v0.8.2
Compiling md-5 v0.8.0
Compiling rustc-ap-rustc_index v662.0.0
Compiling synstructure v0.12.4
Compiling syn-mid v0.5.0
Compiling measureme v0.7.1
Compiling rustc-rayon v0.3.0
Compiling rustc-ap-rustc_data_structures v662.0.0
Compiling rustc-ap-arena v662.0.0
error[E0599]: no method named `reserve_in_place` found for struct `alloc::raw_vec::RawVec<T>` in the current scope
--> /Users/austin/.cargo/registry/src/github.com-1ecc6299db9ec823/rustc-ap-arena-662.0.0/lib.rs:228:39
|
228 | if last_chunk.storage.reserve_in_place(currently_used_cap, n) {
| ^^^^^^^^^^^^^^^^ method not found in `alloc::raw_vec::RawVec<T>`
error[E0599]: no method named `reserve_in_place` found for struct `alloc::raw_vec::RawVec<u8>` in the current scope
--> /Users/austin/.cargo/registry/src/github.com-1ecc6299db9ec823/rustc-ap-arena-662.0.0/lib.rs:356:39
|
356 | if last_chunk.storage.reserve_in_place(used_bytes, needed_bytes) {
| ^^^^^^^^^^^^^^^^ method not found in `alloc::raw_vec::RawVec<u8>`
error: aborting due to 2 previous errors
For more information about this error, try `rustc --explain E0599`.
error: could not compile `rustc-ap-arena`.
To learn more, run the command again with --verbose.
warning: build failed, waiting for other jobs to finish...
error: failed to compile `cargo-modules v0.4.7`, intermediate artifacts can be found at `/var/folders/6t/2xp3hp2j1vd5yyklq0b6_lbw0000gn/T/cargo-installo1LFmn`
Caused by:
build failed
>> cargo install cargo-modules
..........................
Compiling ra_ap_ide_db v0.0.87
error[E0658]: use of unstable library feature 'iter_map_while': recently added
--> /home/chz/.cargo/registry/src/github.com-1ecc6299db9ec823/ra_ap_ide_db-0.0.87/src/helpers.rs:313:55
|
313 | input.syntax().children_with_tokens().skip(1).map_while(|it| match it.into_token() {
| ^^^^^^^^^
|
= note: see issue #68537 <https://github.com/rust-lang/rust/issues/68537> for more information
For more information about this error, try `rustc --explain E0658`.
error: could not compile `ra_ap_ide_db` due to previous error
warning: build failed, waiting for other jobs to finish...
error: failed to compile `cargo-modules v0.5.7`, intermediate artifacts can be found at `/tmp/cargo-installASlcUF`
Caused by:
build failed
>> rustc --version
rustc 1.56.1 (59eed8a2a 2021-11-01)
>> cargo --version
cargo 1.56.0 (4ed5d137b 2021-10-04)
>>
cargo install cargo-modules --version "0.5.6"
works OK.
I have a project making use of a cargo workspace, but only the main crate is revealed when I issue a cargo modules
command.
Great tool, thank you!
I'm running nightly (cargo +nightly --version
reports cargo 1.45.0-nightly (9fcb8c1d2 2020-05-25)
and I'm seeing cargo +nightly install cargo-modules
fail as it tries to build the rustc-ap-rustc_span
crate. I might be doing something wrong, but I did notice that that crate is now up to version 661, whereas cargo-module
has a Cargo.toml
that calls for only version 657.
The full error is here:
Compiling rustc-ap-rustc_span v657.0.0
error[E0407]: method `replace_one` is not a member of trait `std::iter::Step`
--> /home/warner/.cargo/registry/src/github.com-1ecc6299db9ec823/rustc-ap-rustc_span-657.0.0/def_id.rs:11:1
|
11 | / rustc_index::newtype_index! {
12 | | pub struct CrateId {
13 | | ENCODABLE = custom
14 | | }
15 | | }
| |_^ not a member of trait `std::iter::Step`
|
= note: this error originates in a macro (in Nightly builds, run with -Z macro-backtrace for more info)
error[E0407]: method `replace_zero` is not a member of trait `std::iter::Step`
--> /home/warner/.cargo/registry/src/github.com-1ecc6299db9ec823/rustc-ap-rustc_span-657.0.0/def_id.rs:11:1
|
11 | / rustc_index::newtype_index! {
12 | | pub struct CrateId {
13 | | ENCODABLE = custom
14 | | }
15 | | }
| |_^ not a member of trait `std::iter::Step`
|
= note: this error originates in a macro (in Nightly builds, run with -Z macro-backtrace for more info)
error[E0407]: method `add_one` is not a member of trait `std::iter::Step`
--> /home/warner/.cargo/registry/src/github.com-1ecc6299db9ec823/rustc-ap-rustc_span-657.0.0/def_id.rs:11:1
|
11 | / rustc_index::newtype_index! {
12 | | pub struct CrateId {
13 | | ENCODABLE = custom
14 | | }
15 | | }
| |_^ not a member of trait `std::iter::Step`
|
= note: this error originates in a macro (in Nightly builds, run with -Z macro-backtrace for more info)
error[E0407]: method `sub_one` is not a member of trait `std::iter::Step`
--> /home/warner/.cargo/registry/src/github.com-1ecc6299db9ec823/rustc-ap-rustc_span-657.0.0/def_id.rs:11:1
|
11 | / rustc_index::newtype_index! {
12 | | pub struct CrateId {
13 | | ENCODABLE = custom
14 | | }
15 | | }
| |_^ not a member of trait `std::iter::Step`
|
= note: this error originates in a macro (in Nightly builds, run with -Z macro-backtrace for more info)
error[E0407]: method `add_usize` is not a member of trait `std::iter::Step`
--> /home/warner/.cargo/registry/src/github.com-1ecc6299db9ec823/rustc-ap-rustc_span-657.0.0/def_id.rs:11:1
|
11 | / rustc_index::newtype_index! {
12 | | pub struct CrateId {
13 | | ENCODABLE = custom
14 | | }
15 | | }
| |_^ not a member of trait `std::iter::Step`
|
= note: this error originates in a macro (in Nightly builds, run with -Z macro-backtrace for more info)
error[E0407]: method `sub_usize` is not a member of trait `std::iter::Step`
--> /home/warner/.cargo/registry/src/github.com-1ecc6299db9ec823/rustc-ap-rustc_span-657.0.0/def_id.rs:11:1
|
11 | / rustc_index::newtype_index! {
12 | | pub struct CrateId {
13 | | ENCODABLE = custom
14 | | }
15 | | }
| |_^ not a member of trait `std::iter::Step`
|
= note: this error originates in a macro (in Nightly builds, run with -Z macro-backtrace for more info)
error[E0407]: method `replace_one` is not a member of trait `std::iter::Step`
--> /home/warner/.cargo/registry/src/github.com-1ecc6299db9ec823/rustc-ap-rustc_span-657.0.0/def_id.rs:118:1
|
118 | / rustc_index::newtype_index! {
119 | | /// A DefIndex is an index into the hir-map for a crate, identifying a
120 | | /// particular definition. It should really be considered an interned
121 | | /// shorthand for a particular DefPath.
... |
128 | | }
129 | | }
| |_^ not a member of trait `std::iter::Step`
|
= note: this error originates in a macro (in Nightly builds, run with -Z macro-backtrace for more info)
error[E0407]: method `replace_zero` is not a member of trait `std::iter::Step`
--> /home/warner/.cargo/registry/src/github.com-1ecc6299db9ec823/rustc-ap-rustc_span-657.0.0/def_id.rs:118:1
|
118 | / rustc_index::newtype_index! {
119 | | /// A DefIndex is an index into the hir-map for a crate, identifying a
120 | | /// particular definition. It should really be considered an interned
121 | | /// shorthand for a particular DefPath.
... |
128 | | }
129 | | }
| |_^ not a member of trait `std::iter::Step`
|
= note: this error originates in a macro (in Nightly builds, run with -Z macro-backtrace for more info)
error[E0407]: method `add_one` is not a member of trait `std::iter::Step`
--> /home/warner/.cargo/registry/src/github.com-1ecc6299db9ec823/rustc-ap-rustc_span-657.0.0/def_id.rs:118:1
|
118 | / rustc_index::newtype_index! {
119 | | /// A DefIndex is an index into the hir-map for a crate, identifying a
120 | | /// particular definition. It should really be considered an interned
121 | | /// shorthand for a particular DefPath.
... |
128 | | }
129 | | }
| |_^ not a member of trait `std::iter::Step`
|
= note: this error originates in a macro (in Nightly builds, run with -Z macro-backtrace for more info)
error[E0407]: method `sub_one` is not a member of trait `std::iter::Step`
--> /home/warner/.cargo/registry/src/github.com-1ecc6299db9ec823/rustc-ap-rustc_span-657.0.0/def_id.rs:118:1
|
118 | / rustc_index::newtype_index! {
119 | | /// A DefIndex is an index into the hir-map for a crate, identifying a
120 | | /// particular definition. It should really be considered an interned
121 | | /// shorthand for a particular DefPath.
... |
128 | | }
129 | | }
| |_^ not a member of trait `std::iter::Step`
|
= note: this error originates in a macro (in Nightly builds, run with -Z macro-backtrace for more info)
error[E0407]: method `add_usize` is not a member of trait `std::iter::Step`
--> /home/warner/.cargo/registry/src/github.com-1ecc6299db9ec823/rustc-ap-rustc_span-657.0.0/def_id.rs:118:1
|
118 | / rustc_index::newtype_index! {
119 | | /// A DefIndex is an index into the hir-map for a crate, identifying a
120 | | /// particular definition. It should really be considered an interned
121 | | /// shorthand for a particular DefPath.
... |
128 | | }
129 | | }
| |_^ not a member of trait `std::iter::Step`
|
= note: this error originates in a macro (in Nightly builds, run with -Z macro-backtrace for more info)
error[E0407]: method `sub_usize` is not a member of trait `std::iter::Step`
--> /home/warner/.cargo/registry/src/github.com-1ecc6299db9ec823/rustc-ap-rustc_span-657.0.0/def_id.rs:118:1
|
118 | / rustc_index::newtype_index! {
119 | | /// A DefIndex is an index into the hir-map for a crate, identifying a
120 | | /// particular definition. It should really be considered an interned
121 | | /// shorthand for a particular DefPath.
... |
128 | | }
129 | | }
| |_^ not a member of trait `std::iter::Step`
|
= note: this error originates in a macro (in Nightly builds, run with -Z macro-backtrace for more info)
error[E0407]: method `replace_one` is not a member of trait `std::iter::Step`
--> /home/warner/.cargo/registry/src/github.com-1ecc6299db9ec823/rustc-ap-rustc_span-657.0.0/symbol.rs:1034:1
|
1034 | / rustc_index::newtype_index! {
1035 | | pub struct SymbolIndex { .. }
1036 | | }
| |_^ not a member of trait `std::iter::Step`
|
= note: this error originates in a macro (in Nightly builds, run with -Z macro-backtrace for more info)
error[E0407]: method `replace_zero` is not a member of trait `std::iter::Step`
--> /home/warner/.cargo/registry/src/github.com-1ecc6299db9ec823/rustc-ap-rustc_span-657.0.0/symbol.rs:1034:1
|
1034 | / rustc_index::newtype_index! {
1035 | | pub struct SymbolIndex { .. }
1036 | | }
| |_^ not a member of trait `std::iter::Step`
|
= note: this error originates in a macro (in Nightly builds, run with -Z macro-backtrace for more info)
error[E0407]: method `add_one` is not a member of trait `std::iter::Step`
--> /home/warner/.cargo/registry/src/github.com-1ecc6299db9ec823/rustc-ap-rustc_span-657.0.0/symbol.rs:1034:1
|
1034 | / rustc_index::newtype_index! {
1035 | | pub struct SymbolIndex { .. }
1036 | | }
| |_^ not a member of trait `std::iter::Step`
|
= note: this error originates in a macro (in Nightly builds, run with -Z macro-backtrace for more info)
error[E0407]: method `sub_one` is not a member of trait `std::iter::Step`
--> /home/warner/.cargo/registry/src/github.com-1ecc6299db9ec823/rustc-ap-rustc_span-657.0.0/symbol.rs:1034:1
|
1034 | / rustc_index::newtype_index! {
1035 | | pub struct SymbolIndex { .. }
1036 | | }
| |_^ not a member of trait `std::iter::Step`
|
= note: this error originates in a macro (in Nightly builds, run with -Z macro-backtrace for more info)
error[E0407]: method `add_usize` is not a member of trait `std::iter::Step`
--> /home/warner/.cargo/registry/src/github.com-1ecc6299db9ec823/rustc-ap-rustc_span-657.0.0/symbol.rs:1034:1
|
1034 | / rustc_index::newtype_index! {
1035 | | pub struct SymbolIndex { .. }
1036 | | }
| |_^ not a member of trait `std::iter::Step`
|
= note: this error originates in a macro (in Nightly builds, run with -Z macro-backtrace for more info)
error[E0407]: method `sub_usize` is not a member of trait `std::iter::Step`
--> /home/warner/.cargo/registry/src/github.com-1ecc6299db9ec823/rustc-ap-rustc_span-657.0.0/symbol.rs:1034:1
|
1034 | / rustc_index::newtype_index! {
1035 | | pub struct SymbolIndex { .. }
1036 | | }
| |_^ not a member of trait `std::iter::Step`
|
= note: this error originates in a macro (in Nightly builds, run with -Z macro-backtrace for more info)
error[E0200]: the trait `std::iter::Step` requires an `unsafe impl` declaration
--> /home/warner/.cargo/registry/src/github.com-1ecc6299db9ec823/rustc-ap-rustc_span-657.0.0/def_id.rs:11:1
|
11 | / rustc_index::newtype_index! {
12 | | pub struct CrateId {
13 | | ENCODABLE = custom
14 | | }
15 | | }
| |_^
|
= note: this error originates in a macro (in Nightly builds, run with -Z macro-backtrace for more info)
error[E0200]: the trait `std::iter::Step` requires an `unsafe impl` declaration
--> /home/warner/.cargo/registry/src/github.com-1ecc6299db9ec823/rustc-ap-rustc_span-657.0.0/def_id.rs:118:1
|
118 | / rustc_index::newtype_index! {
119 | | /// A DefIndex is an index into the hir-map for a crate, identifying a
120 | | /// particular definition. It should really be considered an interned
121 | | /// shorthand for a particular DefPath.
... |
128 | | }
129 | | }
| |_^
|
= note: this error originates in a macro (in Nightly builds, run with -Z macro-backtrace for more info)
error[E0200]: the trait `std::iter::Step` requires an `unsafe impl` declaration
--> /home/warner/.cargo/registry/src/github.com-1ecc6299db9ec823/rustc-ap-rustc_span-657.0.0/symbol.rs:1034:1
|
1034 | / rustc_index::newtype_index! {
1035 | | pub struct SymbolIndex { .. }
1036 | | }
| |_^
|
= note: this error originates in a macro (in Nightly builds, run with -Z macro-backtrace for more info)
error: aborting due to 21 previous errors
Some errors have detailed explanations: E0200, E0407.
For more information about an error, try `rustc --explain E0200`.
error: could not compile `rustc-ap-rustc_span`.
Hello, what do you guys think about adding a flag for showing the types defined in a module? This might seem out of scope for this project, but it is sort of an extension of the module tree in a syntactic meaning, because of the way you reference types in other modules.
This could be extended for functions aswell, maybe even methods or trait implementations
I imagine this to look something like this:
% cargo modules --enable-edition-2018 tree --types
server : crate
├── websocket : private
├── message_stream : orphan
│ ├── struct MessageStream
│ └── impl futures::Stream for MessageStream
└── websocket : private
├── struct WebSocket
│ ├── fn new(host: &str) -> Self
│ └── fn close(&self)
└── enum Msg
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.