Skip to main content

GitlabCiFormatter

Struct GitlabCiFormatter 

Source
pub struct GitlabCiFormatter { /* private fields */ }
Expand description

Formatter for GitLab CI ecosystem LSP responses.

Implementations§

Source§

impl GitlabCiFormatter

Source

pub fn new( routes: Arc<DashMap<String, GitlabRoute>>, tag_index: Arc<DashMap<PackageName, Arc<TagIndex>>>, ) -> Self

Creates a new formatter over the given shared registry handles.

Trait Implementations§

Source§

impl DiagnosticMessages for GitlabCiFormatter

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 GitlabCiFormatter

Source§

fn strict_semver_prerelease_exclusion(&self) -> bool

Whether this ecosystem’s requirement/version syntax follows strict SemVer 2.0.0 pre-release semantics: a pre-release version (X.Y.Z-pre) is excluded from matching requirement unless requirement itself pins to the same X.Y.Z tuple with a pre-release tag — the rule Cargo’s semver crate and npm’s node-semver both implement, and that compile_requirement’s matcher inherits from its underlying comparator. Read more
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 GitlabCiFormatter

Source§

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

Unprefixed — mirrors deps-github-actions’s identical rationale, kept for cross-ecosystem consistency even though it is largely unreachable here (a git-tag pin has no OSV coordinate by name).

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§

impl PackageNaming for GitlabCiFormatter

Source§

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

Accepts both the bare (org/proj[/comp]) and host-qualified (host/org/proj[/comp]) coordinate shapes — is_valid_gitlab_coordinate is a syntactic gate only, not a semantic classifier (see that function’s doc).

Source§

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

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

impl PackageRendering for GitlabCiFormatter

Source§

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

Preserves current’s v-prefix style for a normal (Sha/Tag/Branch/unpinned) update; Partial/Latest pins are returned unchanged — bumping 1.2 to 1.3.0 changes the pin’s kind, not just its value, so the shared no-op guard correctly suppresses the code action instead of writing a value-changing-but-kind-wrong edit.

Source§

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

component: includes only (spec §8.2/NFR-004 carve-out) — a component’s name ends in the component segment, so https://{name} is not the project’s URL; the real project link is spliced into the hover body instead (crate::ecosystem’s generate_hover override). A project: include’s name is exactly {host}/{project_path}, so its standard heading link is correct and unsuppressed.

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 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 GitlabCiFormatter

Source§

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

Whether requirement’s pin — classified purely from its own text, mirroring crate::component::classify_component_pin_style’s shape-only rule — could not be resolved to a concrete version constraint: a SHA or branch-shaped ref.

Text-only, so ambiguous for a shape shared between grammars (#466 review M-c) — a caller that already has the dependency in hand should call Self::requirement_status_for instead, which consults its authoritative crate::types::PinStyle rather than re-guessing from text.

Source§

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

~latest is always up to date (it dynamically tracks the newest release, like an existence wildcard). A Partial pin (1.2, 1) is up to date while latest falls within its GitLab tilde-range semantics. A Tag pin is compared by normalized exact-string equality. A SHA/branch pin returns true unconditionally — never a false “outdated” (the diagnostic itself is separately gated by Self::requirement_is_unresolved; this is the boolean fallback for a caller that does not consult that first, e.g. the “Update N outdated” code lens).

Text-only, so ambiguous for a shape shared between grammars — see Self::requirement_status_for’s doc for the dependency-aware alternative a caller holding the dependency should prefer.

Source§

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

#466 review M-c: consults dep’s own parse-time PinStyle (authoritative — set once, at parse time, from the correct project-vs-component grammar) instead of re-classifying requirement’s raw text, which is ambiguous between the two: "1.2" is PinStyle::Partial under the component: pin grammar (crate::component::classify_component_pin_style) but PinStyle::Branch under the simpler project: ref grammar (crate::parser’s classify_project_pin) — indistinguishable from the text alone. This is the same source of truth PackageRendering::format_version_replacing_for already consults, so the two can no longer disagree about the same dependency (previously: the outdated diagnostic text-reclassified a project: ref: "1.2" as Partial and silently suppressed itself, while the code action offered by format_version_replacing_for’s correct Branch classification still treated it as a normal, bumpable pin).

Source§

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

Check if a version satisfies a requirement string. 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 compile_requirement( &self, _requirement: &VersionReq, ) -> Option<Box<dyn RequirementMatcher>>

Compiles requirement into a matcher for precise membership testing against a list of candidate version strings, or None when this ecosystem cannot parse or cannot model this requirement form — in which case no unsatisfiable-requirement diagnostic is produced for it. 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 GitlabCiFormatter

Source§

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

Only a source this crate’s registry actually routes — mirrors every other per-source-routing ecosystem’s override (deps-npm, deps-pypi, deps-go, deps-nuget). Pure function of source; must never read live configuration (spec §4.5 — a live-reading predicate here would replace the correct FR-012 informational diagnostic with a false “Unknown package” the moment a config change flips it, while the background fetch it would then imply has not actually run).

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.

§

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