• zalgotext@sh.itjust.works
    link
    fedilink
    arrow-up
    1
    ·
    edit-2
    8 months ago

    Say you have a custom lint you want to use but it only will ever be used for that specific project. You can’t just put the lint code in a subdirectory. It has to go in a separate repo.

    You can run locally defined hooks with pre-commit, just define them in the repo: local section of the .pre-commit-config.yaml, and have it run a bash/python/whatever script or something that invokes your custom linting, wherever it lives in your file structure.

    It will install pylint fine, but if your project does e.g. import yaml, it’s not going to set up a venv and install pyyaml for you.

    Yeah I misspoke/misremembered there. For Python based stuff, it uses the currently active virtualenv or your global python install, so it relies on you installing your own dependencies. Which isn’t really that big a deal imo, because you need to install those dependencies to run/debug/test locally anyways.

    • FizzyOrange@programming.dev
      link
      fedilink
      arrow-up
      1
      ·
      8 months ago

      You can run locally defined hooks with pre-commit, just define them in the repo: local section of the .pre-commit-config.yaml

      Sounds like you’re just googling it rather than actually speaking from experience. Suppose I have written a Python lint and it’s in my ci/lints/foo folder. How do I tell pre-commit that? (Hint: you can’t)

      Which isn’t really that big a deal imo

      For small Python projects, maybe not. The project I’m working on has multiple sub-projects and those each have their own venvs, pyproject.tomls, etc.

      • zalgotext@sh.itjust.works
        link
        fedilink
        arrow-up
        1
        ·
        8 months ago

        Sounds like you’re just googling it rather than actually speaking from experience.

        Like I said, I’ve used pre-commit for multiple years now. If you can run your lints from a command line, you can configure pre-commit to run them.

        The project I’m working on has multiple sub-projects and those each have their own venvs, pyproject.tomls, etc.

        Monorepos definitely make things a bit trickier, but again, you absolutely can write a local pre-commit hook that runs a bash command or script that 1.) activates the necessary venv and 2.) runs the lint command. I know this because I’ve done it, multiple times.