Forum Programmation.python Python : editeur qui fait la completion

Posté par .
Tags : aucun
1
25
nov.
2009
Connaissez-vous un editeur/edi qui fasse une completion pertinente sur du code Python ?

Par pertinente j'entends :
- va chercher les attributs et les méthodes de mes classes memes si elles sont décrites dans d'autres fichiers
- va chercher les attributs et les méthodes de toutes les api
que j'importe
-et si je fait :
aaa=""
aaa.
ça me sort toutes les méthodes de la classe string, comme c'est le cas dans le shell python

- J'ai essayé Eric4, qui m'a l'air très complet, sait faire le café tout ça, mais visiblement la complétion ne marche chez moi. c'est peut être un problème d'intégration ou de dépendances (j'ai essayé sur Mandriva et Xubuntu)

- J'aimerais bien utiliser emacs, mais je m'y perds complètement entre les différents modes, les différentes versions d'emacs (22.1, 23) et les tutos [1] qui sont pas à jour pour installer les modes qui sont sensés faire de la completion.
C'est dommage parceque j'aime bien cet éditeur

- Je ne parles pas de Pydev+Eclipse parce que je veux programmer sur mon petit portable et j'ai pas envie de le transformer en grille pain.

Le seul que j'ai testé qui fasse une completion qui tienne la route c'est Komodo-Edit, le soucis c'est que d'autres features (du style navigateur de code) sont réservées à la version payante, à un prix prohibitif pour moi.

Donc, ami développeur python, as-tu résolu ce problème dans ton quotidien ? quel edi utilises-tu ? si la complétion nécessite une mise en place particulière, as-tu un tuto à jour ?


