Sommaire

00:10 – Générer un modèle avec Run Anything
01:30 – Saisie automatique du code
02:35 – Aller à la définition
04:06 – Documentation rapide
04:36 – Saisie automatique postfix
05:22 – Intégration RuboCop et actions d'intention (correctifs rapides)
08:20 – Afficher les fichiers récents/récemment édités
09:04 – Vérificateur RegExp
09:58 – Popup File Structure
10:39 – Options de formateur de code et de style de code
12:10 – Aller au symbole associé (entité Rails associée)
12:40 – Naviguer entre les méthodes dans l'éditeur
12:51 – Refactorisation : Extract Method
14:15 – Refactorisation : Rename
15:50 – Curseurs multiples

Générer un modèle avec Run Anything

Nous allons maintenant créer un nouveau modèle et y ajouter du contenu pour vous montrer les différentes compétences de RubyMine en matière d'édition de code. Pour commencer, je vais appuyer deux fois sur Contrôle pour ouvrir l'action Run Anything. Cette action peut être utilisée pour exécuter n'importe quelle configuration, script, commande, tâches Rake, générateurs Rails, et même des commandes de console.

Je peux commencer par taper quelque chose comme « rails g model », ou à la place je peux juste insérer « Model » et RubyMine comprendra que je cherche un générateur de modèle et le proposera dans la liste de saisie automatique.

Je vais appuyer sur Entrée et voir le wrapper de l'interface utilisateur pour le générateur de modèles. Le même que vous trouverez pour le contrôleur, la migration et les autres générateurs.

Ici, je peux indiquer le nom de mon modèle, qui sera Post, et ses champs : content: text (maintenant, comme vous pouvez le voir, RubyMine fournit la saisie automatique des données de code pour les types de champs). Les autres champs seront “picture: string”. Je peux également fournir des options supplémentaires. Je vais ignorer et appuyer sur OK.

L'IDE va lancer le générateur, ouvrir la fenêtre de l'outil Run, me montrer le résultat de ma commande et me permettre de naviguer dans chaque fichier créé. Il ouvrira également le fichier de migration et le modèle post dans l'éditeur par défaut.

Laissez-moi fermer la fenêtre de l'outil Run et je suis maintenant prêt à ajouter du contenu à mon modèle nouvellement créé. Ajoutons maintenant quelques associations. Tout d'abord, faisons en sorte que notre Post appartienne à l'utilisateur par le biais de l'association “belongs_to”.

Saisie automatique du code

Comme RubyMine indexe votre application à chaque démarrage, il vous fournit ensuite un certain nombre de fonctionnalités d'aperçu de code, comme la saisie automatique du code pour les classes, méthodes et autres entités déclarées dans votre application ou dans Ruby, Rails et autres gemmes.

Voici donc comment vous obtenez la saisie automatique pour “belongs_to”. Utilisons la saisie automatique. RubyMine est également assez intelligent pour comprendre que nous cherchons un modèle ici, et en effet nous cherchons le modèle d'utilisateur, donc utilisons également la saisie automatique.

L'application d'exemple utilise la gemme carrierwave pour transférer des photos. Et pour associer des photos à notre modèle, nous devrons utiliser une méthode personnalisée à partir de cette gemme appelée “mount_uploader”. Et comme vous pouvez le voir, comme cette gemme est installée pour notre application, RubyMine propose également de saisir automatiquement cette méthode.

La saisie automatique de code n'est pas la seule fonctionnalité d'aperçu de code de RubyMine. L'une des capacités les plus importantes de RubyMine est la possibilité de naviguer vers la définition de toute entité déclarée à l'intérieur ou à l'extérieur de votre application. Par exemple, nous pouvons naviguer rapidement vers la définition du modèle d'utilisateur. Pour ce faire, nous allons survoler le nom du modèle et appuyer sur Contrôle, ou Commande selon votre système d'exploitation, et cliquer dessus.

Bon, maintenant nous sommes passés au modèle et nous pouvons ajouter une association ici aussi. De même, nous pouvons naviguer jusqu'à la définition de l'association “belongs_to” . Nous sommes donc maintenant passés à la gemme active record, le fichier associations.rb. Laissez-moi vous montrer cela dans la fenêtre de l'outil Project.

Donc, nous sommes en dehors de notre application et des bibliothèques externes, la gemme active record, le fichier associations.rb. Et de même, nous pouvons naviguer vers cette méthode, qui est la gemme carrierwave, ou le fichier activerecord.rb, et ainsi de suite.

