pre-commit met Black, in combinatie met local repo

Pagina: 1
Acties:

Vraag


Acties:
  • 0 Henk 'm!

  • UPPERKEES
  • Registratie: Maart 2007
  • Niet online
Ik gebruik een pre-commit hook voor Python code, daar gebruik ik Black voor. Maar de onderstaande config pakt niet de .py en .py.j2 files. De j2 zijn Jinja2 files die ik soms in Ansible gebruik.

Gebruik je ook pre-commit? Als local repo, dus niet via een GitHub URL. If so, kan je dan je config delen? Dan zie ik wel wat ik fout doe :)

code:
1
2
3
4
5
6
7
8
9
repos:
- repo: local
  hooks:
  - id: black
    name: Black
    entry: black --diff
    language: system
    types: [file, python]
    files: \.(py.j2|py)$

Alle reacties


Acties:
  • +2 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Die vragen die er staan wanneer je hier een nieuw topic opent staan er niet voor niets.
Mijn vraag
...

Relevante software en hardware die ik gebruik
...

Wat ik al gevonden of geprobeerd heb
...
Dus het vriendelijke verzoek je topicstart even aan te vullen :)

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • UPPERKEES
  • Registratie: Maart 2007
  • Niet online
Ik heb heel veel combinatie gebruikt die allemaal niet werken. Dus daarom dacht ik, ik bespaar een verslag van wat niet werkt en vraag of iemand een werkende config heeft.

Dit is bijvoorbeeld eentje:
code:
1
2
3
4
5
6
7
-   repo: local
    hooks:
    -   id: black
        name: black
        entry: black --check
        language: system
        types: [python]


Maar zo zijn er nog ontzettend veel combinatie mogelijk, wat wel makkelijk werkt voor YAML, werkt niet voor Python. Of voor Ansible.

code:
1
2
3
4
5
6
7
8
9
10
- id: ansible-lint
    name: ansible-lint
    entry: ansible-lint --exclude=.pre-commit-config.yaml --exclude=molecule/default/molecule.yml --exclude=.yamllint.yml
    language: system
    types: [file, yaml]
  - id: yamllint
    name: yamllint
    entry: yamllint
    language: system
    types: [file, yaml]

Acties:
  • 0 Henk 'm!

  • Renzmeister
  • Registratie: Januari 2011
  • Laatst online: 12:50
Ik weet niet zeker of ik je hier mee verder help, maar als ik in de repo van mijn werk kijk, zie ik dat de regex van files: steeds begint met een ^ en eindigt met $. Dus waarschijnlijk is het iets van:

code:
1
files: ^(.*\.py\.j2|.*\.py)$


Maar dit schud ik nu even uit de losse pols.

Acties:
  • 0 Henk 'm!

  • UPPERKEES
  • Registratie: Maart 2007
  • Niet online
Probleem gevonden, ik moet niet `--diff` gebruiken, maar `--check` als switch voor Black.

Acties:
  • 0 Henk 'm!

  • Vihaio
  • Registratie: November 2006
  • Laatst online: 01-10 00:56
Renzmeister schreef op vrijdag 19 augustus 2022 @ 17:44:
Ik weet niet zeker of ik je hier mee verder help, maar als ik in de repo van mijn werk kijk, zie ik dat de regex van files: steeds begint met een ^ en eindigt met $. Dus waarschijnlijk is het iets van:

code:
1
files: ^(.*\.py\.j2|.*\.py)$


Maar dit schud ik nu even uit de losse pols.
Dat doet hetzelfde als de regex uit de startpost.


code:
1
\.py$

Pakt alle files die eindigen met .py

code:
1
^.*\.py$

Pakt alle files die beginnen met 0 tot n willekeurige karakters en eindigen met .py

Acties:
  • 0 Henk 'm!

  • Morrar
  • Registratie: Juni 2002
  • Laatst online: 17:01
UPPERKEES schreef op zaterdag 20 augustus 2022 @ 07:41:
Probleem gevonden, ik moet niet `--diff` gebruiken, maar `--check` als switch voor Black.
Je zou die check er ook af kunnen halen; dan formatteert black de lokale bestanden meteen. Als er iets veranderd wordt door black, kun je meteen stagen en weer comitten.

Verder hebben wij hier wel discussies gehad over black uit lokaal repo vs de standaard hook die black beschikbaar stelt. Voordeel van lokaal is dat je dezelfde versie gebruikt als dat je black handmatig aftrapt. Nadeel is dat je wel afhankelijk bent van of black wel geïnstalleerd staat in de omgeving.

[ Voor 28% gewijzigd door Morrar op 23-08-2022 17:31 ]


Acties:
  • +1 Henk 'm!

  • UPPERKEES
  • Registratie: Maart 2007
  • Niet online
Morrar schreef op dinsdag 23 augustus 2022 @ 17:29:
[...]


Je zou die check er ook af kunnen halen; dan formatteert black de lokale bestanden meteen. Als er iets veranderd wordt door black, kun je meteen stagen en weer comitten.

Verder hebben wij hier wel discussies gehad over black uit lokaal repo vs de standaard hook die black beschikbaar stelt. Voordeel van lokaal is dat je dezelfde versie gebruikt als dat je black handmatig aftrapt. Nadeel is dat je wel afhankelijk bent van of black wel geïnstalleerd staat in de omgeving.
Lijkt me niet echt handig om code net voordat je commit automatisch aan te passen. Black gaat vaak goed, maar ik laat de boel liever falen en dat de dev zelf even gaat kijken wat reformatted moet worden of niet.

Config management zorgt dat Black installed is, net zoals de wrappers voor het clone van repo's waarbij pre-commit gelijk ook installed is als hook. Ik prefereer local packages, dan weet je zeker dat alles compatibel is en getest. Dat is het mooie van Linux distros, het neemt veel QA werk uit handen :)

Acties:
  • 0 Henk 'm!

  • Morrar
  • Registratie: Juni 2002
  • Laatst online: 17:01
Tja, wij volgen black eigenlijk blindeling omdat iedereen dan op hetzelfde uitkomt; anders krijg he weer discussies over stijl die meestal hetzelfde verlopen als discussies over smaak... Iets met daar valt niet over te twisten ;) Als je echt ontevreden bent kun je altijd nog commentaren gebruiken voor bepaalde secties / regels:

Python:
1
2
3
4
5
6
#fmt: on
...
#fmt: off

#fmt: skip
...


Wij gebruiken inderdaad ook lokale versies van de packages, die we installeren via cookiecutter templates. Deze templates zetten ook meteen de package structuur, python omgeving, git en pre-commit klaar. Voorbeeldje: https://github.com/LFKoning/cookiecutter_package
Pagina: 1