Source code for rs_files_templates.commands

"""Canonical commands shared by generated repository files and documentation."""

from __future__ import annotations

from typing import Any

PROJECT_MANAGER_PROFILES: dict[str, dict[str, Any]] = {
    "renv": {
        "setup": (
            'Rscript -e \'if (!requireNamespace("renv", quietly = TRUE)) '
            'install.packages("renv"); if (file.exists("renv.lock")) '
            "renv::restore() else renv::init()'"
        ),
        "setup_commands": ("R -e 'renv::restore()'",),
        "setup_group": "Rscript -e 'renv::install()'",
        "add": "Rscript -e 'renv::install(\"<package>\")'",
        "run_prefix": "",
        "lock": "Rscript -e 'renv::snapshot()'",
        "lockfile": "renv.lock",
        "setup_creates_lock": True,
    },
    "rix": {
        "setup": "Rscript environment.R && nix-shell",
        "setup_commands": ("Rscript environment.R", "nix-shell"),
        "setup_group": "Rscript environment.R && nix-shell",
        "add": "Add the package to environment.R, then run Rscript environment.R.",
        "run_prefix": "",
        "lock": "Rscript environment.R",
        "lockfile": "default.nix",
        "setup_creates_lock": True,
    },
    "uv": {
        "setup": "uv sync --all-extras",
        "setup_commands": ("uv sync",),
        "setup_group": "uv sync --extra {group}",
        "add": "uv add <package>",
        "run_prefix": "uv run ",
        "lock": "uv lock",
        "lockfile": "uv.lock",
        "setup_creates_lock": True,
    },
    "poetry": {
        "setup": "poetry install --all-extras",
        "setup_commands": ("poetry install",),
        "setup_group": 'poetry install --extras "{group}"',
        "add": "poetry add <package>",
        "run_prefix": "poetry run ",
        "lock": "poetry lock",
        "lockfile": "poetry.lock",
        "setup_creates_lock": True,
    },
    "pdm": {
        "setup": "pdm install -G :all",
        "setup_commands": ("pdm install",),
        "setup_group": "pdm install -G {group}",
        "add": "pdm add <package>",
        "run_prefix": "pdm run ",
        "lock": "pdm lock",
        "lockfile": "pdm.lock",
        "setup_creates_lock": True,
    },
    "hatch": {
        "setup": "hatch env create",
        "setup_commands": ("hatch env create",),
        "setup_group": "hatch env create",
        "add": "Add the dependency to pyproject.toml, then run hatch env prune.",
        "run_prefix": "hatch run ",
        "lock": "hatch env lock default",
        "lockfile": "pylock.toml",
        "setup_creates_lock": True,
    },
    "pixi": {
        "setup": "pixi install",
        "setup_commands": ("pixi install",),
        "setup_group": "pixi install",
        "add": "pixi add --pypi <package>",
        "run_prefix": "pixi run ",
        "lock": "pixi lock",
        "lockfile": "pixi.lock",
        "setup_creates_lock": True,
    },
    "pip": {
        "setup": 'python -m pip install -e ".[all]"',
        "setup_commands": (
            "python -m venv .venv",
            ".venv/bin/python -m pip install -e .",
        ),
        "setup_group": 'python -m pip install -e ".[{group}]"',
        "add": "python -m pip install <package>",
        "run_prefix": "",
        "lock": "python -m pip lock -o pylock.toml -e .",
        "lockfile": "pylock.toml",
        "setup_creates_lock": False,
    },
    "cargo": {
        "setup": "cargo build",
        "setup_commands": ("cargo build",),
        "add": "cargo add <crate>",
        "run_prefix": "",
    },
    "npm": {
        "setup": "npm install",
        "setup_commands": ("npm install",),
        "add": "npm install <package>",
        "run_prefix": "npm run ",
    },
    "pnpm": {
        "setup": "pnpm install",
        "setup_commands": ("pnpm install",),
        "add": "pnpm add <package>",
        "run_prefix": "pnpm ",
    },
    "yarn": {
        "setup": "yarn install",
        "setup_commands": ("yarn install",),
        "add": "yarn add <package>",
        "run_prefix": "yarn ",
    },
    "maven": {
        "setup": "mvn verify",
        "setup_commands": ("mvn verify",),
        "add": "",
        "run_prefix": "",
    },
    "gradle": {
        "setup": "./gradlew build",
        "setup_commands": ("./gradlew build",),
        "add": "",
        "run_prefix": "",
    },
    "cmake": {
        "setup": "cmake -S . -B build",
        "setup_commands": ("cmake -S . -B build",),
        "add": "",
        "run_prefix": "",
    },
}

FORMATTER_COMMANDS = {
    "ruff": "ruff format --check .",
    "black": "black --check .",
    "styler": "Rscript -e 'styler::style_pkg(dry = \"fail\")'",
    "prettier": "prettier --check .",
    "rustfmt": "cargo fmt --check",
}

LINTER_COMMANDS = {
    "ruff": "ruff check .",
    "flake8": "flake8",
    "pylint": "pylint src",
    "lintr": (
        "Rscript -e 'lints <- lintr::lint_package(); print(lints); "
        "quit(status = length(lints) > 0L)'"
    ),
    "eslint": "eslint .",
    "clippy": "cargo clippy -- -D warnings",
}

TYPE_CHECKER_COMMANDS = {
    "mypy": "mypy src",
    "pyright": "pyright",
    "basedpyright": "basedpyright",
    "pyre": "pyre check",
    "tsc": "tsc --noEmit",
    "rustc": "cargo check",
    "Flow": "flow check",
}

TEST_COMMANDS = {
    "pytest": "python -m pytest",
    "unittest": "python -m unittest",
    "testthat": "Rscript -e 'testthat::test_local()'",
    "cargo test": "cargo test",
    "Vitest": "vitest run",
    "Jest": "jest",
    "bats-core": "bats test",
}


[docs] def project_manager_profile(name: str) -> dict[str, Any]: """Return a copy of one canonical project-manager command profile.""" return dict(PROJECT_MANAGER_PROFILES.get(str(name), {}))
[docs] def python_installation_command(manager: str, package: str, *, published: bool) -> str: """Return installation instructions for the selected Python environment manager.""" if published: commands = { "uv": "uv pip install", "poetry": "poetry add", "pdm": "pdm add", "pixi": "pixi add --pypi", "hatch": "hatch run python -m pip install", } return f"{commands.get(manager, 'python -m pip install')} {package}" profile = PROJECT_MANAGER_PROFILES.get(manager) if profile: return "\n".join(profile["setup_commands"]) return "python -m pip install ."