fler och fler lag har antagit linters och andra statiska verktyg i sin utvecklingsprocess. Vissa integrerade dem i IDE av deras preferens, andra automatiserade genom att köra dem som ett extra steg i deras CI. Också, vissa kör åt båda hållen.
Vad är en linter, då?
enligt Wikipedia, linter
är ett verktyg som analyserar källkod för att flagga programmeringsfel, buggar, stilistiska fel och misstänkta konstruktioner.,
den första Lintern skrevs av Stephen C. Johnson 1978 medan han arbetade i Unix-operativsystemet på Bell Labs. Därefter har många andra linters dykt upp för olika ändamål och språk, inte bara C.
de första linterna som används för att kontrollera källkoden och hitta potentiella optimeringar för kompilatorer. Men under årens lopp skulle många andra kontroller och analyser ingå i lintningsprocessen.
användningen av linters har också hjälpt många utvecklare att skriva bättre kod för inte kompilerade programmeringsspråk., Eftersom det inte sammanställer tidsfel, hittar stavfel, syntaxfel, användningar av odeklarerade variabler, anropar till odefinierade eller föråldrade funktioner, till exempel hjälper utvecklare att fixa det snabbare och minska buggar före körning.
Linters har utvecklats
Linters har utvecklats. De började med de enkla kontrollerna, men nuförtiden blir de mer och mer sofistikerade. De utför statisk analys, genomdriva konfigurationsflaggor, kontrollera att en viss stilguide eller säkerhetsregel följs och mycket mer.,
låt oss undersöka några av dessa kontroller och hur de kan vara användbara för dig.
statisk analys
statisk analys innebär att automatiserad programvara körs genom din kodkälla utan att köra den. Det kontrollerar statiskt för potentiella buggar, minnesläckor och någon annan kontroll som kan vara användbar.
Om du är en Python-utvecklare kanske du redan känner till Radon. Det kan räkna källraderna av kod( SLOC), kommentarrader, en tom rad och andra råmått, men det kan också beräkna ett ”Underhållsindex”, vilket kan vara mycket viktigt i vissa projekt.
det är bara ett exempel., Det finns gott om andra linters som utför statiska Analyskontroller.
gratis E-bok: klicka här för att ladda ner gratis e-bok avkodning kod översyn och dra förfrågningar. Få alla viktiga punkter och bästa praxis för att genomföra en kodgranskningskultur.
kod standardisering
frånhttps://xkcd.com/1285/
standardisering av din kod är ett bra sätt att flytta konversationen till en mer produktiv nivå., Att ha en riktlinje och köra linters mot kodbasen undviker estetiska förändringar i din pull-förfrågan, som att ersätta alla flikar för mellanslag, indragning av en variabel tilldelning eller till och med radbrytningar efter ett visst antal tecken.
maximera meningsfulla förändringar tar din diskussion till ämnen som spelar roll, som arkitektoniska beslut, säkerhetsfrågor eller potentiella buggar.
förresten kan säkerhetsproblem och potentiella fel också undvikas av linters!
säkerhetsproblem
Om du är i räls har du förmodligen hört talas om Brakeman., Det är ett statiskt Analyssäkerhetsverktyg. Det är fördelaktigt att hitta potentiella säkerhetsproblem. Det körs till exempel kontroller som letar efter SQL-injektion när du använder Activerecords #find_or_create_by
och vänner. Det lägger också till kontroller för XSS, konfigurationsalternativ och mycket mer.
Ruby är inte det enda språket med denna typ av motor. SourceLevel stöder massor av motorer för olika språk. Bromsare ingår.
potentiella buggar
JavaScript har några knep. En av de mest kända är skillnaden mellan ==
och ===
., Det är en bra praxis, och det undviker mycket felsökningstid, att alltid använda ===
. Om du till exempel aktiverar ESLint för att kontrollera det kan det berätta vilken del av din kod som använder ==
och till och med ersätta den för dig.
prestandaförbättringar
varje erfaren utvecklare vet inte bara vikten av att utföra programvara men många knep som förbättrar den. Problemet är: vad sägs om nykomlingar? Hur kan du vidarebefordra denna kunskap? Även äldre programmerare kan sakna en teknik eller två. Så, varför inte låta en automatisering programvara gör det för dig?,
visste du att i CSS kan universal selector ( * ) sakta ner en sidladdningstid? Eller att okvalificerade attributväljare har samma prestandaegenskaper som universalväljaren? Att undvika dem är god praxis.
många linters inkluderar en prestandakontroll. De kan lägga till olika typer av prestandaförbättringar för erfarna och nykomlingar Utvecklare. CSSLint är bara ett exempel.
och många andra aspekter
till oändlighet och bortom!, Det finns massor av linters för olika programmeringsspråk, konfigurationsfiler, och även för mjukvaruintegrationer. Varje kontroll som är viktig och kan automatiseras kan bli en linter.
om du arbetar i ett visst scenario kan du behöva skriva din linter, även om det inte är så troligt i vår bransch. Kontroller för HTML tillgänglighetsfunktioner, internalisering potentiella fel, grammatikfel, och många andra är redan där, öppen källkod, väntar på dig att ladda ner, konfigurera och börja använda.
fördelar med linting
enligt Ferit T.,, linting förbättrar läsbarhet, tar bort dumma fel före körning och kodrecension. Men, som nämnts, linting kan göra mer komplexa jobb, som att upptäcka kod luktar eller utföra statisk analys av din kodbas.
men i praktiken, vilka är fördelarna med linting?
det förbättrar diskussionsnivå för kodgranskning
om din Pull-förfrågan inte har några stavfel eller oanvända variabler och överensstämmer med stilguiden tenderar konversationen att fokusera på arkitekturens synvinkel. Så ja., Pull Request är ett bra ställe att peka på prestandaproblem, säkerhetsproblem eller föreslå bättre abstraktioner. Du behöver inte komma in i den enkla eller dubbla citattecken eller tab vs. spaces diskussion. Det är en produktivitetsvinst säkert.
gör att koden ser ut som skriven av en enda person
på medellång och lång sikt har en tillförlitlig kodbas som ser ut som skriven av samma person är utmärkt. Underhåll och utveckling är enklare eftersom alla tenderar att förstå vad som skrivs snabbare och mer exakt., Det förhindrar buggar, gör jobbet mer glädjande för utvecklare och accelererar tiden till marknaden för nya funktioner.
ger synlighet för din codebase hälsa
är din kod frisk? Du vet inte förrän du mäter det. Ett spännande sätt att göra det är att lägga till ett steg i din CI / CD-pipeline för att mäta utvecklingen av din kods hälsotillstånd. Bättre än det kan du vidta åtgärder så snart som möjligt när du ser sin hälsa att förfallna., Sådana åtgärder kan innebära att skapa tekniska betalkort i din styrelse eller till och med ta upp problemet under ditt agile retrospektiva eller arkitektkommittémöte.
sprider medvetenhet och ägande över kodkvalitet
erfarna utvecklare kan undersöka en diff och ta upp relevanta frågor om den föreslagna ändringen. De vet förmodligen var man ska leta: är variabler namn beskrivande? Hur många linjer tar en metod? Finns det någon superklass?
men vad sägs om nykomlingar? Kunskapen i ett lag är ofta heterogen. Det betyder inte att alla utvecklare vet vad man ska titta över koden., Att ha en linter att berätta var kod luktar automatiskt är ett utmärkt sätt att sprida denna kunskap och göra laget ansvariga för förändringarna.
kvalitet är inte ett enskilt personansvar. Det är viktigt att mäta och kontrollera kodkvaliteten över tiden. Annars blir koden rörig, vilket saktar ner utveckling och tid till marknad.,
kontrollerar tekniska skulder
eftersom många moderna linters letar efter möjliga tekniska skulder, som kod luktar, stilguide missmatchningar, eller dåligt utformade kod (djupa kedjor av if
uttalanden, eller alltför komplexa metoder, till exempel), linters korrelerar med teknisk skuld.
göra tekniska skulder explicit under kodöversynsprocessen hjälp mjukvaruutvecklare eller ingenjörer att upptäcka, diskutera och åtgärda det innan sammanfogningen imaster
gren. Det är en mycket bekväm praxis som kontrollerar de tekniska skuldinsatserna.,
automatisera din Kodrecension: SourceLevel stöder +30 linters för att hjälpa dig att förbättra kodkvaliteten. Klicka här för att se en demo eller starta en gratis testperiod.
exempel på linters
det finns ett stort antal linters där ute. Beroende på programmeringsspråket finns det ännu mer än en linters för varje jobb. Till exempel, för Go programmeringsspråk, det finns ktlint och detekt. Båda utför ett liknande jobb. Samma sak händer med eslint, en linter avsedd för JavaScript. Det fungerar mycket lik tslint eller jshint.,
Linters fokuserade på säkerhet
- Brakeman för Ruby
- Bandit för Python
- nod säkerhet för JavaScript
Linters fokuserade på stil guide och kodning konventioner
- CSSLint., SCSS Ludd och Sass Ludd för Cascading Style Sheet
- Gofmt för att Gå språket
- Swiftlint för Switft
- rustfmt för Rost
- Credo för Elixir
Linters för Statisk Analys
- pep8 för Python
- Phan eller PHP Röra Detektor för PHP
- kibit för Clojure, ClojureScript, cljx, och andra Clojure varianter.
- PMD för Java
slutsats
Linters hjälper dig att bli mer produktiv och spara tid och pengar. De driver ditt team till bättre beslut (de orienterade av data) och dela ägande över kvaliteten.,
på SourceLevel stöder vi massor av linters. De kör mot varje dragförfrågan öppen och kommentera rätt rad och Fil de hittade problemen. Det ökar utvecklarens produktivitet och effektivitet.
vi kallar det automation of code review. Varje arkiv kan ha sin konfigurationsfil och sedan har pull förfrågningar granskas enligt valda stil-guide regler.