{"id":74963,"date":"2020-09-15T07:54:44","date_gmt":"2020-09-15T07:54:44","guid":{"rendered":"https:\/\/blog.jetbrains.com\/?post_type=idea&#038;p=74963"},"modified":"2020-09-15T07:54:44","modified_gmt":"2020-09-15T07:54:44","slug":"gerer-et-combiner-langages-et-injections-de-langage-dans-intellij-idea","status":"publish","type":"idea","link":"https:\/\/blog.jetbrains.com\/fr\/idea\/2020\/09\/gerer-et-combiner-langages-et-injections-de-langage-dans-intellij-idea\/","title":{"rendered":"G\u00e9rer et combiner langages et injections de langage dans IntelliJ IDEA"},"content":{"rendered":"<p>Dans presque toutes les applications, il y a des situations dans lesquelles on doit travailler sur de petits \u00e9l\u00e9ments de code dans d&#8217;autres langages int\u00e9gr\u00e9s dans le code du projet. Il peut par exemple s&#8217;agir de fragments de code HTML en Java ou d&#8217;expressions r\u00e9guli\u00e8res \u00e9parpill\u00e9s dans votre application. Travailler avec de tels \u00e9l\u00e9ments de code est particuli\u00e8rement facile dans IntelliJ IDEA gr\u00e2ce aux injections de langage. En effet, ces derni\u00e8res apportent le surlignage et la saisir automatique du code, la d\u00e9tection d&#8217;erreurs et d&#8217;autres fonctionnalit\u00e9s d&#8217;assistance au codage pour les fragments de code int\u00e9gr\u00e9s. Voyons plus en d\u00e9tail comment fonctionnent les injections de langage.<\/p>\n<p><a href=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2020\/02\/idea-blog-banner.png\" rel=\"attachment wp-att-21117\"><img decoding=\"async\" loading=\"lazy\" class=\"alignnone size-full wp-image-21117\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2020\/02\/idea-blog-banner.png\" alt=\"banni\u00e8re how2pro\" width=\"1412\" height=\"726\"><\/a><\/p>\n<p><span id=\"more-27993\"><\/span><\/p>\n<p>Essayons d&#8217;int\u00e9grer un morceau de code HTML dans Java. Il vous suffit d&#8217;appuyer sur <strong>Alt + Entr\u00e9e<\/strong>, de s\u00e9lectionner <strong>Inject language or reference<\/strong> et de choisir <strong>HTML<\/strong> dans la liste.<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"alignnone size-full wp-image-22145\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2020\/06\/idea-inject-html-animation.png\" alt=\"inject-html-animation\" width=\"1368\" height=\"598\" data-gif-src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2020\/06\/idea-inject-html-animation.gif\"><\/p>\n<p>Par d\u00e9faut, l&#8217;EDI injecte un langage temporairement. Donc si vous supprimez l&#8217;\u00e9l\u00e9ment int\u00e9gr\u00e9, l&#8217;injection sera perdue \u00e9galement. Si vous souhaitez conserver l&#8217;injection en permanence, appuyez \u00e0 nouveau sur <strong>Alt + Entr\u00e9e<\/strong> lorsque la fen\u00eatre contextuelle qui vous invite \u00e0 remplacer l&#8217;injection par une annotation s&#8217;affiche. L&#8217;EDI ins\u00e8re l&#8217;annotation <strong>@Language<\/strong> avec l&#8217;ID de langage correspondant. Pour les appels de m\u00e9thode, l&#8217;EDI cr\u00e9e un mod\u00e8le d&#8217;injection de langage qui ressemble \u00e0 ceci\u00a0:\u00a0<strong>\/\/ language=HTML<\/strong>.<\/p>\n<p>D\u00e9sormais, m\u00eame si vous supprimez l&#8217;injection originale, l&#8217;EDI saura d\u00e9j\u00e0 quel langage y est pr\u00e9vu et sera pr\u00eat \u00e0 offrir une assistance au codage.<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"alignnone size-full wp-image-22150\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2020\/06\/idea-annotation-injected.png\" alt=\"annotation-injected\" width=\"1368\" height=\"714\" data-gif-src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2020\/06\/idea-annotation-injected.gif\"><\/p>\n<h2>\u00c9diteur d\u00e9di\u00e9 au code inject\u00e9<\/h2>\n<p>Si vous souhaitez vous concentrer uniquement sur le langage du fragment de code int\u00e9gr\u00e9, IntelliJ IDEA propose un \u00e9diteur d\u00e9di\u00e9. Cela vous permet de travailler avec le code comme s&#8217;il \u00e9tait dans un document s\u00e9par\u00e9. Cette fonctionnalit\u00e9 s\u2019av\u00e8re tr\u00e8s pratique lorsque les morceaux de code int\u00e9gr\u00e9s sont volumineux ou difficiles \u00e0 distinguer du reste du code.<br \/>\nBien entendu, l&#8217;\u00e9diteur pour les injections de langage offre les fonctionnalit\u00e9s habituelles d&#8217;assistance au codage\u00a0: saisie automatique du code, intentions, inspections, etc. Pour ouvrir l&#8217;\u00e9diteur, appuyez sur <strong>Alt + Entr\u00e9e<\/strong> et s\u00e9lectionnez <strong>Edit Fragment<\/strong>.<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"alignnone size-full wp-image-22152\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2020\/06\/idea-injection-editor.png\" alt=\"injection-editor\" width=\"1520\" height=\"766\" data-gif-src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2020\/06\/idea-injection-editor.gif\"><\/p>\n<h2>Injecter des expressions r\u00e9guli\u00e8res<\/h2>\n<p>Les expressions r\u00e9guli\u00e8res constituent un outil puissant, qui a de nombreuses applications, de la recherche \u00e0 la validation des entr\u00e9es, jusqu&#8217;aux refactorisations. Cependant, il nous arrive \u00e0 tous d&#8217;avoir du mal \u00e0 les composer correctement. Si vous utilisez des expressions r\u00e9guli\u00e8res dans votre code, IntelliJ IDEA a un petit bonus \u00e0 vous proposer. Tout d&#8217;abord, veillez \u00e0 int\u00e9grer vos expressions r\u00e9guli\u00e8res en utilisant des injections de langage.<\/p>\n<p><a href=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2020\/06\/idea-injecting-regexp.png\" rel=\"attachment wp-att-22153\"><img decoding=\"async\" loading=\"lazy\" class=\"alignnone size-full wp-image-22153\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2020\/06\/idea-injecting-regexp.png\" alt=\"injecting-regexp\" width=\"1424\" height=\"633\"><\/a><\/p>\n<p>Lorsque des expressions r\u00e9guli\u00e8res sont inject\u00e9es, vous pouvez v\u00e9rifier si elles sont compil\u00e9es correctement. Appuyez sur <strong>Alt + Entr\u00e9e<\/strong> et s\u00e9lectionnez <strong>Check RegExp<\/strong>. Vous pouvez d\u00e9sormais saisir une s\u00e9quence de caract\u00e8res pour vous assurer que votre expression correspond \u00e0 la combinaison voulue. Et voil\u00e0\u00a0!<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"alignnone size-full wp-image-22155\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2020\/06\/idea-check-regexp.png\" alt=\"check-regexp\" width=\"1432\" height=\"680\" data-gif-src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2020\/06\/idea-check-regexp.gif\"><\/p>\n<h2>Injection de langage automatique<\/h2>\n<p>Dans IntelliJ IDEA, il existe un ensemble de r\u00e8gles pr\u00e9d\u00e9finies selon lesquelles l&#8217;EDI injecte automatiquement des langages \u00e0 certains endroits dans votre code. Ces r\u00e8gles se trouvent dans <strong>Settings\/Preferences &gt; Editor &gt; Language Injections<\/strong>.<\/p>\n<p>Vous pouvez ainsi modifier les r\u00e8gles d&#8217;injection existantes, les dupliquer et d\u00e9sactiver celles dont vous n&#8217;avez pas besoin.<\/p>\n<p><a href=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2020\/06\/idea-injection-rules.png\" rel=\"attachment wp-att-22156\"><img decoding=\"async\" loading=\"lazy\" class=\"alignnone size-full wp-image-22156\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2020\/06\/idea-injection-rules.png\" alt=\"injection-rules\" width=\"1884\" height=\"1446\"><\/a><\/p>\n<p>Si aucune des r\u00e8gles existantes ne vous convient, vous pouvez cr\u00e9er les v\u00f4tres et les partager ensuite avec les membres de votre \u00e9quipe.<\/p>\n<p>Pour partager une r\u00e8gle personnalis\u00e9e via un VCS, d\u00e9placez-la vers <strong>Project<\/strong> en utilisant l&#8217;option correspondante de la barre d&#8217;outils dans <strong>Settings\/Preferences &gt; Editor &gt; Language Injections<\/strong>. Vous allez ainsi cr\u00e9er un nouveau fichier dans le dossier <strong>.idea<\/strong> nomm\u00e9 <strong>IntelliLang.xml<\/strong> avec vos r\u00e8gles personnalis\u00e9es que vous pouvez placer sous contr\u00f4le de version.<br \/>\nSi vous n&#8217;utilisez pas de VCS, vous pouvez partager vos r\u00e8gles en les exportant dans des fichiers XML, puis en les important dans un autre projet.<\/p>\n<h2>En r\u00e9sum\u00e9\u2026<\/h2>\n<p>Les injections de langage sont id\u00e9ales pour g\u00e9rer plusieurs langages dans un m\u00eame projet. Elles fournissent la saisie automatique, l&#8217;analyser, la mise en \u00e9vidence du code et m\u00eame un \u00e9diteur d\u00e9di\u00e9 pour les morceaux de code int\u00e9gr\u00e9s. Et elles vous permettent d&#8217;injecter automatiquement les langages requis \u00e0 des emplacements sp\u00e9cifiques dans votre code, selon des r\u00e8gles pr\u00e9d\u00e9finies ou selon vos propres r\u00e8gles personnalis\u00e9es.<\/p>\n<p>Pour plus d&#8217;informations sur les injections de langage, consultez la <a href=\"https:\/\/www.jetbrains.com\/help\/idea\/using-language-injections.html\" target=\"_blank\" rel=\"noopener\">documentation<\/a> d&#8217;IntelliJ IDEA. Cette fonctionnalit\u00e9 est aliment\u00e9e par le plugin IntelliLang, qui est fourni et activ\u00e9 par d\u00e9faut, et fonctionne imm\u00e9diatement.<br \/>\nAvez-vous d\u00e9j\u00e0 utilis\u00e9 des injections de langage dans IntelliJ IDEA\u00a0? Qu&#8217;en pensez-vous\u00a0? Faites-le nous savoir dans les commentaires.<\/p>\n<p>En attendant, nous progressons avec IntelliJ IDEA 2020.2. <a href=\"https:\/\/www.jetbrains.com\/fr-fr\/idea\/download\/\" target=\"_blank\" rel=\"noopener\">Rejoignez le programme d&#8217;acc\u00e8s anticip\u00e9<\/a> et testez en avant-premi\u00e8re ses nouvelles fonctionnalit\u00e9s et am\u00e9liorations.<\/p>\n<p>Bon d\u00e9veloppement\u00a0!<\/p>\n<p><em>Auteur de l&#8217;article original en anglais : <a href=\"https:\/\/blog.jetbrains.com\/author\/zolushkina\/\" target=\"_blank\" rel=\"noopener noreferrer\">Elena Kozlova<\/a><\/em><\/p>\n","protected":false},"author":813,"featured_media":73918,"comment_status":"open","ping_status":"open","template":"","categories":[4759,601],"tags":[],"cross-post-tag":[],"acf":[],"_links":{"self":[{"href":"https:\/\/blog.jetbrains.com\/fr\/wp-json\/wp\/v2\/idea\/74963"}],"collection":[{"href":"https:\/\/blog.jetbrains.com\/fr\/wp-json\/wp\/v2\/idea"}],"about":[{"href":"https:\/\/blog.jetbrains.com\/fr\/wp-json\/wp\/v2\/types\/idea"}],"author":[{"embeddable":true,"href":"https:\/\/blog.jetbrains.com\/fr\/wp-json\/wp\/v2\/users\/813"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.jetbrains.com\/fr\/wp-json\/wp\/v2\/comments?post=74963"}],"version-history":[{"count":3,"href":"https:\/\/blog.jetbrains.com\/fr\/wp-json\/wp\/v2\/idea\/74963\/revisions"}],"predecessor-version":[{"id":74966,"href":"https:\/\/blog.jetbrains.com\/fr\/wp-json\/wp\/v2\/idea\/74963\/revisions\/74966"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blog.jetbrains.com\/fr\/wp-json\/wp\/v2\/media\/73918"}],"wp:attachment":[{"href":"https:\/\/blog.jetbrains.com\/fr\/wp-json\/wp\/v2\/media?parent=74963"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/fr\/wp-json\/wp\/v2\/categories?post=74963"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/fr\/wp-json\/wp\/v2\/tags?post=74963"},{"taxonomy":"cross-post-tag","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/fr\/wp-json\/wp\/v2\/cross-post-tag?post=74963"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}