10
votes

Inférence de type Python pour l'auto-complétion

Est-il possible d'utiliser l'algorithme OCAML / HASKELLL de l'inférence de type pour suggérer de meilleurs autocalistions pour Python?

L'idée est de proposer une autocopompetion par exemple dans les cas suivants: P>

class A:
  def m1(self):
    pass
  def m2(self):
    pass

a = A()
a.     <--- suggest here 'm1' and 'm2'
fun1(a)

def fun1(b):
  b.   <--- suggest here 'm1' and 'm2'


2 commentaires

La plupart des discussions mentionnées dans Alex Post concernent une précision de 100% nécessaire à la compilation / exécution. Mais pour la vérification automatique, la supposition est assez bonne, il devrait probablement simplifier le problème?


De Mes souvenirs, Wing IDE offre une certaine achèvement. mais je ne l'ai pas utilisé dans un moment alors je ne suis pas sûr


4 Réponses :


9
votes

Excellente discussion, avec de nombreux pointeurs, ici (un peu daté). Je ne crois pas que les éditeurs de "production" essaient de manière agressive l'inférence de type à des fins autocompressives (mais je n'ai pas utilisé par ex. Wingware's depuis un moment, alors peut-être qu'ils font maintenant).


0 commentaires

1
votes

Un traitement approprié nécessiterait un système de type pour Python, ce qui serait (est?) Un problème de recherche intéressant.


0 commentaires

2
votes

Vous pourriez avoir un coup d'oeil à l'écomplétion et à l'accrétion de Pharo Smalltalk . Les compromis seront probablement différents pour les prévisions python, mais des suppositions éduquées avec un travail d'inférence de type conservateur dans la pratique. Cela dépend également si vous souhaitez que l'achèvement puisse remplacer la navigation sur le code / la documentation ou pour vous aider à saisir et à éviter les fautes de frappe.

Je pense à Pharo, si le message est un envoi explicite à une classe ( Someclass M ), bien sûr, il proposera tous les messages de cette classe et de ses superclasses. D'autre, il devine simplement toutes les noms de méthodes dans le système correspondant au préfixe dactylographié, ce qui fonctionne bien. L'ocopétion ajoute un peu de priorisation heuristique basée sur l'historique d'édition.


0 commentaires

1
votes

Le premier cas est "facile", et je parie Jetbrains 'Pychararm peut le faire. Je n'ai pas utilisé Pycham, mais j'utilise une idée, aussi de Jetbrains, pour le développement basé sur Groovy (une langue dynamique), et il a une très bonne et très agressive achèvement automatique. Le deuxième cas serait plus difficile, vous voulez que l'IDE déduite le type de Fun1 en fonction de son utilisation. Dans une langue sans générique, cela peut être raisonnable. Cependant, dans F # / VS2010 au moins (ce qui serait probablement similaire à OCAML / HASKELL ici), le compilateur / IntelliSense Infer Fun1 Pour avoir la signature 'A ->' A (C'est-à-dire une fonction qui prend un type générique 'a et renvoie un type générique ' a ) afin d'être très mince.


0 commentaires