Theodo apps

Faites des Plugins pas la Guerre: REX sur ma bataille pour écrire un plugin

Imaginez commencer chaque projet avec tous les outils configurés et prêts à l’emploi. Le rêve, non ? En tant que développeur Android, j’ai toujours eu à portée de main les outils nécessaires pour lancer un projet rapidement et ajouter des fonctionnalités en un clin d'œil. Mais lorsque je me suis aventuré dans l’univers de Kotlin Multiplatform Mobile (KMP), le manque d’outils prêts à l'emploi m’a ralenti. Résolu à améliorer ma productivité, j’ai décidé de créer un plugin. Ce fut un parcours semé d’embûches, mais aujourd’hui, je partage mon retour d’expérience pour aider d’autres développeurs à éviter ces pièges.

Dans cet article, je parle de plugin JetBrains, les extensions pour VS Code peuvent être similaires sur certains aspects. Pour plus d'informations, rendez-vous sur le site officiel de VS Code.

Créer un plugin ou non ? Les alternatives existantes

Créer un plugin est une démarche lourde : pour l'essayer, il faut lancer une instance séparée de l'IDE, ce qui peut être chronophage. La grande majorité des IDE JetBrains proposent déjà plusieurs outils intégrés. Selon vos besoins, certains peuvent suffire. Avant de vous lancer dans la création d'un plugin complet, considérez ces alternatives :

  • Live Template: ce sont en fait des snippets qui s’invitent dans votre code lorsque vous tapez un mot clef. Je m’en sers énormément sur Android pour écrire mon code boilerplate.
  • File Template : la même chose mais au niveau des fichiers, idéal pour créer tous les fichiers que constituent un nouvel écran. Je les utilise également très souvent.
  • Postfix Completion : ils ressemblent beaucoup aux live templates sauf qu’il peuvent imbriquer votre code dans un template. Idéal pour encapsuler votre code dans un try-catch par exemple.
  • Structural Search and Replace Inspections : vous connaissez le search and replace ? Voici sa version survitaminée, vous pouvez même automatiser des “replace”.
  • IDE Scripting Console : vous pouvez écrire des scripts avec JS, Kotlin ou Python ayant accès aux APIs de l’IDE. Ce qui fait de ces scripts une version très légère d’un plugin.
  • Flora Plugin : vous permet d’ajouter des actions, des raccourcis et des fenêtres d'outils en utilisant Kotlin et JavaScript. Un équivalent des plugins mais en plus léger.
  • LivePlugin : offrant des fonctionnalités similaires à Flora, les LivePlugins incluent également des intentions, en utilisant Groovy et Kotlin.

Un plugin vous permet cependant d’aller encore plus loin en combinant ces fonctionnalités avec l’accès aux données du projet et l’utilisation de l’API de l’IDE pour créer des actions plus complexes. Des outils externes à l’IDE, comme le Compose Multiplatform Wizard, peuvent aussi vous aider. Dans mon cas, j’ai dû aller plus loin en créant mon propre plugin.

Pourquoi un plugin peut booster votre productivité

Un plugin peut faire bien plus que modifier l’apparence de votre outil : il transforme votre IDE en un environnement parfaitement adapté à vos besoins. Voici quelques-unes des fonctionnalités puissantes que vous pouvez intégrer :

  • Action : c’est une action rapide accessible via des menus contextuels, vous pouvez y associer un raccourci clavier. Pour mon plugin c’est ce qui était le plus adapté.
  • Intent Action : c’est une action adaptée au contexte de votre code.
  • Tool Window : on parle ici d’une interface personnalisées pour visualiser des informations précieuses liés à votre projet.
  • Editor Inspection et Highlighting : détection et correction des erreurs ou mauvaises pratiques.
  • Access to Project Data : depuis un plugin vous pouvez bien sur analyser ou transformer les données de votre projet.
  • Version Control Integration : les plugins peuvent aussi utiliser des fonctionnalités avancées pour le contrôle de version.

