(Acest articol a fost publicat pentru prima dată pe Postări pe blogul R-hubși cu amabilitate a contribuit la R-bloggeri). (Puteți raporta problema legată de conținutul acestei pagini aici)
Doriți să vă distribuiți conținutul pe R-bloggeri? dați clic aici dacă aveți un blog, sau aici dacă nu aveți.

TL;DR, nu-i lăsa pe prietenii tăi să folosească LLM-urile pentru a găsi cod inutil într-un proiect! Utilizarea Jarl este mai ieftină, mai fiabilă și nu va ucide niciun pisoi.
Noi (Hannah și Maëlle) împărtășim o apreciere pentru lucrările de întreținere lipsite de farmec pe care le numim întreținere. Așa că, când Claude i-a evidențiat un cod mort în pachetul de melodii pentru Hannah, a meritat să fie menționat în timpul unei conversații. Acest lucru a făcut ca Maëlle să recomande Jarl lui Etienne Bacher, un linter rapid pentru R scris în Rust care poate, printre altele, să detecteze funcții neutilizate.
Motivată de această conversație, printre altele, Maëlle a scris o întreagă postare pe blog despre Jarl și alte instrumente pentru R bazate pe tree-sitter, inclusiv meme-ul de mai sus.
Deci, firesc, când ești chemat într-o meme personalizată, asculți. 😸 Așadar, iată forma lungă (mai mult) de „Folosește Jarl!”, din următoarea trecere prin pachetul de păstârnac de Hannah, cu comentariul lui Maëlle.
Mulțumiri lui Etienne Bacher pentru recenzia acestei postări!
Cum l-a folosit Hannah pe Jarl
Am extensia Jarl instalată pentru Positronul meu, dar aici am folosit interfața de linie de comandă (CLI) a Jarl. Am început cu rularea acestei comenzi în terminal:
jarl check .
dar asta mi-a dat prea multă rezultate. 😅
Totuși, a inclus un indiciu util, ceva de genul:
── Summary ────────────────────────────────────── Found 296 errors. 3 fixable with the `--fix` option. More than 15 errors reported, use `--statistics` to get the count by rule.
Deci încă o dată, cu --statistics opțiunea, pentru a obține o imagine de ansamblu asupra a ceea ce Jarl a semnalat. Ieșirea (aici cu numere inventate) arăta ceva de genul
jarl check . --statistics
132 ( ) implicit_assignment
109 ( ) internal_function
34 ( ) vector_logic
13 ( ) unused_function
7 (*) numeric_leading_zero
1 (*) any_is_na
Rules with `(*)` have an automatic fix.
Acum asta îmi oferă o imagine de ansamblu mai bună. Maëlle: Mi-a plăcut foarte mult să învăț despre asta --statistics flag și am urmat aceeași strategie când am rulat Jarl pe pachetul igraph R!
Aș fi putut să fug jarl check . --fix pentru a remedia totul cu o remediere automată, dar am vrut să învăț puțin mai multe despre reguli pentru a vedea dacă vreau să le aplic. Așa că mi-am parcurs câte o regulă la un moment dat, cu câte un git commit la un moment dat. Puteți selecta reguli astfel:
jarl check . --select any_is_na
Această separare a modificărilor după regulă a făcut, de asemenea, mai ușoară revizuirea modificărilor: un subiect pentru fiecare comitere. Maëlle: în igraph, am creat unul PR per regulă sau grup de reguli.
Am trecut mai întâi prin cele cu remedieri automate, apoi pe cele fără. Rezultatul curățării: https://github.com/tidymodels/parsnip/pull/1356 Maëlle: în igraph, am trecut prin reguli începând cu cele cu cele mai puține încălcări, terminând cu cele care au avut cele mai multe lovituri.
păstârnacul a fost în jurul blocului de câteva ori și a acumulat câteva funcții semnalate de Jarl ca neutilizate. am observat release_bullets() în lista pe care știu că vrem să o păstrăm. Îl folosim pentru păstârnac în procesul de eliberare, dar nu îl folosim în păstârnac. Nu mă așteptam ca Jarl să prindă această diferență, așa că am decis să revizuiesc lista de funcții semnalate separat și să o împart în propria sa problemă (și PR). Am ajuns să păstrez o altă funcție care făcea parte dintr-un set de funcții furnizate într-un fișier independent, dar le-am eliminat pe celelalte.
Niciun pisoi nu a fost rănit!
De ce să folosiți Jarl pentru refactorizare
Evident, pentru că vă spunem că ar trebui! Mai serios: Jarl este rapid și gratuit!
Și iată încă câteva motive dincolo de poveștile noastre de succes 😁:
Jarl va găsi lucruri mici mirositoare
De exemplu, cel outer_negation regula ajută la îmbunătățirea lizibilității: !all(x) este mai ușor de înțeles decât any(!x). În igraph, de exemplu, datorită acelei reguli ne-am schimbat
any(!names(options) %in% names(defaults))
Orice nume de opțiuni care nu sunt în numele implicite (și de fapt un pic mai rău din moment ce nu folosim %notin% totuși, nou în R 4.6.0)
în
!all(names(options) %in% names(defaults))
Nu toate denumirile de opțiuni în numele implicite.
Vezi și regula în acțiune la păstârnac.
În general, Jarl va face baza de cod mai puțin mirositoare.
Jarl va găsi funcții nefolosite
Este foarte ușor pentru un pachet să acumuleze funcții care acum sunt inutile, un fel de artefacte istorice. Și, deoarece sunt nefolosite, s-ar putea să nu dai de ele întâmplător. Jarl le va semnala pentru tine!
Dacă Jarl observă o astfel de funcție, verificați că este de fapt neutilizată. Dacă funcția este de fapt utilă, poate doriți să adăugați un comentariu de excepție sau o configurație specifică regulilor.
Jarl va găsi definiții de funcții duplicate
De asemenea, o problemă care se întâmplă într-un pachet care nu s-a născut ieri! În acest caz, trebuie să alegeți o definiție. Exemplu în păstârnac. Ștergerea liniilor neutilizate este foarte satisfăcătoare.
Jarl va detecta codul inaccesibil
De exemplu, codul care vine după a return() sau a stop() într-o funcție. Uneori, puteți pur și simplu șterge acel cod (din nou, o mișcare bună!). Alteori, cecul este o oportunitate de refactorizare țintită!
Jarl vă poate verifica testul respectiv
Ca bonus, deoarece aceste reguli sunt dezactivate implicit, puteți rula
jarl check . --select TESTTHAT
Acest lucru va aplica toate regulile din grupul de testare care vă ajută să utilizați așteptări mai specifice. De exemplu, expect_equal(length(x), 2) ar trebui să fie expect_length(x, 2). Toate aceste reguli vin cu remedieri automate!
Exemplu în păstârnac, exemplu în igraph.
În cazul în care pachetul dvs. depinde de dplyr, există un grup de reguli (în prezent două) și pentru aceasta!
Concluzie
Instrumentele automate sunt extrem de utile pentru ghidarea lucrărilor de întreținere. Gândire „lasă-mă să curăț acest repo” poate fi descurajantă 😱, instrumente precum Jarl oferă o foaie de parcurs! Vă permit să remediați probleme evidente și, în același timp, vă pot face să citiți câteva colțuri prăfuite ale bazei de cod. Munca lui Hannah despre păstârnac a inspirat-o pe Maëlle să ruleze Jarl pe igraph (influencer influențat înapoi!), Și ea poate confirma că a fost atât util, cât și satisfăcător. Mulțumesc Etienne pentru acest instrument grozav!
Rețineți că puteți rula manual verificări Jarl, așa cum am făcut noi, sau puteți spune unui LLM să ruleze Jarl. Ca să-l citez pe colegul lui Hannah, Emil Hvitfeldt, „Când codificați sau utilizați agenți de codare, o modalitate de a vă îmbunătăți fluxul de lucru este utilizarea instrumentelor CLI cu un accent foarte clar.”. 🫡
Ceea ce este și mai bun cu Jarl este că este dezvoltat în mod activ, ceea ce îl puteți confirma răsfoind prin jurnalul de modificări bogat!
