
bellybutton é um mecanismo de linha personalizável e fácil de configurar para o Python.
Ferramentas como Pylint e Flake8 fornecem, pronta para uso, uma ampla variedade de regras para aplicar as melhores práticas do Python, garantir a conformidade do PEP-8 e evitar fontes frequentes de bugs. No entanto, muitos projetos têm candidatos específicos para o projeto para análise estática, como guias de estilo interno, áreas de funcionalidade depreciada ou fontes de erro comuns. Isso é especialmente verdadeiro para esses projetos com muitos colaboradores ou com bases de código grandes ou legadas.
bellybutton permite que as regras de linha personalizadas sejam especificadas em uma base por projeto e detectadas como parte do seu processo normal de compilação, teste e implantação e, além disso, torna a especificação dessas regras altamente acessível, diminuindo bastante o custo da adoção.
Experimente bellybutton se:
bellybutton pode ser instalado via:
pip install bellybuttonUma vez instalado, em execução
bellybutton init No diretório raiz do seu projeto, criará um arquivo de configuração .bellybutton.yml com uma regra de exemplo para você começar a se adaptar. bellybutton também tentará fornecer configurações adicionais de regras com base na estrutura do diretório do seu projeto.
Depois de configurar bellybutton para o seu projeto, executando
bellybutton lint Fará o projeto contra as regras especificadas em seu .bellybutton.yml . Além disso, correndo
bellybutton lint --modified-only Will, se estiver usando o Git, apenas os arquivos diferem da origin/master .
Para adicionar bellybutton ao seu pipeline de CI, dê uma olhada na configuração do TOX deste repositório e .Travis.yml como exemplo.
Regras nos padrões de suprimento bellybutton que devem ser capturados e fazer com que o linha falhe. As regras especificadas na sua configuração .bellybutton.yml devem consistir em:
description , expressando o significado da regraexpr , especificando o padrão a ser capturado - como uma expressão de ASTPath ou como uma expressão regular ( !regex ... ). Além disso, a chave usada para a regra no mapeamento rules serve como seu nome.
As regras também podem consistir em:
settings que especificam em quais arquivos a regra deve ser aplicada, bem como se ela pode ser ignorada por meio de um # bb: ignore Commentexample de código python que seria correspondido pela regrainstead de uma peça alternativa de código, para orientar o desenvolvedor na fixação de seu erro de linha. Esses example e, instead as cláusulas são verificadas em tempo de execução para garantir que elas sejam respectivamente e não sejam correspondidas pelo expr da regra.
Como exemplo, uma regra para fasgar para uma chamada de função depreciada usando uma expressão ASTPath pode parecer:
DeprecatedFnCall :
description : ` deprecated_fn ` will be deprecated in v9.1.2. Please use `new_fn` instead.
expr : //Call[func/Name/@id='deprecated_fn']
example : " deprecated_fn(*values) "
instead : " new_fn(values) " !settings especificam:
included nos quais as regras devem ser executadas, usando a notação globalexcluded nos quais as regras não devem ser executadas (mesmo ao combinar os caminhos included )allow_ignore booleano que determina se as regras podem ser ignoradas, fornecendo a linha que corresponde à regra possui um # bb: ignore o comentário. Além disso, no nível raiz do .bellybutton.yml , uma configuração default_settings pode ser especificada, que será usada por regras sem configurações explícitas. Cada regra deve ter um parâmetro settings ou ser capaz de recorrer aos default_settings .
Como exemplo, um nó !settings para fasgar apenas um módulo específico pode parecer:
my_module_settings : !settings
included :
- ~+/my_package/my_module.py
excluded : []
allow_ignore : no Confira .bellybutton.yml deste repositório como um exemplo de arquivo de configuração bellybutton e astpath ReadMe para obter exemplos dos tipos de padrões que você pode usar para usar bellybutton .
bellybutton está em uma liberação alfa e, como tal, está faltando alguns recursos importantes, documentação e cobertura completa de testes. Além disso, bellybutton não é otimizado para desempenho em bases de código extremamente grandes e podem conter bugs de quebra. Por favor, relate todos os bugs encontrados.
!chain e da expressão !verbal ainda não foram implementados