تزریق زبان (Language Injection) در IntelliJ IDEA

تزریق زبان به شما امکان می دهد در یک فایل با زبان های مختلف کار کنید ، به عنوان مثال دستورات SQL را در یک String کاتلین literal ذخیره کنید. تزریق زبان ، برجسته سازی Syntax (highlighting) و ویرایش آن را بهبود می بخشد.
تزریق زبان چیست؟
آیا تا به حال از کتابخانه AndroidX Room استفاده کرده اید و فکر کرده اید که چگونه به برجسته سازی SQL Syntax می رسد؟ از تزریق زبان برای اطمینان از این که Syntax String literal هایلایت شده و حتی هنگام تایپ ، معتبر است ، استفاده می کند.

وقتی فیلد Query را در Room تایپ می کنید ، جهت SQL صحیح ، اعتبارسنجی انجام می دهد و پیشنهاداتی برای نام جداول / نام ستون هایی که در برنامه خود تعریف کرده اید ارائه می دهد.
چگونه از آن در سناریوهای دیگر استفاده کنم؟
این مثالی از یک String است که SQL را ذخیره میکند, اما هیچ گونه highlighting را در Syntax نشان نمیدهد:

استفاده از تزریق زبان می تواند به سادگی حاشیه نویسی (annotating) یک String باLanguage (“sql”) یا // language = sql باشد.که باید در بالای کلمه String قرار گیرد و در نتیجه به طور شگفت آوری به یک String هایلایت تبدیل می شود.

هایلایت Syntax تنها بخش جالب در مورد تزریق زبان نیست ، حتی می توانید قطعه را در ویرایشگر جداگانه ویرایش کنید. فقط context action را برای آن خط (نماد چراغ زرد) باز کنید و سپس روی “Edit RoomSql Fragment” کلیک کنید.

با این کار ویرایشگر جداگانه ای باز می شود که می توانید در آن تایپ کنید و ویرایش String های طولانی را کمی ساده تر می کند.

فعال کردن هایلایت نحو GLSL در رشته ها
برای اینکه قطعات کد GLSL دارای هایلایت Syntax مناسب در IDE باشند ، پلاگین پشتیبانی GLSL را در Android Studio نصب می کنیم.
سپس تنها کاری که باید انجام دهید این است که //language = glsl یاLanguage (“glsl”) را در خط بالای String literal قرار دهید و Syntax هایلایت زیبایی به صورت درون خطی ، با قابلیت ویرایش ، قرار دهید.

اگر بخواهید کاری مانند Room انجام دهید ، اگر کسی در قسمتQuery تایپ کند ، بلافاصله هایلایت کردن syntax را شروع می کند؟
برای مثال ، ما می توانیم یک حاشیه نویسی(annotation) ، Glsl سفارشی ایجاد کنیم ، و سپس یک قانون جدید تزریق زبان تنظیم کنیم تا کد به طور خودکار با آن annotation مشخص شود:

سپس کد codeSnippet String را با انوتیشن Glsl که به تازگی تعریف شده است ، حاشیه نویسی می کنیم. سپس در داخل تنظیمات Preferences -> Language Injections ، روی + کلیک کنید و Generic Kotlin را انتخاب کنید:

ما می توانیم یک قانون جدید ایجاد کنیم که به دنبال این annotation است و در صورت حاشیه نویسی یک پارامتر ، هایلایت کردن GLSL را اعمال می کند:

پس از این مرحله ، احتمالاً می خواهید هم تیمی های شما نیز این قانون را برای خودشان نیز تنظیم کنند ، زیرا در حال حاضر فقط در IDE شما وجود دارد. بنابراین ، در پایین تنظیمات Language Inspection ، می توانید قانون را به جای “محدوده IDE”(IDE scope) به “محدوده پروژه”(Project scope) منتقل کنید:

پس از انجام این کار ، می خواهید .idea/IntelliLang.xml را در version control بررسی کنید زیرا این شامل قانونی است که شما به تازگی ایجاد کرده اید.
شایان ذکر است که شما فقط می توانید از انوتیشن @Language (“glsl”) در یک پارامتر String در کلاس استفاده کنید و نتیجه مشابهی در این مثال ایجاد می شود ، اما اگر مایل به افزودن پسوندها(suffixe) و پیشوندهای(prefixe) سفارشی هستید ، annotation سفارشی به شما قدرت بیشتری می دهد.
دیدگاهتان را بنویسید