Autocomplétion interpréteur interactif programmation

surcouf - 12 sept. 2024 à 09:19
mamiemando Messages postés 33266 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 16 septembre 2024 - 16 sept. 2024 à 12:38

Salut à tous,

Une question existentielle : comment est implémentée l'autocomplétion (avec la touche tab) dans un interpréteur interactif d'un langage de programmation ?

Si je lance un interpréteur python3.7 (installé depuis les paquets), un interpréteur php ou encore nodejs, l'autocomplétion avec la touche tab fonctionne très bien, en revanche avec un python2.7 (installé depuis les paquets), ou encore un python3.9 (installé manuellement), l'autocomplétion ne fonctionne pas, est-ce que c'est déterminé avec une option quelconque lors de la compilation ? Ailleurs sur le système avec un fichier de config (Debian) à éditer ? Autrement ?

1 réponse

mamiemando Messages postés 33266 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 16 septembre 2024 7 777
Modifié le 13 sept. 2024 à 11:09

Bonjour,

En pratique, l'auto-complétion est réalisée par le programme dans lequel tu tapes du texte, typiquement :

  • l'interpréteur dans lequel tu tapes des commandes ;
  • l'IDE dans lequel tu programmes ;
  • l'éditeur texte dans lequel tu programmes.

Note que certains interpréteurs et éditeurs textes n'auto-complètent forcément pas par défaut :

  • en bash, il faut installer le paquet bash-completion et s'assurer que l'auto complétion est chargée au démarrage du bash (généralement, c'est réalisé par ton profil bash, le fichier ~/.bashrc) ;
  • en python, il vaut mieux utiliser un interpréteur évolué (par exemple ipython3) car l'interpréteur par défaut (python3) est assez basique ;
  • pour développer il vaut mieux travailler dans un outil adapté au langage dans lequel on programme (Jupyter Lab, PyCharm, etc) plutôt qu'un éditeur texte généraliste, ou s'assurer que ce dernier peut et est configuré pour auto-compléter le langage dans lequel tu programmes.

Jupyter Lab est sans doute un bon début. Intuitivement, c'est un interpréteur python3 qui se lance dans ton navigateur par dessus ipython3. Du coup c'est assez pratique car tu as en plus la souris, des onglets, un explorateur de fichiers, etc.

sudo apt update
sudo apt install python3-pip ipython3
pip3 install jupyterlab
jupyter lab

Sur de gros projets, un IDE comme PyCharm est probablement plus indiqué, mais ça n'a rien d'obligatoire. Par exemple, je développe mes nouvelles fonctionnalités dans Jupyter Lab et ensuite je les injecte dans le paquet que je développe avec vim. Mais si tu ne connais pas vim, je ne te conseille pas de l'utiliser car il y a un coût d'apprentissage non négligeable pour être efficace.

Pour plus de précisions sur ton problème, il faudrait nous en dire plus (dans quel logiciel le problème survient, qu'est ce que tu cherches à auto-compléter, etc.).

Bonne chance

0

Bonjour,

Ce n'est pas un problème, mais uniquement une interrogation, donc ce n'est pas très important.

Je pense ne pas m'être bien fait comprendre, je parle bien d'un interprêteur interactif lancé depuis un simple terminal, donc, que ce soit python, php, nodejs.

Si je lance un iterpréteur php et que j'entre arr et que j'appuie sur la touche tab, j'ai donc une proposition de toutes les fonctions et mots clefs de php.
 

cadet@maman:~$ php -a
Interactive mode enabled

php > arr
array_change_key_case    array_key_exists         array_slice             
array_chunk              array_key_first          array_splice            
array_column             array_key_last           array_sum               
array_combine            array_keys               array_udiff             
array_count_values       array_map                array_udiff_assoc       
array_diff               array_merge              array_udiff_uassoc      
array_diff_assoc         array_merge_recursive    array_uintersect        
array_diff_key           array_multisort          array_uintersect_assoc  
array_diff_uassoc        array_pad                array_uintersect_uassoc 
array_diff_ukey          array_pop                array_unique            
array_fill               array_product            array_unshift           
array_fill_keys          array_push               array_values            
array_filter             array_rand               array_walk              
array_flip               array_reduce             array_walk_recursive    
array_intersect          array_replace            ArrayAccess             
array_intersect_assoc    array_replace_recursive  ArrayIterator           
array_intersect_key      array_reverse            ArrayObject             
array_intersect_uassoc   array_search            
array_intersect_ukey     array_shift             
php > arr

Cela fonctionne aussi très bien avec python3.7, nodejs, et sans doute d'autres langages de scripts installés depuis les paquets.

Mais avec mon installation manuelle de python 3.9, cela ne fonctionne pas, la touche tab fait une ... tabulation ... dans l'interprèteur au lieu d'avoir le même fonctionnement que python 3.7

Je ne suis pas un débutant Linux, bon pas du tout un expert non plus ^-^, mais cela fait plus de 20 ans que je suis sur Debian.

Merci de ta réponse =)

0
mamiemando Messages postés 33266 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 16 septembre 2024 7 777 > surcouf
16 sept. 2024 à 12:38

Bonjour

Merci pour ton retour. A priori il n'y a rien à configurer, l'auto-complétion est sensé marcher directement.

  • Quel interpréteur python utilises-tu ? python3.9 ? As-tu essayé d'utiliser ipython à la place ?
  • Peux-tu préciser comment tu procèdes pour faire une installation manuelle de python ? Utilises-tu anaconda ?
  • Vu que tu utilises Debian, tu devrais plutôt installer python/ipython via apt. De plus, si ta Debian est récente, ta version de python devrait être sensiblement plus récente. À titre indicatif, en Debian testing, on actuellement est en python3.12. Juste par curiosité, peux-tu expliquer pourquoi tu as procéder autrement ?

Bonne chance

0