[1] par exemple : http://hide1713.wordpress.com/2009/01/30/setup-perfect-pytho(...)
  • # vim

    Posté par (page perso) . Évalué à 3.

    Moi, j'utilise vim comme éditeur. Depuis la version 7, il y a l'omni completion qui fait ce que tu veux en tapotant ctrl-X ctrl-O (on se croirait dans emacs).

    Sinon, j'utilise ipython comme shell et interpréteur python et il fait la complétion tout seul comme un grand avec la touche tab. Quand je cherche une fonction dont j'ai oublié le nom, c'est suffisant.

    voir http://michael-prokop.at/blog/2007/06/07/python-on-the-conso(...)
    • [^] # Re: vim

      Posté par . Évalué à 2.

      Sauf qu'ipython ne propose pas de complétion quand on écrit l'intérieur d'une fonction. L'omni complétion de vim est-elle capable de compléter à l'intérieur d'une fonction ?
      • [^] # Re: vim

        Posté par (page perso) . Évalué à 2.

        ipython, c'est juste un shell, ce n'est pas fait pour écrire plus que des one-liners, pour ça, il vaut mieux lancer un éditeur (%ed est fait pour ça).

        Oui, bien sur, l'omni-complétion de vim marche n'importe où.
        • [^] # Re: vim

          Posté par . Évalué à 2.

          Il fait comment pour deviner le type des paramètres d'une fonction ? (c'est une question rhétorique, il ne peut pas compléter pour les paramètres d'une fonction)
          • [^] # Re: vim

            Posté par (page perso) . Évalué à 3.

            Je ne comprends pas ce que tu veux.
            Tu voudrais compléter sur les arguments ? Un truc du genre def fun(x):
            x.
            ? Là, clairement, non.
            Tu veux que la complétion sur les noms de fonctions et de classes marche à l'intérieur d'une fonction comme elle marche à l'extérieur, pas de problème.

            De toute façon, comme tu l'as déjà remarqué, Python n'est pas typable statiquement donc même sur du code déjà écrit, on peut ne pas savoir le type. Alors aucun éditeur ne pourra toujours te proposer exactement les bons complétements.
    • [^] # Re: vim

      Posté par . Évalué à 1.

      Je viens de l'essayer, ça marche out of the box pour les classes de l'api python, et en plus c'est assez réactif.

      Par contre je n'ai pas su faire marcher la completion a partir de mes classes

      De plus je ne suis pas tres familier avec vi.
      Sait-il faire du debuggage, l affichage d un navigateur de classes, l affichage de plusieurs buffer en separant l ecran ?
      • [^] # Re: vim

        Posté par (page perso) . Évalué à 1.

        À partir de tes propres classes ou modules, ctrl-X ctrl-F peut faire l'affaire.

        > Sait-il faire du debuggage ?

        Non

        > l'affichage d un navigateur de classes

        Oui, avec les 'tags'. Et j'utilise le script taglist pour naviguer http://www.vim.org/scripts/script.php?script_id=273

        > l affichage de plusieurs buffer en separant l ecran ?

        Oui, avec :split et :vsplit
        • [^] # Re: vim

          Posté par . Évalué à 1.

          le ctr-X ctr-F ne fonctionne pas chez moi

          tu utilises pysmell ?
          • [^] # Re: vim

            Posté par (page perso) . Évalué à 1.

            Effectivement, je pensais à Ctrl-n qui essaie tous les mots dans ls fichiers ouverts. ctrl-X-ctrl-F, c'est pour les noms de fichiers... Non, je n'utilise pas pysmell
    • [^] # Re: vim

      Posté par . Évalué à 3.

      Sinon, j'utilise ipython comme shell et interpréteur python et il fait la complétion tout seul comme un grand avec la touche tab.

      Pour avoir la même chose avec cpython, il suffit de mettre dans ton ~/.pythonrc
      try:
          import readline
      except ImportError:
          print ("Module readline not available")
      else:
          import rlcompleter
          readline.parse_and_bind("tab: complete")
  • # A byte of Vim en parle

    Posté par (page perso) . Évalué à 3.

    http://www.swaroopch.com/notes/Vim_fr:%C3%89diteur_Pour_Prog(...)

    If you choose open source because you don't have to pay, but depend on it anyway, you're part of the problem.evloper) February 17, 2014

  • # Non

    Posté par (page perso) . Évalué à 3.

    -et si je fait :
    aaa=""
    aaa.
    ça me sort toutes les méthodes de la classe string, comme c'est le cas dans le shell python


    Ici, ton exemple est trivial.
    Mais dans le cas général, cette complétion est impossible car ça oblige à évaluer le code pour savoir quelle est le type (= la classe) de ton objet aaa.

    Exemple (je connais pas python, donc j'invente un langage, hein)

    aaa=""
    if (random(1.0)>=0.5) {
      aaa=42
    }
    aaa.<completion_automatique>

    Et là, il te sort quoi ? Il complète pour des chaînes ou des nombres ?
    • [^] # Re: Non

      Posté par . Évalué à 3.

      Admettons qu'il y ait un biais dû à une re-definition du type de la variable -au passage, je trouve ça légèrement casse gueule - il n'empêche que j'aimerai que mon éditeur me propose les méthodes et attribus d'au moins une des classes associés à cet objet.

      Même si dans certains -rares ?- cas, ce qu'il propose tombe à côté de la plaque, j'y gagnerais toujours dans la majorité des situations.

      C'est d'ailleurs ce que fait apparement vim, donc ça ne me parait pas impossible.
      • [^] # Re: Non

        Posté par . Évalué à 3.

        C'est impossible pour de nombreux autres cas, exemple :
        "
        def f(a):
        ... a.<tab>
        "
        Tu complètes comment ?
  • # Vim

    Posté par . Évalué à 3.

  • # Ulipad

    Posté par . Évalué à 1.

    Bonsoir,
    Essaye celui la tu verras bien, je débute donc...
    Bonne soirée
  • # geany

    Posté par . Évalué à 2.

    j'ai vu dans le linuxmag de decembre (qui propose une initiation à Python)
    qu'il conseillait l'editeur geany qui serait multiplateforme, et capable de faire de la completion (mais je n'ai pas testé)

    http://www.geany.org/

Suivre le flux des commentaires

Note : les commentaires appartiennent à ceux qui les ont postés. Nous n'en sommes pas responsables.