(Acest articol a fost publicat pentru prima dată pe pacha.dev/blogși a contribuit cu drag la R-Bloggers). (Puteți raporta problema despre conținutul de pe această pagină aici)
Doriți să vă împărtășiți conținutul pe R-Bloggers? Faceți clic aici dacă aveți un blog sau aici dacă nu.
Dacă această postare vă este utilă, vă cer o donație minimă pentru a -mi cumpăra o cafea. Acesta va fi folosit pentru a continua eforturile mele open source. Explicația completă este aici: un mesaj personal de la un contribuabil open source.
Puteți să -mi trimiteți întrebări pentru blog folosind acest formular și să vă abonați pentru a primi un e -mail atunci când există o nouă postare.
Încerc să contribuie la pachetul CPP11 de aproximativ un an. Mi s -a părut util pentru proiectul meu de doctorat și am vrut să ajut cu întreținerea sa. Cu toate acestea, o provocare majoră pe care am găsit -o a contribuit a fost stilul de cod C ++ utilizat în pachet.
Mai devreme în 2025 am trecut la Manjaro Linux și nu mai oferă binare pentru Clang 12, care este versiunea folosită în CPP11. Clădire clang-format-12 mi -a cerut să descarc și să compilez Clang din codul sursă al proiectului LLVM, care a consumat mult timp.
Unele PR-uri trimise la CPP11 vor eșua atunci când acestea nu urmează cu strictețe stilul de lating Clang 12, deoarece acțiunile vor eșua pentru orice diferență non-goală. Din motive dincolo de cunoștințele mele, utilizarea instrumentelor de scadență pentru VSCode sau Positron nu produce întotdeauna aceleași rezultate ca și acest lucru:
clang_format=`which clang-format`
format: $(shell find . -name '*.hpp') $(shell find . -name '*.cpp')
@${clang_format} -i $?
Așa că am decis să -mi creez propria extensie care să aplice formatul CLANG pe codul C ++ și să modifice un angajament împins dacă latația nu produce aceleași rezultate ca și fișierele nemodificate. În acest fel, aș putea trimite PRS la CPP11 fără să -mi fac griji pentru stilul de cod și ar economisi timp de compilare pentru mulți utilizatori ca mine.
Cum funcționează:
- Utilizatorul împinge un cod cu probleme de formatare
- Acțiunile Github rulează pe Push/PR
- Această extensie va folosi
clang-format-11,clang-format-12…, sauclang-format-19după cum a fost solicitat să remedieze formatarea și să implementeze modificările din depozit
Când codul este formatat corespunzător, acțiunea nu va face nimic.

Exemplu simplu Flux de lucru pentru a utiliza extensia pentru a remedia codul și a comite automat:
name: Auto-format C++ Code
on:
push:
branches: ( main, master, develop )
pull_request:
branches: ( main, master, develop )
permissions:
contents: write
pull-requests: write
jobs:
format:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
token: ${{ secrets.GITHUB_TOKEN }}
persist-credentials: true
- name: Format C++ code
uses: pachadotdev/clang-format@main
with:
version: '18'
auto-commit: true
commit-message: 'style: auto-format C++ code with clang-format-18'
După ce împingeți, ar trebui să vedeți:
- ✅ Acțiunea se desfășoară cu succes
- 🔧 Codul este formatat corect
- 📝 Angajare automată cu modificări formatate
- 🎉 Stil de cod curat, consistent
Depozitul de exemplu arată mai multe exemple și alte cazuri de utilizare pentru solicitări de tragere.
