I think we can reuse the logic and flow that is already there for tool installation instead of introducing extra helpers. The new requirement of semgrep-rules-manager for example can be handled in verify_requirements() or maybe even better in uaudit_install_dependencies() directly:
```python
def uaudit_install_dependencies():
dependencies = {}
for tool in static_analysis_tools: dependencies[tool.name] = tool.install_cmd()
for tool, cmd_args in dependencies.items():
if is_program_installed(tool): debug(f'{tool} is already installed in the system')
else: install_tool(cmd_args, tool)
```
Then we would only need to prompt for the extra sources via ask_for_custom_semgrep_rules() -> download_custom_semgrep_rules() and remove the ensure_installed_semgrep_rules_manager() method.
I think we can reuse the logic and flow that is already there for tool installation instead of introducing extra helpers. The new requirement of semgrep- rules-manager for example can be handled in verify_ requirements( ) or maybe even better in uaudit_ install_ dependencies( ) directly:
```python install_ dependencies( ): analysis_ tools:
dependencies[ tool.name] = tool.install_cmd()
def uaudit_
dependencies = {}
for tool in static_
+ dependencies[ "semgrep- rules-manager" ] = ["snap", "install", "semgrep- rules-manager" ]
for tool, cmd_args in dependencies. items() : installed( tool):
debug( f'{tool} is already installed in the system')
install_ tool(cmd_ args, tool)
if is_program_
else:
```
Then we would only need to prompt for the extra sources via ask_for_ custom_ semgrep_ rules() -> download_ custom_ semgrep_ rules() and remove the ensure_ installed_ semgrep_ rules_manager( ) method.