ShellCheck 0.9 är tillgänglig, en statisk analysator för skalskript

Releasen av ShellCheck 0.9-projektet har publicerats och utvecklar ett system för statisk analys av skalskript som stöder identifiering av fel i skript med hänsyn till funktionerna bash, sh, ksh och dash. Projektkoden är skriven i Haskell och distribueras under GPLv3-licensen. Komponenter tillhandahålls för integration med Vim, Emacs, VSCode, Sublime, Atom och olika ramverk som stöder GCC-kompatibel felrapportering.

ShellCheck 0.9 är tillgänglig, en statisk analysator för skalskript

Den stöder identifiering av både syntaxfel i koden, vilket leder till att tolken visar ett fel vid exekveringstillfället, och semantiska problem, på grund av vilka exekveringen inte störs, utan anomalier i skriptets beteende uppstår. Analysatorn kan också identifiera flaskhalsar, icke-uppenbara problem och fallgropar som kan leda till fel under vissa omständigheter.

Bland klasserna av upptäckta fel kan vi notera problem med att undvika specialtecken och rama in dem inom citattecken, fel i villkorliga uttryck, felaktig användning av kommandon, problem med att bearbeta tid och datum och typiska syntaxfel för nybörjare. Till exempel, frånvaron av mellanslag när man jämför "[[ $foo==0 ]]", närvaron av mellanslag "var = 42" eller indikeringen av $-symbolen när man tilldelar "$foo=42", användningen av variabler utan citattecken "echo $1", indikeringen av extra hakparenteser i "tr -cd '[a-zA-Z0-9]'",

Dessutom stöder den utmatningen av rekommendationer för att förbättra kodstilen, eliminera portabilitetsproblem och öka skriptens tillförlitlighet. Till exempel, istället för "eko $[1+2]" kommer det att föreslås att använda syntaxen "$((..))", konstruktionen 'rm -rf "$STEAMROOT/"*' kommer att markeras som osäker och kan ta bort rotkatalogen om variabeln inte är fylld $STEAMROOT, och användningen av "echo {1..10}" kommer att markeras som inkompatibel med bindestreck och sh.

I den nya versionen:

  • Lade till varning för uttryck som "lokal skrivskyddad foo".
  • Lade till varning om otillgängliga kommandon.
  • Lade till en varning om bakåtlänkar för att "deklarera x=1 y=$x".
  • Lade till varning om $? används för att skriva ut returkoden för eko, printf, [ ], [[ ]] och test.
  • Lade till rekommendation för att ta bort ((..))inarray[((idx))]=val.
  • Lade till en rekommendation för sammanlänkning av dubbla parenteser i aritmetiska sammanhang.
  • Lade till en rekommendation för att ta bort parenteser i uttrycket a[(x+1)]=val.

Källa: opennet.ru

Lägg en kommentar