Comment écrire du code avec Cursor
(arguingwithalgorithms.com)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é :
- 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é
- 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é
- 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
- 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
- Il est bien moins probable de chercher une nouvelle bibliothèque ou un nouveau framework
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
Le chat de Cursor, c’est la clé. C’est vraiment pratique pour générer des docstrings.
Après avoir utilisé Cursor, j’ai l’impression que l’autocomplétion de Copilot est vraiment trop lente. T_T
L’autocomplétion par tabulation est-elle réservée aux utilisateurs payants ?
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
Oui
C’est écrit dans l’article, haha.