pub struct SelectionContext { /* private fields */ }Expand description
Manifest-scoped state that can refine a registry’s “latest matching” version selection
beyond the plain requirement text — e.g. Composer’s minimum-stability field (#424,
#1433, #1444).
Opaque and ecosystem-owned: the type carries whatever an ecosystem’s own crate::ParseResult
puts into it (today, only Composer’s minimum-stability), and only that ecosystem’s own
crate::Registry implementation reads it back — every other registry ignores it via
crate::Registry::get_latest_matching/crate::Registry::select_latest_matching’s own
default. Every LSP call site that needs “the latest version for this dependency” (hover,
completion, code actions, and the background fetch path) obtains one from
crate::ParseResult::selection_context and threads it into those two required-parameter
trait methods, so a call site that already has a ParseResult in scope no longer has to
independently remember to extract and thread the same manifest-level state by hand
(#1433).
PartialEq is derived so a caller can detect that the context changed between two
parses (e.g. deps-lsp’s edit-triggered refetch escalation) without needing to know what
changed.
§Examples
use deps_core::selection::{SelectionContext, StabilityFloor};
let none = SelectionContext::none();
assert_eq!(none.minimum_stability(), None);
let composer = SelectionContext::with_minimum_stability(StabilityFloor::Alpha);
assert_eq!(composer.minimum_stability(), Some(StabilityFloor::Alpha));
assert_ne!(none, composer);Implementations§
Source§impl SelectionContext
impl SelectionContext
Sourcepub const fn none() -> Self
pub const fn none() -> Self
The empty context: every crate::Registry::get_latest_matching/
crate::Registry::select_latest_matching call degrades to plain requirement-text
matching. crate::ParseResult::selection_context’s default for every ecosystem with
no selection-context concept of its own.
§Examples
use deps_core::selection::SelectionContext;
assert_eq!(SelectionContext::none().minimum_stability(), None);Sourcepub const fn with_minimum_stability(floor: StabilityFloor) -> Self
pub const fn with_minimum_stability(floor: StabilityFloor) -> Self
Builds a context carrying a manifest’s own minimum-stability floor
(ComposerParseResult’s MinimumStability::Declared, #424/#1433/#1444).
§Examples
use deps_core::selection::{SelectionContext, StabilityFloor};
let ctx = SelectionContext::with_minimum_stability(StabilityFloor::Beta);
assert_eq!(ctx.minimum_stability(), Some(StabilityFloor::Beta));Sourcepub const fn minimum_stability(&self) -> Option<StabilityFloor>
pub const fn minimum_stability(&self) -> Option<StabilityFloor>
The manifest’s own stability floor, read by
crate::Registry::get_latest_matching/crate::Registry::select_latest_matching’s
one real implementor (PackagistRegistry) — every other registry ignores it via those
methods’ own defaults.
§Examples
use deps_core::selection::SelectionContext;
assert_eq!(SelectionContext::none().minimum_stability(), None);Trait Implementations§
Source§impl Clone for SelectionContext
impl Clone for SelectionContext
impl Copy for SelectionContext
Source§impl Debug for SelectionContext
impl Debug for SelectionContext
Source§impl Default for SelectionContext
impl Default for SelectionContext
impl Eq for SelectionContext
Source§impl PartialEq for SelectionContext
impl PartialEq for SelectionContext
impl StructuralPartialEq for SelectionContext
Auto Trait Implementations§
impl Freeze for SelectionContext
impl RefUnwindSafe for SelectionContext
impl Send for SelectionContext
impl Sync for SelectionContext
impl Unpin for SelectionContext
impl UnsafeUnpin for SelectionContext
impl UnwindSafe for SelectionContext
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key and return true if they are equal.