From e89b5e9c7976828d11ecf512d3ebfedb95f8456a Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E6=9E=97=E4=B8=87=E7=A8=8B?= <1498425439@qq.com>
Date: Mon, 23 Dec 2024 20:57:05 +0800
Subject: [PATCH] =?UTF-8?q?feat:=202.18=20support=20injected=20language=20?=
=?UTF-8?q?like=20SQL=20|=20=E6=94=AF=E6=8C=81=E6=B3=A8=E5=85=A5=E8=AF=AD?=
=?UTF-8?q?=E8=A8=80=E5=A6=82=20SQL=20Fixed=20#68?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
README.md | 2 ++
build.gradle | 4 +++-
.../linwancen/plugin/show/bean/FileInfo.java | 7 +++++++
.../plugin/show/lang/base/BaseLangDoc.java | 21 +++++++++++++++----
.../plugin/show/lang/base/PsiElementTo.java | 2 +-
5 files changed, 30 insertions(+), 6 deletions(-)
diff --git a/README.md b/README.md
index 185375b..2fd89ad 100644
--- a/README.md
+++ b/README.md
@@ -125,6 +125,7 @@ Show doc comment in the Project view Tree, line End, json, other
English Change Notes:
+- 2.18 Add line-end-comment support injected language like SQL
- 2.17 Add External Comment support *.key.regexp and MyBatis xml demo in Git
- 2.16 Add line-end-comment support Rust, Ruby, PHP, C/C++/Object C, Scala, Groovy
- 2.15 Add line-end-comment java anno doc
@@ -171,6 +172,7 @@ Show doc comment in the Project view Tree, line End, json, other
中文更新说明:
+- 2.18 增加 行末注释 支持注入语言如 SQL
- 2.17 增加 tsv 注释 支持 *.key.regexp 与 Mybatis xml 示例在 Git
- 2.16 增加 行末注释 支持 Rust, Ruby, PHP, C/C++/Object C, Scala, Groovy
- 2.15 增加 行末注释 java 注解注释
diff --git a/build.gradle b/build.gradle
index b00cd7f..e17e748 100644
--- a/build.gradle
+++ b/build.gradle
@@ -4,7 +4,7 @@ plugins {
}
group 'io.github.linwancen'
-version '2.17.0.' + (new Date().format('yyyy.MM.dd_HH.mm'))
+version '2.18.0.' + (new Date().format('yyyy.MM.dd_HH.mm'))
repositories {
mavenCentral()
@@ -95,6 +95,7 @@ patchPluginXml {
changeNotes = """
English Change Notes:
+- 2.18 Add line-end-comment support injected language like SQL
- 2.17 Add External Comment support *.key.regexp and MyBatis xml demo in Git
- 2.16 Add line-end-comment support Rust, Ruby, PHP, C/C++/Object C, Scala, Groovy
- 2.15 Add line-end-comment java anno doc
@@ -141,6 +142,7 @@ patchPluginXml {
中文更新说明:
+- 2.18 增加 行末注释 支持注入语言如 SQL
- 2.17 增加 tsv 注释 支持 *.key.regexp 与 Mybatis xml 示例在 Git
- 2.16 增加 行末注释 支持 Rust, Ruby, PHP, C/C++/Object C, Scala, Groovy
- 2.15 增加 行末注释 java 注解注释
diff --git a/src/main/java/io/github/linwancen/plugin/show/bean/FileInfo.java b/src/main/java/io/github/linwancen/plugin/show/bean/FileInfo.java
index 0df8a49..ea1ae93 100644
--- a/src/main/java/io/github/linwancen/plugin/show/bean/FileInfo.java
+++ b/src/main/java/io/github/linwancen/plugin/show/bean/FileInfo.java
@@ -1,5 +1,6 @@
package io.github.linwancen.plugin.show.bean;
+import com.intellij.lang.injection.InjectedLanguageManager;
import com.intellij.openapi.actionSystem.AnActionEvent;
import com.intellij.openapi.actionSystem.CommonDataKeys;
import com.intellij.openapi.editor.Document;
@@ -15,6 +16,7 @@ public class FileInfo extends SettingsInfo {
public final @NotNull VirtualFile file;
public final @NotNull Document document;
public final @NotNull Project project;
+ public final @NotNull InjectedLanguageManager inject;
protected FileInfo(@NotNull VirtualFile file, @NotNull Document document, @NotNull Project project,
@NotNull FuncEnum funcEnum) {
@@ -22,6 +24,7 @@ public class FileInfo extends SettingsInfo {
this.project = project;
this.file = file;
this.document = document;
+ this.inject = InjectedLanguageManager.getInstance(project);
}
public static @Nullable FileInfo of(@NotNull VirtualFile file, @NotNull Project project) {
@@ -37,6 +40,10 @@ public class FileInfo extends SettingsInfo {
if (psiFile == null) {
return null;
}
+ return of(psiFile);
+ }
+
+ public static @Nullable FileInfo of(@NotNull PsiFile psiFile) {
@NotNull FileViewProvider viewProvider = psiFile.getViewProvider();
@Nullable Document document = viewProvider.getDocument();
if (document == null) {
diff --git a/src/main/java/io/github/linwancen/plugin/show/lang/base/BaseLangDoc.java b/src/main/java/io/github/linwancen/plugin/show/lang/base/BaseLangDoc.java
index 105a2de..d0565a6 100644
--- a/src/main/java/io/github/linwancen/plugin/show/lang/base/BaseLangDoc.java
+++ b/src/main/java/io/github/linwancen/plugin/show/lang/base/BaseLangDoc.java
@@ -10,6 +10,7 @@ import com.intellij.psi.PsiCompiledElement;
import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiManager;
import com.intellij.psi.PsiReference;
+import io.github.linwancen.plugin.show.bean.FileInfo;
import io.github.linwancen.plugin.show.bean.LineInfo;
import io.github.linwancen.plugin.show.bean.SettingsInfo;
import org.jetbrains.annotations.NotNull;
@@ -57,7 +58,19 @@ public abstract class BaseLangDoc extends EditorLinePainter {
return null;
}
}
- @Nullable BaseLangDoc lineEnd = PsiElementTo.lineEnd(element);
+ @Nullable PsiElement injectedElement = info.inject.findInjectedElementAt(element.getContainingFile(), info.endOffset);
+ if (injectedElement != null) {
+ @Nullable FileInfo fileInfo = FileInfo.of(injectedElement.getContainingFile());
+ if (fileInfo != null) {
+ int lineNumber = fileInfo.document.getLineNumber(injectedElement.getTextRange().getStartOffset());
+ @Nullable LineInfo lineInfo = LineInfo.of(fileInfo, lineNumber);
+ if (lineInfo != null) {
+ element = injectedElement;
+ info = lineInfo;
+ }
+ }
+ }
+ @Nullable BaseLangDoc lineEnd = PsiElementTo.findLangDoc(element);
if (lineEnd == null) {
return null;
}
@@ -162,11 +175,11 @@ public abstract class BaseLangDoc extends EditorLinePainter {
// ignore
}
// support like java <-> kotlin
- @Nullable BaseLangDoc lineEnd = PsiElementTo.lineEnd(psiElement);
- if (lineEnd == null) {
+ @Nullable BaseLangDoc langDoc = PsiElementTo.findLangDoc(psiElement);
+ if (langDoc == null) {
return null;
}
- return lineEnd.resolveDocPrint(info, psiElement);
+ return langDoc.resolveDocPrint(info, psiElement);
}
/**
diff --git a/src/main/java/io/github/linwancen/plugin/show/lang/base/PsiElementTo.java b/src/main/java/io/github/linwancen/plugin/show/lang/base/PsiElementTo.java
index e326879..55f413d 100644
--- a/src/main/java/io/github/linwancen/plugin/show/lang/base/PsiElementTo.java
+++ b/src/main/java/io/github/linwancen/plugin/show/lang/base/PsiElementTo.java
@@ -26,7 +26,7 @@ public class PsiElementTo {
}
@Nullable
- public static BaseLangDoc lineEnd(@NotNull PsiElement element) {
+ public static BaseLangDoc findLangDoc(@NotNull PsiElement element) {
@Nullable Language language = element.getLanguage();
while (true) {
@Nullable BaseLangDoc lineEnd = BaseLangDoc.LANG_DOC_MAP.get(language.getID());