Доступний ShellCheck 0.9, статичний аналізатор для shell-скриптів

Опубліковано випуск проекту ShellCheck 0.9, що розвиває систему статичного аналізу shell-скриптів, що підтримує виявлення помилок у скриптах з урахуванням особливостей bash, sh, ksh та dash. Код проекту написаний мовою Haskell та поширюється під ліцензією GPLv3. Надаються компоненти для інтеграції з Vim, Emacs, VSCode, Sublime, Atom та різними інтегрованими середовищами, що підтримують GCC-сумісний висновок відомостей про помилки.

Доступний ShellCheck 0.9, статичний аналізатор для shell-скриптів

Підтримується виявлення у коді як синтаксичних помилок, що призводять до висновку інтерпретатором помилки в момент виконання, так і семантичних проблем, через які виконання не порушується, але виникають аномалії у поведінці скрипту. Аналізатор також може визначати вузькі місця, неочевидні проблеми та підводні камені, які можуть призводити до збоїв при певному збігу обставин.

З класів помилок, що виявляються, можна відзначити проблеми з екрануванням спецсимволів і обрамленням у лапки, помилки в умовних виразах, неправильне використання команд, проблеми обробки часу і дат, і типові синтаксичні помилки новачків. Наприклад, відсутність пробілів при порівнянні «[[ $foo==0 ]]», наявність пробілів «var = 42» або вказівка ​​символу $ при присвоєнні «$foo=42», використання змінних без лапок «echo $1», вказівка ​​зайвих квадратних дужок у «tr-cd'[a-zA-Z0-9]'»,

Додатково підтримується висновок рекомендацій щодо покращення стилю коду, усунення проблем із переносимістю та підвищення надійності роботи скриптів. Наприклад, замість "echo $[1+2]" буде запропоновано використовувати синтаксис "$((..))", конструкція 'rm -rf "$STEAMROOT/"*' буде відзначена як небезпечна і здатна видалити кореневий каталог при незаповненні змінної $STEAMROOT, а використання "echo {1..10}" буде виділено як несумісне з dash та sh.

В новой версії:

  • Додано попередження для виразів виду 'local readonly foo'.
  • Додано попередження про недоступність команд.
  • Додано попередження про зворотні посилання в 'declare x=1 y=$x'.
  • Додано попередження, якщо $? використовується для видачі коду повернення echo, printf, [], [[]] та test.
  • Додано рекомендацію з видалення ((..))inarray[((idx))]=val.
  • Додано рекомендацію щодо об'єднання подвійних дужок в арифметичних контекстах.
  • Додано рекомендацію щодо видалення круглих дужок у виразі a[(x+1)]=val.

Джерело: opennet.ru

Додати коментар або відгук