PysonAR2 est une bibliothèque d'indexer sémantique pour Python, conçue pour le traitement par lots de bases de code gros. L'index résultant peut être utilisé pour créer des navigateurs de code et des moteurs de recherche de code.
Python est un langage très dynamique. Pour atteindre une grande précision et une qualité, PysonAR2 effectue une analyse interprocédurale pour déduire les types. PysonAR2 produit généralement un meilleur index que Python IDE, tout en sacrifiant les capacités de mise à jour en temps réel des IDE.
Remarquez que le terme "type d'inférence" ici est descriptif plutôt que normatif, ce qui signifie que les types induits décrivent comment le code est réellement utilisé, mais ne prescrit pas comment ils doivent être utilisés. Ainsi, la façon dont l'inférence du type fonctionne ici est différente des systèmes de type (par exemple, le système Hindley-Milner).
Pysonar2 a été le moteur d'indexation sous-jacent pour plusieurs services de navigation de code à grande échelle, tels que la recherche de code interne de Google, SourceGraph.com et Insight.io (qui fait maintenant partie d'Elastic).
mvn package -DskipTests
Pour avoir une idée de ce que produit PysonAR2, vous pouvez créer un navigateur de code simple de la bibliothèque standard Python 2.7 avec la ligne de commande suivante:
java -jar target/pysonar-<version>.jar /usr/lib/python2.7 ./html
Cela peut prendre quelques minutes en fonction de votre machine. Vous devriez trouver des fichiers HTML interactifs dans le répertoire HTML après ce processus. Vous pouvez déplacer votre souris sur les variables et cliquer dessus pour passer aux définitions, etc.
Notez qu'il s'agit juste d'un simple programme de démonstration basé sur la bibliothèque. PysonAR2 n'est pas censé être un outil d'utilisateur final. Il est principalement conçu comme une bibliothèque pour les ides Python, les outils de développement et les moteurs de recherche de code, donc son interface peut ne pas être aussi attrayante qu'un outil d'utilisateur final.
Si vous avez des problèmes avec cela, n'hésitez pas à me contacter.
PysonAR2 utilise le package ast intégré de CPYTHON pour analyser le code Python, alors assurez-vous que python ou python3 soit installé et pointé par la variable d'environnement PATH . Si vous les avez dans différents noms, veuillez créer des liens de symbole.
La variable d'environnement PYTHONPATH est utilisée pour localiser les bibliothèques standard Python. Il est important de le pointer vers la bonne bibliothèque Python, par exemple
export PYTHONPATH=/usr/lib/python2.7
Si cela n'est pas configuré correctement, les références au code de la bibliothèque ne seront pas trouvées.
Vous êtes invités à effectuer des contributions au code.
En raison de la théorie très complexe et inédite derrière Pysonar2, les choses peuvent mal tourner facilement avec même un changement innocent. Si vous espérez contribuer à PysonAR2, veuillez discuter avec moi avant d'apporter des modifications importantes, sinon je ne pourrai pas revoir vos modifications.
Pour la vérification de base, vous pouvez exécuter les tests unitaires. PysonAR2 a un cadre de test de base. Vous pouvez exécuter les tests en utilisant cette commande:
mvn test
Si vous modifiez le code ou les tests, vous devez générer de nouveaux résultats attendus. Exécutez ces lignes de commande:
mvn package -DskipTests
java -classpath target/pysonar-<version>.jar org.yinwang.pysonar.TestInference -generate tests
Pour écrire de nouveaux tests, il vous suffit d'écrire du code Python pertinent démontrant votre modification, placez-les dans un répertoire nommé tests/testname.test (le nom du répertoire de test doit se terminer avec ".test"). Veuillez consulter le répertoire tests pour des exemples.
S'il vous plaît, ne vous attendez pas à ce que les tests attrapent tous les bugs. Soyez très prudent :)
Licence Apache 2.0. Voir le fichier de licence.