O PYSONAR2 é uma biblioteca de indexador semântica para Python, projetada para o processamento em lote de grandes bases de código. O índice resultante pode ser usado para criar navegadores de código e mecanismos de pesquisa de código.
O Python é uma linguagem altamente dinâmica. Para obter alta precisão e qualidade, o PysoNar2 realiza análises interprocedurais para inferir tipos. O PYSONAR2 geralmente produz um índice melhor do que o Python IDES, ao mesmo tempo em que sacrifica os recursos de atualização em tempo real dos IDEs.
Observe que o termo "inferência de tipo" aqui é descritivo e não prescritivo, o que significa que os tipos inferidos descrevem como o código é realmente usado, mas não prescreve como eles devem ser usados. Portanto, a maneira como o tipo de inferência funciona aqui é diferente dos sistemas de tipo (por exemplo, Hindley-Milner System).
O PysoNar2 tem sido o mecanismo de indexação subjacente para vários serviços de navegação de código em larga escala, como pesquisa de código interno do Google, fontegraph.com e insight.io (agora parte do elástico).
mvn package -DskipTests
Para ter uma idéia do que o PysoNar2 produz, você pode criar um navegador de código simples da biblioteca padrão do Python 2.7 com a seguinte linha de comando:
java -jar target/pysonar-<version>.jar /usr/lib/python2.7 ./html
Isso pode levar alguns minutos, dependendo da sua máquina. Você deve encontrar alguns arquivos HTML interativos dentro do diretório HTML após esse processo. Você pode mover o mouse nas variáveis e clicar nelas para pular para definições etc.
Observe que este é apenas um programa de demonstração simples baseado na biblioteca. O PYSONAR2 não deve ser uma ferramenta de usuário final. Ele é projetado principalmente como uma biblioteca para IDEs de Python, ferramentas de desenvolvedor e mecanismos de pesquisa de código; portanto, sua interface pode não ser tão atraente quanto uma ferramenta do usuário final.
Se você tiver problemas com isso, não hesite em entrar em contato comigo.
O PYSONAR2 usa o pacote ast interno do CPYTHON para analisar o código Python; portanto, verifique se você possui python ou python3 instalado e apontado pela variável do ambiente PATH . Se você os possui em nomes diferentes, faça links de símbolo.
A variável de ambiente PYTHONPATH é usada para localizar as bibliotecas padrão do Python. É importante apontar para a biblioteca Python correta, por exemplo
export PYTHONPATH=/usr/lib/python2.7
Se isso não for configurado corretamente, as referências ao código da biblioteca não serão encontradas.
Você pode fazer contribuições de código.
Por causa da teoria altamente complexa e não publicada por trás do PysoNar2, as coisas podem dar errado facilmente, mesmo com uma mudança de aparência inocente. Se você espera contribuir para o PysoNar2, discuta comigo primeiro antes de fazer alterações significativas; caso contrário, talvez eu não consiga revisar suas alterações.
Para verificação básica, você pode executar os testes de unidade. O PYSONAR2 possui uma estrutura de teste básica. Você pode executar os testes usando este comando:
mvn test
Se você modificar o código ou os testes, precisará gerar novos resultados esperados. Execute estas linhas de comando:
mvn package -DskipTests
java -classpath target/pysonar-<version>.jar org.yinwang.pysonar.TestInference -generate tests
Para escrever novos testes, você só precisa escrever um código Python relevante demonstrando sua alteração, coloque -os em um diretório chamado tests/testname.test (o nome do diretório de teste deve terminar com ".test"). Por favor, observe o diretório tests para obter exemplos.
Por favor, não espere que os testes pegem todos os bugs. Tenha muito cuidado :)
Licença Apache 2.0. Consulte o arquivo de licença.