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

1"""Cargo install strategy.""" 

2 

3from __future__ import annotations 

4 

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 

9 

10 

11class CargoStrategy(InstallStrategy): 

12 """Install strategy for Rust crates installed via cargo.""" 

13 

14 def install_type(self) -> str: 

15 """Return ``'cargo'``.""" 

16 return "cargo" 

17 

18 def is_available(self, env: InstallEnvironment) -> bool: 

19 """Available if cargo is on PATH.""" 

20 return env.has(PackageManager.CARGO) 

21 

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. 

28 

29 Args: 

30 env: The current install environment. 

31 _tool_name: Canonical tool name (unused). 

32 

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 

39 

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. 

49 

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. 

56 

57 Returns: 

58 Shell command string. 

59 """ 

60 pkg = install_package or tool_name 

61 return f"cargo install {pkg}" 

62 

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. 

72 

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. 

79 

80 Returns: 

81 Shell command string. 

82 """ 

83 pkg = install_package or tool_name 

84 return f"cargo install --force {pkg}" 

85 

86 

87register_strategy(CargoStrategy())