Coverage for lintro / tools / core / install_strategies / cargo_strategy.py: 95%
21 statements
« prev ^ index » next coverage.py v7.13.0, created at 2026-04-03 18:53 +0000
« prev ^ index » next coverage.py v7.13.0, created at 2026-04-03 18:53 +0000
1"""Cargo install strategy."""
3from __future__ import annotations
5from lintro.enums.install_context import PackageManager
6from lintro.tools.core.install_strategies.base import InstallStrategy
7from lintro.tools.core.install_strategies.environment import InstallEnvironment
8from lintro.tools.core.install_strategies.registry import register_strategy
11class CargoStrategy(InstallStrategy):
12 """Install strategy for Rust crates installed via cargo."""
14 def install_type(self) -> str:
15 """Return ``'cargo'``."""
16 return "cargo"
18 def is_available(self, env: InstallEnvironment) -> bool:
19 """Available if cargo is on PATH."""
20 return env.has(PackageManager.CARGO)
22 def check_prerequisites(
23 self,
24 env: InstallEnvironment,
25 _tool_name: str,
26 ) -> str | None:
27 """Return skip reason if cargo is not available.
29 Args:
30 env: The current install environment.
31 _tool_name: Canonical tool name (unused).
33 Returns:
34 Skip reason or None.
35 """
36 if not env.has(PackageManager.CARGO):
37 return "cargo not available (install Rust first)"
38 return None
40 def install_hint(
41 self,
42 _env: InstallEnvironment,
43 tool_name: str,
44 _tool_version: str,
45 install_package: str | None,
46 _install_component: str | None,
47 ) -> str:
48 """Generate cargo install hint.
50 Args:
51 _env: The current install environment.
52 tool_name: Canonical tool name.
53 _tool_version: Expected version.
54 install_package: Package name override.
55 _install_component: Unused for cargo.
57 Returns:
58 Shell command string.
59 """
60 pkg = install_package or tool_name
61 return f"cargo install {pkg}"
63 def upgrade_hint(
64 self,
65 _env: InstallEnvironment,
66 tool_name: str,
67 _tool_version: str,
68 install_package: str | None,
69 _install_component: str | None,
70 ) -> str:
71 """Generate cargo upgrade hint with --force flag.
73 Args:
74 _env: The current install environment.
75 tool_name: Canonical tool name.
76 _tool_version: Expected version.
77 install_package: Package name override.
78 _install_component: Unused for cargo.
80 Returns:
81 Shell command string.
82 """
83 pkg = install_package or tool_name
84 return f"cargo install --force {pkg}"
87register_strategy(CargoStrategy())