diff --git a/README.md b/README.md
index 502b05f..b75d923 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.21 Add project-view-tree use JS/TS/Vue "export default" doc for tree doc
- 2.20 Add External Comment support Vue src/router tree doc
- 2.19 ★ line-end-comment support HTML(Vue) Tag/Attr doc since 2022.3.1
- 2.18 Add line-end-comment support injected language like SQL
@@ -174,6 +175,7 @@ Show doc comment in the Project view Tree, line End, json, other
中文更新说明:
+- 2.21 增加 文件树注释 用 JS/TS/Vue "export default" 注释当文件注释
- 2.20 增加 外部注释 支持 Vue 路由标题文件树注释
- 2.19 ★ 行末注释 支持 HTML(Vue) 标签/属性 注释从 2022.3.1 起
- 2.18 增加 行末注释 支持注入语言如 SQL
diff --git a/build.gradle b/build.gradle
index ccb4a10..9013590 100644
--- a/build.gradle
+++ b/build.gradle
@@ -4,7 +4,7 @@ plugins {
}
group 'io.github.linwancen'
-version '2.20.0.' + (new Date().format('yyyy.MM.dd_HH.mm'))
+version '2.21.0.' + (new Date().format('yyyy.MM.dd_HH.mm'))
repositories {
mavenCentral()
@@ -95,6 +95,7 @@ patchPluginXml {
changeNotes = """
English Change Notes:
+- 2.21 Add project-view-tree use JS/TS/Vue "export default" doc for tree doc
- 2.20 Add External Comment support Vue src/router tree doc
- 2.19 ★ line-end-comment support HTML(Vue) Tag/Attr doc since 2022.3.1
- 2.18 Add line-end-comment support injected language like SQL
@@ -144,6 +145,7 @@ patchPluginXml {
中文更新说明:
+- 2.21 增加 文件树注释 用 JS/TS/Vue "export default" 注释当文件注释
- 2.20 增加 外部注释 支持 Vue 路由标题文件树注释
- 2.19 ★ 行末注释 支持 HTML(Vue) 标签/属性 注释从 2022.3.1 起
- 2.18 增加 行末注释 支持注入语言如 SQL
diff --git a/src/main/java/io/github/linwancen/plugin/show/lang/HtmlLangDoc.java b/src/main/java/io/github/linwancen/plugin/show/lang/HtmlLangDoc.java
index ae71d77..05e463c 100644
--- a/src/main/java/io/github/linwancen/plugin/show/lang/HtmlLangDoc.java
+++ b/src/main/java/io/github/linwancen/plugin/show/lang/HtmlLangDoc.java
@@ -64,7 +64,11 @@ public class HtmlLangDoc extends JsLangDoc {
public @Nullable String treeDoc(@NotNull T info, @NotNull ProjectViewNode> node,
@NotNull Project project) {
@Nullable VirtualFile virtualFile = node.getVirtualFile();
- return VueRouterCache.fileDoc(virtualFile);
+ @Nullable String doc = VueRouterCache.fileDoc(virtualFile);
+ if (doc != null) {
+ return doc;
+ }
+ return super.treeDoc(info, node, project);
}
/**
diff --git a/src/main/java/io/github/linwancen/plugin/show/lang/JsLangDoc.java b/src/main/java/io/github/linwancen/plugin/show/lang/JsLangDoc.java
index 5d0126c..06e1444 100644
--- a/src/main/java/io/github/linwancen/plugin/show/lang/JsLangDoc.java
+++ b/src/main/java/io/github/linwancen/plugin/show/lang/JsLangDoc.java
@@ -1,13 +1,21 @@
package io.github.linwancen.plugin.show.lang;
+import com.intellij.ide.projectView.ProjectViewNode;
+import com.intellij.lang.ecmascript6.psi.ES6ExportDefaultAssignment;
import com.intellij.lang.javascript.JavascriptLanguage;
import com.intellij.lang.javascript.documentation.JSDocumentationUtils;
import com.intellij.lang.javascript.psi.JSPsiReferenceElement;
+import com.intellij.openapi.project.Project;
+import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.psi.PsiComment;
import com.intellij.psi.PsiElement;
+import com.intellij.psi.PsiFile;
+import com.intellij.psi.PsiManager;
+import com.intellij.psi.util.PsiTreeUtil;
import io.github.linwancen.plugin.show.bean.LineInfo;
import io.github.linwancen.plugin.show.bean.SettingsInfo;
import io.github.linwancen.plugin.show.lang.base.BaseLangDoc;
+import io.github.linwancen.plugin.show.lang.vue.VueRouterCache;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -29,6 +37,32 @@ public class JsLangDoc extends BaseLangDoc {
return info.appSettings.showLineEndCommentJs;
}
+ @Override
+ public @Nullable String treeDoc(@NotNull T info, @NotNull ProjectViewNode> node,
+ @NotNull Project project) {
+ @Nullable VirtualFile virtualFile = node.getVirtualFile();
+ if (virtualFile == null) {
+ return null;
+ }
+ @Nullable PsiFile psiFile = PsiManager.getInstance(project).findFile(virtualFile);
+ if (psiFile == null) {
+ return null;
+ }
+ @Nullable ES6ExportDefaultAssignment export = PsiTreeUtil.findChildOfType(psiFile,
+ ES6ExportDefaultAssignment.class);
+ if (export == null) {
+ return null;
+ }
+ @Nullable String doc = resolveDocPrint(info, export);
+ if (doc != null && "index".equals(virtualFile.getNameWithoutExtension())) {
+ VirtualFile parent = virtualFile.getParent();
+ if (parent != null) {
+ VueRouterCache.DOC_CACHE.put(parent, doc);
+ }
+ }
+ return doc;
+ }
+
@Override
public @Nullable String resolveDocRaw(@NotNull T info, @NotNull PsiElement resolve) {
@Nullable PsiComment psiComment = JSDocumentationUtils.findOwnDocCommentForImplicitElement(resolve);
diff --git a/src/main/java/io/github/linwancen/plugin/show/lang/vue/VueRouterCache.java b/src/main/java/io/github/linwancen/plugin/show/lang/vue/VueRouterCache.java
index 31ddbec..1c2ae08 100644
--- a/src/main/java/io/github/linwancen/plugin/show/lang/vue/VueRouterCache.java
+++ b/src/main/java/io/github/linwancen/plugin/show/lang/vue/VueRouterCache.java
@@ -28,6 +28,7 @@ import org.slf4j.LoggerFactory;
import java.util.Collection;
import java.util.List;
+import java.util.Locale;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
@@ -37,7 +38,7 @@ import java.util.concurrent.ConcurrentHashMap;
public class VueRouterCache extends FileLoader {
private static final Logger LOG = LoggerFactory.getLogger(VueRouterCache.class);
- private static final Map DOC_CACHE = new ConcurrentHashMap<>();
+ public static final Map DOC_CACHE = new ConcurrentHashMap<>();
@Nullable
public static String fileDoc(@Nullable VirtualFile virtualFile) {
@@ -157,7 +158,7 @@ public class VueRouterCache extends FileLoader {
}
}
if (title != null) {
- VirtualFile file = parseComponent(obj);
+ @Nullable VirtualFile file = parseComponent(obj);
if (file != null) {
virtualFile = file;
DOC_CACHE.put(virtualFile, title);
@@ -186,6 +187,16 @@ public class VueRouterCache extends FileLoader {
return null;
}
@Nullable JSExpression value = titleProp.getValue();
+ if (value instanceof JSObjectLiteralExpression) {
+ @NotNull JSObjectLiteralExpression i18n = (JSObjectLiteralExpression) value;
+ // zh_CN
+ @NotNull String lang = Locale.getDefault().toString();
+ @Nullable JSProperty langProp = i18n.findProperty(lang);
+ if (langProp == null) {
+ return null;
+ }
+ value = langProp.getValue();
+ }
if (value instanceof JSLiteralExpression) {
return ((JSLiteralExpression) value).getStringValue();
}
@@ -227,7 +238,7 @@ public class VueRouterCache extends FileLoader {
}
@NotNull Collection elements = importCall.resolveReferencedElements();
for (PsiElement element : elements) {
- PsiFile psiFile = PsiTreeUtil.getParentOfType(element, PsiFile.class);
+ @Nullable PsiFile psiFile = PsiTreeUtil.getParentOfType(element, PsiFile.class);
if (psiFile != null) {
return psiFile.getVirtualFile();
}