23 points par GN⁺ 2024-10-30 | 6 commentaires | Partager sur WhatsApp

Qu’est-ce que Cursor

  • Cursor est un fork de Visual Studio Code (VS Code), avec des fonctionnalités basées sur les Large Language Models (LLM) intégrées à l’interface principale
  • C’est un produit propriétaire avec une offre gratuite et des options d’abonnement
  • Principales fonctionnalités :
    • Autocomplétion Tab : un modèle propriétaire affiné pour l’autocomplétion de code et le passage à l’action suggérée suivante, réservé aux abonnés
    • Édition inline : une interface de type chat, disponible pour les utilisateurs gratuits et payants, qui permet de modifier le code sélectionné avec une vue diff
    • Barre latérale de chat : une interface de type chat, disponible pour les utilisateurs gratuits et payants, qui offre plus d’espace pour des discussions plus longues
    • Composer : une interface de type chat conçue pour les refactorings de grande ampleur sur plusieurs fichiers, disponible pour les utilisateurs gratuits et payants

Autocomplétion Tab

  • La fonctionnalité la plus naturelle à utiliser en écrivant du code, et celle qui fait gagner le plus de temps
  • Elle ne se contente pas de suggérer des complétions pour une ligne, plusieurs lignes ou une fonction entière, elle suggère aussi la ligne suivante à modifier pour l’édition suivante
  • On peut appuyer plusieurs fois sur la touche Tab pour autocompléter automatiquement des modifications liées dans tout le fichier
  • Peut servir d’outil de refactoring
  • Trouve parfois des bugs de manière autonome et propose des corrections
  • Si l’on entoure une chaîne de guillemets, son contenu est correctement échappé
  • Peut écrire une fonction entière à partir de la signature de fonction et d’un docstring optionnel
  • Les suggestions de complétion sont très rapides
  • Inconvénients :
    • Si l’on ne voit pas la suggestion à temps et que l’on continue à taper, la suggestion disparaît
    • Il arrive qu’après avoir volontairement refusé une mauvaise complétion, l’acceptation d’une autre complétion applique discrètement la suggestion précédemment refusée

Édition inline, barre latérale de chat et Composer

  • L’interaction avec le modèle sous-jacent (principalement Claude 3.5 Sonnet) est très similaire, les différences se situant surtout dans l’interface utilisateur
  • L’édition inline s’ouvre avec Ctrl-K/Cmd-K ; on saisit la modification souhaitée, puis on obtient un diff que l’on peut accepter ou refuser
  • La barre latérale de chat s’ouvre avec Ctrl+L/Cmd+L et offre plus d’espace pour échanger en plusieurs tours
  • Composer est conçu pour les refactorings sur plusieurs fichiers et offre une meilleure expérience utilisateur pour examiner plusieurs diff de fichiers, un par un

Fichier .cursorrules

  • Le contenu du fichier .cursorrules placé à la racine de l’espace de travail est toujours inclus dans les différents formats de chat afin de fournir du contexte supplémentaire
  • Il sert à informer le LLM des standards de code du dépôt, des packages courants et d’autres documents
  • Cela peut aider à résoudre l’un des grands obstacles de Cursor : la difficulté à suivre des styles et des patterns de code s’ils n’existent pas déjà dans le fichier en cours d’édition
  • Comme il n’existe actuellement qu’un seul fichier par espace de travail, les monorepos contenant du code dans plusieurs langages sont plus difficiles à configurer que les petits dépôts avec un ensemble de code réduit et cohérent sur le plan du style
  • Le fichier .cursorrules n’est utilisé que pour les interfaces de chat, pas pour l’autocomplétion Tab

