2025-02-09 21:33:11 +01:00
|
|
|
from __future__ import annotations
|
|
|
|
|
2025-02-09 21:36:17 +01:00
|
|
|
from typing import ContextManager
|
|
|
|
from typing import Protocol
|
2025-02-09 21:10:22 +01:00
|
|
|
from typing import Sequence
|
|
|
|
|
|
|
|
from pre_commit.languages import conda
|
2025-02-09 21:22:33 +01:00
|
|
|
from pre_commit.languages import coursier
|
2025-02-09 21:30:55 +01:00
|
|
|
from pre_commit.languages import dart
|
2025-02-09 21:10:22 +01:00
|
|
|
from pre_commit.languages import docker
|
|
|
|
from pre_commit.languages import docker_image
|
2025-02-09 21:22:33 +01:00
|
|
|
from pre_commit.languages import dotnet
|
2025-02-09 21:10:22 +01:00
|
|
|
from pre_commit.languages import fail
|
|
|
|
from pre_commit.languages import golang
|
2025-02-09 21:32:33 +01:00
|
|
|
from pre_commit.languages import lua
|
2025-02-09 21:10:22 +01:00
|
|
|
from pre_commit.languages import node
|
|
|
|
from pre_commit.languages import perl
|
|
|
|
from pre_commit.languages import pygrep
|
|
|
|
from pre_commit.languages import python
|
2025-02-09 21:25:27 +01:00
|
|
|
from pre_commit.languages import r
|
2025-02-09 21:10:22 +01:00
|
|
|
from pre_commit.languages import ruby
|
|
|
|
from pre_commit.languages import rust
|
|
|
|
from pre_commit.languages import script
|
|
|
|
from pre_commit.languages import swift
|
|
|
|
from pre_commit.languages import system
|
|
|
|
from pre_commit.prefix import Prefix
|
|
|
|
|
|
|
|
|
2025-02-09 21:36:17 +01:00
|
|
|
class Language(Protocol):
|
2025-02-09 21:10:22 +01:00
|
|
|
# Use `None` for no installation / environment
|
2025-02-09 21:36:17 +01:00
|
|
|
@property
|
|
|
|
def ENVIRONMENT_DIR(self) -> str | None: ...
|
2025-02-09 21:10:22 +01:00
|
|
|
# return a value to replace `'default` for `language_version`
|
2025-02-09 21:36:17 +01:00
|
|
|
def get_default_version(self) -> str: ...
|
|
|
|
|
2025-02-09 21:10:22 +01:00
|
|
|
# return whether the environment is healthy (or should be rebuilt)
|
2025-02-09 21:36:17 +01:00
|
|
|
def health_check(
|
|
|
|
self,
|
|
|
|
prefix: Prefix,
|
|
|
|
language_version: str,
|
|
|
|
) -> str | None:
|
|
|
|
...
|
|
|
|
|
2025-02-09 21:10:22 +01:00
|
|
|
# install a repository for the given language and language_version
|
2025-02-09 21:36:17 +01:00
|
|
|
def install_environment(
|
|
|
|
self,
|
|
|
|
prefix: Prefix,
|
|
|
|
version: str,
|
|
|
|
additional_dependencies: Sequence[str],
|
|
|
|
) -> None:
|
|
|
|
...
|
|
|
|
|
|
|
|
# modify the environment for hook execution
|
|
|
|
def in_env(
|
|
|
|
self,
|
|
|
|
prefix: Prefix,
|
|
|
|
version: str,
|
|
|
|
) -> ContextManager[None]:
|
|
|
|
...
|
|
|
|
|
2025-02-09 21:10:22 +01:00
|
|
|
# execute a hook and return the exit code and output
|
2025-02-09 21:36:17 +01:00
|
|
|
def run_hook(
|
|
|
|
self,
|
|
|
|
prefix: Prefix,
|
|
|
|
entry: str,
|
|
|
|
args: Sequence[str],
|
|
|
|
file_args: Sequence[str],
|
|
|
|
*,
|
|
|
|
is_local: bool,
|
|
|
|
require_serial: bool,
|
|
|
|
color: bool,
|
|
|
|
) -> tuple[int, bytes]:
|
|
|
|
...
|
2025-02-09 21:10:22 +01:00
|
|
|
|
|
|
|
|
2025-02-09 21:36:17 +01:00
|
|
|
languages: dict[str, Language] = {
|
|
|
|
'conda': conda,
|
|
|
|
'coursier': coursier,
|
|
|
|
'dart': dart,
|
|
|
|
'docker': docker,
|
|
|
|
'docker_image': docker_image,
|
|
|
|
'dotnet': dotnet,
|
|
|
|
'fail': fail,
|
|
|
|
'golang': golang,
|
|
|
|
'lua': lua,
|
|
|
|
'node': node,
|
|
|
|
'perl': perl,
|
|
|
|
'pygrep': pygrep,
|
|
|
|
'python': python,
|
|
|
|
'r': r,
|
|
|
|
'ruby': ruby,
|
|
|
|
'rust': rust,
|
|
|
|
'script': script,
|
|
|
|
'swift': swift,
|
|
|
|
'system': system,
|
|
|
|
# TODO: fully deprecate `python_venv`
|
|
|
|
'python_venv': python,
|
2025-02-09 21:10:22 +01:00
|
|
|
}
|
|
|
|
all_languages = sorted(languages)
|