rustdoc: `cargo deadlinks` reveals invalid fragments in links generated by rustdoc
Nobody has claimed this yet.
- Dominant language
- Rust
- Stars
- 119k
- Forks
- 16.1k
- PR merge metrics
- PR metrics pending
Description
See this run:
https://github.com/wgsl-analyzer/wgsl-analyzer/actions/runs/14971777301/job/42054178848#step:8:27
I expected to see this happen: Generated links to methods are valid
Instead, this happened:
Finished `dev` profile [unoptimized + debuginfo] target(s) in 19.69s
Generated C:\Users\BenjaminBrienen\source\wgsl-analyzer\target\doc\base_db\index.html and 14 other files
Found invalid urls in struct.ParseImportNoPreprocessorQuery.html:
Fragment #tymethod.execute at C:\Users\BenjaminBrienen\source\wgsl-analyzer\target\doc\base_db\struct.ParseImportNoPreprocessorQuery.html does not exist!
Found invalid urls in struct.LineIndexQuery.html:
Fragment #tymethod.execute at C:\Users\BenjaminBrienen\source\wgsl-analyzer\target\doc\base_db\struct.LineIndexQuery.html does not exist!
Found invalid urls in struct.ParseImportQuery.html:
Fragment #tymethod.execute at C:\Users\BenjaminBrienen\source\wgsl-analyzer\target\doc\base_db\struct.ParseImportQuery.html does not exist!
Found invalid urls in struct.ParseQuery.html:
Fragment #tymethod.execute at C:\Users\BenjaminBrienen\source\wgsl-analyzer\target\doc\base_db\struct.ParseQuery.html does not exist!
Found invalid urls in struct.ParseNoPreprocessorQuery.html:
Fragment #tymethod.execute at C:\Users\BenjaminBrienen\source\wgsl-analyzer\target\doc\base_db\struct.ParseNoPreprocessorQuery.html does not exist!
Found invalid urls in struct.ParseWithUnconfiguredQuery.html:
Fragment #tymethod.execute at C:\Users\BenjaminBrienen\source\wgsl-analyzer\target\doc\base_db\struct.ParseWithUnconfiguredQuery.html does not exist!
Found invalid urls in db\struct.BodyQuery.html:
Fragment #tymethod.execute at C:\Users\BenjaminBrienen\source\wgsl-analyzer\target\doc\hir_def\db\struct.BodyQuery.html does not exist!
Found invalid urls in db\struct.AstIdMapQuery.html:
Fragment #tymethod.execute at C:\Users\BenjaminBrienen\source\wgsl-analyzer\target\doc\hir_def\db\struct.AstIdMapQuery.html does not exist!
Found invalid urls in db\struct.AttrsQuery.html:
Fragment #tymethod.execute at C:\Users\BenjaminBrienen\source\wgsl-analyzer\target\doc\hir_def\db\struct.AttrsQuery.html does not exist!
Found invalid urls in db\struct.GetFileIdQuery.html:
Fragment #tymethod.execute at C:\Users\BenjaminBrienen\source\wgsl-analyzer\target\doc\hir_def\db\struct.GetFileIdQuery.html does not exist!
Found invalid urls in db\struct.BodyWithSourceMapQuery.html:
Fragment #tymethod.execute at C:\Users\BenjaminBrienen\source\wgsl-analyzer\target\doc\hir_def\db\struct.BodyWithSourceMapQuery.html does not exist!
Found invalid urls in db\struct.GetPathQuery.html:
Fragment #tymethod.execute at C:\Users\BenjaminBrienen\source\wgsl-analyzer\target\doc\hir_def\db\struct.GetPathQuery.html does not exist!
Found invalid urls in db\struct.ExpressionScopesQuery.html:
Fragment #tymethod.execute at C:\Users\BenjaminBrienen\source\wgsl-analyzer\target\doc\hir_def\db\struct.ExpressionScopesQuery.html does not exist!
Found invalid urls in db\struct.FnDataQuery.html:
Fragment #tymethod.execute at C:\Users\BenjaminBrienen\source\wgsl-analyzer\target\doc\hir_def\db\struct.FnDataQuery.html does not exist!
Found invalid urls in db\struct.GlobalConstantDataQuery.html:
Fragment #tymethod.execute at C:\Users\BenjaminBrienen\source\wgsl-analyzer\target\doc\hir_def\db\struct.GlobalConstantDataQuery.html does not exist!
Found invalid urls in db\struct.GlobalVarDataQuery.html:
Fragment #tymethod.execute at C:\Users\BenjaminBrienen\source\wgsl-analyzer\target\doc\hir_def\db\struct.GlobalVarDataQuery.html does not exist!
Found invalid urls in db\struct.ModuleInfoQuery.html:
Fragment #tymethod.execute at C:\Users\BenjaminBrienen\source\wgsl-analyzer\target\doc\hir_def\db\struct.ModuleInfoQuery.html does not exist!
Found invalid urls in db\struct.OverrideDataQuery.html:
Fragment #tymethod.execute at C:\Users\BenjaminBrienen\source\wgsl-analyzer\target\doc\hir_def\db\struct.OverrideDataQuery.html does not exist!
Found invalid urls in db\struct.ResolveFullSourceQuery.html:
Fragment #tymethod.execute at C:\Users\BenjaminBrienen\source\wgsl-analyzer\target\doc\hir_def\db\struct.ResolveFullSourceQuery.html does not exist!
Found invalid urls in db\struct.TextRangeFromFullQuery.html:
Fragment #tymethod.execute at C:\Users\BenjaminBrienen\source\wgsl-analyzer\target\doc\hir_def\db\struct.TextRangeFromFullQuery.html does not exist!
Found invalid urls in db\struct.ParseOrResolveQuery.html:
Fragment #tymethod.execute at C:\Users\BenjaminBrienen\source\wgsl-analyzer\target\doc\hir_def\db\struct.ParseOrResolveQuery.html does not exist!
Found invalid urls in db\struct.StructDataQuery.html:
Fragment #tymethod.execute at C:\Users\BenjaminBrienen\source\wgsl-analyzer\target\doc\hir_def\db\struct.StructDataQuery.html does not exist!
Found invalid urls in db\struct.TypeAliasDataQuery.html:
Fragment #tymethod.execute at C:\Users\BenjaminBrienen\source\wgsl-analyzer\target\doc\hir_def\db\struct.TypeAliasDataQuery.html does not exist!
Found invalid urls in db\struct.FieldTypesQuery.html:
Fragment #tymethod.execute at C:\Users\BenjaminBrienen\source\wgsl-analyzer\target\doc\hir_ty\db\struct.FieldTypesQuery.html does not exist!
Found invalid urls in db\struct.FunctionTypeQuery.html:
Fragment #tymethod.execute at C:\Users\BenjaminBrienen\source\wgsl-analyzer\target\doc\hir_ty\db\struct.FunctionTypeQuery.html does not exist!
Found invalid urls in db\struct.StructIsUsedInUniformQuery.html:
Fragment #tymethod.execute at C:\Users\BenjaminBrienen\source\wgsl-analyzer\target\doc\hir_ty\db\struct.StructIsUsedInUniformQuery.html does not exist!
Found invalid urls in db\struct.InferQuery.html:
Fragment #tymethod.execute at C:\Users\BenjaminBrienen\source\wgsl-analyzer\target\doc\hir_ty\db\struct.InferQuery.html does not exist!
Found invalid urls in struct.RootDatabase.html:
Fragment #tymethod.maybe_changed_since at C:\Users\BenjaminBrienen\source\wgsl-analyzer\target\doc\ide\struct.RootDatabase.html does not exist!
Fragment #tymethod.ops_salsa_runtime at C:\Users\BenjaminBrienen\source\wgsl-analyzer\target\doc\ide\struct.RootDatabase.html does not exist!
Fragment #tymethod.group_storage at C:\Users\BenjaminBrienen\source\wgsl-analyzer\target\doc\ide\struct.RootDatabase.html does not exist!
Fragment #tymethod.for_each_query at C:\Users\BenjaminBrienen\source\wgsl-analyzer\target\doc\ide\struct.RootDatabase.html does not exist!
Fragment #tymethod.fmt_index at C:\Users\BenjaminBrienen\source\wgsl-analyzer\target\doc\ide\struct.RootDatabase.html does not exist!
Fragment #tymethod.ops_salsa_runtime_mut at C:\Users\BenjaminBrienen\source\wgsl-analyzer\target\doc\ide\struct.RootDatabase.html does not exist!
Fragment #tymethod.ops_database at C:\Users\BenjaminBrienen\source\wgsl-analyzer\target\doc\ide\struct.RootDatabase.html does not exist!
Linked file at path C:\Users\BenjaminBrienen\source\wgsl-analyzer\target\doc\ide\struct.QueryTable.html does not exist!
Meta
rustc --version --verbose:
rustc 1.87.0 (17067e9ac 2025-05-09)
binary: rustc
commit-hash: 17067e9ac6d7ecb70e50f92c1944e545188d2359
commit-date: 2025-05-09
host: x86_64-pc-windows-msvc
release: 1.87.0
LLVM version: 20.1.1
same result using cargo +nightly deadlinks
If I visit "file:///C:/Users/BenjaminBrienen/source/wgsl-analyzer/target/doc/ide/struct.RootDatabase.html#method.group_storage" then it does take me straight to group_storage method. If I put "file:///C:/Users/BenjaminBrienen/source/wgsl-analyzer/target/doc/ide/struct.RootDatabase.html#tymethod.group_storage" instead, then it only visits the page because the fragment is invalid.
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Reproduce the report by generating documentation for the affected project and running cargo deadlinks, then inspect rustdoc's generated HTML links and fragments such as those in struct.RootDatabase.html. Done means method links resolve to existing fragments and cargo deadlinks reports no invalid fragments or missing linked files.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- rust
- Domain
- compilers, documentation
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 35/100