Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
82 commits
Select commit Hold shift + click to select a range
d6362e6
document guidelines for which shims have a place in Miri
RalfJung Dec 17, 2025
ed44659
Prepare for merging from rust-lang/rust
Jan 25, 2026
3d87f9c
Merge ref '5a07626f4b88' from rust-lang/rust
Jan 25, 2026
a109785
Merge pull request #4832 from rust-lang/rustup-2026-01-25
RalfJung Jan 25, 2026
be79f47
Merge pull request #4767 from RalfJung/shim-scope
RalfJung Jan 25, 2026
20c31e0
Prepare for merging from rust-lang/rust
Jan 26, 2026
58f38eb
Merge ref '873d4682c7d2' from rust-lang/rust
Jan 26, 2026
5f2d232
Merge pull request #4834 from rust-lang/rustup-2026-01-26
RalfJung Jan 26, 2026
db8f276
Prepare for merging from rust-lang/rust
Jan 28, 2026
db1d1ab
Merge ref 'e96bb7e44fbc' from rust-lang/rust
Jan 28, 2026
7129412
add a bug to the trophy shelf
joboet Jan 28, 2026
9fc9950
Merge pull request #4836 from joboet/vecdeque-trophy
RalfJung Jan 28, 2026
f67f5d9
bless android tests
RalfJung Jan 28, 2026
8513474
Merge pull request #4835 from rust-lang/rustup-2026-01-28
RalfJung Jan 28, 2026
ce7c03d
Prepare for merging from rust-lang/rust
Jan 30, 2026
f15548f
Merge ref '35a31ba76397' from rust-lang/rust
Jan 30, 2026
ca86fb5
Merge pull request #4837 from rust-lang/rustup-2026-01-30
oli-obk Jan 30, 2026
455172f
trophy case: oneshot data race
RalfJung Jan 31, 2026
c18e790
Merge pull request #4838 from RalfJung/oneshot-trophy
RalfJung Jan 31, 2026
1af1222
Prepare for merging from rust-lang/rust
RalfJung Feb 1, 2026
0f4176d
Merge ref '878374e07f3b' from rust-lang/rust
RalfJung Feb 1, 2026
070102b
fix building sysroot for JSON targets
RalfJung Feb 1, 2026
62d5181
Merge pull request #4839 from RalfJung/rustup
RalfJung Feb 1, 2026
c89a88e
do not run miri for the dependency build
RalfJung Feb 2, 2026
1044241
do not forward run flags to dependency build
RalfJung Feb 2, 2026
3eabab2
chore: configure capstone for x86 and clean up arm64 stub
hsqStephenZhang Feb 2, 2026
d17eefa
Merge pull request #4842 from RalfJung/miri-run
RalfJung Feb 3, 2026
dcb608d
re-balance CI
RalfJung Feb 3, 2026
477f93e
Merge pull request #4843 from hsqStephenZhang/fix/capstone_features
RalfJung Feb 3, 2026
fd1b7c1
Merge pull request #4844 from RalfJung/ci
RalfJung Feb 3, 2026
2159eaf
Add a validity testcase for uninhabited variants
meithecatte Jan 4, 2026
510af14
Bump bytes from 1.10.1 to 1.11.1 in /tests/deps
dependabot[bot] Feb 3, 2026
35f6c75
Merge pull request #4845 from rust-lang/dependabot/cargo/tests/deps/b…
RalfJung Feb 3, 2026
a3d848b
Prepare for merging from rust-lang/rust
Feb 4, 2026
99f8340
Merge ref '1d05e3c131d7' from rust-lang/rust
Feb 4, 2026
1f73d3f
Merge pull request #4846 from rust-lang/rustup-2026-02-04
RalfJung Feb 4, 2026
aace5bb
Merge pull request #4805 from meithecatte/uninhabited-enum-validity
RalfJung Feb 4, 2026
5009ac3
Bump git2 from 0.20.2 to 0.20.4
dependabot[bot] Feb 4, 2026
bd0d19f
Merge pull request #4848 from rust-lang/dependabot/cargo/git2-0.20.4
RalfJung Feb 4, 2026
94fa522
Prepare for merging from rust-lang/rust
RalfJung Feb 5, 2026
edc1ad4
Merge ref '9f4b56a5aed8' from rust-lang/rust
RalfJung Feb 5, 2026
40857fc
chore: fix typos suggested by typos-cli
hsqStephenZhang Feb 5, 2026
ba33e03
pass -Zunstable-options to tests
RalfJung Feb 5, 2026
4d946a9
Merge pull request #4849 from RalfJung/rustup
RalfJung Feb 5, 2026
2a6b9e6
inline the binding
tshepang Feb 3, 2026
193bc70
missing word
tshepang Feb 3, 2026
85f4694
Prepare for merging from rust-lang/rust
Feb 6, 2026
13ebd31
Merge ref 'f889772d6500' from rust-lang/rust
Feb 6, 2026
b1e0336
Merge pull request #4852 from rust-lang/rustup-2026-02-06
oli-obk Feb 6, 2026
5b68138
add trailing commas
tshepang Feb 3, 2026
6bb8cc6
obsolete comment
tshepang Feb 3, 2026
638d23c
E0570: improve text
tshepang Feb 5, 2026
84741ed
add reading pauses in doc comment
tshepang Feb 5, 2026
3be2843
make docs render better by separating intro from rest of paragraph
tshepang Feb 6, 2026
fcb8812
align_strange_enum_discriminant_offset: fix accidentally unused variable
RalfJung Feb 11, 2026
ecc243b
remove an unused allow(unused)
RalfJung Feb 11, 2026
940ebda
Merge pull request #4854 from RalfJung/test-unused
RalfJung Feb 11, 2026
1911d67
Prepare for merging from rust-lang/rust
Feb 13, 2026
dce9791
Merge ref '47611e16044c' from rust-lang/rust
Feb 13, 2026
8841267
Merge pull request #4856 from rust-lang/rustup-2026-02-13
RalfJung Feb 13, 2026
4247967
simplify wildcard datastructure
royAmmerschuber Feb 5, 2026
c78baeb
Merge pull request #4851 from royAmmerschuber/feature/simplyfy-exposing
RalfJung Feb 14, 2026
9216678
feat: vtbl1_u8 intrinsic on aarch64
hsqStephenZhang Feb 4, 2026
5932915
minor tweaks
RalfJung Feb 14, 2026
3d2786f
Merge pull request #4847 from hsqStephenZhang/feat/aarch64_intrinsics
RalfJung Feb 14, 2026
0b1003c
Merge pull request #4850 from hsqStephenZhang/chore/typos
saethlin Feb 14, 2026
1c21e60
made -> marked
saethlin Feb 14, 2026
e542472
Merge pull request #4858 from saethlin/typos-redux
saethlin Feb 15, 2026
d888b1c
Prepare for merging from rust-lang/rust
Feb 15, 2026
0f86403
Merge ref '7bee525095c0' from rust-lang/rust
Feb 15, 2026
40a3ca1
fix: remove unused source span
Embers-of-the-Fire Feb 15, 2026
a8bbacd
fix: remove unused import
Embers-of-the-Fire Feb 15, 2026
d13828b
fix: re-format the changes
Embers-of-the-Fire Feb 15, 2026
7027931
fmt
Feb 15, 2026
1f39d1f
Merge pull request #4859 from rust-lang/rustup-2026-02-15
RalfJung Feb 15, 2026
0f5c221
Regression test for "unstable" traits in force-unstable builds
Zalathar Feb 16, 2026
125e69e
Suppress unstable-trait notes under `-Zforce-unstable-if-unmarked`
Zalathar Feb 16, 2026
6a3a3d4
try to make cargo-miri work with bootstrap cargo
RalfJung Feb 16, 2026
0bfe819
Rollup merge of #152700 - RalfJung:miri, r=RalfJung
JonathanBrouwer Feb 16, 2026
90ae789
Rollup merge of #152206 - tshepang:misc, r=davidtwco
JonathanBrouwer Feb 16, 2026
dd2deb3
Rollup merge of #152664 - Embers-of-the-Fire:fix-152601, r=GuillaumeG…
JonathanBrouwer Feb 16, 2026
add0f19
Rollup merge of #152698 - Zalathar:zforce, r=jieyouxu
JonathanBrouwer Feb 16, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions compiler/rustc_error_codes/src/error_codes/E0570.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
The requested ABI is unsupported by the current target.