Changement de workflow

  • Le point le plus intéressant n’est pas simplement que l’on puisse écrire du code plus vite
  • En pratique, l’écriture du code n’est pas elle-même le goulot d’étranglement
  • La vraie valeur réside dans le changement de la manière d’écrire le code
  • Ce qui a changé :
    1. Il est bien moins probable de chercher une nouvelle bibliothèque ou un nouveau framework
      • Pour de petits utilitaires, il est plus simple de laisser le LLM écrire quelque chose d’adapté aux besoins spécifiques que d’importer une bibliothèque générique
      • Beaucoup de bibliothèques n’existent que pour réduire le boilerplate, mais comme le LLM peut s’en charger, leur coût semble moins justifié
    2. On se préoccupe moins d’appliquer strictement le principe DRY (Don't Repeat Yourself) dans son propre code
      • Définir des abstractions trop tôt peut créer beaucoup de dette technique par la suite
      • Comme on peut produire beaucoup de code en se référant à d’autres morceaux de code sans chercher à en faire des fonctions ou des classes, cela apporte plus de flexibilité
    3. On est beaucoup plus enclin à utiliser des langages ou des frameworks moins familiers
      • Par exemple, il était difficile d’utiliser R auparavant, mais maintenant il suffit de décrire la visualisation souhaitée pour obtenir les bonnes manipulations de données et une visualisation ggplot
    4. On itère rapidement sur de petits composants avant de les intégrer dans une base de code plus large
      • C’est en partie une manière de contourner les limites des LLM, mais cela ouvre aussi des façons de travailler intéressantes qui n’avaient pas été envisagées auparavant

Résumé

  • À l’heure actuelle, Cursor est le meilleur exemple du potentiel des assistants de programmation basés sur les LLM
  • Si vous voulez explorer la manière dont ce type d’outil peut apporter de la valeur, cela vaut la peine d’essayer Cursor

Avis de GN⁺

  • Cursor semble être un bon exemple du potentiel des outils de programmation basés sur les LLM
    • En particulier, la fonctionnalité d’autocomplétion Tab est séduisante car elle s’utilise naturellement pendant l’écriture du code et fait gagner beaucoup de temps
    • Les fonctionnalités basées sur le chat semblent elles aussi utiles pour le refactoring, les transformations de code, etc.
  • Cela dit, comme la technologie en est encore à ses débuts, il semble y avoir aussi des limites
    • La difficulté à appliquer un style de code cohérent
    • Des problèmes d’utilisabilité dans des structures de projet complexes comme les monorepos
    • Le fait que la différence de fonctionnalités entre utilisateurs gratuits et payants ne soit pas clairement établie
  • Parmi les autres outils offrant des fonctions similaires, on peut citer GitHub Copilot, Tabnine et Kite
    • Chaque outil ayant ses avantages et ses inconvénients, le choix dépendra des caractéristiques du projet ou des préférences personnelles
  • Lors de l’adoption d’outils de programmation basés sur les LLM, les points suivants méritent d’être pris en compte
    • L’adhésion de l’équipe de développement : existe-t-il une réticence à adopter un nouvel outil ?
    • Le coût d’apprentissage : combien de temps faudra-t-il pour apprendre à l’utiliser ?
    • La maintenabilité : le code généré par l’outil est-il facile à comprendre et à maintenir ?
    • La qualité du code : aide-t-il réellement à améliorer la qualité du code ?
    • Le rapport coût/efficacité : les gains de productivité compensent-ils les coûts d’adoption et de maintenance ?

6 commentaires

 
yangeok 2024-11-08

Le chat de Cursor, c’est la clé. C’est vraiment pratique pour générer des docstrings.

 
roxie 2024-11-04

Après avoir utilisé Cursor, j’ai l’impression que l’autocomplétion de Copilot est vraiment trop lente. T_T

 
yangeok 2024-10-30

L’autocomplétion par tabulation est-elle réservée aux utilisateurs payants ?

 
angelkum 2024-10-31

C’est bien réservé aux abonnés, mais il existe un abonnement gratuit qui offre 2 000 autocomplétions par mois. Je l’utilise comme ça depuis 3 mois.
https://www.cursor.com/pricing

 
savvykang 2024-10-31

Autocomplétion avec Tab : autocomplétion de code réservée aux abonnés

Oui

 
rlahfl 2024-10-31

C’est écrit dans l’article, haha.