Pysonar2 es una biblioteca de indexador semántico para Python, diseñada para el procesamiento por lotes de grandes bases de código. El índice resultante se puede usar para crear navegadores de código y motores de búsqueda de código.
Python es un lenguaje altamente dinámico. Para lograr una alta precisión y calidad, Pysonar2 realiza un análisis interprocedural para inferir tipos. Pysonar2 generalmente produce un mejor índice que Python IDES, al tiempo que sacrifica las capacidades de actualización en tiempo real de IDES.
Observe que el término "Inferencia de tipo" aquí es descriptivo en lugar de prescriptivo, lo que significa que los tipos inferidos describen cómo se usa realmente el código, pero no prescribe cómo deben usarse. Por lo tanto, la forma en que funciona la inferencia de tipo aquí es diferente de los sistemas de tipos (por ejemplo, el sistema Hindley-Milner).
Pysonar2 ha sido el motor de indexación subyacente para varios servicios de navegación de código a gran escala, como la búsqueda de código interno de Google, SourceGraph.com e Insight.io (ahora parte de elastic).
mvn package -DskipTests
Para tener una idea de lo que produce Pysonar2, puede construir un navegador de código simple de la biblioteca estándar de Python 2.7 con la siguiente línea de comando:
java -jar target/pysonar-<version>.jar /usr/lib/python2.7 ./html
Esto puede tomar unos minutos dependiendo de su máquina. Debe encontrar algunos archivos HTML interactivos dentro del directorio HTML después de este proceso. Puede mover el mouse en las variables y hacer clic en ellas para saltar a las definiciones, etc.
Tenga en cuenta que este es solo un programa de demostración simple basado en la biblioteca. Pysonar2 no está destinado a ser una herramienta de usuario final. Se diseña principalmente como una biblioteca para Python IDES, herramientas de desarrollador y motores de búsqueda de código, por lo que su interfaz puede no ser tan atractiva como una herramienta de usuario final.
Si tiene problemas con él, no dude en ponerse en contacto conmigo.
Pysonar2 utiliza el paquete ast incorporado de Cpython para analizar el código de Python, así que asegúrese de que python o python3 instalen y apunten a la variable de entorno PATH . Si los tiene en diferentes nombres, haga enlaces de símbolos.
La variable de entorno PYTHONPATH se utiliza para localizar las bibliotecas estándar de Python. Es importante señalarlo a la biblioteca de Python correcta, por ejemplo
export PYTHONPATH=/usr/lib/python2.7
Si esto no está configurado correctamente, no se encontrarán referencias al código de la biblioteca.
Usted puede hacer contribuciones al código.
Debido a la teoría altamente compleja e inédita detrás de Pysonar2, las cosas pueden salir mal fácilmente con un cambio de aspecto inocente. Si espera contribuir a Pysonar2, primero discuta conmigo antes de hacer cambios significativos, de lo contrario, es posible que no pueda revisar sus cambios.
Para una verificación básica, puede ejecutar las pruebas unitarias. Pysonar2 tiene un marco de prueba básico. Puede ejecutar las pruebas usando este comando:
mvn test
Si modifica el código o las pruebas, debe generar nuevos resultados esperados. Ejecute estas líneas de comando:
mvn package -DskipTests
java -classpath target/pysonar-<version>.jar org.yinwang.pysonar.TestInference -generate tests
Para escribir nuevas pruebas, solo necesita escribir un código Python relevante que demuestre su cambio, colóquelos en un directorio llamado tests/testname.test (el nombre del directorio de prueba debe terminar con ".test"). Mire el directorio tests para ver ejemplos.
No espere que las pruebas atrapen todos los errores. Ten mucho cuidado :)
Licencia Apache 2.0. Ver archivo de licencia.