Ajoutons maintenant une méthode qui permettra de vérifier la taille de notre image et de fournir une erreur si l'image est trop grande. Nous l'appellerons picture_size: “picture.size > 5.megabytes”. Maintenant, il semble que j'ai deux méthodes d'apparence similaire ici. Que faire si je ne sais pas laquelle utiliser ? Au lieu de rechercher sur Google chacune de ces méthodes ou de consulter la documentation, je peux appuyer sur F1 et accéder à la documentation rapide de chacune de ces méthodes directement dans l'IDE.

Ainsi, la méthode megabytes renvoie le nombre d'octets équivalent aux mégaoctets fournis et c'est la méthode que je recherche. Et la seconde n'est qu'un alias pour la première, donc je peux utiliser n'importe laquelle d'entre elles.

Saisie automatique postfix

Maintenant, il semble aussi que j'ai oublié d'en faire une déclaration if, mais au lieu de remonter dans le code, je vais juste insérer un point (.) et taper if ce qui me permettra d'envelopper cette ligne avec une déclaration if comme ceci : “if picture.size> 5.megabytes”. Cette fonction est appelée “saisie automatique postfix” et elle vous permet de compléter, de modifier ou d'inverser vos déclarations sans revenir en arrière dans le code.

Vous pouvez voir la liste de tous les modèles de code postfix dans les paramètres, à la fois avec JavaScript et avec Ruby. Vous pouvez également découvrir à quoi ils ressembleront, et activer et désactiver ceux que vous voulez.

Intégration RuboCop et actions d'intention (correctifs rapides)

Finissons maintenant la méthode. Réactivons RuboCop pour voir si nous avons des violations de style de code dans notre fichier. Apparemment, nous avons quelques problèmes. Pour voir une description d'erreur dans chaque ligne, vous pouvez aller dans la partie droite de l'éditeur et naviguer vers chaque élément mis en évidence. Vous pouvez également survoler le texte en surbrillance et y voir la description de l'erreur.

Enfin, si vous ne voulez pas utiliser la souris, vous pouvez simplement appuyer sur F2 pour passer à l'erreur suivante dans le fichier, et ensuite appuyer sur Commande+F1 ou Contrôle+F1 pour voir la description de l'erreur.

Dans ce cas particulier, le problème est que j'utilise des chaînes avec des guillemets doubles au lieu de chaînes avec des guillemets simples. Et pour régler cela avec RuboCop, je peux appuyer sur Alt+Entrée et corriger toutes les infractions RuboCop dans le fichier ou les corriger par type d'infraction ou par département cop. Réglons tous les problèmes de RuboCop dans ce fichier.

Bien. Ce problème disparaît, mais il nous reste encore quelques points à régler. Tout d'abord, nous avons ici une déclaration de plusieurs lignes au lieu d'une ligne unique. Malheureusement, RuboCop ne fournit pas de correctif rapide pour cela, mais RubyMine le fait.

Pour y accéder, appuyez de nouveau sur Alt+Entrée. Et comme vous pouvez le voir, nous pouvons convertir la déclaration en modificateur, ce qui signifie que nous pouvons faire de cette déclaration if une déclaration d'une ligne. Appuyons sur Entrée, et comme vous pouvez le voir, cette erreur disparaît.

Cependant, nous avons quelques problèmes gênants selon RuboCop. Tout d'abord, cette ligne est maintenant trop longue. Un autre problème est que nous n'avons pas de commentaire de documentation pour notre classe. Pour se débarrasser de ces problèmes, créons un fichier de configuration RuboCop supplémentaire.

Pour ce faire, nous allons aller à la racine de notre projet et créer un fichier de configuration RuboCop, .rubocop.yml. RubyMine nous demandera si nous voulons ajouter le nouveau fichier à Git. Nous allons appuyer sur “Yes” pour l'instant, mais nous découvrirons les fonctionnalités VCS un peu plus tard.

Ajoutons des règles supplémentaires pour nous débarrasser des problèmes gênants. Revenons au modèle. Je vais enregistrer manuellement le fichier pour appliquer les changements plus rapidement, et comme vous pouvez le voir, RubyMine respecte le fichier de configuration RuboCop donc ces erreurs disparaissent.

Voyons ce que RubyMine peut faire d'autre pour nous. Vous avez probablement remarqué que j'ai pu fermer tous les fichiers, sauf celui qui est actuellement ouvert dans l'éditeur. Pour ce faire, survolez l'onglet, maintenez la touche Alt et cliquez sur le bouton Close. Et maintenant, vous vous êtes débarrassé de tous les fichiers mais pas de celui qui est actuellement ouvert dans l'éditeur, mais je vais fermer ce fichier pour l'instant aussi parce que je n'en ai plus besoin. Et je vais aussi fermer la fenêtre de l'outil Project.

