Prima mea extensie de acțiuni Github: un instrument pentru a aplica formatul Clang la codul C ++

URMĂREȘTE-NE
16,065FaniÎmi place
1,142CititoriConectați-vă

(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ă:

  1. Utilizatorul împinge un cod cu probleme de formatare
  2. Acțiunile Github rulează pe Push/PR
  3. Această extensie va folosi clang-format-11, clang-format-12…, sau clang-format-19 după 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.

Fișiere formatate corect pe o rulare anterioară

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.

Dominic Botezariu
Dominic Botezariuhttps://www.noobz.ro/
Creator de site și redactor-șef.

Cele mai noi știri

Pe același subiect

LĂSAȚI UN MESAJ

Vă rugăm să introduceți comentariul dvs.!
Introduceți aici numele dvs.