Open thenorili opened 2 years ago
You're telling what works, but not what doesn't work.
I never tested it with neovim. The whole "magic" of recursive tags files is the tags setting './rusty-tags.vi;/', which searches for a opened file for a tags file, starting at the directory of the file going upwards the directory tree. I don't know if neovim supports this setting.
ah, I'm sorry! That pattern definitely works with neovim, no change. What doesn't work is "every other tag". Nothing actually goes to its definition.
Like, consider:
$ROOT/examples/games/breakout.rs is going up, but not down. When I build the tags each individual crate at $ROOT/crates/* gets its own tags file, but there's no reference from the root file to those dependencies even when they're formally declared, all that it finds is the prototypes in $ROOT/src/lib.rs and the standard library stuff.
I think I know what your problem is.
All these separate crates in the bevy engine are independent of each other, they aren‘t dependencies of each other. Therefore the tag files of each crate don‘t contain/know anything about the other crates and you can‘t jump to them.
It‘s like having several rust cargo projects. If they don‘t depend on each other you can‘t jump between them.
But if you e.g. create your own game, which depends on several bevy crates, you‘ll get tags for them and can jump to them.
The example program does have dependencies on several bevy crates which it declares explicitly. However, the tags can't find those dependencies. They can find the lib.rs with prototypes for some stuff, but they can't find the actual source.
The problem is how bevy defines the sprite module:
pub mod sprite {
//! Items for sprites, rects, texture atlases, etc.
pub use bevy_sprite::*;
}
The ctags program doesn't understand this definition, which includes all the definitions from bevy_sprite
and therefore also can't create tags for them.
I encountered a similar problem with vim, bevy, and vim-fzf. vim-fzf uses the tags
file in your current working directory, which for my workflow is the top-level directory of my project.
I was able to build the tags file with rusty-tags -O tags vi
, but it was missing all of the deeper bevy_*
dependencies, such as Assets
from bevy_assets
. I figured out this was because I only listed bevy
as a dependency in Cargo.toml
.
My workaround was to construct the tags
file manually from the generated tags file and the cache files:
rusty-tags -v -O tags.partial vi
cat ~/.rusty-tags/cache/bevy* tags.partial | sort -u > tags
Is there any way rusty-tags
could add something like a --monolithic
or --all-tags
flag to rusty-tags
to write every tag found to the output file? That would add support for stable current working directory workflows.
setup:
I can follow the tag "bevy::sprite" which leads to crates/bevy_internal/src/lib.rs. I can follow tags to other prototypes inside of crates/bevy_internal/src/lib.rs. I can find things inside the standard library with no problem. My autocmds are exactly like the "if you have a $RUST_SRC_PATH".
My uneducated guess is that Vim's not finding the recursively-created tag files and adding them to the
tags
variable. My tags variable is below.tags=./rusty-tags.vi;/,~/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/rusty-tags.vi