Afficher les fichiers récents/récemment édités

Maintenant, je veux naviguer vers mon modèle d'utilisateur. Pour ce faire, je peux utiliser une autre fenêtre contextuelle très utile appelée Recent Files. Il faut faire Commande+E ou Contrôle+E, selon votre système d'exploitation. Cela vous permet de naviguer vers les fichiers récemment ouverts. Comme vous vous en doutez, la recherche fonctionne ici aussi, donc je peux faire quelque chose comme ça, mais le résultat est une fenêtre similaire qui s'appelle Recently Edited Files, et comme vous vous en souvenez, nous avons déjà modifié notre modèle d'utilisateur auparavant en y ajoutant une association. On peut donc l'ouvrir d'ici.

Vérificateur RegExp

Commençons par peaufiner quelques éléments. Nous avons ici quelques problèmes RuboCop dont nous pouvons nous débarrasser. Et voici un autre bon exemple d'utilisation des actions d'intention dans RubyMine. Nous avons ici une expression régulière qui vérifie si un utilisateur fournit une adresse e-mail valide. Donc, pour vérifier cette expression régulière, nous pouvons à nouveau appuyer sur Alt+Entrée et choisir Check RegExp, et fournir quelques exemples. Celui-ci ne correspond pas. Celui-ci non plus. Pourquoi pas quelque chose comme name@email.com ? Ok. Celui-ci correspond. Bien. Voici comment cela fonctionne.

Ici, nous pouvons également remplacer le nom de la classe par self et nous débarrasser de cet opérateur ternaire que nous aurions dû utiliser pour des déclarations sur plusieurs lignes. Donc, faisons une déclaration if/end.

Popup File Structure

Nous avons donc ici un modèle assez dense, et pour naviguer plus rapidement entre ses méthodes, nous pourrions utiliser la fenêtre contextuelle File Structure. Cette fenêtre vous permet de naviguer entre différentes méthodes dans un fichier, et la recherche fonctionne également ici. Nous pouvons donc essayer de nous rendre à certaines de nos méthodes privées comme celle-ci.

Comme vous pouvez le voir, nous avons une indentation supplémentaire pour nos méthodes privées, et, par défaut, RuboCop considère cela comme une violation du style de code, donc j'ai édité mon fichier de configuration pour me débarrasser de cette infraction. La raison pour laquelle j'ai fait cela est que de nombreux développeurs préfèrent en fait ajouter une indentation supplémentaire pour leurs méthodes privées et protégées.

Options de formateur de code et de style de code

En ce qui concerne le style de code, RubyMine fournit un formateur de code intégré qui reformate votre code selon le Ruby Style Guide et selon certaines options que vous pouvez ajuster dans les paramètres.

Pour reformater votre code, vous pouvez aller à Code| Reformat Code ou utiliser un raccourci. Et comme vous pouvez le voir, RubyMine a reformaté nos méthodes privées, et les a harmonisées avec le reste des méthodes.

À ce sujet, si vous choisissez seulement cette méthode particulière et que vous appuyez à nouveau sur l'action Reformat, RubyMine reformatera seulement cette sélection précise.

La raison pour laquelle RubyMine met en évidence nos méthodes privées est que c'est ce qu'il est censé faire maintenant, selon les paramètres. Donc, si vous allez dans les paramètres, cherchez le Code Style. Il nous en faut un pour le langage Ruby. Toutefois, il en résulte un certain nombre d'options de style de code pour divers langages et technologies. Mais ici, dans la section Ruby, comme vous pouvez le voir, nous pouvons choisir si nous voulons ajouter une indentation supplémentaire pour nos méthodes privées et protégées, et le volet Preview vous montre également ce qui va être modifié.

Il existe également d'autres options de style de code, par exemple, vous pouvez ajouter des espaces autour des hashrockets, des accolades dans les blocs, des hashs, et d'autres choses encore.

Appuyons sur Apply et OK. Reformatons à nouveau notre code et, comme vous pouvez le voir, RubyMine ajoute maintenant une indentation supplémentaire pour nos méthodes privées. Voici donc comment fonctionne le formateur de code dans RubyMine.

Aller au symbole associé (entité Rails associée)

