On va créer pas-à-pas un raccourci qui nous permettra de générer un IBAN et de l’insérer à l’endroit où se trouve notre curseur. Si vous n’avez pas fait le setup pour développer un plugin Jetbrains, je vous invite à lire notre article sur le sujet.
Sommaire
I. Créer l’action
Une action est une fonctionnalité qui va être déclenchée par l’utilisateur. Dans le code, une action est une classe qui étend la classe abstraite AnAction() et implémente la méthode “actionPerformed”.
Comme son nom l’indique, c’est la méthode qui sera appelée au déclenchement de l’action. On aura alors:
internal class GenerateIbanAction : AnAction() {
override fun actionPerformed(e: AnActionEvent) {
TODO("Not yet implemented")
}
}
On va ensuite ajouter la logique:
override fun actionPerformed(e: AnActionEvent) {
val editor = e.getRequiredData(CommonDataKeys.EDITOR)
val project = e.getRequiredData(CommonDataKeys.PROJECT)
val document = editor.document
val caretModel = editor.caretModel
val iban = FrenchIban.create()
WriteCommandAction.runWriteCommandAction(project) {
document.insertString(editor.caretModel.offset, iban.getValue())
caretModel.moveToOffset(caretModel.offset + iban.getValue().length)
}
}
La logique est très simple ici: on récupère le document courant et on insère l’iban (généré via la méthode FrenchIban.create()) au niveau de notre curseur.
La dernière ligne permet au curseur de se déplacer à la fin de l’IBAN pour plus de praticité.
On a dû utiliser WriteCommandAction.runWriteCommandAction(project) car on écrit dans un document.
II. Enregistrer l’action
Pour que l’action soit disponible dans la liste des actions, il faut aller dans le fichier plugin.xml et ajouter les lignes suivantes:
<actions>
<action
id="com.github.maximedezette.ibangenerator.actions.GenerateIbanAction"
class="com.github.maximedezette.ibangenerator.actions.GenerateIbanAction"
text="Generate a random french IBAN"
/>
</actions>
Chaque action de notre plugin sera à déclarer dans le bloc <actions> </actions>.
Si on lance notre plugin et qu’on liste les actions, on peut déjà voir que l’action est disponible.
Note: pour lister les actions, le raccourci par défaut est ctrl + shift + A.
Enfin, on va lier notre action à un raccourcis (j’ai choisi alt + I pour l’exemple)
<actions>
<action
id="com.github.maximedezette.ibangenerator.actions.GenerateIbanAction"
class="com.github.maximedezette.ibangenerator.actions.GenerateIbanAction"
text="Generate a random french IBAN"
>
<keyboard-shortcut
keymap="$default"
first-keystroke="alt I"
/>
</action>
</actions>
Nos utilisateurs vont bien évidemment pouvoir modifier ce raccourcis à leur convenance:
Avant .Net 8, tester du code qui utilise DateTime.Now() n’était pas trivial, on devait faire en sorte de mocker la Clock dans nos tests. Depuis .Net 8, c’est beaucoup plus facile grâce à TimeProvider inclut par défaut !
En deux mots, TimeProvider est une classe abstraite et on va pouvoir injecter dans nos tests une implémentation “Fake” qui va nous permettre de changer la date actu...
La gestion des erreurs de son API est très importante pour que les consommateurs puissent avoir une description claire du problème mais c’est souvent fastidieux à maintenir.
On va voir comment avoir des statuts de réponse cohérent et des messages d’erre...
On va voir comment avoir en quelques minutes des assertions qui vont vérifier les endpoints de notre API avec des scénarios de ce genre:
Feature: Create a new account
As a visitor,
I can create an account to access the game
Scenario: A visitor c...
Depuis .NET 9, le le support d’OpenAPI est directement inclus dans .NET et ne passe plus par les librairies Swagger par défaut (plus d’info sur ce choix ici si jamais ça vous intéresse).
De façons simplifiée, la librairie Swashbuckle.AspNetCore.Sw...