ShellCheck 0.9 está disponível, um analisador estático para scripts de shell

Foi publicado o lançamento do projeto ShellCheck 0.9, que desenvolve um sistema de análise estática de shell scripts que suporta a identificação de erros em scripts levando em consideração os recursos de bash, sh, ksh e dash. O código do projeto é escrito em Haskell e distribuído sob a licença GPLv3. Os componentes são fornecidos para integração com Vim, Emacs, VSCode, Sublime, Atom e várias estruturas que suportam relatórios de erros compatíveis com GCC.

ShellCheck 0.9 está disponível, um analisador estático para scripts de shell

Suporta a identificação tanto de erros de sintaxe no código, que fazem com que o interpretador apresente um erro no momento da execução, quanto de problemas semânticos, pelos quais a execução não é interrompida, mas ocorrem anomalias no comportamento do script. O analisador também pode identificar gargalos, problemas não óbvios e armadilhas que podem levar a falhas em determinadas circunstâncias.

Dentre as classes de erros detectados, podemos observar problemas de escape de caracteres especiais e enquadrá-los entre aspas, erros em expressões condicionais, uso incorreto de comandos, problemas no processamento de horas e datas e erros de sintaxe típicos para iniciantes. Por exemplo, a ausência de espaços na comparação “[[ $foo==0 ]]”, a presença de espaços “var = 42” ou a indicação do símbolo $ na atribuição de “$foo=42”, a utilização de variáveis sem aspas “echo $1”, a indicação de colchetes extras em "tr -cd '[a-zA-Z0-9]'",

Além disso, suporta a saída de recomendações para melhorar o estilo do código, eliminando problemas de portabilidade e aumentando a confiabilidade dos scripts. Por exemplo, em vez de “echo $[1+2]” será proposto usar a sintaxe “$((..))”, a construção 'rm -rf “$STEAMROOT/”*' será marcada como insegura e capaz de deletar o diretório raiz caso a variável $STEAMROOT não esteja preenchida, e o uso de "echo {1..10}" será destacado como incompatível com dash e sh.

Na nova versão:

  • Adicionado aviso para expressões como 'local readonly foo'.
  • Adicionado aviso sobre comandos indisponíveis.
  • Adicionado aviso sobre backlinks para 'declarar x=1 y=$x'.
  • Adicionado aviso se $? usado para imprimir o código de retorno de echo, printf, [], [[]] e test.
  • Adicionada recomendação para remover ((..))inarray[((idx))]=val.
  • Adicionada uma recomendação para concatenar parênteses duplos em contextos aritméticos.
  • Adicionada uma recomendação para remover parênteses na expressão a[(x+1)]=val.

Fonte: opennet.ru

Adicionar um comentário