Examinons maintenant d'autres choses liées à l'utilisateur. Pour ce faire, nous pouvons aller dans Navigate | Related Symbol..., ce qui ouvrira une fenêtre contextuelle qui montrera toutes les entités liées à l'utilisateur. Il y a donc un contrôleur, un assistant, un certain nombre de vues et des tests. Allons au contrôleur.

Naviguer entre les méthodes dans l'éditeur

Apparemment, nous avons ici comme d'habitude un certain nombre de problèmes RuboCop. Réglons tous ces problèmes à la fois. Nous avons un certain nombre d'actions Rails ici. Au fait, pour naviguer entre les différentes actions et méthodes, vous allez utiliser Contrôle+⇧ et Contrôle+⇩ou Alt+⇧ et Alt+⇩ selon le système d'exploitation.

Refactorisation : Extract Method

Il semble donc que nous fassions souvent la même chose pour différentes actions. Nous trouvons un utilisateur dans la base de données par son ID et nous l'assignons à une variable d'instance user. Au lieu de cela, pourquoi ne pas simplement refactoriser ce morceau de code selon sa propre méthode.

Pour ce faire, nous allons aller dans le menu Refactor et choisir la fenêtre Refactor. Comme vous pouvez le voir, RubyMine propose plusieurs refactorisations différentes. Par exemple, vous pouvez extraire des variables, des constantes, des champs. Toutes ces actions ont leurs propres raccourcis. Nous allons opter pour la refactorisation de la méthode Extract. Cliquons dessus.

Nous pouvons faire de cette nouvelle méthode une méthode privée, publique ou protégée. Faisons la privée. Donnons-lui aussi un nom, get_user. Cliquons sur OK.

RubyMine trouvera toutes les actions qui utilisent le même morceau de code que nous venons de refactoriser selon sa propre méthode. Si nous cliquons sur “Yes”, nous pouvons appliquer la nouvelle méthode pour chaque action une par une, ou pour toutes les actions en même temps.

Ainsi, notre nouvelle méthode se trouve directement dans la section privée. Voilà et toutes les actions Rails utilisent la nouvelle méthode au lieu de l'ancien fragment de code. Cependant, nous avons encore un petit problème ici. Apparemment, nous ne devrions pas préfixer les méthodes de lecture par get car c'est une violation du style de code, nous devrons donc changer de nom.

Refactorisation : Rename

Nous n'avons pas à le faire manuellement car RubyMine dispose d'une refactorisation pour cela aussi, qui s'appelle Rename. Ainsi, si nous appuyons sur Maj+F6, nous pouvons renommer cette méthode en autre chose, par exemple, take_user. Cliquons sur Refactor. RubyMine trouvera toutes les utilisations et si nous cliquons sur do refactor, il renommera simplement la méthode avec toutes ses utilisations.

Et comme vous pouvez le voir, cette méthode est maintenant appelée take_user dans toutes les actions Rails.

Enfin, nous ne voulons probablement pas utiliser la même méthode dans un certain nombre d'actions. Il est donc évident qu'il s'agit d'une duplication et qu'il nous suffit d'en faire un filtre, un filtre before.

Montons ici et dupliquons cette ligne comme ceci, Commande+D ou Contrôle+D, selon votre système d'exploitation. Faisons de cette méthode un filtre before. La saisie automatique du code est maintenant disponible pour take_user, comme vous pouvez le voir.

Maintenant, je ne me souviens plus de toutes les actions qui utilisent cette méthode et je peux donc retrouver manuellement toutes ses utilisations. Pour ce faire, je vais appuyer sur Alt+F7. Comme vous pouvez le voir, les actions suivantes utilisent cette action : edit, followers, following, show, et update. Bien. Ajoutons-les.

Curseurs multiples

Enfin, nous pouvons maintenant nous débarrasser de toutes les occurrences de take_user car nous n'en avons plus besoin, car nous avons maintenant un filtre before. Mais nous n'avons pas besoin de le faire manuellement. Il suffit de sélectionner une occurrence de take_user puis d'appuyer sur Contrôle+G ou Alt+J selon le système d'exploitation.

Et puis appuyez sur le raccourci encore et pour choisir toutes les occurrences de take_user dans le fichier. Cependant, il semble que nous ayons également choisi la définition de la méthode take_user, que nous ne voulons probablement pas effacer. Nous devons donc le désélectionner.

Pour ce faire, nous utiliserons le même raccourci, mais nous appuierons également sur Maj. Et maintenant, il suffit d'appuyer sur Commande+Retour arrière pour se débarrasser de tous les appels inutiles de la méthode take_user.

Enfin, appuyons sur la touche Echap pour sortir des multiples curseurs.