The rust compiler maintains for each target a list of unsupported ABIs on
that target. If an ABI is present in such a list this usually means that the
The Rust compiler maintains a list of unsupported ABIs for each target.
If an ABI is present in such a list, this usually means that the
target / ABI combination is currently unsupported by llvm.

If necessary, you can circumvent this check using custom target specifications.
5 changes: 2 additions & 3 deletions compiler/rustc_expand/src/config.rs
Original file line number Diff line number Diff line change
Expand Up @@ -86,8 +86,7 @@ pub fn features(sess: &Session, krate_attrs: &[Attribute], crate_name: Symbol) -
if let Some(f) = REMOVED_LANG_FEATURES.iter().find(|f| name == f.feature.name) {
let pull_note = if let Some(pull) = f.pull {
format!(
"; see <https://github.com/rust-lang/rust/pull/{}> for more information",
pull
"; see <https://github.com/rust-lang/rust/pull/{pull}> for more information",
)
} else {
"".to_owned()
Expand Down Expand Up @@ -123,7 +122,7 @@ pub fn features(sess: &Session, krate_attrs: &[Attribute], crate_name: Symbol) -

// If the enabled feature is unstable, record it.
if UNSTABLE_LANG_FEATURES.iter().find(|f| name == f.name).is_some() {
// When the ICE comes a standard library crate, there's a chance that the person
// When the ICE comes from a standard library crate, there's a chance that the person
// hitting the ICE may be using -Zbuild-std or similar with an untested target.
// The bug is probably in the standard library and not the compiler in that case,
// but that doesn't really matter - we want a bug report.
Expand Down
7 changes: 3 additions & 4 deletions compiler/rustc_feature/src/unstable.rs
Original file line number Diff line number Diff line change
Expand Up @@ -64,8 +64,6 @@ pub struct EnabledLibFeature {
}

impl Features {
/// `since` should be set for stable features that are nevertheless enabled with a `#[feature]`
/// attribute, indicating since when they are stable.
pub fn set_enabled_lang_feature(&mut self, lang_feat: EnabledLangFeature) {
self.enabled_lang_features.push(lang_feat);
self.enabled_features.insert(lang_feat.gate_name);
Expand Down Expand Up @@ -779,8 +777,9 @@ impl Features {
}
}

/// Some features are not allowed to be used together at the same time, if
/// the two are present, produce an error.
/// Some features are not allowed to be used together at the same time.
///
/// If the two are present, produce an error.
pub const INCOMPATIBLE_FEATURES: &[(Symbol, Symbol)] = &[
// Experimental match ergonomics rulesets are incompatible with each other, to simplify the
// boolean logic required to tell which typing rules to use.
Expand Down
6 changes: 3 additions & 3 deletions compiler/rustc_lint_defs/src/builtin.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3659,10 +3659,10 @@ declare_lint! {
/// `stdcall`, `fastcall`, and `cdecl` calling conventions (or their unwind
/// variants) on targets that cannot meaningfully be supported for the requested target.
///
/// For example `stdcall` does not make much sense for a x86_64 or, more apparently, powerpc
/// For example, `stdcall` does not make much sense for a x86_64 or, more apparently, powerpc
/// code, because this calling convention was never specified for those targets.
///
/// Historically MSVC toolchains have fallen back to the regular C calling convention for
/// Historically, MSVC toolchains have fallen back to the regular C calling convention for
/// targets other than x86, but Rust doesn't really see a similar need to introduce a similar
/// hack across many more targets.
///
Expand All @@ -3689,7 +3689,7 @@ declare_lint! {
///
/// ### Explanation
///
/// On most of the targets the behaviour of `stdcall` and similar calling conventions is not
/// On most of the targets, the behaviour of `stdcall` and similar calling conventions is not
/// defined at all, but was previously accepted due to a bug in the implementation of the
/// compiler.
pub UNSUPPORTED_CALLING_CONVENTIONS,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5608,15 +5608,17 @@ pub(super) fn get_explanation_based_on_obligation<'tcx>(
None => String::new(),
};
if let ty::PredicatePolarity::Positive = trait_predicate.polarity() {
// If the trait in question is unstable, mention that fact in the diagnostic.
// But if we're building with `-Zforce-unstable-if-unmarked` then _any_ trait
// not explicitly marked stable is considered unstable, so the extra text is
// unhelpful noise. See <https://github.com/rust-lang/rust/issues/152692>.
let mention_unstable = !tcx.sess.opts.unstable_opts.force_unstable_if_unmarked
&& try { tcx.lookup_stability(trait_predicate.def_id())?.level.is_stable() }
== Some(false);
let unstable = if mention_unstable { "nightly-only, unstable " } else { "" };

format!(
"{pre_message}the {}trait `{}` is not implemented for{desc} `{}`",
if tcx.lookup_stability(trait_predicate.def_id()).map(|s| s.level.is_stable())
== Some(false)
{
"nightly-only, unstable "
} else {
""
},
"{pre_message}the {unstable}trait `{}` is not implemented for{desc} `{}`",
trait_predicate.print_modifiers_and_trait_path(),
tcx.short_string(trait_predicate.self_ty().skip_binder(), long_ty_path),
)
Expand Down
13 changes: 11 additions & 2 deletions compiler/rustc_type_ir/src/predicate.rs
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,9 @@ where
}
}

/// A complete reference to a trait. These take numerous guises in syntax,
/// A complete reference to a trait.
///
/// These take numerous guises in syntax,
/// but perhaps the most recognizable form is in a where-clause:
/// ```ignore (illustrative)
/// T: Foo<U>
Expand Down Expand Up @@ -241,7 +243,9 @@ impl ImplPolarity {
}
}

/// Polarity for a trait predicate. May either be negative or positive.
/// Polarity for a trait predicate.
///
/// May either be negative or positive.
/// Distinguished from [`ImplPolarity`] since we never compute goals with
/// "reservation" level.
#[derive(Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash, Debug)]
Expand Down Expand Up @@ -327,6 +331,7 @@ impl<I: Interner> ty::Binder<I, ExistentialPredicate<I>> {
}

/// An existential reference to a trait, where `Self` is erased.
///
/// For example, the trait object `Trait<'a, 'b, X, Y>` is:
/// ```ignore (illustrative)
/// exists T. T: Trait<'a, 'b, X, Y>
Expand Down Expand Up @@ -442,6 +447,7 @@ impl<I: Interner> ExistentialProjection<I> {
}

/// Extracts the underlying existential trait reference from this projection.
///
/// For example, if this is a projection of `exists T. <T as Iterator>::Item == X`,
/// then this function would return an `exists T. T: Iterator` existential trait
/// reference.
Expand Down Expand Up @@ -493,14 +499,17 @@ impl<I: Interner> ty::Binder<I, ExistentialProjection<I>> {
#[cfg_attr(feature = "nightly", derive(Encodable, Decodable, HashStable_NoContext))]
pub enum AliasTermKind {
/// A projection `<Type as Trait>::AssocType`.
///
/// Can get normalized away if monomorphic enough.
ProjectionTy,
/// An associated type in an inherent `impl`
InherentTy,
/// An opaque type (usually from `impl Trait` in type aliases or function return types)
///
/// Can only be normalized away in PostAnalysis mode or its defining scope.
OpaqueTy,
/// A free type alias that actually checks its trait bounds.
///
/// Currently only used if the type alias references opaque types.
/// Can always be normalized away.
FreeTy,
Expand Down
34 changes: 25 additions & 9 deletions compiler/rustc_type_ir/src/ty_kind.rs
Original file line number Diff line number Diff line change
Expand Up @@ -29,14 +29,17 @@ mod closure;
)]
pub enum AliasTyKind {
/// A projection `<Type as Trait>::AssocType`.
///
/// Can get normalized away if monomorphic enough.
Projection,
/// An associated type in an inherent `impl`
Inherent,
/// An opaque type (usually from `impl Trait` in type aliases or function return types)
///
/// Can only be normalized away in PostAnalysis mode or its defining scope.
Opaque,
/// A type alias that actually checks its trait bounds.
///
/// Currently only used if the type alias references opaque types.
/// Can always be normalized away.
Free,
Expand Down Expand Up @@ -99,7 +102,9 @@ pub enum TyKind<I: Interner> {
/// An array with the given length. Written as `[T; N]`.
Array(I::Ty, I::Const),

/// A pattern newtype. Takes any type and restricts its valid values to its pattern.
/// A pattern newtype.
///
/// Takes any type and restricts its valid values to its pattern.
/// This will also change the layout to take advantage of this restriction.
/// Only `Copy` and `Clone` will automatically get implemented for pattern types.
/// Auto-traits treat this as if it were an aggregate with a single nested type.
Expand All @@ -116,8 +121,9 @@ pub enum TyKind<I: Interner> {
/// `&'a mut T` or `&'a T`.
Ref(I::Region, I::Ty, Mutability),

/// The anonymous type of a function declaration/definition. Each
/// function has a unique type.
/// The anonymous type of a function declaration/definition.
///
/// Each function has a unique type.
///
/// For the function `fn foo() -> i32 { 3 }` this type would be
/// shown to the user as `fn() -> i32 {foo}`.
Expand All @@ -129,7 +135,9 @@ pub enum TyKind<I: Interner> {
/// ```
FnDef(I::FunctionId, I::GenericArgs),

/// A pointer to a function. Written as `fn() -> i32`.
/// A pointer to a function.
///
/// Written as `fn() -> i32`.
///
/// Note that both functions and closures start out as either
/// [FnDef] or [Closure] which can be then be coerced to this variant.
Expand Down Expand Up @@ -179,6 +187,7 @@ pub enum TyKind<I: Interner> {
Coroutine(I::CoroutineId, I::GenericArgs),

/// A type representing the types stored inside a coroutine.
///
/// This should only appear as part of the `CoroutineArgs`.
///
/// Unlike upvars, the witness can reference lifetimes from
Expand Down Expand Up @@ -210,6 +219,7 @@ pub enum TyKind<I: Interner> {
Tuple(I::Tys),

/// A projection, opaque type, free type alias, or inherent associated type.
///
/// All of these types are represented as pairs of def-id and args, and can
/// be normalized, so they are grouped conceptually.
Alias(AliasTyKind, AliasTy<I>),
Expand Down Expand Up @@ -253,8 +263,9 @@ pub enum TyKind<I: Interner> {
/// inside of the type.
Infer(InferTy),

/// A placeholder for a type which could not be computed; this is
/// propagated to avoid useless error messages.
/// A placeholder for a type which could not be computed.
///
/// This is propagated to avoid useless error messages.
Error(I::ErrorGuaranteed),
}

Expand Down Expand Up @@ -282,7 +293,9 @@ impl<I: Interner> TyKind<I> {
}

/// Returns `true` when the outermost type cannot be further normalized,
/// resolved, or instantiated. This includes all primitive types, but also
/// resolved, or instantiated.
///
/// This includes all primitive types, but also
/// things like ADTs and trait objects, since even if their arguments or
/// nested types may be further simplified, the outermost [`ty::TyKind`] or
/// type constructor remains the same.
Expand Down Expand Up @@ -481,6 +494,7 @@ impl<I: Interner> AliasTy<I> {
}

/// Extracts the underlying trait reference and own args from this projection.
///
/// For example, if this is a projection of `<T as StreamingIterator>::Item<'a>`,
/// then this function would return a `T: StreamingIterator` trait reference and
/// `['a]` as the own args.
Expand All @@ -490,6 +504,7 @@ impl<I: Interner> AliasTy<I> {
}

/// Extracts the underlying trait reference from this projection.
///
/// For example, if this is a projection of `<T as Iterator>::Item`,
/// then this function would return a `T: Iterator` trait reference.
///
Expand Down Expand Up @@ -593,8 +608,9 @@ pub enum InferTy {
FloatVar(FloatVid),

/// A [`FreshTy`][Self::FreshTy] is one that is generated as a replacement
/// for an unbound type variable. This is convenient for caching etc. See
/// `TypeFreshener` for more details.
/// for an unbound type variable.
///
/// This is convenient for caching etc. See `TypeFreshener` for more details.
///
/// Compare with [`TyVar`][Self::TyVar].
FreshTy(u32),
Expand Down
12 changes: 6 additions & 6 deletions rust-bors.toml
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ labels_blocking_approval = [
"S-waiting-on-t-rustdoc-frontend",
"S-waiting-on-t-clippy",
# PR manually set to blocked
"S-blocked"
"S-blocked",
]

# If CI runs quicker than this duration, consider it to be a failure
Expand All @@ -41,30 +41,30 @@ approved = [
"-S-waiting-on-author",
"-S-waiting-on-crater",
"-S-waiting-on-review",
"-S-waiting-on-team"
"-S-waiting-on-team",
]
unapproved = [
"+S-waiting-on-author",
"-S-blocked",
"-S-waiting-on-bors",
"-S-waiting-on-crater",
"-S-waiting-on-review",
"-S-waiting-on-team"
"-S-waiting-on-team",
]
try_failed = [
"+S-waiting-on-author",
"-S-waiting-on-review",
"-S-waiting-on-crater"
"-S-waiting-on-crater",
]
auto_build_succeeded = [
"+merged-by-bors",
"-S-waiting-on-bors"
"-S-waiting-on-bors",
]
auto_build_failed = [
"+S-waiting-on-review",
"-S-blocked",
"-S-waiting-on-bors",
"-S-waiting-on-author",
"-S-waiting-on-crater",
"-S-waiting-on-team"
"-S-waiting-on-team",
]
48 changes: 7 additions & 41 deletions src/librustdoc/html/render/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -59,8 +59,8 @@ use rustc_hir::def_id::{DefId, DefIdSet};
use rustc_hir::{ConstStability, Mutability, RustcVersion, StabilityLevel, StableSince};
use rustc_middle::ty::print::PrintTraitRefExt;
use rustc_middle::ty::{self, TyCtxt};
use rustc_span::DUMMY_SP;
use rustc_span::symbol::{Symbol, sym};
use rustc_span::{BytePos, DUMMY_SP, FileName};
use tracing::{debug, info};

pub(crate) use self::context::*;
Expand Down Expand Up @@ -2779,46 +2779,12 @@ fn render_call_locations<W: fmt::Write>(
let needs_expansion = line_max - line_min > NUM_VISIBLE_LINES;
let locations_encoded = serde_json::to_string(&line_ranges).unwrap();

let source_map = tcx.sess.source_map();
let files = source_map.files();
let local = tcx.sess.local_crate_source_file().unwrap();

let get_file_start_pos = || {
let crate_src = local.clone().into_local_path()?;
let abs_crate_src = crate_src.canonicalize().ok()?;
let crate_root = abs_crate_src.parent()?.parent()?;
let rel_path = path.strip_prefix(crate_root).ok()?;
files
.iter()
.find(|file| match &file.name {
FileName::Real(real) => real.local_path().map_or(false, |p| p == rel_path),
_ => false,
})
.map(|file| file.start_pos)
};

// Look for the example file in the source map if it exists, otherwise
// return a span to the local crate's source file
let Some(file_span) = get_file_start_pos()
.or_else(|| {
files
.iter()
.find(|file| match &file.name {
FileName::Real(file_name) => file_name == &local,
_ => false,
})
.map(|file| file.start_pos)
})
.map(|start_pos| {
rustc_span::Span::with_root_ctxt(
start_pos + BytePos(byte_min),
start_pos + BytePos(byte_max),
)
})
else {
// if the fallback span can't be built, don't render the code for this example
return false;
};
// For scraped examples, we don't need a real span from the SourceMap.
// The URL is already provided in ScrapedInfo, and sources::print_src
// will use that directly. We use DUMMY_SP as a placeholder.
// Note: DUMMY_SP is safe here because href_from_span won't be called
// for scraped examples.
let file_span = rustc_span::DUMMY_SP;

let mut decoration_info = FxIndexMap::default();
decoration_info.insert("highlight focus", vec![byte_ranges.remove(0)]);
Expand Down
12 changes: 9 additions & 3 deletions src/librustdoc/html/sources.rs
Original file line number Diff line number Diff line change
Expand Up @@ -344,9 +344,15 @@ pub(crate) fn print_src(
lines += line_info.start_line as usize;
}
let code = fmt::from_fn(move |fmt| {
let current_href = context
.href_from_span(clean::Span::new(file_span), false)
.expect("only local crates should have sources emitted");
// For scraped examples, use the URL from ScrapedInfo directly.
// For regular sources, derive it from the span.
let current_href = if let SourceContext::Embedded(info) = source_context {
info.url.to_string()
} else {
context
.href_from_span(clean::Span::new(file_span), false)
.expect("only local crates should have sources emitted")
};
highlight::write_code(
fmt,
s,
Expand Down
Loading
Loading