Skip to main content

SwiftFormatter

Struct SwiftFormatter 

pub struct SwiftFormatter;
Expand description

Formatter for Swift/SPM ecosystem LSP responses.

Trait Implementations§

§

impl DiagnosticMessages for SwiftFormatter

§

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

Message for yanked/deprecated versions in diagnostics.
§

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.
§

impl DiagnosticPolicy for SwiftFormatter

§

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
§

impl OsvNaming for SwiftFormatter

§

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

Raw dep.name(), NOT Self::normalize_package_name: that lowercases, and OSV’s SwiftURL matching is case-sensitive, so lowercasing would mangle mixed-case repos. Gated on the dependency’s source host being github.com: only that host is populated in OSV’s SwiftURL ecosystem, and dep.name()’s owner/repo shape alone cannot distinguish a GitHub coordinate from a same-shaped GitLab/self-hosted one — attributing a GitHub project’s advisories to an unrelated same-named repo elsewhere would be a false positive, not just a miss.

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
§

impl PackageNaming for SwiftFormatter

§

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

Accepts either is_valid_owner_repo’s owner/repo GitHub identifier shape (the same one package_url and the registry’s fetch-URL gate require), or a bare single-segment name with no /.

The bare-name case matters because name is not always a GitHub coordinate to begin with: deps_swift::parser’s .package(path:) handling sets it to the target directory’s basename (crates/deps-swift/src/parser.rs, the RE_PATH arm) for a DependencySource::Path dependency, which never contains a / and has no GitHub identity at all. validate_package_name only sees the bare string, not the dependency’s source, so it cannot tell a local package’s basename apart from a registry-style name typo’d without its owner/ prefix — per this trait’s “err on the side of accepting anything ambiguous” contract, the bare form is accepted rather than flagged, which also fixes a false “Invalid package name” on every local Swift package dependency (#402 critique C1). A multi-segment name (extra segment, disallowed character, or a ./.. segment) still fails the owner/repo check and is rejected, same as before.

§Errors

Returns InvalidPackageName when name is empty, is exactly ./.., or contains a / without matching the owner/repo shape.

§

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

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

impl PackageRendering for SwiftFormatter

§

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

Format version string for code action text edit.
§

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 suppress_package_url(&self, source: &DependencySource) -> bool

Whether hover should omit Self::package_url’s heading link for a dependency resolved against source. 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.
§

impl RequirementResolution for SwiftFormatter

§

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

Compiles requirement via semver::VersionReq, the same crate version_satisfies_requirement uses. None on parse failure is the fallible-parse shape of compile_requirement’s “undecidable” contract (see deps_core::lsp_helpers::RequirementResolution::compile_requirement) — Swift’s registry client follows GitHub tags pagination to build available, so a None here is purely “this requirement string doesn’t parse as semver,” not a gap in what pagination could return.

§

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
§

impl SourcePolicy for SwiftFormatter

Source§

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

Whether this ecosystem’s registry can resolve version data for source. Read more
Source§

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

Whether source’s content is exactly the default public registry’s — safe to treat as such for OSV vulnerability scanning, cache-key signature construction, and hover heading links. Read more

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.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
§

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