Créer un plugin, c’est faire un bond en avant en matière de productivité, pour les projets complexes, répétitifs et même pour démarrer un POC en un clin d’oeil.

Si vous voulez plus de documentation sur la création de plugins, je vous recommande le site officiel de JetBrains.

Quelques pièges rencontrés

Ne confondez pas un plugin Gradle avec un plugin IntelliJ

Un plugin Gradle configure votre projet (comme l’Android Gradle Plugin, AGP) et s’ajoute à vos fichiers build.gradle. Un plugin IntelliJ, comme GitHub Copilot, agit directement dans votre IDE et s’installe via le marketplace JetBrains. Il se nomme plugin “intelliJ” mais rassurez-vous, il fonctionne sur tous les IDE jetbrains qui ont accès au marketplace de plugins.

Choix de version 1.x ou 2.x

Pour construire un plugin, vous avez le choix entre deux configurations :

  • Gradle IntelliJ Plugin (1.x)
  • IntelliJ Platform Gradle Plugin (2.x)

La version 1 n’est plus maintenue. Je vous conseille donc la version 2. Si, comme moi, vous avez utilisé un template de plugin avant l’été 2024, vous avez probablement la version 1. Migrer vers la version 2 nécessite quelques ajustements dans vos fichiers Gradle. Un plugin Gradle dédié facilite cette migration.

Attention : le plugin DevKit (Plugin DevKit) est basé sur la version 1.x.

Plugins pour Fleet

Fleet est le nouvel IDE de JetBrains conçu pour le développement Kotlin Multiplatform. Le développement des plugins pour Fleet ne prend en charge que les thèmes pour le moment, sans support pour des actions personnalisées ou fenêtres d’outils. Son développement diffère des autres plugins IntelliJ.

Problèmes de compatibilité avec les mises à jour de l’IDE

Après une mise à jour de l’IDE, les actions de mon plugin avaient disparues. J’ai dû mettre à jour mon plugin pour le rendre compatible. Cela s’explique par une plage de version mal définie. En spécifiant uniquement une version minimale, vous évitez ce problème, mais prenez le risque que votre plugin plante sur les nouvelles versions de l’IDE.

La target version, un piège courant

Outre la plage de versions, vous devez spécifier la version ciblée de l’IDE. Celle-ci sert à résoudre les dépendances et à tester votre plugin en mode debug. Si vous ciblez une version incompatible (comme androidStudio("2024.2.1")), vous pourriez rencontrer des problèmes. Un workaround est disponible ici.

Les bénéfices de cette expérience

Cette aventure, en plus de m’avoir permis de créer un plugin améliorant ma devX, m’a fait découvrir des outils comme Flora, LivePlugin et le Structural Search and Replace. Ces outils augmenteront ma productivité pour mes futurs projets. Si vous voulez plus d’info sur mon plugin, n’hésitez pas à me contacter.

Conclusion

Depuis que je me concentre sur l’amélioration de ma devX, je perds beaucoup moins de temps sur les tâches répétitives du quotidien. Ce sont parfois des petites optimisations, mais elles s’accumulent : gagner 5 minutes par jour représente finalement près de 2 jours par an. Pour moi, ça a commencé par identifier les tâches les plus chronophages et chercher des moyens de les automatiser.

Bien sûr, tout n’a pas été simple : développer ce plugin m’a pris deux semaines complètes. Avec le recul, je réalise que des solutions plus simples auraient parfois suffi. Si je peux vous donner un conseil, ce serait de peser le coût et le bénéfice de chaque outil ou amélioration. L’essentiel, c’est de concentrer vos efforts là où l’impact est le plus significatif. Une devX optimisée, c’est autant de temps gagné pour se concentrer sur le code qui apporte vraiment de la valeur.

Ressources

Développeur mobile ?

Rejoins nos équipes