Skip to main content

CargoFormatter

Struct CargoFormatter 

Source
pub struct CargoFormatter;

Trait Implementations§

Source§

impl DiagnosticMessages for CargoFormatter

Source§

fn yanked_message(&self) -> &'static str

Message for yanked/deprecated versions in diagnostics.
Source§

fn yanked_label(&self) -> &'static str

Label for yanked versions in hover.
Source§

fn deprecated_message(&self) -> &'static str

Message for a package-level deprecation/abandonment diagnostic (issue #205). Read more
Source§

fn deprecated_label(&self) -> &'static str

Label for a deprecated package in hover.
Source§

impl DiagnosticPolicy for CargoFormatter

Source§

fn strict_semver_prerelease_exclusion(&self) -> bool

semver::VersionReq::matches excludes pre-releases unless requirement itself pins to the same X.Y.Z tuple with a pre-release tag — strict SemVer 2.0.0 semantics (#299).

Source§

fn supports_package_rename(&self) -> bool

Whether this ecosystem’s deprecation payload (crate::Deprecation::replacement) is safe to offer as a “Replace with X” rename quickfix. Read more
Source§

fn yanked_diagnostic_applies_to( &self, _dep: &dyn Dependency, _requirement: &VersionReq, ) -> bool

Whether the “requirement satisfiable only by a yanked version” diagnostic (crate::lsp_helpers::requirement_matches_only_yanked) should evaluate requirement at all for this ecosystem. Read more
Source§

impl OsvNaming for CargoFormatter

Source§

fn osv_package_name(&self, dep: &dyn Dependency) -> Option<String>

OSV.dev’s canonical spelling for dep’s package name, or None if this dependency cannot be mapped (e.g. a non-GitHub Swift package). Read more
Source§

fn osv_version_to_native(&self, version: &str) -> String

Converts a version string as it appears in an OSV advisory record (e.g. crate::osv::Advisory::fixed_versions) into this ecosystem’s own version namespace, as used in manifests and by the registry. Read more
Source§

fn osv_version(&self, version: &str) -> String

Rewrites a native-ecosystem version string into the spelling OSV.dev’s SEMVER range matching expects. Read more
Source§

impl PackageNaming for CargoFormatter

Source§

fn validate_package_name(&self, name: &str) -> Result<(), InvalidPackageName>

Validates a crate name against crates.io’s naming rules.

crates.io accepts only non-empty names starting with an ASCII letter or _, followed by ASCII alphanumeric characters plus -/_, up to MAX_NAME_LENGTH characters. The base charset+non-empty check reuses sparse::is_safe_crate_name_charset — the same predicate sparse::is_safe_crate_name builds on for the sparse-index URL-injection gate — rather than duplicating it. This method deliberately calls the charset-only variant, not is_safe_crate_name itself: that function also bundles in a 128-byte URL-safety cap unrelated to crates.io’s real naming rules, which would make a charset-valid name over 128 bytes report the wrong “invalid characters” reason instead of reaching this method’s own MAX_NAME_LENGTH check below. The leading-character rule and MAX_NAME_LENGTH are layered on top here because they are specific to this diagnostic-accuracy question, not to URL-splicing safety (see MAX_NAME_LENGTH’s doc for why the two length caps intentionally differ). A name that fails this can never resolve on crates.io, so this override lets the “Invalid package name” diagnostic (deps-core’s formatter.validate_package_name gate) surface the accurate reason instead of the generic “Unknown package” a registry-side lookup failure produces (#382).

The charset check (via sparse::is_safe_crate_name_charset) and the leading-character check both run before the length check, so a name that is both non-ASCII and longer than MAX_NAME_LENGTH chars (e.g. a repeated CJK name) reports the charset violation rather than a misleading “too long” — the length in bytes of such a name can exceed the limit even when its character count does not, and vice versa, so the length check counts chars(), not bytes.

§Errors

Returns InvalidPackageName if name is empty, starts with a digit or -, contains a character outside [A-Za-z0-9_-] (for example a non-ASCII name like "日本語"), or exceeds MAX_NAME_LENGTH characters.

Source§

fn normalize_package_name(&self, name: &PackageName) -> String

Normalize package name for lookup (default: identity).
Source§

impl PackageRendering for CargoFormatter

Source§

fn suppress_package_url(&self, source: &DependencySource) -> bool

Suppresses the hover heading’s crates.io link for any source other than plain DependencySource::Registry or a verified crates.io mirror (spec FR-014, F2) — a genuinely different AlternateRegistry resolves against a different index entirely, so Self::package_url’s crates.io link would point at an unrelated (or simply nonexistent) public crate once live version data from the real registry renders beside it. A mirror’s crates.io link stays correct: it is crates.io content, just fetched elsewhere.

Source§

fn format_version_for_text_edit(&self, version: &ConcreteVersion) -> String

Format version string for code action text edit.
Source§

fn package_url(&self, name: &PackageName) -> String

Get package URL for hover markdown.
Source§

fn format_version_replacing( &self, version: &ConcreteVersion, _current: &str, ) -> String

Format version as a replacement for the existing requirement text current, preserving current’s operator/pin style where the ecosystem supports more than one. Read more
Source§

fn format_version_replacing_for( &self, _dep: &dyn Dependency, version: &ConcreteVersion, current: &str, ) -> String

Like format_version_replacing, but also carries the dependency identity version/current apply to. Read more
Source§

fn is_position_on_dependency( &self, dep: &dyn Dependency, position: Position, ) -> bool

Detect if cursor position is on a dependency for code actions.
Source§

impl RequirementResolution for CargoFormatter

Source§

fn compile_requirement( &self, requirement: &VersionReq, ) -> Option<Box<dyn RequirementMatcher>>

Compiles requirement via semver::VersionReq, the same crate deps-cargo’s registry uses for matching — precise range semantics (^, ~, comparator lists), unlike the default version_satisfies_requirement heuristic this method deliberately does not reuse (see that method’s docs).

Source§

fn version_satisfies_requirement( &self, version: &ConcreteVersion, requirement: &str, ) -> bool

Check if a version satisfies a requirement string. Read more
Source§

fn is_requirement_up_to_date( &self, requirement: &VersionReq, latest: &ConcreteVersion, ) -> bool

Whether an unresolved dependency (no lock-file version) should be reported as up to date against latest, given its declared requirement. Read more
Source§

fn requirement_is_unresolved(&self, _requirement: &VersionReq) -> bool

Whether requirement could not be resolved to a concrete version constraint (e.g. an unexpanded property/variable placeholder rather than a real version or range). Read more
Source§

fn requirement_status( &self, requirement: &VersionReq, latest: &ConcreteVersion, ) -> RequirementStatus

Tri-state variant of is_requirement_up_to_date that distinguishes “confirmed up to date” from “could not be resolved, so we don’t know.” Read more
Source§

fn requirement_status_for( &self, dep: &dyn Dependency, requirement: &VersionReq, latest: &ConcreteVersion, ) -> RequirementStatus

Like requirement_status, but also hands the ecosystem the dependency itself — for an ecosystem whose requirement text alone is ambiguous between two shapes with different resolution rules, and which already computed the disambiguating classification once, at parse time, onto the dependency (deps-gitlab-ci’s PinStyle, #466 review M-c: a bare "1.2" is Partial under its component: pin grammar but Branch under its simpler project: ref grammar — indistinguishable from the text alone). Read more
Source§

fn requirement_is_undecidable_given_available( &self, _requirement: &VersionReq, _available: &[ConcreteVersion], ) -> bool

Whether this ecosystem’s registry can silently omit a published version from available in a way indistinguishable from “never published” — and, if so, whether requirement names a version-space region that specific omission could explain, given the versions actually observed in available. Read more
Source§

fn manifest_requirement_is_resolved_version(&self, dep: &dyn Dependency) -> bool

Whether dep’s manifest version-requirement line is itself the exact version already selected — never a range. Read more
Source§

impl SourcePolicy for CargoFormatter

Source§

fn can_resolve_source(&self, source: &DependencySource) -> bool

Extends the default (crates.io-only) resolvability to a resolved DependencySource::AlternateRegistry too — CargoRegistry (the value behind CargoEcosystem::registry()) routes that source to the alternate index’s own crate::sparse::SparseIndexClient, so it is exactly as resolvable as a plain DependencySource::Registry dependency, just against a different index (spec FR-016).

Source§

fn source_is_public_registry_content(&self, source: &DependencySource) -> bool

A verified crates.io mirror (AlternateRegistry { mirrors_crates_io: true, .. }, spec plan-1b §1.3, F1/F1b) counts as public-registry content alongside plain DependencySource::Registry — Cargo verifies per-version checksum equality against crates.io for a [source.crates-io] replace-with mirror, so its content is exactly as trustworthy as crates.io’s own for OSV scanning and hover-link purposes, even though the fetch itself goes to the mirror’s index, not to crates.io.

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> EcosystemFormatter for T

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

§

impl<T> PolicyExt for T
where T: ?Sized,

§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Sized + Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns [Action::Follow] only if self and other return Action::Follow. Read more
§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Sized + Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns [Action::Follow] if either self or other returns Action::Follow. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a [WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a [WithDispatch] wrapper. Read more