Dostępny jest ShellCheck 0.9, statyczny analizator skryptów powłoki

Opublikowano wersję projektu ShellCheck 0.9 rozwijającego system do analizy statycznej skryptów powłoki, który wspiera identyfikację błędów w skryptach z uwzględnieniem cech bash, sh, ksh i dash. Kod projektu napisany jest w Haskell i rozpowszechniany na licencji GPLv3. Dostępne są komponenty umożliwiające integrację z Vimem, Emacsem, VSCode, Sublime, Atom i różnymi frameworkami obsługującymi raportowanie błędów zgodnymi z GCC.

Dostępny jest ShellCheck 0.9, statyczny analizator skryptów powłoki

Wspiera identyfikację zarówno błędów składniowych w kodzie, które prowadzą do wyświetlenia przez interpreter błędu w momencie wykonania, jak i problemów semantycznych, dzięki którym wykonanie nie jest zakłócane, ale występują anomalie w zachowaniu skryptu. Analizator może także identyfikować wąskie gardła, nieoczywiste problemy i pułapki, które w pewnych okolicznościach mogą prowadzić do awarii.

Wśród klas wykrytych błędów można wymienić problemy z uciekaniem znaków specjalnych i umieszczaniem ich w cudzysłowie, błędy w wyrażeniach warunkowych, nieprawidłowe użycie poleceń, problemy z przetwarzaniem czasu i daty oraz typowe dla początkujących błędy składniowe. Np. brak spacji przy porównywaniu „[[ $foo==0 ]]”, obecność spacji „var = 42” lub wskazanie symbolu $ przy przypisywaniu „$foo=42”, użycie zmiennych bez cudzysłowów „echo $1”, wskazanie dodatkowych nawiasów kwadratowych w „tr -cd '[a-zA-Z0-9]'",

Dodatkowo obsługuje wyświetlanie zaleceń dotyczących poprawy stylu kodu, eliminowania problemów z przenośnością i zwiększania niezawodności skryptów. Przykładowo zamiast „echo $[1+2]” zaproponowane zostanie użycie składni „$((..))”, konstrukcja „rm -rf „$STEAMROOT/”*” zostanie oznaczona jako niebezpieczna i może usunąć katalog główny, jeśli zmienna $STEAMROOT nie jest wypełniona, a użycie „echo {1..10}” zostanie podświetlone jako niezgodne z myślnikami i sh.

W nowej wersji:

  • Dodano ostrzeżenie dla wyrażeń takich jak „lokalne foo tylko do odczytu”.
  • Dodano ostrzeżenie o niedostępnych poleceniach.
  • Dodano ostrzeżenie o linkach zwrotnych do „deklaruj x=1 y=$x”.
  • Dodano ostrzeżenie, jeśli $? używany do drukowania kodu powrotu echo, printf, [ ], [[ ]] i test.
  • Dodano zalecenie usunięcia ((..))inarray[((idx))]=val.
  • Dodano zalecenie dotyczące łączenia podwójnych nawiasów w kontekstach arytmetycznych.
  • Dodano zalecenie usunięcia nawiasów w wyrażeniu a[(x+1)]=val.

Źródło: opennet.ru

Dodaj komentarz