From 432e58d658c96f4958333cb84623b1ba50d8ecfd Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E6=9E=97=E4=B8=87=E7=A8=8B?= <1498425439@qq.com>
Date: Sun, 23 Oct 2022 16:26:09 +0800
Subject: [PATCH] =?UTF-8?q?2.03=20support=20all=20JetBrains=20IDE=20SQL,?=
=?UTF-8?q?=20JavaScript,=20Python,=20Golang,=20Kotlin;=20add=20doc=20live?=
=?UTF-8?q?-templates=20|=20=E6=94=AF=E6=8C=81=E6=89=80=E6=9C=89=20JetBrai?=
=?UTF-8?q?ns=20=E8=BD=AF=E4=BB=B6=E5=92=8C=E4=B8=BB=E6=B5=81=E8=AF=AD?=
=?UTF-8?q?=E8=A8=80;=20=E5=A2=9E=E5=8A=A0=E8=BE=93=E5=85=A5=20doc=20/=20d?=
=?UTF-8?q?occ=20=E7=AD=89=E7=94=9F=E6=88=90=20/**=20*/?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
README.md | 80 +++---
build.gradle | 137 +++++++---
gradle.properties | 40 ++-
out/production/resources/META-INF/cs.xml | 5 +
out/production/resources/META-INF/go.xml | 5 +
out/production/resources/META-INF/java.xml | 6 +
out/production/resources/META-INF/js.xml | 5 +
out/production/resources/META-INF/kotlin.xml | 5 +
out/production/resources/META-INF/plugin.xml | 132 +++++++++
.../resources/META-INF/pluginIcon.svg | 12 +
out/production/resources/META-INF/python.xml | 5 +
out/production/resources/META-INF/sql.xml | 5 +
.../liveTemplates/show-comment-doc.xml | 254 ++++++++++++++++++
.../liveTemplates/show-comment-xml.xml | 12 +
.../plugin/show/java/JavaLangDoc.java | 162 +++++++++++
.../linwancen/plugin/show/java/JavaTree.java | 133 +++++++++
.../plugin/show/java/JsonJumpJava.java} | 12 +-
.../plugin/show/java/KotlinLangDoc.java | 66 +++++
.../show/java}/doc/OwnerToPsiDocUtils.java | 5 +-
.../show/java}/doc/PackageFileToPsiDoc.java | 2 +-
.../plugin/show/java}/doc/PsiClassUtils.java | 2 +-
.../plugin/show/java}/doc/PsiDocToStrDoc.java | 39 +--
.../show/java}/doc/PsiMethodToPsiDoc.java | 5 +-
.../java}/line/FileViewToDocStrUtils.java | 10 +-
.../line/FileViewToPsiDocLeftToRight.java | 5 +-
.../line/FileViewToPsiDocRightToLeft.java | 5 +-
.../plugin/show/java}/line/JsonToPsiDoc.java | 15 +-
.../show/java}/line/NewCallRefToPsiDoc.java | 58 +++-
.../show/java}/line/OwnerToPsiDocSkip.java | 10 +-
.../plugin/show/java}/line/SkipUtils.java | 57 +---
.../github/linwancen/plugin/show/LineEnd.java | 73 ++---
.../linwancen/plugin/show/LineEndAdd.java | 30 +--
.../linwancen/plugin/show/LineEndCopy.java | 43 +--
.../io/github/linwancen/plugin/show/Tree.java | 136 ++--------
.../linwancen/plugin/show/bean/FileInfo.java | 56 ++++
.../linwancen/plugin/show/bean/FuncEnum.java | 37 +++
.../linwancen/plugin/show/bean/LineInfo.java | 49 ++++
.../plugin/show/bean/SettingsInfo.java | 29 ++
.../linwancen/plugin/show/ext/LineExt.java | 56 ++--
.../linwancen/plugin/show/ext/TreeExt.java | 12 +-
.../plugin/show/ext/conf/ConfCache.java | 12 +-
.../show/ext/conf/ConfCacheGetUtils.java | 2 +-
.../plugin/show/ext/conf/ConfFactory.java | 2 -
.../linwancen/plugin/show/jump/JsonRef.java | 15 +-
.../linwancen/plugin/show/lang/GoLangDoc.java | 37 +++
.../linwancen/plugin/show/lang/JsLangDoc.java | 45 ++++
.../plugin/show/lang/JsonLangDoc.java | 63 +++++
.../plugin/show/lang/PythonLangDoc.java | 25 ++
.../plugin/show/lang/SqlLangDoc.java | 50 ++++
.../plugin/show/lang/base/BaseLangDoc.java | 202 ++++++++++++++
.../plugin/show/lang/base/BaseTagLangDoc.java | 58 ++++
.../plugin/show/lang/base/DocFilter.java | 101 +++++++
.../plugin/show/lang/base/DocSkip.java | 67 +++++
.../linwancen/plugin/show/lang/base/Prev.java | 88 ++++++
.../plugin/show/lang/base/PsiElementTo.java | 36 +++
.../plugin/show/lang/base/ResolveDoc.java | 85 ++++++
.../show/settings/AppSettingsComponent.java | 130 ++++++---
.../settings/AppSettingsConfigurable.java | 59 ++--
.../show/settings/AppSettingsState.java | 17 +-
.../settings/ProjectSettingsConfigurable.java | 2 -
src/main/resources/META-INF/cs.xml | 5 +
src/main/resources/META-INF/go.xml | 5 +
src/main/resources/META-INF/java.xml | 6 +
src/main/resources/META-INF/js.xml | 5 +
src/main/resources/META-INF/kotlin.xml | 5 +
src/main/resources/META-INF/plugin.xml | 20 +-
src/main/resources/META-INF/pluginIcon.svg | 12 +
src/main/resources/META-INF/python.xml | 5 +
src/main/resources/META-INF/sql.xml | 5 +
.../liveTemplates/show-comment-doc.xml | 254 ++++++++++++++++++
.../liveTemplates/show-comment-xml.xml | 12 +
.../linwancen/plugin/show/lang/CsLineEnd.java | 29 ++
.../github/linwancen/plugin/show/demo/Cs.cs | 13 +
.../linwancen/plugin/show/demo/Golang.go | 76 ++++++
.../linwancen/plugin/show/demo/HTML.html | 25 ++
.../linwancen/plugin/show/demo/JavaScript.js | 23 ++
.../plugin/show/demo/JavaScriptObject.js | 43 +++
.../linwancen/plugin/show/demo/Python.py | 37 +++
.../io/github/linwancen/plugin/show/demo/c.c | 0
.../show/demo/ext/cobol/doc/cbl.doc.tsv | 4 +-
.../linwancen/plugin/show/demo/java/Call.java | 6 +-
.../plugin/show/demo/java/InDoc.java | 1 +
.../linwancen/plugin/show/demo/java/Kotlin.kt | 32 +++
.../plugin/show/demo/java/Param.java | 12 +
.../linwancen/plugin/show/demo/java/Ref.java | 3 +
.../plugin/show/demo/java/obj/Child.java | 4 +-
.../{array-Pojo.json => array-Pojo.json5} | 0
.../github/linwancen/plugin/show/demo/sql.sql | 1 +
.../base/DocFilterTest.java} | 11 +-
.../base/DocSkipTest.java} | 12 +-
90 files changed, 3062 insertions(+), 510 deletions(-)
create mode 100644 out/production/resources/META-INF/cs.xml
create mode 100644 out/production/resources/META-INF/go.xml
create mode 100644 out/production/resources/META-INF/java.xml
create mode 100644 out/production/resources/META-INF/js.xml
create mode 100644 out/production/resources/META-INF/kotlin.xml
create mode 100644 out/production/resources/META-INF/plugin.xml
create mode 100644 out/production/resources/META-INF/pluginIcon.svg
create mode 100644 out/production/resources/META-INF/python.xml
create mode 100644 out/production/resources/META-INF/sql.xml
create mode 100644 out/production/resources/liveTemplates/show-comment-doc.xml
create mode 100644 out/production/resources/liveTemplates/show-comment-xml.xml
create mode 100644 src/main/idea/io/github/linwancen/plugin/show/java/JavaLangDoc.java
create mode 100644 src/main/idea/io/github/linwancen/plugin/show/java/JavaTree.java
rename src/main/{java/io/github/linwancen/plugin/show/JsonJump.java => idea/io/github/linwancen/plugin/show/java/JsonJumpJava.java} (89%)
create mode 100644 src/main/idea/io/github/linwancen/plugin/show/java/KotlinLangDoc.java
rename src/main/{java/io/github/linwancen/plugin/show => idea/io/github/linwancen/plugin/show/java}/doc/OwnerToPsiDocUtils.java (94%)
rename src/main/{java/io/github/linwancen/plugin/show => idea/io/github/linwancen/plugin/show/java}/doc/PackageFileToPsiDoc.java (96%)
rename src/main/{java/io/github/linwancen/plugin/show => idea/io/github/linwancen/plugin/show/java}/doc/PsiClassUtils.java (98%)
rename src/main/{java/io/github/linwancen/plugin/show => idea/io/github/linwancen/plugin/show/java}/doc/PsiDocToStrDoc.java (76%)
rename src/main/{java/io/github/linwancen/plugin/show => idea/io/github/linwancen/plugin/show/java}/doc/PsiMethodToPsiDoc.java (92%)
rename src/main/{java/io/github/linwancen/plugin/show => idea/io/github/linwancen/plugin/show/java}/line/FileViewToDocStrUtils.java (91%)
rename src/main/{java/io/github/linwancen/plugin/show => idea/io/github/linwancen/plugin/show/java}/line/FileViewToPsiDocLeftToRight.java (93%)
rename src/main/{java/io/github/linwancen/plugin/show => idea/io/github/linwancen/plugin/show/java}/line/FileViewToPsiDocRightToLeft.java (92%)
rename src/main/{java/io/github/linwancen/plugin/show => idea/io/github/linwancen/plugin/show/java}/line/JsonToPsiDoc.java (76%)
rename src/main/{java/io/github/linwancen/plugin/show => idea/io/github/linwancen/plugin/show/java}/line/NewCallRefToPsiDoc.java (81%)
rename src/main/{java/io/github/linwancen/plugin/show => idea/io/github/linwancen/plugin/show/java}/line/OwnerToPsiDocSkip.java (79%)
rename src/main/{java/io/github/linwancen/plugin/show => idea/io/github/linwancen/plugin/show/java}/line/SkipUtils.java (53%)
create mode 100644 src/main/java/io/github/linwancen/plugin/show/bean/FileInfo.java
create mode 100644 src/main/java/io/github/linwancen/plugin/show/bean/FuncEnum.java
create mode 100644 src/main/java/io/github/linwancen/plugin/show/bean/LineInfo.java
create mode 100644 src/main/java/io/github/linwancen/plugin/show/bean/SettingsInfo.java
create mode 100644 src/main/java/io/github/linwancen/plugin/show/lang/GoLangDoc.java
create mode 100644 src/main/java/io/github/linwancen/plugin/show/lang/JsLangDoc.java
create mode 100644 src/main/java/io/github/linwancen/plugin/show/lang/JsonLangDoc.java
create mode 100644 src/main/java/io/github/linwancen/plugin/show/lang/PythonLangDoc.java
create mode 100644 src/main/java/io/github/linwancen/plugin/show/lang/SqlLangDoc.java
create mode 100644 src/main/java/io/github/linwancen/plugin/show/lang/base/BaseLangDoc.java
create mode 100644 src/main/java/io/github/linwancen/plugin/show/lang/base/BaseTagLangDoc.java
create mode 100644 src/main/java/io/github/linwancen/plugin/show/lang/base/DocFilter.java
create mode 100644 src/main/java/io/github/linwancen/plugin/show/lang/base/DocSkip.java
create mode 100644 src/main/java/io/github/linwancen/plugin/show/lang/base/Prev.java
create mode 100644 src/main/java/io/github/linwancen/plugin/show/lang/base/PsiElementTo.java
create mode 100644 src/main/java/io/github/linwancen/plugin/show/lang/base/ResolveDoc.java
create mode 100644 src/main/resources/META-INF/cs.xml
create mode 100644 src/main/resources/META-INF/go.xml
create mode 100644 src/main/resources/META-INF/java.xml
create mode 100644 src/main/resources/META-INF/js.xml
create mode 100644 src/main/resources/META-INF/kotlin.xml
create mode 100644 src/main/resources/META-INF/pluginIcon.svg
create mode 100644 src/main/resources/META-INF/python.xml
create mode 100644 src/main/resources/META-INF/sql.xml
create mode 100644 src/main/resources/liveTemplates/show-comment-doc.xml
create mode 100644 src/main/resources/liveTemplates/show-comment-xml.xml
create mode 100644 src/main/rider/io/github/linwancen/plugin/show/lang/CsLineEnd.java
create mode 100644 src/test/java/io/github/linwancen/plugin/show/demo/Cs.cs
create mode 100644 src/test/java/io/github/linwancen/plugin/show/demo/Golang.go
create mode 100644 src/test/java/io/github/linwancen/plugin/show/demo/HTML.html
create mode 100644 src/test/java/io/github/linwancen/plugin/show/demo/JavaScript.js
create mode 100644 src/test/java/io/github/linwancen/plugin/show/demo/JavaScriptObject.js
create mode 100644 src/test/java/io/github/linwancen/plugin/show/demo/Python.py
create mode 100644 src/test/java/io/github/linwancen/plugin/show/demo/c.c
create mode 100644 src/test/java/io/github/linwancen/plugin/show/demo/java/Kotlin.kt
create mode 100644 src/test/java/io/github/linwancen/plugin/show/demo/java/Param.java
rename src/test/java/io/github/linwancen/plugin/show/demo/json/{array-Pojo.json => array-Pojo.json5} (100%)
create mode 100644 src/test/java/io/github/linwancen/plugin/show/demo/sql.sql
rename src/test/java/io/github/linwancen/plugin/show/{doc/PsiDocToStrDocTest.java => lang/base/DocFilterTest.java} (82%)
rename src/test/java/io/github/linwancen/plugin/show/{line/PsiClassSkipTest.java => lang/base/DocSkipTest.java} (93%)
diff --git a/README.md b/README.md
index 9133a18..941148d 100644
--- a/README.md
+++ b/README.md
@@ -61,58 +61,66 @@ Show doc comment at the Project view Tree, line End, json etc.
English Change Notes:
-1.24 Add PopupMenu Copy FileName:LineNumber
- 1.23 Add project-view-tree-comment setting for show when compact middle packages
- 1.22 Add PopupMenu Copy ClassName.MethodName
+ 2.03 Add live-templates input `doc` `docc` -> /** */
+ 2.02 Add line-end-comment show before doc for `isA(xxx)` and `a.set(b.get)`
+ 2.01 Add line-end-comment support SQL, JavaScript, Python, Golang, Kotlin
+ 2.00 ★★ support all JetBrains IDE
+ 1.24 Add PopupMenu Copy FileName:LineNumber
+ 1.23 Add project-view-tree setting for show when compact middle packages
+ 1.22 Add PopupMenu Copy ClassName.MethodName
1.21 Add line-end-comment default skip only English when system lang is not `en`
- 1.20 Add get doc first sentence checkbox
- 1.19 Add supper doc at @Override, support doc tag like @author
+ 1.20 Add line-end-comment get doc first sentence checkbox
+ 1.19 Add line-end-comment supper doc at @Override, support doc tag like @author
1.18 Add External Comment effect at previous layer when folder named -1
1.17 Add line-end-comment skip doc text or class/member name by regexp
1.16 Add line-end-comment skip when comments have been added
1.15 Add line-end-comment support COBOL ext '', 'cbl', 'cob', 'cobol'
1.14 Add line-end-comment skip Annotation, skip only English (ASCII)
- 1.13 Add Copy With Line Comment & Add Line Comment
- 1.12 ★ External Comment for COBOL etc
- 1.11 Add json key jump to field
- 1.10 Add project-view-tree-comment for package from parent or other project
- 1.9 Add project-view-tree-comment for "xx-ClassNameOrSimpleName.json" and SPI file
- 1.8 ★ line-end-comment for "xx-ClassNameOrSimpleName.json"
+ 1.13 Add line-end-comment Copy With Line Comment & Add Line Comment
+ 1.12 ★ External Comment for COBOL etc
+ 1.11 Add json key jump to field
+ 1.10 Add project-view-tree for package from parent or other project
+ 1.9 Add project-view-tree for "xx-ClassNameOrSimpleName.json" and SPI file
+ 1.8 ★ line-end-comment for "xx-ClassNameOrSimpleName.json"
1.7 Add line-end-comment setting for prefix and count
1.6 Add line-end-comment independent switch for call, new, ref
1.5 Add line-end-comment find next loop when none
1.4 Add line-end-comment find element right to left
- 1.3 ★ project-view-tree-comment
+ 1.3 ★ project-view-tree file and member comment
1.2 Add line-end-comment settings fro class prefix filter
1.1 Add line-end-comment settings for text color
中文更新说明:
-1.24 增加 右键菜单 复制 文件名:行号
- 1.23 增加 项目导航栏注释 折叠中间包时显示中间包注释设置
- 1.22 增加 右键菜单 复制 类名.方法名
- 1.21 增加 行末注释 系统语言非英文时 默认 忽略纯英文
- 1.20 增加 获取第一句注释选项
- 1.19 增加 @Override 显示父方法注释,支持 @author 等注释标签
- 1.18 增加 外部注释 文件夹名为 -1 时配置在上一层文件夹生效
- 1.17 增加 行末注释 根据正则表达式跳过指定注释文本或类成员名字的注释
- 1.16 增加 行末注释 已经添加行末注释时跳过
- 1.15 增加 行末注释 COBOL 拓展名支持 无拓展名、cbl、cob、cobol
- 1.14 增加 行末注释 忽略注解 与 忽略纯英文
- 1.13 增加 带行末注释复制 和 添加行末注释
- 1.12 ★ 外部注释用于 COBOL 等
- 1.11 增加 json 跳转到字段
- 1.10 增加 在父包和其他项目的包中获取 项目导航栏注释
- 1.9 增加 "xx-类全名或简名.json" 和 SPI 项目导航栏注释
- 1.8 ★ "xx-类全名或简名.json" 行末注释
- 1.7 增加 行末注释前缀和对象数设置
- 1.6 增加 行末调用,new,引用注释独立开关
- 1.5 增加 没有注释时循环查找下一个对象
- 1.4 增加 从右往左查找行末注释对象
- 1.3 ★ 项目导航栏注释
- 1.2 增加 行末注释类前缀配置
- 1.1 增加 行末文本颜色配置
+ 2.03 增加 活动模板 输入 doc / docc 等生成 /** */
+ 2.02 增加 行末注释 `isA(xxx)` 和 `a.set(b.get)` 显示前一个注释
+ 2.01 增加 行末注释 支持 SQL, JavaScript, Python, Golang, Kotlin
+ 2.00 ★★ 支持所有 JetBrains 软件
+ 1.24 增加 右键菜单 复制 文件名:行号
+ 1.23 增加 文件树注释 折叠中间包时显示中间包注释设置
+ 1.22 增加 右键菜单 复制 类名.方法名
+ 1.21 增加 行末注释 系统语言非英文时 默认 忽略纯英文
+ 1.20 增加 行末注释 获取第一句注释选项
+ 1.19 增加 行末注释 @Override 显示父方法注释,支持 @author 等注释标签
+ 1.18 增加 tsv 注释 文件夹名为 -1 时配置在上一层文件夹生效
+ 1.17 增加 行末注释 根据正则表达式跳过指定注释文本或类成员名字的注释
+ 1.16 增加 行末注释 已经添加行末注释时跳过
+ 1.15 增加 行末注释 COBOL 拓展名支持 无拓展名、cbl、cob、cobol
+ 1.14 增加 行末注释 忽略注解 与 忽略纯英文
+ 1.13 增加 行末注释 带注释复制 和 添加注释
+ 1.12 ★ tsv 注释 用于 COBOL 等
+ 1.11 增加 json 跳转到字段
+ 1.10 增加 文件树注释 在父包和其他项目的包中获取
+ 1.9 增加 文件树注释 "xx-类全名或简名.json" 和 SPI
+ 1.8 ★ 行末注释 "xx-类全名或简名.json"
+ 1.7 增加 行末注释 前缀和对象数设置
+ 1.6 增加 行末调用 new,引用注释独立开关
+ 1.5 增加 行末注释 没有注释时循环查找下一个对象
+ 1.4 增加 行末注释 从右往左查找行末注释对象
+ 1.3 ★ 文件树注释 (左侧项目导航文件树)
+ 1.2 增加 行末注释 类前缀配置
+ 1.1 增加 行末注释 颜色配置
diff --git a/build.gradle b/build.gradle
index cd9c1c8..56b1128 100644
--- a/build.gradle
+++ b/build.gradle
@@ -1,12 +1,10 @@
plugins {
+ // New:https://github.com/JetBrains/gradle-intellij-plugin/releases
id 'org.jetbrains.intellij' version '1.3.1'
- id 'java'
}
group 'io.github.linwancen'
-version '1.24.0.' + (new Date().format('yyyy.MM.dd_HH.mm'))
-
-apply plugin: 'java'
+version '2.03.0.' + (new Date().format('yyyy.MM.dd_HH.mm'))
repositories {
mavenCentral()
@@ -17,10 +15,57 @@ dependencies {
testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.8.2'
}
+def system = org.gradle.internal.os.OperatingSystem.current()
+def ideTypeStr = String.valueOf(ideType)
+
// See https://github.com/JetBrains/gradle-intellij-plugin/
intellij {
- version = ideaVersion
- plugins = ['java']
+ type = ideType
+ if (system.isMacOsX()) {
+ localPath = "/Applications/IntelliJ IDEA.app"
+ } else {
+ version = ideaVersion
+ }
+ // see https://plugins.jetbrains.com/docs/intellij/tools-gradle-intellij-plugin.html#intellij-extension-plugins
+ plugins = [
+ 'Pythonid:201.6668.121',
+ ]
+ if ('IC' == ideTypeStr || 'IU' == ideTypeStr) {
+ plugins.add('java')
+ plugins.add('org.jetbrains.kotlin')
+ }
+ if (!ideTypeStr.endsWith('C')) {
+ plugins.add('JavaScript')
+ plugins.add('com.intellij.database')
+ plugins.add('org.jetbrains.plugins.go:201.6668.60.126')
+ }
+}
+
+sourceSets {
+ // can not use plugin in IDEA IU
+ if ('RD' == ideTypeStr) {
+ main {
+ java {
+ srcDirs = ['src/main/java', 'src/main/rider']
+ }
+ }
+ test {
+ java {
+ srcDirs = ['src/test/java', 'src/test/rider']
+ }
+ }
+ } else {
+ main {
+ java {
+ srcDirs = ['src/main/java', 'src/main/idea']
+ }
+ }
+ test {
+ java {
+ srcDirs = ['src/test/java', 'src/test/idea']
+ }
+ }
+ }
}
tasks.withType(JavaCompile) {
@@ -39,58 +84,66 @@ patchPluginXml {
changeNotes = """
English Change Notes:
-1.24 Add PopupMenu Copy FileName:LineNumber
- 1.23 Add project-view-tree-comment setting for show when compact middle packages
- 1.22 Add PopupMenu Copy ClassName.MethodName
+ 2.03 Add live-templates input `doc` `docc` -> /** */
+ 2.02 Add line-end-comment show before doc for `isA(xxx)` and `a.set(b.get)`
+ 2.01 Add line-end-comment support SQL, JavaScript, Python, Golang, Kotlin
+ 2.00 ★★ support all JetBrains IDE
+ 1.24 Add PopupMenu Copy FileName:LineNumber
+ 1.23 Add project-view-tree setting for show when compact middle packages
+ 1.22 Add PopupMenu Copy ClassName.MethodName
1.21 Add line-end-comment default skip only English when system lang is not `en`
- 1.20 Add get doc first sentence checkbox
- 1.19 Add supper doc at @Override, support doc tag like @author
+ 1.20 Add line-end-comment get doc first sentence checkbox
+ 1.19 Add line-end-comment supper doc at @Override, support doc tag like @author
1.18 Add External Comment effect at previous layer when folder named -1
1.17 Add line-end-comment skip doc text or class/member name by regexp
1.16 Add line-end-comment skip when comments have been added
1.15 Add line-end-comment support COBOL ext '', 'cbl', 'cob', 'cobol'
1.14 Add line-end-comment skip Annotation, skip only English (ASCII)
- 1.13 Add Copy With Line Comment & Add Line Comment
- 1.12 ★ External Comment for COBOL etc
- 1.11 Add json key jump to field
- 1.10 Add project-view-tree-comment for package from parent or other project
- 1.9 Add project-view-tree-comment for "xx-ClassNameOrSimpleName.json" and SPI file
- 1.8 ★ line-end-comment for "xx-ClassNameOrSimpleName.json"
+ 1.13 Add line-end-comment Copy With Line Comment & Add Line Comment
+ 1.12 ★ External Comment for COBOL etc
+ 1.11 Add json key jump to field
+ 1.10 Add project-view-tree for package from parent or other project
+ 1.9 Add project-view-tree for "xx-ClassNameOrSimpleName.json" and SPI file
+ 1.8 ★ line-end-comment for "xx-ClassNameOrSimpleName.json"
1.7 Add line-end-comment setting for prefix and count
1.6 Add line-end-comment independent switch for call, new, ref
1.5 Add line-end-comment find next loop when none
1.4 Add line-end-comment find element right to left
- 1.3 ★ project-view-tree-comment
+ 1.3 ★ project-view-tree file and member comment
1.2 Add line-end-comment settings fro class prefix filter
1.1 Add line-end-comment settings for text color
中文更新说明:
-1.24 增加 右键菜单 复制 文件名:行号
- 1.23 增加 项目导航栏注释 折叠中间包时显示中间包注释设置
- 1.22 增加 右键菜单 复制 类名.方法名
- 1.21 增加 行末注释 系统语言非英文时 默认 忽略纯英文
- 1.20 增加 获取第一句注释选项
- 1.19 增加 @Override 显示父方法注释,支持 @author 等注释标签
- 1.18 增加 外部注释 文件夹名为 -1 时配置在上一层文件夹生效
- 1.17 增加 行末注释 根据正则表达式跳过指定注释文本或类成员名字的注释
- 1.16 增加 行末注释 已经添加行末注释时跳过
- 1.15 增加 行末注释 COBOL 拓展名支持 无拓展名、cbl、cob、cobol
- 1.14 增加 行末注释 忽略注解 与 忽略纯英文
- 1.13 增加 带行末注释复制 和 添加行末注释
- 1.12 ★ 外部注释用于 COBOL 等
- 1.11 增加 json 跳转到字段
- 1.10 增加 在父包和其他项目的包中获取 项目导航栏注释
- 1.9 增加 "xx-类全名或简名.json" 和 SPI 项目导航栏注释
- 1.8 ★ "xx-类全名或简名.json" 行末注释
- 1.7 增加 行末注释前缀和对象数设置
- 1.6 增加 行末调用,new,引用注释独立开关
- 1.5 增加 没有注释时循环查找下一个对象
- 1.4 增加 从右往左查找行末注释对象
- 1.3 ★ 项目导航栏注释
- 1.2 增加 行末注释类前缀配置
- 1.1 增加 行末文本颜色配置
+ 2.03 增加 活动模板 输入 `doc` `docc` 生成 /** */
+ 2.02 增加 行末注释 `isA(xxx)` 和 `a.set(b.get)` 显示前一个注释
+ 2.01 增加 行末注释 支持 SQL, JavaScript, Python, Golang, Kotlin
+ 2.00 ★★ 支持所有 JetBrains 软件
+ 1.24 增加 右键菜单 复制 文件名:行号
+ 1.23 增加 文件树注释 折叠中间包时显示中间包注释设置
+ 1.22 增加 右键菜单 复制 类名.方法名
+ 1.21 增加 行末注释 系统语言非英文时 默认 忽略纯英文
+ 1.20 增加 行末注释 获取第一句注释选项
+ 1.19 增加 行末注释 @Override 显示父方法注释,支持 @author 等注释标签
+ 1.18 增加 tsv 注释 文件夹名为 -1 时配置在上一层文件夹生效
+ 1.17 增加 行末注释 根据正则表达式跳过指定注释文本或类成员名字的注释
+ 1.16 增加 行末注释 已经添加行末注释时跳过
+ 1.15 增加 行末注释 COBOL 拓展名支持 无拓展名、cbl、cob、cobol
+ 1.14 增加 行末注释 忽略注解 与 忽略纯英文
+ 1.13 增加 行末注释 带注释复制 和 添加注释
+ 1.12 ★ tsv 注释 用于 COBOL 等
+ 1.11 增加 json 跳转到字段
+ 1.10 增加 文件树注释 在父包和其他项目的包中获取
+ 1.9 增加 文件树注释 "xx-类全名或简名.json" 和 SPI
+ 1.8 ★ 行末注释 "xx-类全名或简名.json"
+ 1.7 增加 行末注释 前缀和对象数设置
+ 1.6 增加 行末调用 new,引用注释独立开关
+ 1.5 增加 行末注释 没有注释时循环查找下一个对象
+ 1.4 增加 行末注释 从右往左查找行末注释对象
+ 1.3 ★ 文件树注释 (左侧项目导航文件树)
+ 1.2 增加 行末注释 类前缀配置
+ 1.1 增加 行末注释 颜色配置
"""
}
diff --git a/gradle.properties b/gradle.properties
index 813fac9..c4794bb 100644
--- a/gradle.properties
+++ b/gradle.properties
@@ -1 +1,39 @@
-ideaVersion=2020.1
\ No newline at end of file
+ideaVersion=2020.1
+
+# Local area network HTTPS solves SSL problems
+#systemProp.javax.net.ssl.trustStore=file_name.jks
+#StorePassword=should_be_set_elsewhere
+
+#IntelliJ IDEA Ultimate Edition
+ideType=IU
+
+
+# region can use plugin in IDEA IU
+
+#IntelliJ IDEA Community Edition
+#ideType=IC
+
+#GoLand
+#ideType=GO
+
+#PyCharm Professional Edition
+#ideType=PY
+
+#PyCharm Community Edition
+#ideType=PC
+
+# endregion
+
+
+
+#CLion
+#ideType=CL
+
+#Rider
+#ideType=RD
+
+#JPS-only
+#ideType=JP
+
+#Gateway
+#ideType=GW
\ No newline at end of file
diff --git a/out/production/resources/META-INF/cs.xml b/out/production/resources/META-INF/cs.xml
new file mode 100644
index 0000000..378e6e1
--- /dev/null
+++ b/out/production/resources/META-INF/cs.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/out/production/resources/META-INF/go.xml b/out/production/resources/META-INF/go.xml
new file mode 100644
index 0000000..83c4946
--- /dev/null
+++ b/out/production/resources/META-INF/go.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/out/production/resources/META-INF/java.xml b/out/production/resources/META-INF/java.xml
new file mode 100644
index 0000000..34293ac
--- /dev/null
+++ b/out/production/resources/META-INF/java.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/out/production/resources/META-INF/js.xml b/out/production/resources/META-INF/js.xml
new file mode 100644
index 0000000..448e4da
--- /dev/null
+++ b/out/production/resources/META-INF/js.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/out/production/resources/META-INF/kotlin.xml b/out/production/resources/META-INF/kotlin.xml
new file mode 100644
index 0000000..58051d5
--- /dev/null
+++ b/out/production/resources/META-INF/kotlin.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/out/production/resources/META-INF/plugin.xml b/out/production/resources/META-INF/plugin.xml
new file mode 100644
index 0000000..a9c4175
--- /dev/null
+++ b/out/production/resources/META-INF/plugin.xml
@@ -0,0 +1,132 @@
+
+ io.github.linwancen.show-comment
+ Show Comment
+ 林万程
+
+ English Notes:
+
+Show javadoc comments at the Project view Tree structure
+ Show javadoc comments at the end-of-line
+ Show javadoc comments at "xx-ClassNameOrSimpleName.json" and jump to field
+ Show comments from External Conf for folder, resources, COBOL etc.
+ Config: settings -> Tools -> // Show Comment Global/Project
+
+
+External Comment:
+Demo(GitHub)
+
+Reload: Tools -> 🔄 // Reload External Comment
+ path/[any][filename.]ext.tree.tsv // file and folder tree comment 📝 📁
+ path/[any][filename.]ext.key.tsv // line keywords to split and comment
+ path/[any][filename.]ext.doc.tsv // line words comment
+ In path, "doc" can replace any, and can use % like in SQL, effect at previous layer when folder named -1
+ The lines in key.tsv will be concatenated with `|` to regexp; longer str should in front; startWith `?` to exclude
+ Chang tsv file in find pop window would not reload!
+ The tsv conf file must could be search in "Go to File"(Ctrl + Shift + N)
+
+
+
+中文说明:
+
+在结构树显示 文档注释
+ 在行末尾显示 文档注释
+ 支持 "xx-类全名或简名.json" 文档注释与跳转到字段
+ 支持 从配置文件获取外部注释用于文件夹、资源、COBOL 等
+ 修改配置:设置 -> 工具 -> // Show Comment Global/Project
+
+
+外部注释:
+示例(Gitee)
+:比如你要给 .go 的文件配置文件注释可以放在相同目录或父目录的 xxx.go.tree.tsv 中
+
+重新加载:工具 -> "🔄 // Reload External Comment"
+ path/[any][filename.]ext.tree.tsv // 文件(夹)注释 📝 📁
+ path/[any][filename.]ext.key.tsv // 切割关键字与注释
+ path/[any][filename.]ext.doc.tsv // 词注释
+ key.tsv 的每一行将会用`|`连接起来形成正则表达式,较长的关键字应该放在前面,用 `?` 开头排除
+ doc 文件夹可以替换任何一层文件夹,可以像 SQL 那样用 % 模糊匹配,文件夹名为 -1 时在上一层文件夹生效
+ 在搜索弹出窗中修改 tsv 文件将不会被重加载
+ tsv 配置文件必须能被搜索(Ctrl + Shift + N)
+
+
+如果对你有所帮助,别忘了给本项目
+GitHub
+主页一个 Start,您的支持是项目前进的动力。
+ ]]>
+
+
+ com.intellij.modules.java
+ com.intellij.database
+ JavaScript
+ com.intellij.modules.python
+ org.jetbrains.plugins.go
+ org.jetbrains.kotlin
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/out/production/resources/META-INF/pluginIcon.svg b/out/production/resources/META-INF/pluginIcon.svg
new file mode 100644
index 0000000..22a4863
--- /dev/null
+++ b/out/production/resources/META-INF/pluginIcon.svg
@@ -0,0 +1,12 @@
+
+
+ /
+ /
+
+
+
\ No newline at end of file
diff --git a/out/production/resources/META-INF/python.xml b/out/production/resources/META-INF/python.xml
new file mode 100644
index 0000000..4f45f9c
--- /dev/null
+++ b/out/production/resources/META-INF/python.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/out/production/resources/META-INF/sql.xml b/out/production/resources/META-INF/sql.xml
new file mode 100644
index 0000000..6045846
--- /dev/null
+++ b/out/production/resources/META-INF/sql.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/out/production/resources/liveTemplates/show-comment-doc.xml b/out/production/resources/liveTemplates/show-comment-doc.xml
new file mode 100644
index 0000000..ad25ff4
--- /dev/null
+++ b/out/production/resources/liveTemplates/show-comment-doc.xml
@@ -0,0 +1,254 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/out/production/resources/liveTemplates/show-comment-xml.xml b/out/production/resources/liveTemplates/show-comment-xml.xml
new file mode 100644
index 0000000..dbcddc9
--- /dev/null
+++ b/out/production/resources/liveTemplates/show-comment-xml.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/main/idea/io/github/linwancen/plugin/show/java/JavaLangDoc.java b/src/main/idea/io/github/linwancen/plugin/show/java/JavaLangDoc.java
new file mode 100644
index 0000000..c871213
--- /dev/null
+++ b/src/main/idea/io/github/linwancen/plugin/show/java/JavaLangDoc.java
@@ -0,0 +1,162 @@
+package io.github.linwancen.plugin.show.java;
+
+import com.intellij.ide.projectView.ProjectViewNode;
+import com.intellij.lang.java.JavaLanguage;
+import com.intellij.openapi.project.Project;
+import com.intellij.psi.*;
+import com.intellij.psi.javadoc.*;
+import com.intellij.psi.util.PsiTreeUtil;
+import io.github.linwancen.plugin.show.java.doc.OwnerToPsiDocUtils;
+import io.github.linwancen.plugin.show.java.line.OwnerToPsiDocSkip;
+import io.github.linwancen.plugin.show.bean.LineInfo;
+import io.github.linwancen.plugin.show.bean.SettingsInfo;
+import io.github.linwancen.plugin.show.lang.base.BaseTagLangDoc;
+import io.github.linwancen.plugin.show.lang.base.DocFilter;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+
+public class JavaLangDoc extends BaseTagLangDoc {
+
+ public static final JavaLangDoc INSTANCE = new JavaLangDoc();
+
+ static {
+ LANG_DOC_MAP.put(JavaLanguage.INSTANCE.getID(), INSTANCE);
+ }
+
+ @Override
+ public @NotNull Class extends PsiElement> getRefClass() {
+ return PsiJavaCodeReferenceElement.class;
+ }
+
+ @Override
+ public boolean show(@NotNull LineInfo lineInfo) {
+ return lineInfo.appSettings.showLineEndCommentJava;
+ }
+
+ @Override
+ public @Nullable String treeDoc(T settingsInfo, ProjectViewNode> node, Project project) {
+ return JavaTree.treeDoc(settingsInfo, node, project);
+ }
+
+ @Override
+ protected @Nullable String refDoc(@NotNull T lineInfo, @NotNull PsiElement ref) {
+ if ("Override".equals(ref.getText())) {
+ PsiMethod psiMethod = PsiTreeUtil.getParentOfType(ref, PsiMethod.class);
+ if (psiMethod == null) {
+ return null;
+ }
+ // must supper
+ PsiDocComment psiDocComment = OwnerToPsiDocUtils.supperMethodDoc(psiMethod);
+ return docElementToStr(lineInfo, psiDocComment);
+ }
+ if (lineInfo.appSettings.fromNew) {
+ PsiElement parent = ref.getParent();
+ if (parent instanceof PsiNewExpression) {
+ PsiNewExpression psiNewExpression = (PsiNewExpression) parent;
+ try {
+ PsiMethod resolve = psiNewExpression.resolveMethod();
+ if (resolve != null) {
+ return resolveDocPrint(lineInfo, resolve);
+ }
+ } catch (Throwable ignore) {
+ // ignore
+ }
+ }
+ }
+ return super.refDoc(lineInfo, ref);
+ }
+
+ @Override
+ public @Nullable String resolveDocPrint(@NotNull T lineInfo, @NotNull PsiElement resolve) {
+ String resolveDocPrint = super.resolveDocPrint(lineInfo, resolve);
+ if (resolveDocPrint != null) {
+ return resolveDocPrint;
+ }
+ if (lineInfo.appSettings.fromParam && resolve instanceof PsiParameter) {
+ return paramDoc((PsiParameter) resolve);
+ }
+ return null;
+ }
+
+ @Nullable
+ private String paramDoc(@NotNull PsiParameter psiParameter) {
+ PsiMethod method = PsiTreeUtil.getParentOfType(psiParameter, PsiMethod.class);
+ if (method == null) {
+ return null;
+ }
+ PsiDocComment psiDocComment = OwnerToPsiDocUtils.methodDoc(method);
+ if (psiDocComment == null) {
+ return null;
+ }
+ String name = psiParameter.getName();
+ PsiDocTag[] params = psiDocComment.findTagsByName("param");
+ for (PsiDocTag param : params) {
+ PsiDocTagValue value = param.getValueElement();
+ if (value != null && name.equals(value.getText())) {
+ PsiElement[] dataElements = param.getDataElements();
+ if (dataElements.length > 1) {
+ return dataElements[1].getText();
+ }
+ }
+ }
+ return null;
+ }
+
+ @Nullable
+ @Override
+ protected PsiDocComment toDocElement(@NotNull PsiElement resolve) {
+ if (resolve instanceof PsiDocCommentOwner) {
+ PsiDocCommentOwner psiDocCommentOwner = (PsiDocCommentOwner) resolve;
+ return OwnerToPsiDocSkip.refDoc(psiDocCommentOwner);
+ }
+ return null;
+ }
+
+ @NotNull
+ @Override
+ protected String descDoc(@NotNull T lineInfo, @NotNull PsiDocComment psiDocComment) {
+ StringBuilder sb = new StringBuilder();
+ int lineCount = 0;
+ PsiElement[] elements = psiDocComment.getDescriptionElements();
+ for (PsiElement element : elements) {
+ if (appendElementText(sb, element)) {
+ lineCount++;
+ }
+ if (DocFilter.lineCountOrLenOver(lineInfo.appSettings, sb, lineCount)) {
+ break;
+ }
+ }
+ return sb.toString();
+ }
+
+ /**
+ * @return is new line
+ */
+ private static boolean appendElementText(StringBuilder sb, PsiElement element) {
+ if (element instanceof PsiDocToken) {
+ PsiDocToken psiDocToken = (PsiDocToken) element;
+ DocFilter.addHtml(sb, psiDocToken.getText());
+ }
+ if (element instanceof PsiInlineDocTag) {
+ PsiInlineDocTag psiInlineDocTag = (PsiInlineDocTag) element;
+ PsiElement[] children = psiInlineDocTag.getChildren();
+ if (children.length > 3) {
+ DocFilter.addHtml(sb, children[3].getText());
+ }
+ }
+ return element instanceof PsiWhiteSpace && sb.length() > 0;
+ }
+
+ @Override
+ protected void appendTag(@NotNull T lineInfo, @NotNull StringBuilder tagStrBuilder,
+ @NotNull PsiDocComment psiDocComment, @NotNull String name) {
+ PsiDocTag[] tags = psiDocComment.findTagsByName(name);
+ for (PsiDocTag tag : tags) {
+ // @see @param should use getDataElements()
+ PsiDocTagValue value = tag.getValueElement();
+ if (value != null) {
+ DocFilter.addHtml(tagStrBuilder, value.getText());
+ }
+ }
+ }
+}
diff --git a/src/main/idea/io/github/linwancen/plugin/show/java/JavaTree.java b/src/main/idea/io/github/linwancen/plugin/show/java/JavaTree.java
new file mode 100644
index 0000000..132a4cb
--- /dev/null
+++ b/src/main/idea/io/github/linwancen/plugin/show/java/JavaTree.java
@@ -0,0 +1,133 @@
+package io.github.linwancen.plugin.show.java;
+
+import com.intellij.ide.projectView.ProjectViewNode;
+import com.intellij.ide.projectView.impl.nodes.PackageElementNode;
+import com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode;
+import com.intellij.ide.projectView.impl.nodes.PsiFieldNode;
+import com.intellij.ide.projectView.impl.nodes.PsiFileNode;
+import com.intellij.openapi.project.Project;
+import com.intellij.openapi.vfs.VirtualFile;
+import com.intellij.psi.*;
+import com.intellij.psi.impl.source.PsiClassReferenceType;
+import com.intellij.psi.javadoc.PsiDocComment;
+import io.github.linwancen.plugin.show.bean.SettingsInfo;
+import io.github.linwancen.plugin.show.java.doc.OwnerToPsiDocUtils;
+import io.github.linwancen.plugin.show.java.line.NewCallRefToPsiDoc;
+import io.github.linwancen.plugin.show.settings.AppSettingsState;
+import org.jetbrains.annotations.Nullable;
+
+public class JavaTree {
+
+ private JavaTree() {}
+
+ @Nullable
+ public static String treeDoc(T settingsInfo, ProjectViewNode> node, Project project) {
+ PsiDocComment docComment = nodeDoc(node, project);
+ if (docComment == null) {
+ return null;
+ }
+ return JavaLangDoc.INSTANCE.docElementToStr(settingsInfo, docComment);
+ }
+
+ @Nullable
+ static PsiDocComment nodeDoc(ProjectViewNode> node, Project project) {
+ if (node instanceof PsiFileNode) {
+ PsiFile psiFile = ((PsiFileNode) node).getValue();
+ return OwnerToPsiDocUtils.fileDoc(psiFile);
+ }
+ if (node instanceof PsiDirectoryNode) {
+ PsiDirectory psiDirectory = ((PsiDirectoryNode) node).getValue();
+ return dirDoc(psiDirectory);
+ }
+
+ // if (node instanceof PsiMethodNode) {
+ // // On Show Members
+ // PsiMethod psiMethod = ((PsiMethodNode) node).getValue();
+ // PsiDocComment psiDocComment = OwnerToPsiDocUtils.methodDoc(psiMethod);
+ // if (psiDocComment != null) {
+ // System.out.println("PsiMethodNode" + PsiDocToStrDoc.text(psiDocComment, true));
+ // }
+ // return psiDocComment;
+ // }
+ if (node instanceof PsiFieldNode) {
+ // On Show Members
+ PsiField psiField = ((PsiFieldNode) node).getValue();
+ // PsiDocComment docComment = OwnerToPsiDocUtils.srcOrByteCodeDoc(psiField);
+ // if (docComment != null) {
+ // System.out.println("PsiFieldNode" + PsiDocToStrDoc.text(docComment, true));
+ // return docComment;
+ // }
+ // for @Autowire Bean
+ PsiType type = psiField.getType();
+ if (type instanceof PsiClassReferenceType) {
+ PsiClassReferenceType psiClassReferenceType = (PsiClassReferenceType) type;
+ PsiJavaCodeReferenceElement reference = psiClassReferenceType.getReference();
+ return NewCallRefToPsiDoc.javaCodeDoc(reference);
+ }
+ }
+
+ // if (node instanceof ClassTreeNode) {
+ // // On Packages View, Project Files View, Show Members
+ // PsiClass psiClass = ((ClassTreeNode) node).getValue();
+ // PsiDocComment psiDocComment = OwnerToPsiDocUtils.srcOrByteCodeDoc(psiClass);
+ // if (psiDocComment != null) {
+ // System.out.println("ClassTreeNode" + PsiDocToStrDoc.text(psiDocComment, true));
+ // }
+ // return psiDocComment;
+ // }
+ if (node instanceof PackageElementNode) {
+ // On Packages View
+ PsiPackage psiPackage = ((PackageElementNode) node).getValue().getPackage();
+ return packageDoc(psiPackage);
+ }
+
+ // On Packages View, Project Files View
+ VirtualFile virtualFile = node.getVirtualFile();
+ if (virtualFile == null || !virtualFile.isDirectory()) {
+ return null;
+ }
+ PsiDirectory psiDirectory = PsiManager.getInstance(project).findDirectory(virtualFile);
+ if (psiDirectory == null) {
+ return null;
+ }
+ return dirDoc(psiDirectory);
+ }
+
+ @Nullable
+ static PsiDocComment dirDoc(PsiDirectory child) {
+ while (true) {
+ PsiDocComment docComment = OwnerToPsiDocUtils.dirDoc(child);
+ if (docComment != null) {
+ return docComment;
+ }
+ AppSettingsState instance = AppSettingsState.getInstance();
+ if (!instance.compact) {
+ return null;
+ }
+ PsiDirectory parent = child.getParent();
+ if (parent == null) {
+ return null;
+ }
+ if (parent.getChildren().length != 1) {
+ return null;
+ }
+ child = parent;
+ }
+ }
+
+ @Nullable
+ static PsiDocComment packageDoc(PsiPackage child) {
+ while (true) {
+ PsiDocComment docComment = OwnerToPsiDocUtils.packageDoc(child);
+ if (docComment != null) {
+ return docComment;
+ }
+ PsiPackage parent = child.getParentPackage();
+ if (parent == null) {
+ return null;
+ }
+ // PsiPackage not implemented getChildren()
+ child = parent;
+ }
+ }
+}
diff --git a/src/main/java/io/github/linwancen/plugin/show/JsonJump.java b/src/main/idea/io/github/linwancen/plugin/show/java/JsonJumpJava.java
similarity index 89%
rename from src/main/java/io/github/linwancen/plugin/show/JsonJump.java
rename to src/main/idea/io/github/linwancen/plugin/show/java/JsonJumpJava.java
index a5af3ed..9f4af59 100644
--- a/src/main/java/io/github/linwancen/plugin/show/JsonJump.java
+++ b/src/main/idea/io/github/linwancen/plugin/show/java/JsonJumpJava.java
@@ -1,4 +1,4 @@
-package io.github.linwancen.plugin.show;
+package io.github.linwancen.plugin.show.java;
import com.intellij.json.psi.JsonProperty;
import com.intellij.json.psi.JsonStringLiteral;
@@ -8,7 +8,7 @@ import com.intellij.patterns.PlatformPatterns;
import com.intellij.psi.*;
import com.intellij.psi.util.PsiTreeUtil;
import com.intellij.util.ProcessingContext;
-import io.github.linwancen.plugin.show.doc.PsiClassUtils;
+import io.github.linwancen.plugin.show.java.doc.PsiClassUtils;
import io.github.linwancen.plugin.show.jump.JsonRef;
import org.jetbrains.annotations.NotNull;
@@ -16,15 +16,15 @@ import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
-public class JsonJump extends PsiReferenceContributor {
+public class JsonJumpJava extends PsiReferenceContributor {
@Override
public void registerReferenceProviders(@NotNull PsiReferenceRegistrar registrar) {
registrar.registerReferenceProvider(PlatformPatterns.psiElement(JsonStringLiteral.class),
new PsiReferenceProvider() {
@Override
- public PsiReference @NotNull [] getReferencesByElement(@NotNull PsiElement element,
- @NotNull ProcessingContext context) {
+ public @NotNull PsiReference[] getReferencesByElement(@NotNull PsiElement element,
+ @NotNull ProcessingContext context) {
JsonProperty jsonProp = PsiTreeUtil.getParentOfType(element, JsonProperty.class, true);
if (jsonProp == null) {
return PsiReference.EMPTY_ARRAY;
@@ -43,7 +43,7 @@ public class JsonJump extends PsiReferenceContributor {
List list = new ArrayList<>();
for (PsiField psiField : psiFields) {
- list.add(new JsonRef(element, psiField, tips));
+ list.add(new JsonRef<>(element, psiField, tips));
}
return list.toArray(new PsiReference[0]);
}
diff --git a/src/main/idea/io/github/linwancen/plugin/show/java/KotlinLangDoc.java b/src/main/idea/io/github/linwancen/plugin/show/java/KotlinLangDoc.java
new file mode 100644
index 0000000..b1ee817
--- /dev/null
+++ b/src/main/idea/io/github/linwancen/plugin/show/java/KotlinLangDoc.java
@@ -0,0 +1,66 @@
+package io.github.linwancen.plugin.show.java;
+
+import com.intellij.psi.PsiElement;
+import com.intellij.psi.impl.file.PsiPackageBase;
+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.BaseTagLangDoc;
+import io.github.linwancen.plugin.show.lang.base.DocFilter;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+import org.jetbrains.kotlin.idea.KotlinLanguage;
+import org.jetbrains.kotlin.kdoc.psi.api.KDoc;
+import org.jetbrains.kotlin.kdoc.psi.impl.KDocSection;
+import org.jetbrains.kotlin.kdoc.psi.impl.KDocTag;
+import org.jetbrains.kotlin.psi.KtNameReferenceExpression;
+
+import java.util.List;
+
+public class KotlinLangDoc extends BaseTagLangDoc {
+
+ static {
+ LANG_DOC_MAP.put(KotlinLanguage.INSTANCE.getID(), new KotlinLangDoc());
+ }
+
+ @Override
+ public @NotNull Class extends PsiElement> getRefClass() {
+ return KtNameReferenceExpression.class;
+ }
+
+ @Override
+ public boolean show(@NotNull LineInfo lineInfo) {
+ return lineInfo.appSettings.showLineEndCommentKotlin;
+ }
+
+ @Override
+ @Nullable
+ protected KDocSection toDocElement(@NotNull PsiElement resolve) {
+ if (resolve instanceof PsiPackageBase) {
+ return null;
+ }
+ KDoc kDoc = PsiTreeUtil.getChildOfType(resolve, KDoc.class);
+ if (kDoc == null) {
+ return null;
+ }
+ return kDoc.getDefaultSection();
+ }
+
+ @NotNull
+ @Override
+ protected String descDoc(@NotNull T lineInfo, @NotNull KDocSection kDocSection) {
+ String content = kDocSection.getContent();
+ return DocFilter.cutDoc(content, lineInfo.appSettings, false);
+ }
+
+ @Override
+ protected void appendTag(@NotNull T lineInfo, @NotNull StringBuilder tagStrBuilder,
+ @NotNull KDocSection kDocSection, @NotNull String name) {
+ List tags = kDocSection.findTagsByName(name);
+ for (KDocTag tag : tags) {
+ String content = tag.getContent();
+ String cutDoc = DocFilter.cutDoc(content, lineInfo.appSettings, false);
+ tagStrBuilder.append(cutDoc);
+ }
+ }
+}
diff --git a/src/main/java/io/github/linwancen/plugin/show/doc/OwnerToPsiDocUtils.java b/src/main/idea/io/github/linwancen/plugin/show/java/doc/OwnerToPsiDocUtils.java
similarity index 94%
rename from src/main/java/io/github/linwancen/plugin/show/doc/OwnerToPsiDocUtils.java
rename to src/main/idea/io/github/linwancen/plugin/show/java/doc/OwnerToPsiDocUtils.java
index c4f19a0..ff30dec 100644
--- a/src/main/java/io/github/linwancen/plugin/show/doc/OwnerToPsiDocUtils.java
+++ b/src/main/idea/io/github/linwancen/plugin/show/java/doc/OwnerToPsiDocUtils.java
@@ -1,8 +1,9 @@
-package io.github.linwancen.plugin.show.doc;
+package io.github.linwancen.plugin.show.java.doc;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.psi.*;
import com.intellij.psi.javadoc.PsiDocComment;
+import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
/**
@@ -21,7 +22,7 @@ public class OwnerToPsiDocUtils {
}
@Nullable
- public static PsiDocComment methodDoc(PsiMethod psiMethod) {
+ public static PsiDocComment methodDoc(@NotNull PsiMethod psiMethod) {
return PsiMethodToPsiDoc.methodSupperNewPropDoc(psiMethod);
}
diff --git a/src/main/java/io/github/linwancen/plugin/show/doc/PackageFileToPsiDoc.java b/src/main/idea/io/github/linwancen/plugin/show/java/doc/PackageFileToPsiDoc.java
similarity index 96%
rename from src/main/java/io/github/linwancen/plugin/show/doc/PackageFileToPsiDoc.java
rename to src/main/idea/io/github/linwancen/plugin/show/java/doc/PackageFileToPsiDoc.java
index d5f5c68..6855283 100644
--- a/src/main/java/io/github/linwancen/plugin/show/doc/PackageFileToPsiDoc.java
+++ b/src/main/idea/io/github/linwancen/plugin/show/java/doc/PackageFileToPsiDoc.java
@@ -1,4 +1,4 @@
-package io.github.linwancen.plugin.show.doc;
+package io.github.linwancen.plugin.show.java.doc;
import com.intellij.lang.ASTNode;
import com.intellij.psi.PsiFile;
diff --git a/src/main/java/io/github/linwancen/plugin/show/doc/PsiClassUtils.java b/src/main/idea/io/github/linwancen/plugin/show/java/doc/PsiClassUtils.java
similarity index 98%
rename from src/main/java/io/github/linwancen/plugin/show/doc/PsiClassUtils.java
rename to src/main/idea/io/github/linwancen/plugin/show/java/doc/PsiClassUtils.java
index 7f8f628..af34b81 100644
--- a/src/main/java/io/github/linwancen/plugin/show/doc/PsiClassUtils.java
+++ b/src/main/idea/io/github/linwancen/plugin/show/java/doc/PsiClassUtils.java
@@ -1,4 +1,4 @@
-package io.github.linwancen.plugin.show.doc;
+package io.github.linwancen.plugin.show.java.doc;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.vfs.VirtualFile;
diff --git a/src/main/java/io/github/linwancen/plugin/show/doc/PsiDocToStrDoc.java b/src/main/idea/io/github/linwancen/plugin/show/java/doc/PsiDocToStrDoc.java
similarity index 76%
rename from src/main/java/io/github/linwancen/plugin/show/doc/PsiDocToStrDoc.java
rename to src/main/idea/io/github/linwancen/plugin/show/java/doc/PsiDocToStrDoc.java
index d994bc8..b2ed826 100644
--- a/src/main/java/io/github/linwancen/plugin/show/doc/PsiDocToStrDoc.java
+++ b/src/main/idea/io/github/linwancen/plugin/show/java/doc/PsiDocToStrDoc.java
@@ -1,16 +1,19 @@
-package io.github.linwancen.plugin.show.doc;
+package io.github.linwancen.plugin.show.java.doc;
import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiWhiteSpace;
import com.intellij.psi.javadoc.*;
+import io.github.linwancen.plugin.show.lang.base.DocFilter;
import io.github.linwancen.plugin.show.settings.AppSettingsState;
import io.github.linwancen.plugin.show.settings.ProjectSettingsState;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
-import java.util.regex.Matcher;
import java.util.regex.Pattern;
+/**
+ * @deprecated BaseTagLangDoc
+ */
public class PsiDocToStrDoc {
private PsiDocToStrDoc() {}
@@ -22,6 +25,7 @@ public class PsiDocToStrDoc {
}
AppSettingsState appSettings = AppSettingsState.getInstance();
int lineCount = 0;
+ // JavaLangDoc.descDoc
StringBuilder sb = new StringBuilder();
PsiElement[] elements = psiDocComment.getDescriptionElements();
for (PsiElement element : elements) {
@@ -35,6 +39,7 @@ public class PsiDocToStrDoc {
}
}
StringBuilder tags = tags(psiDocComment, isTree, appSettings);
+ // BaseTagLangDoc.docElementToStr
if (tags.length() > 0) {
if (sb.length() > 0) {
sb.append("@ ");
@@ -46,37 +51,13 @@ public class PsiDocToStrDoc {
return null;
}
ProjectSettingsState projectSettings = ProjectSettingsState.getInstance(psiDocComment.getProject());
- return getDocBySetting(text, appSettings, projectSettings);
- }
-
- @Nullable
- private static String getDocBySetting(String text,
- AppSettingsState appSettings,
- ProjectSettingsState projectSettings) {
- // docGetEffect first because default false
- if (appSettings.docGetEffect && projectSettings.globalFilterEffective) {
- return getDoc(text, appSettings.docGet);
- } else if (projectSettings.docGetEffect && projectSettings.projectFilterEffective) {
- return getDoc(text, projectSettings.docGet);
- } else {
- return text;
- }
- }
-
- @Nullable
- static String getDoc(String text, Pattern docGet) {
- // if effect skip check empty
- Matcher m = docGet.matcher(text);
- if (m.find()) {
- return m.group(m.groupCount());
- }
- // one line
- return text;
+ return DocFilter.filterDoc(text, appSettings, projectSettings);
}
@NotNull
private static StringBuilder tags(@NotNull PsiDocComment psiDocComment, boolean isTree,
AppSettingsState appSettings) {
+ // JavaLangDoc.descDoc
StringBuilder sb = new StringBuilder();
String[] names = isTree ? appSettings.treeTags : appSettings.lineTags;
for (String name : names) {
@@ -96,6 +77,7 @@ public class PsiDocToStrDoc {
* @return is new line
*/
private static boolean appendElementText(StringBuilder sb, PsiElement element) {
+ // JavaLangDoc.appendElementText
if (element instanceof PsiDocToken) {
PsiDocToken psiDocToken = (PsiDocToken) element;
addHtml(sb, psiDocToken.getText());
@@ -113,6 +95,7 @@ public class PsiDocToStrDoc {
private static final Pattern HTML_PATTERN = Pattern.compile("<[^>]++>");
private static void addHtml(StringBuilder sb, String s) {
+ // DocFilter.addHtml
String deleteHtml = HTML_PATTERN.matcher(s.trim()).replaceAll("");
if (deleteHtml.length() > 0) {
sb.append(deleteHtml).append(" ");
diff --git a/src/main/java/io/github/linwancen/plugin/show/doc/PsiMethodToPsiDoc.java b/src/main/idea/io/github/linwancen/plugin/show/java/doc/PsiMethodToPsiDoc.java
similarity index 92%
rename from src/main/java/io/github/linwancen/plugin/show/doc/PsiMethodToPsiDoc.java
rename to src/main/idea/io/github/linwancen/plugin/show/java/doc/PsiMethodToPsiDoc.java
index c21fcab..a9a96ee 100644
--- a/src/main/java/io/github/linwancen/plugin/show/doc/PsiMethodToPsiDoc.java
+++ b/src/main/idea/io/github/linwancen/plugin/show/java/doc/PsiMethodToPsiDoc.java
@@ -1,10 +1,11 @@
-package io.github.linwancen.plugin.show.doc;
+package io.github.linwancen.plugin.show.java.doc;
import com.intellij.psi.PsiClass;
import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiField;
import com.intellij.psi.PsiMethod;
import com.intellij.psi.javadoc.PsiDocComment;
+import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
class PsiMethodToPsiDoc {
@@ -12,7 +13,7 @@ class PsiMethodToPsiDoc {
private PsiMethodToPsiDoc() {}
@Nullable
- static PsiDocComment methodSupperNewPropDoc(PsiMethod psiMethod) {
+ static PsiDocComment methodSupperNewPropDoc(@NotNull PsiMethod psiMethod) {
// .class
PsiElement navElement = psiMethod.getNavigationElement();
if (navElement instanceof PsiMethod) {
diff --git a/src/main/java/io/github/linwancen/plugin/show/line/FileViewToDocStrUtils.java b/src/main/idea/io/github/linwancen/plugin/show/java/line/FileViewToDocStrUtils.java
similarity index 91%
rename from src/main/java/io/github/linwancen/plugin/show/line/FileViewToDocStrUtils.java
rename to src/main/idea/io/github/linwancen/plugin/show/java/line/FileViewToDocStrUtils.java
index 5834d20..98c9614 100644
--- a/src/main/java/io/github/linwancen/plugin/show/line/FileViewToDocStrUtils.java
+++ b/src/main/idea/io/github/linwancen/plugin/show/java/line/FileViewToDocStrUtils.java
@@ -1,4 +1,4 @@
-package io.github.linwancen.plugin.show.line;
+package io.github.linwancen.plugin.show.java.line;
import com.intellij.openapi.editor.Document;
import com.intellij.openapi.project.Project;
@@ -6,14 +6,14 @@ import com.intellij.openapi.util.TextRange;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.psi.FileViewProvider;
import com.intellij.psi.javadoc.PsiDocComment;
-import io.github.linwancen.plugin.show.doc.PsiDocToStrDoc;
-import io.github.linwancen.plugin.show.ext.LineExt;
+import io.github.linwancen.plugin.show.java.doc.PsiDocToStrDoc;
import io.github.linwancen.plugin.show.settings.AppSettingsState;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
/**
* call LineExt, ~LeftToRight, ~RightToLeft
+ * @deprecated JavaLangDoc
*/
public class FileViewToDocStrUtils {
@@ -32,9 +32,10 @@ public class FileViewToDocStrUtils {
if (file != null) {
int i = text.indexOf(setting.lineEndPrefix);
String code = i <= 0 ? text : text.substring(0, i);
- String extDoc = LineExt.extDoc(project, file.getPath(), file.getName(), file.getExtension(), code);
+ String extDoc = "LineExt.extDoc(project, file.getPath(), file.getName(), file.getExtension(), code)";
if (extDoc != null) {
extDoc = extDoc.trim();
+ // LineEnd.lineDocSkipHave
if (text.endsWith(extDoc)) {
return null;
}
@@ -64,6 +65,7 @@ public class FileViewToDocStrUtils {
@Nullable Project project,
@Nullable VirtualFile file,
@Nullable FileViewProvider viewProvider) {
+ // textWithDoc
StringBuilder sb = new StringBuilder();
for (int i = startLine; i <= endLine; i++) {
int startOffset;
diff --git a/src/main/java/io/github/linwancen/plugin/show/line/FileViewToPsiDocLeftToRight.java b/src/main/idea/io/github/linwancen/plugin/show/java/line/FileViewToPsiDocLeftToRight.java
similarity index 93%
rename from src/main/java/io/github/linwancen/plugin/show/line/FileViewToPsiDocLeftToRight.java
rename to src/main/idea/io/github/linwancen/plugin/show/java/line/FileViewToPsiDocLeftToRight.java
index 86c9cf6..33729ac 100644
--- a/src/main/java/io/github/linwancen/plugin/show/line/FileViewToPsiDocLeftToRight.java
+++ b/src/main/idea/io/github/linwancen/plugin/show/java/line/FileViewToPsiDocLeftToRight.java
@@ -1,4 +1,4 @@
-package io.github.linwancen.plugin.show.line;
+package io.github.linwancen.plugin.show.java.line;
import com.intellij.json.JsonLanguage;
import com.intellij.openapi.editor.Document;
@@ -14,6 +14,7 @@ import org.jetbrains.annotations.Nullable;
/**
* call JsonToPsiDoc, NewCallRefToPsiDoc
+ * @deprecated JavaLangDoc
*/
public class FileViewToPsiDocLeftToRight {
@@ -54,7 +55,7 @@ public class FileViewToPsiDocLeftToRight {
return null;
}
AppSettingsState instance = AppSettingsState.getInstance();
- if (instance.inJson && element.getLanguage().is(JsonLanguage.INSTANCE)) {
+ if (instance.showLineEndCommentJson && element.getLanguage().is(JsonLanguage.INSTANCE)) {
return JsonToPsiDoc.jsonDoc(element, startOffset, endOffset);
}
if (startWithSymbol) {
diff --git a/src/main/java/io/github/linwancen/plugin/show/line/FileViewToPsiDocRightToLeft.java b/src/main/idea/io/github/linwancen/plugin/show/java/line/FileViewToPsiDocRightToLeft.java
similarity index 92%
rename from src/main/java/io/github/linwancen/plugin/show/line/FileViewToPsiDocRightToLeft.java
rename to src/main/idea/io/github/linwancen/plugin/show/java/line/FileViewToPsiDocRightToLeft.java
index bc10b2a..645e90e 100644
--- a/src/main/java/io/github/linwancen/plugin/show/line/FileViewToPsiDocRightToLeft.java
+++ b/src/main/idea/io/github/linwancen/plugin/show/java/line/FileViewToPsiDocRightToLeft.java
@@ -1,4 +1,4 @@
-package io.github.linwancen.plugin.show.line;
+package io.github.linwancen.plugin.show.java.line;
import com.intellij.json.JsonLanguage;
import com.intellij.psi.FileViewProvider;
@@ -12,6 +12,7 @@ import org.jetbrains.annotations.Nullable;
/**
* call JsonToPsiDoc, NewCallRefToPsiDoc
+ * @deprecated JavaLangDoc
*/
public class FileViewToPsiDocRightToLeft {
@@ -48,7 +49,7 @@ public class FileViewToPsiDocRightToLeft {
if (identifier != null && !(identifier instanceof PsiIdentifier)) {
return null;
}
- if (setting.inJson && element.getLanguage().is(JsonLanguage.INSTANCE)) {
+ if (setting.showLineEndCommentJson && element.getLanguage().is(JsonLanguage.INSTANCE)) {
return JsonToPsiDoc.jsonDoc(element, startOffset, endOffset);
}
return NewCallRefToPsiDoc.elementDoc(element, identifier, startOffset, endOffset);
diff --git a/src/main/java/io/github/linwancen/plugin/show/line/JsonToPsiDoc.java b/src/main/idea/io/github/linwancen/plugin/show/java/line/JsonToPsiDoc.java
similarity index 76%
rename from src/main/java/io/github/linwancen/plugin/show/line/JsonToPsiDoc.java
rename to src/main/idea/io/github/linwancen/plugin/show/java/line/JsonToPsiDoc.java
index 39a3061..831dc71 100644
--- a/src/main/java/io/github/linwancen/plugin/show/line/JsonToPsiDoc.java
+++ b/src/main/idea/io/github/linwancen/plugin/show/java/line/JsonToPsiDoc.java
@@ -1,4 +1,4 @@
-package io.github.linwancen.plugin.show.line;
+package io.github.linwancen.plugin.show.java.line;
import com.intellij.json.psi.JsonProperty;
import com.intellij.psi.PsiDocCommentOwner;
@@ -6,9 +6,12 @@ import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiReference;
import com.intellij.psi.javadoc.PsiDocComment;
import com.intellij.psi.util.PsiTreeUtil;
-import io.github.linwancen.plugin.show.doc.OwnerToPsiDocUtils;
+import io.github.linwancen.plugin.show.java.doc.OwnerToPsiDocUtils;
import org.jetbrains.annotations.Nullable;
+/**
+ * @deprecated JsonLangDoc
+ */
public class JsonToPsiDoc {
private JsonToPsiDoc() {}
@@ -18,12 +21,18 @@ public class JsonToPsiDoc {
*/
@Nullable
public static PsiDocComment jsonDoc(PsiElement element, int startOffset, int endOffset) {
+ // JsonLangDoc.refDoc
JsonProperty jsonProp = PsiTreeUtil.getParentOfType(element, JsonProperty.class, true, startOffset);
if (jsonProp == null || jsonProp.getNameElement().getTextRange().getEndOffset() > endOffset) {
return null;
}
for (PsiReference reference : jsonProp.getNameElement().getReferences()) {
- PsiElement resolve = reference.resolve();
+ PsiElement resolve = null;
+ try {
+ resolve = reference.resolve();
+ } catch (Throwable ignore) {
+ // ignore
+ }
if (resolve instanceof PsiDocCommentOwner) {
PsiDocCommentOwner owner = (PsiDocCommentOwner) resolve;
PsiDocComment docComment = OwnerToPsiDocUtils.srcOrByteCodeDoc(owner);
diff --git a/src/main/java/io/github/linwancen/plugin/show/line/NewCallRefToPsiDoc.java b/src/main/idea/io/github/linwancen/plugin/show/java/line/NewCallRefToPsiDoc.java
similarity index 81%
rename from src/main/java/io/github/linwancen/plugin/show/line/NewCallRefToPsiDoc.java
rename to src/main/idea/io/github/linwancen/plugin/show/java/line/NewCallRefToPsiDoc.java
index 8dacbc9..5b361dd 100644
--- a/src/main/java/io/github/linwancen/plugin/show/line/NewCallRefToPsiDoc.java
+++ b/src/main/idea/io/github/linwancen/plugin/show/java/line/NewCallRefToPsiDoc.java
@@ -1,10 +1,10 @@
-package io.github.linwancen.plugin.show.line;
+package io.github.linwancen.plugin.show.java.line;
import com.intellij.psi.*;
import com.intellij.psi.impl.source.javadoc.PsiDocMethodOrFieldRef;
import com.intellij.psi.javadoc.PsiDocComment;
import com.intellij.psi.util.PsiTreeUtil;
-import io.github.linwancen.plugin.show.doc.OwnerToPsiDocUtils;
+import io.github.linwancen.plugin.show.java.doc.OwnerToPsiDocUtils;
import io.github.linwancen.plugin.show.settings.AppSettingsState;
import io.github.linwancen.plugin.show.settings.ProjectSettingsState;
import org.jetbrains.annotations.Nullable;
@@ -12,13 +12,17 @@ import org.jetbrains.annotations.Nullable;
/**
* call OwnerToPsiDocSkip
*/
-class NewCallRefToPsiDoc {
+public class NewCallRefToPsiDoc {
private NewCallRefToPsiDoc() {}
+ /**
+ * @deprecated
+ */
@Nullable
static PsiDocComment elementDoc(PsiElement element, PsiElement psiIdentifier,
int startOffset, int endOffset) {
+ // JavaLangDoc.refDoc
AppSettingsState instance = AppSettingsState.getInstance();
if (psiIdentifier != null && "Override".equals(psiIdentifier.getText())) {
ProjectSettingsState projectSettings = ProjectSettingsState.getInstance(psiIdentifier.getProject());
@@ -41,6 +45,9 @@ class NewCallRefToPsiDoc {
return null;
}
+ /**
+ * @deprecated
+ */
@Nullable
private static PsiDocComment elementDoc(PsiElement element, int startOffset, int endOffset,
AppSettingsState instance) {
@@ -50,6 +57,7 @@ class NewCallRefToPsiDoc {
return executableDoc;
}
}
+ // JavaLangDoc.refDoc
if (instance.fromNew) {
PsiDocComment newDoc = parentNewDoc(element, startOffset);
if (newDoc != null) {
@@ -62,9 +70,13 @@ class NewCallRefToPsiDoc {
return null;
}
+ /**
+ * @deprecated
+ */
@Nullable
private static PsiDocComment parentMethodDoc(PsiElement element, int startOffset, int endOffset) {
// method call
+ // JavaLangDoc.resolveDocPrint
PsiMethodCallExpression call =
PsiTreeUtil.getParentOfType(element, PsiMethodCallExpression.class, false, startOffset);
if (call == null) {
@@ -84,6 +96,9 @@ class NewCallRefToPsiDoc {
return null;
}
+ /**
+ * @deprecated
+ */
@Nullable
private static PsiDocComment parentNewDoc(PsiElement element, int startOffset) {
// new and Class should same line, so not need if endOffset
@@ -91,9 +106,13 @@ class NewCallRefToPsiDoc {
if (newExp == null) {
return null;
}
- PsiDocComment methodComment = OwnerToPsiDocSkip.refDoc(newExp.resolveMethod());
- if (methodComment != null) {
- return methodComment;
+ try {
+ PsiDocComment methodComment = OwnerToPsiDocSkip.refDoc(newExp.resolveMethod());
+ if (methodComment != null) {
+ return methodComment;
+ }
+ } catch (Throwable ignore) {
+ // ignore
}
PsiJavaCodeReferenceElement classReference = newExp.getClassReference();
return javaCodeDoc(classReference);
@@ -101,6 +120,7 @@ class NewCallRefToPsiDoc {
/**
* ::/class/field
+ * @deprecated
*/
@Nullable
private static PsiDocComment refDoc(PsiElement element, int endOffset) {
@@ -116,7 +136,12 @@ class NewCallRefToPsiDoc {
element = parent;
}
if (element instanceof PsiReference) {
- PsiElement resolve = ((PsiReference) element).resolve();
+ PsiElement resolve = null;
+ try {
+ resolve = ((PsiReference) element).resolve();
+ } catch (Throwable ignore) {
+ // ignore
+ }
if (resolve instanceof PsiDocCommentOwner) {
return OwnerToPsiDocSkip.refDoc(((PsiDocCommentOwner) resolve));
}
@@ -136,17 +161,25 @@ class NewCallRefToPsiDoc {
@Nullable
- private static PsiDocComment javaCodeDoc(PsiJavaCodeReferenceElement ref) {
+ public static PsiDocComment javaCodeDoc(PsiJavaCodeReferenceElement ref) {
if (ref == null) {
return null;
}
- PsiElement resolve = ref.resolve();
+ PsiElement resolve = null;
+ try {
+ resolve = ref.resolve();
+ } catch (Throwable ignore) {
+ // ignore
+ }
if (resolve instanceof PsiDocCommentOwner) {
return OwnerToPsiDocSkip.refDoc(((PsiDocCommentOwner) resolve));
}
return null;
}
+ /**
+ * @deprecated
+ */
@Nullable
private static PsiDocComment docRefDoc(PsiElement element) {
PsiElement parent = element.getParent();
@@ -158,7 +191,12 @@ class NewCallRefToPsiDoc {
if (reference == null) {
return null;
}
- PsiElement resolve = reference.resolve();
+ PsiElement resolve = null;
+ try {
+ resolve = reference.resolve();
+ } catch (Throwable ignore) {
+ // ignore
+ }
if (resolve instanceof PsiMethod) {
return OwnerToPsiDocSkip.refDoc(((PsiMethod) resolve));
}
diff --git a/src/main/java/io/github/linwancen/plugin/show/line/OwnerToPsiDocSkip.java b/src/main/idea/io/github/linwancen/plugin/show/java/line/OwnerToPsiDocSkip.java
similarity index 79%
rename from src/main/java/io/github/linwancen/plugin/show/line/OwnerToPsiDocSkip.java
rename to src/main/idea/io/github/linwancen/plugin/show/java/line/OwnerToPsiDocSkip.java
index 491d775..7baccce 100644
--- a/src/main/java/io/github/linwancen/plugin/show/line/OwnerToPsiDocSkip.java
+++ b/src/main/idea/io/github/linwancen/plugin/show/java/line/OwnerToPsiDocSkip.java
@@ -1,21 +1,21 @@
-package io.github.linwancen.plugin.show.line;
+package io.github.linwancen.plugin.show.java.line;
import com.intellij.psi.PsiDocCommentOwner;
import com.intellij.psi.PsiMethod;
import com.intellij.psi.javadoc.PsiDocComment;
-import io.github.linwancen.plugin.show.doc.OwnerToPsiDocUtils;
+import io.github.linwancen.plugin.show.java.doc.OwnerToPsiDocUtils;
import io.github.linwancen.plugin.show.settings.AppSettingsState;
import io.github.linwancen.plugin.show.settings.ProjectSettingsState;
import org.jetbrains.annotations.Nullable;
/**
- * call OwnerToPsiDocUtils, SkipUtils
+ * call SkipUtils
*/
-class OwnerToPsiDocSkip {
+public class OwnerToPsiDocSkip {
private OwnerToPsiDocSkip() {}
- static PsiDocComment refDoc(@Nullable PsiDocCommentOwner docOwner) {
+ public static PsiDocComment refDoc(@Nullable PsiDocCommentOwner docOwner) {
if (docOwner == null) {
return null;
}
diff --git a/src/main/java/io/github/linwancen/plugin/show/line/SkipUtils.java b/src/main/idea/io/github/linwancen/plugin/show/java/line/SkipUtils.java
similarity index 53%
rename from src/main/java/io/github/linwancen/plugin/show/line/SkipUtils.java
rename to src/main/idea/io/github/linwancen/plugin/show/java/line/SkipUtils.java
index 645bbf1..12a3c31 100644
--- a/src/main/java/io/github/linwancen/plugin/show/line/SkipUtils.java
+++ b/src/main/idea/io/github/linwancen/plugin/show/java/line/SkipUtils.java
@@ -1,17 +1,15 @@
-package io.github.linwancen.plugin.show.line;
+package io.github.linwancen.plugin.show.java.line;
import com.intellij.psi.PsiClass;
import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiMember;
import com.intellij.psi.javadoc.PsiDocComment;
+import io.github.linwancen.plugin.show.lang.base.DocSkip;
import io.github.linwancen.plugin.show.settings.AppSettingsState;
import io.github.linwancen.plugin.show.settings.ProjectSettingsState;
import org.apache.commons.lang3.StringUtils;
-import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
-import java.util.regex.Pattern;
-
class SkipUtils {
private SkipUtils() {}
@@ -21,9 +19,7 @@ class SkipUtils {
if (text == null) {
return true;
}
- return skipText(text,
- projectSettings.globalFilterEffective, appSettings.lineInclude, appSettings.lineExclude,
- projectSettings.projectFilterEffective, projectSettings.lineInclude, projectSettings.lineExclude);
+ return DocSkip.skipSign(appSettings, projectSettings, text);
}
private static @Nullable String psiName(@Nullable PsiElement psiElement, AppSettingsState appSettings) {
@@ -53,8 +49,6 @@ class SkipUtils {
return null;
}
- public static final Pattern NOT_ASCII_PATTERN = Pattern.compile("[^\u0000-\u007f]");
-
static PsiDocComment skipDoc(PsiDocComment doc, AppSettingsState appSettings, ProjectSettingsState projectSettings) {
if (doc == null) {
return null;
@@ -63,12 +57,7 @@ class SkipUtils {
return null;
}
String text = doc.getText();
- if (appSettings.skipAscii && !NOT_ASCII_PATTERN.matcher(text).find()) {
- return null;
- }
- boolean skip = skipText(text,
- projectSettings.globalFilterEffective, appSettings.docInclude, appSettings.docExclude,
- projectSettings.projectFilterEffective, projectSettings.docInclude, projectSettings.docExclude);
+ boolean skip = DocSkip.skipDoc(appSettings, projectSettings, text);
return skip ? null : doc;
}
@@ -82,42 +71,4 @@ class SkipUtils {
}
return true;
}
-
- private static boolean skipText(String text,
- boolean appFilterEffective, Pattern appDocInclude, Pattern appDocExclude,
- boolean projectFilterEffective, Pattern projectDocInclude, Pattern projectDocExclude
- ) {
- if (text == null) {
- return true;
- }
- if (appFilterEffective
- && skipText(text, appDocInclude, appDocExclude)) {
- return true;
- }
- if (projectFilterEffective) {
- return skipText(text, projectDocInclude, projectDocExclude);
- }
- return false;
- }
-
- static boolean skipText(@NotNull String text, Pattern include, Pattern exclude) {
- if (exclude(text, exclude)) {
- return true;
- }
- return !include(text, include);
- }
-
- static boolean include(@NotNull String text, Pattern include) {
- if (include.pattern().length() == 0) {
- return true;
- }
- return include.matcher(text).find();
- }
-
- static boolean exclude(@NotNull String text, Pattern exclude) {
- if (exclude.pattern().length() == 0) {
- return false;
- }
- return exclude.matcher(text).find();
- }
}
diff --git a/src/main/java/io/github/linwancen/plugin/show/LineEnd.java b/src/main/java/io/github/linwancen/plugin/show/LineEnd.java
index 006a5bb..f211b39 100644
--- a/src/main/java/io/github/linwancen/plugin/show/LineEnd.java
+++ b/src/main/java/io/github/linwancen/plugin/show/LineEnd.java
@@ -1,18 +1,17 @@
package io.github.linwancen.plugin.show;
import com.intellij.json.JsonFileType;
-import com.intellij.openapi.editor.Document;
+import com.intellij.json.json5.Json5FileType;
import com.intellij.openapi.editor.EditorLinePainter;
import com.intellij.openapi.editor.LineExtensionInfo;
import com.intellij.openapi.editor.markup.TextAttributes;
-import com.intellij.openapi.fileEditor.FileDocumentManager;
import com.intellij.openapi.project.DumbService;
import com.intellij.openapi.project.Project;
-import com.intellij.openapi.util.TextRange;
import com.intellij.openapi.vfs.VirtualFile;
-import com.intellij.psi.FileViewProvider;
-import com.intellij.psi.PsiManager;
-import io.github.linwancen.plugin.show.line.FileViewToDocStrUtils;
+import io.github.linwancen.plugin.show.bean.FileInfo;
+import io.github.linwancen.plugin.show.bean.LineInfo;
+import io.github.linwancen.plugin.show.ext.LineExt;
+import io.github.linwancen.plugin.show.lang.base.BaseLangDoc;
import io.github.linwancen.plugin.show.settings.AppSettingsState;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -35,48 +34,62 @@ public class LineEnd extends EditorLinePainter {
if (!file.exists()) {
return null;
}
- String doc = doc(project, file, lineNumber);
+ LineInfo lineInfo = LineInfo.of(file, project, lineNumber);
+ String doc = lineDocSkipHave(lineInfo);
if (doc == null) {
return null;
}
TextAttributes textAttr = file.getFileType().equals(JsonFileType.INSTANCE)
+ || file.getFileType().equals(Json5FileType.INSTANCE)
? settings.lineEndJsonTextAttr
: settings.lineEndTextAttr;
LineExtensionInfo info = new LineExtensionInfo(settings.lineEndPrefix + doc, textAttr);
return Collections.singletonList(info);
}
- private static @Nullable String doc(@NotNull Project project,
- @NotNull VirtualFile file, int lineNumber) {
- FileViewProvider viewProvider = PsiManager.getInstance(project).findViewProvider(file);
- Document document = FileDocumentManager.getInstance().getDocument(file);
- if (document == null) {
- return null;
+ @NotNull
+ public static String textWithDoc(@NotNull FileInfo fileInfo, int startLine, int endLine) {
+ StringBuilder sb = new StringBuilder();
+ for (int i = startLine; i <= endLine; i++) {
+ LineInfo lineInfo = LineInfo.of(fileInfo, i);
+ if (lineInfo == null) {
+ sb.append("\n");
+ continue;
+ }
+ sb.append(lineInfo.text);
+ String doc = lineDocSkipHave(lineInfo);
+ if (doc != null) {
+ sb.append(lineInfo.appSettings.lineEndPrefix).append(doc);
+ }
+ sb.append("\n");
}
- return doc(document, lineNumber, project, file, viewProvider);
+ if (sb.length() > 0) {
+ sb.delete(sb.length() - 1, sb.length());
+ }
+ return sb.toString();
}
- @Nullable
- private static String doc(@NotNull Document document, int lineNumber,
- @NotNull Project project,
- @Nullable VirtualFile file,
- @Nullable FileViewProvider viewProvider) {
- // lineNumber start 0, as 1 <= 1 should return
- if (document.getLineCount() <= lineNumber) {
+ private static @Nullable String lineDocSkipHave(@Nullable LineInfo lineInfo) {
+ String doc = lineDoc(lineInfo);
+ if (doc == null) {
return null;
}
- int startOffset;
- int endOffset;
- try {
- startOffset = document.getLineStartOffset(lineNumber);
- endOffset = document.getLineEndOffset(lineNumber);
- } catch (Exception e) {
+ String trimDoc = doc.trim();
+ if (lineInfo.text.trim().endsWith(trimDoc)) {
return null;
}
- if (startOffset == endOffset) {
+ return trimDoc;
+ }
+
+ private static @Nullable String lineDoc(@Nullable LineInfo lineInfo) {
+ if (lineInfo == null) {
return null;
}
- String text = document.getText(new TextRange(startOffset, endOffset));
- return FileViewToDocStrUtils.doc(document, project, file, viewProvider, startOffset, endOffset, text);
+ // override some text
+ String doc = LineExt.doc(lineInfo);
+ if (doc != null) {
+ return doc;
+ }
+ return BaseLangDoc.langDoc(lineInfo);
}
}
diff --git a/src/main/java/io/github/linwancen/plugin/show/LineEndAdd.java b/src/main/java/io/github/linwancen/plugin/show/LineEndAdd.java
index 5d17bbf..1d53708 100644
--- a/src/main/java/io/github/linwancen/plugin/show/LineEndAdd.java
+++ b/src/main/java/io/github/linwancen/plugin/show/LineEndAdd.java
@@ -1,27 +1,23 @@
package io.github.linwancen.plugin.show;
-import com.intellij.openapi.actionSystem.AnAction;
import com.intellij.openapi.actionSystem.AnActionEvent;
import com.intellij.openapi.actionSystem.CommonDataKeys;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.command.WriteCommandAction;
-import com.intellij.openapi.editor.Document;
+import com.intellij.openapi.project.DumbAwareAction;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.ui.popup.JBPopupFactory;
import com.intellij.openapi.ui.popup.ListPopup;
import com.intellij.openapi.vfs.VfsUtilCore;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.openapi.vfs.VirtualFileVisitor;
-import com.intellij.psi.FileViewProvider;
-import com.intellij.psi.PsiManager;
-import io.github.linwancen.plugin.show.line.FileViewToDocStrUtils;
-import io.github.linwancen.plugin.show.settings.AppSettingsState;
+import io.github.linwancen.plugin.show.bean.FileInfo;
import org.jetbrains.annotations.NotNull;
/**
* on ProjectViewPopupMenu
*/
-public class LineEndAdd extends AnAction {
+public class LineEndAdd extends DumbAwareAction {
@Override
public void actionPerformed(@NotNull AnActionEvent event) {
@@ -40,13 +36,12 @@ public class LineEndAdd extends AnAction {
}
private void addDocAll(@NotNull Project project, @NotNull VirtualFile[] files) {
- AppSettingsState settings = AppSettingsState.getInstance();
for (VirtualFile file : files) {
VfsUtilCore.visitChildrenRecursively(file, new VirtualFileVisitor() {
@Override
public boolean visitFile(@NotNull VirtualFile file) {
if (!file.isDirectory()) {
- ApplicationManager.getApplication().runReadAction(() -> addDoc(project, file, settings));
+ ApplicationManager.getApplication().runReadAction(() -> addDoc(project, file));
}
return true;
}
@@ -54,21 +49,16 @@ public class LineEndAdd extends AnAction {
}
}
- private void addDoc(@NotNull Project project, @NotNull VirtualFile file, @NotNull AppSettingsState settings) {
- FileViewProvider viewProvider = PsiManager.getInstance(project).findViewProvider(file);
- if (viewProvider == null) {
- return;
- }
- Document document = viewProvider.getDocument();
- if (document == null) {
+ private void addDoc(@NotNull Project project, @NotNull VirtualFile file) {
+ FileInfo fileInfo = FileInfo.of(file, project);
+ if (fileInfo == null) {
return;
}
int startLine = 0;
- int endLine = document.getLineCount() - 1;
- String textWithDoc = FileViewToDocStrUtils.textWithDoc(settings, document,
- startLine, endLine, project, file, viewProvider);
+ int endLine = fileInfo.document.getLineCount() - 1;
+ String textWithDoc = LineEnd.textWithDoc(fileInfo, startLine, endLine);
WriteCommandAction.runWriteCommandAction(project, () ->
- document.replaceString(0, document.getTextLength() - 1, textWithDoc)
+ fileInfo.document.replaceString(0, fileInfo.document.getTextLength() - 1, textWithDoc)
);
}
}
\ No newline at end of file
diff --git a/src/main/java/io/github/linwancen/plugin/show/LineEndCopy.java b/src/main/java/io/github/linwancen/plugin/show/LineEndCopy.java
index 02aa2ae..8f840cd 100644
--- a/src/main/java/io/github/linwancen/plugin/show/LineEndCopy.java
+++ b/src/main/java/io/github/linwancen/plugin/show/LineEndCopy.java
@@ -1,19 +1,13 @@
package io.github.linwancen.plugin.show;
-import com.intellij.openapi.actionSystem.AnAction;
import com.intellij.openapi.actionSystem.AnActionEvent;
import com.intellij.openapi.actionSystem.CommonDataKeys;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.editor.Caret;
-import com.intellij.openapi.editor.Document;
import com.intellij.openapi.editor.Editor;
import com.intellij.openapi.ide.CopyPasteManager;
-import com.intellij.openapi.project.Project;
-import com.intellij.openapi.vfs.VirtualFile;
-import com.intellij.psi.FileViewProvider;
-import com.intellij.psi.PsiFile;
-import io.github.linwancen.plugin.show.line.FileViewToDocStrUtils;
-import io.github.linwancen.plugin.show.settings.AppSettingsState;
+import com.intellij.openapi.project.DumbAwareAction;
+import io.github.linwancen.plugin.show.bean.FileInfo;
import org.jetbrains.annotations.NotNull;
import java.awt.datatransfer.StringSelection;
@@ -21,7 +15,7 @@ import java.awt.datatransfer.StringSelection;
/**
* on EditorPopupMenu
*/
-public class LineEndCopy extends AnAction {
+public class LineEndCopy extends DumbAwareAction {
@Override
public void actionPerformed(@NotNull AnActionEvent event) {
@@ -29,37 +23,26 @@ public class LineEndCopy extends AnAction {
}
private void copyWithDoc(@NotNull AnActionEvent event) {
- Project project = event.getProject();
- VirtualFile file = event.getData(CommonDataKeys.VIRTUAL_FILE);
- if (file == null) {
- return;
- }
- PsiFile psiFile = event.getData(CommonDataKeys.PSI_FILE);
- if (psiFile == null) {
- return;
- }
- FileViewProvider viewProvider = psiFile.getViewProvider();
- Document document = viewProvider.getDocument();
- if (document == null) {
+ FileInfo fileInfo = FileInfo.of(event);
+ if (fileInfo == null) {
return;
}
int startLine = 0;
- int endLine = document.getLineCount() - 1;
-
+ int endLine = fileInfo.document.getLineCount() - 1;
// if select
Editor editor = event.getData(CommonDataKeys.EDITOR);
if (editor != null) {
Caret primaryCaret = editor.getCaretModel().getPrimaryCaret();
int start = primaryCaret.getSelectionStart();
int end = primaryCaret.getSelectionEnd();
- startLine = document.getLineNumber(start);
- endLine = document.getLineNumber(end);
+ try {
+ startLine = fileInfo.document.getLineNumber(start);
+ endLine = fileInfo.document.getLineNumber(end);
+ } catch (Exception e) {
+ return;
+ }
}
-
- AppSettingsState settings = AppSettingsState.getInstance();
-
- String textWithDoc = FileViewToDocStrUtils.textWithDoc(settings, document,
- startLine, endLine, project, file, viewProvider);
+ String textWithDoc = LineEnd.textWithDoc(fileInfo, startLine, endLine);
StringSelection content = new StringSelection(textWithDoc);
CopyPasteManager.getInstance().setContents(content);
}
diff --git a/src/main/java/io/github/linwancen/plugin/show/Tree.java b/src/main/java/io/github/linwancen/plugin/show/Tree.java
index 33f343b..3d3e461 100644
--- a/src/main/java/io/github/linwancen/plugin/show/Tree.java
+++ b/src/main/java/io/github/linwancen/plugin/show/Tree.java
@@ -3,23 +3,23 @@ package io.github.linwancen.plugin.show;
import com.intellij.ide.projectView.PresentationData;
import com.intellij.ide.projectView.ProjectViewNode;
import com.intellij.ide.projectView.ProjectViewNodeDecorator;
-import com.intellij.ide.projectView.impl.nodes.*;
import com.intellij.ide.util.treeView.PresentableNodeDescriptor.ColoredFragment;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.project.DumbService;
import com.intellij.openapi.project.Project;
-import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.packageDependencies.ui.PackageDependenciesNode;
-import com.intellij.psi.*;
-import com.intellij.psi.javadoc.PsiDocComment;
+import com.intellij.psi.PsiElement;
import com.intellij.ui.ColoredTreeCellRenderer;
import com.intellij.ui.SimpleTextAttributes;
-import io.github.linwancen.plugin.show.doc.OwnerToPsiDocUtils;
-import io.github.linwancen.plugin.show.doc.PsiDocToStrDoc;
+import io.github.linwancen.plugin.show.bean.FuncEnum;
import io.github.linwancen.plugin.show.ext.TreeExt;
+import io.github.linwancen.plugin.show.lang.base.BaseLangDoc;
+import io.github.linwancen.plugin.show.bean.SettingsInfo;
import io.github.linwancen.plugin.show.settings.AppSettingsState;
+import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
+import java.util.Collection;
import java.util.List;
public class Tree implements ProjectViewNodeDecorator {
@@ -37,7 +37,7 @@ public class Tree implements ProjectViewNodeDecorator {
return;
}
ApplicationManager.getApplication().runReadAction(() -> {
- String doc = doc(node, project);
+ String doc = treeDoc(node, project);
if (doc == null) {
return;
}
@@ -50,116 +50,28 @@ public class Tree implements ProjectViewNodeDecorator {
}
@Nullable
- private String doc(ProjectViewNode> node, Project project) {
- String extDoc = extDoc(node);
- if (extDoc != null) {
- return extDoc;
+ private String treeDoc(ProjectViewNode> node, @NotNull Project project) {
+ String doc = TreeExt.doc(node);
+ if (doc != null) {
+ return doc;
}
- PsiDocComment docComment = nodeDoc(node, project);
- if (docComment == null) {
- return null;
- }
- return PsiDocToStrDoc.text(docComment, true);
- }
-
- @Nullable
- public static String extDoc(ProjectViewNode> node) {
- VirtualFile file = node.getVirtualFile();
- if (file == null) {
- return null;
- }
- return TreeExt.extDoc(file);
- }
-
- @Nullable
- private static PsiDocComment nodeDoc(ProjectViewNode> node, Project project) {
- if (node instanceof PsiFileNode) {
- PsiFile psiFile = ((PsiFileNode) node).getValue();
- return OwnerToPsiDocUtils.fileDoc(psiFile);
- }
- if (node instanceof PsiDirectoryNode) {
- PsiDirectory psiDirectory = ((PsiDirectoryNode) node).getValue();
- return dirDoc(psiDirectory);
- }
-
- if (node instanceof PsiMethodNode) {
- // On Show Members
- PsiMethod psiMethod = ((PsiMethodNode) node).getValue();
- return OwnerToPsiDocUtils.methodDoc(psiMethod);
- }
- if (node instanceof PsiFieldNode) {
- // On Show Members
- PsiField psiField = ((PsiFieldNode) node).getValue();
- PsiDocComment docComment = OwnerToPsiDocUtils.srcOrByteCodeDoc(psiField);
- if (docComment != null) {
- return docComment;
+ SettingsInfo settingsInfo = SettingsInfo.of(project, FuncEnum.TREE);
+ Object value = node.getValue();
+ if (value instanceof PsiElement) {
+ PsiElement psiElement = (PsiElement) value;
+ String docPrint = BaseLangDoc.resolveDoc(settingsInfo, psiElement);
+ if (docPrint != null) {
+ return docPrint;
}
- PsiClass psiClass = psiField.getContainingClass();
- if (psiClass != null) {
- return OwnerToPsiDocUtils.srcOrByteCodeDoc(psiClass);
- }
- return null;
}
-
- if (node instanceof ClassTreeNode) {
- // On Packages View, Project Files View, Show Members
- PsiClass psiClass = ((ClassTreeNode) node).getValue();
- return OwnerToPsiDocUtils.srcOrByteCodeDoc(psiClass);
- }
- if (node instanceof PackageElementNode) {
- // On Packages View
- PsiPackage psiPackage = ((PackageElementNode) node).getValue().getPackage();
- return packageDoc(psiPackage);
- }
-
- // On Packages View, Project Files View
- VirtualFile virtualFile = node.getVirtualFile();
- if (virtualFile == null || !virtualFile.isDirectory()) {
- return null;
- }
- PsiDirectory psiDirectory = PsiManager.getInstance(project).findDirectory(virtualFile);
- if (psiDirectory == null) {
- return null;
- }
- return dirDoc(psiDirectory);
- }
-
- @Nullable
- private static PsiDocComment dirDoc(PsiDirectory child) {
- while (true) {
- PsiDocComment docComment = OwnerToPsiDocUtils.dirDoc(child);
- if (docComment != null) {
- return docComment;
+ Collection langDocs = BaseLangDoc.LANG_DOC_MAP.values();
+ for (BaseLangDoc langDoc : langDocs) {
+ String s = langDoc.treeDoc(settingsInfo, node, project);
+ if (s != null) {
+ return s;
}
- AppSettingsState instance = AppSettingsState.getInstance();
- if (!instance.compact) {
- return null;
- }
- PsiDirectory parent = child.getParent();
- if (parent == null) {
- return null;
- }
- if (parent.getChildren().length != 1) {
- return null;
- }
- child = parent;
- }
- }
-
- @Nullable
- private static PsiDocComment packageDoc(PsiPackage child) {
- while (true) {
- PsiDocComment docComment = OwnerToPsiDocUtils.packageDoc(child);
- if (docComment != null) {
- return docComment;
- }
- PsiPackage parent = child.getParentPackage();
- if (parent == null) {
- return null;
- }
- // PsiPackage not implemented getChildren()
- child = parent;
}
+ return null;
}
@Override
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
new file mode 100644
index 0000000..564b50e
--- /dev/null
+++ b/src/main/java/io/github/linwancen/plugin/show/bean/FileInfo.java
@@ -0,0 +1,56 @@
+package io.github.linwancen.plugin.show.bean;
+
+import com.intellij.openapi.actionSystem.AnActionEvent;
+import com.intellij.openapi.actionSystem.CommonDataKeys;
+import com.intellij.openapi.editor.Document;
+import com.intellij.openapi.fileEditor.FileDocumentManager;
+import com.intellij.openapi.project.Project;
+import com.intellij.openapi.vfs.VirtualFile;
+import com.intellij.psi.FileViewProvider;
+import com.intellij.psi.PsiFile;
+import com.intellij.psi.PsiManager;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+
+public class FileInfo extends SettingsInfo {
+ public final @NotNull VirtualFile file;
+ public final @NotNull Document document;
+ public final @NotNull Project project;
+ public final @NotNull FileViewProvider viewProvider;
+
+ protected FileInfo(@NotNull VirtualFile file, @NotNull Document document, @NotNull Project project,
+ @NotNull FileViewProvider viewProvider, @NotNull FuncEnum funcEnum) {
+ super(project, funcEnum);
+ this.project = project;
+ this.file = file;
+ this.viewProvider = viewProvider;
+ this.document = document;
+ }
+
+ public static @Nullable FileInfo of(@NotNull VirtualFile file, @NotNull Project project){
+ Document document = FileDocumentManager.getInstance().getDocument(file);
+ if (document == null) {
+ return null;
+ }
+ FileViewProvider viewProvider = PsiManager.getInstance(project).findViewProvider(file);
+ if (viewProvider == null) {
+ return null;
+ }
+ return new FileInfo(file, document, project, viewProvider, FuncEnum.LINE);
+ }
+
+ public static @Nullable FileInfo of(@NotNull AnActionEvent event){
+ PsiFile psiFile = event.getData(CommonDataKeys.PSI_FILE);
+ if (psiFile == null) {
+ return null;
+ }
+ FileViewProvider viewProvider = psiFile.getViewProvider();
+ Document document = viewProvider.getDocument();
+ if (document == null) {
+ return null;
+ }
+ VirtualFile file = viewProvider.getVirtualFile();
+ Project project = psiFile.getProject();
+ return new FileInfo(file, document, project, viewProvider, FuncEnum.LINE);
+ }
+}
diff --git a/src/main/java/io/github/linwancen/plugin/show/bean/FuncEnum.java b/src/main/java/io/github/linwancen/plugin/show/bean/FuncEnum.java
new file mode 100644
index 0000000..60d1478
--- /dev/null
+++ b/src/main/java/io/github/linwancen/plugin/show/bean/FuncEnum.java
@@ -0,0 +1,37 @@
+package io.github.linwancen.plugin.show.bean;
+
+import java.util.LinkedHashMap;
+
+public enum FuncEnum {
+ /** tree: project view tree */
+ TREE("tree", "project view tree"),
+ /** line: code line end */
+ LINE("line", "code line end"),
+ ;
+
+ public final String code;
+ public final String desc;
+
+ FuncEnum(String code, String desc) {
+ this.code = code;
+ this.desc = desc;
+ }
+
+ @Override
+ public String toString() {
+ return code + '-' + desc;
+ }
+
+ private static final LinkedHashMap map;
+
+ static {
+ map = new LinkedHashMap<>();
+ for (FuncEnum value : values()) {
+ map.put(value.code, value);
+ }
+ }
+
+ public static FuncEnum fromCode(String code) {
+ return map.get(code);
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/io/github/linwancen/plugin/show/bean/LineInfo.java b/src/main/java/io/github/linwancen/plugin/show/bean/LineInfo.java
new file mode 100644
index 0000000..316ede5
--- /dev/null
+++ b/src/main/java/io/github/linwancen/plugin/show/bean/LineInfo.java
@@ -0,0 +1,49 @@
+package io.github.linwancen.plugin.show.bean;
+
+import com.intellij.openapi.project.Project;
+import com.intellij.openapi.util.TextRange;
+import com.intellij.openapi.vfs.VirtualFile;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+
+public class LineInfo extends FileInfo {
+ public final int lineNumber;
+ public final int startOffset;
+ public final int endOffset;
+ public final @NotNull String text;
+
+ protected LineInfo(@NotNull FileInfo fileInfo, @NotNull String text,
+ int lineNumber, int startOffset, int endOffset) {
+ super(fileInfo.file, fileInfo.document, fileInfo.project, fileInfo.viewProvider, FuncEnum.LINE);
+ this.lineNumber = lineNumber;
+ this.startOffset = startOffset;
+ this.endOffset = endOffset;
+ this.text = text;
+ }
+
+ public static @Nullable LineInfo of(@NotNull VirtualFile file, @NotNull Project project, int lineNumber) {
+ FileInfo fileInfo = of(file, project);
+ if (fileInfo == null) {
+ return null;
+ }
+ return of(fileInfo, lineNumber);
+ }
+
+ public static @Nullable LineInfo of(@NotNull FileInfo fileInfo, int lineNumber) {
+ // lineNumber start 0, as 1 <= 1 should return
+ if (fileInfo.document.getLineCount() <= lineNumber) {
+ return null;
+ }
+ try {
+ int startOffset = fileInfo.document.getLineStartOffset(lineNumber);
+ int endOffset = fileInfo.document.getLineEndOffset(lineNumber);
+ if (startOffset == endOffset) {
+ return null;
+ }
+ String text = fileInfo.document.getText(new TextRange(startOffset, endOffset));
+ return new LineInfo(fileInfo, text, lineNumber, startOffset, endOffset);
+ } catch (Exception e) {
+ return null;
+ }
+ }
+}
diff --git a/src/main/java/io/github/linwancen/plugin/show/bean/SettingsInfo.java b/src/main/java/io/github/linwancen/plugin/show/bean/SettingsInfo.java
new file mode 100644
index 0000000..fc8bb59
--- /dev/null
+++ b/src/main/java/io/github/linwancen/plugin/show/bean/SettingsInfo.java
@@ -0,0 +1,29 @@
+package io.github.linwancen.plugin.show.bean;
+
+import com.intellij.openapi.project.Project;
+import io.github.linwancen.plugin.show.settings.AppSettingsState;
+import io.github.linwancen.plugin.show.settings.ProjectSettingsState;
+import org.jetbrains.annotations.NotNull;
+
+public class SettingsInfo {
+ public final @NotNull AppSettingsState appSettings;
+ public final @NotNull ProjectSettingsState projectSettings;
+ public final @NotNull FuncEnum funcEnum;
+
+ protected SettingsInfo(@NotNull Project project, @NotNull FuncEnum funcEnum) {
+ this.funcEnum = funcEnum;
+ this.appSettings = AppSettingsState.getInstance();
+ this.projectSettings = ProjectSettingsState.getInstance(project);
+ }
+
+ public static @NotNull SettingsInfo of(@NotNull Project project, FuncEnum funcEnum) {
+ return new SettingsInfo(project, funcEnum);
+ }
+
+ /** treeTags/lineTags */
+ public String[] tagNames() {
+ return funcEnum == FuncEnum.TREE
+ ? appSettings.treeTags
+ : appSettings.lineTags;
+ }
+}
diff --git a/src/main/java/io/github/linwancen/plugin/show/ext/LineExt.java b/src/main/java/io/github/linwancen/plugin/show/ext/LineExt.java
index 36f70c7..c09b64b 100644
--- a/src/main/java/io/github/linwancen/plugin/show/ext/LineExt.java
+++ b/src/main/java/io/github/linwancen/plugin/show/ext/LineExt.java
@@ -1,7 +1,7 @@
package io.github.linwancen.plugin.show.ext;
-import com.intellij.openapi.project.Project;
import io.github.linwancen.plugin.show.ext.conf.ConfCache;
+import io.github.linwancen.plugin.show.bean.LineInfo;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -14,27 +14,42 @@ public class LineExt {
private LineExt() {}
- public static String extDoc(@Nullable Project project,
- @NotNull String path, @NotNull String name, @Nullable String ext,
- @NotNull String text) {
+ public static @Nullable String doc(@NotNull LineInfo lineInfo) {
+ int i = lineInfo.text.indexOf(lineInfo.appSettings.lineEndPrefix);
+ String code = i <= 0 ? lineInfo.text : lineInfo.text.substring(0, i);
+ String extDoc = LineExt.extDoc(lineInfo, code);
+ if (extDoc == null) {
+ return null;
+ }
+ extDoc = extDoc.trim();
+ if (lineInfo.text.endsWith(extDoc)) {
+ return null;
+ }
+ return extDoc;
+ }
+
+ public static String extDoc(@NotNull LineInfo lineInfo, @NotNull String code) {
+ String path = lineInfo.file.getPath();
+ String name = lineInfo.file.getName();
+ String ext = lineInfo.file.getExtension();
Map>> keyMap = ConfCache.keyMap(path, name, ext);
if (keyMap.isEmpty()) {
return null;
}
- Pattern pattern = ConfCache.pattern(project, keyMap, path);
+ Pattern pattern = ConfCache.pattern(lineInfo.project, keyMap, path);
if (pattern == null || pattern.pattern().length() == 0) {
return null;
}
Map>> docMap = ConfCache.docMap(path, name, ext);
- if (docMap.isEmpty()) {
+ Map>> treeMap = ConfCache.treeMap(path, name, ext);
+ if (docMap.isEmpty() && treeMap.isEmpty()) {
return null;
}
- Map>> treeMap = ConfCache.treeMap(path);
if (ext == null || "cbl".equals(ext) || "cob".equals(ext) || "cobol".equals(ext)) {
- text = cblNotAndOr(text);
+ code = cblNotAndOr(code);
}
- String[] words = pattern.split(text);
- Matcher matcher = pattern.matcher(text);
+ String[] words = pattern.split(code);
+ Matcher matcher = pattern.matcher(code);
return extDoc(keyMap, matcher, docMap, words, treeMap);
}
@@ -65,18 +80,15 @@ public class LineExt {
@NotNull Map>> docMap, @NotNull String[] words,
@NotNull Map>> treeMap) {
boolean haveDoc = false;
+ boolean haveKey = false;
StringBuilder sb = new StringBuilder();
for (String s : words) {
- if (appendDoc(sb, s, docMap, treeMap)) {
- haveDoc = true;
- }
- appendKeyDoc(sb, matcher, keyMap);
+ haveDoc |= appendDoc(sb, s, docMap, treeMap);
+ haveKey = appendKeyDoc(sb, matcher, keyMap);
+ }
+ while (haveKey) {
+ haveKey = appendKeyDoc(sb, matcher, keyMap);
}
- int before;
- do {
- before = sb.length();
- appendKeyDoc(sb, matcher, keyMap);
- } while (sb.length() != before);
if (!haveDoc) {
return null;
}
@@ -100,15 +112,16 @@ public class LineExt {
sb.append(treeDoc);
return true;
}
+ // not word doc ues word
sb.append(word);
return false;
}
- private static void appendKeyDoc(@NotNull StringBuilder sb,
+ private static boolean appendKeyDoc(@NotNull StringBuilder sb,
@NotNull Matcher matcher,
@NotNull Map>> keyMap) {
if (!matcher.find()) {
- return;
+ return false;
}
String keyword = matcher.group();
// "" if no doc
@@ -120,5 +133,6 @@ public class LineExt {
if (sb.length() != 1) {
sb.append(" ");
}
+ return true;
}
}
diff --git a/src/main/java/io/github/linwancen/plugin/show/ext/TreeExt.java b/src/main/java/io/github/linwancen/plugin/show/ext/TreeExt.java
index 56cc157..0bae0ae 100644
--- a/src/main/java/io/github/linwancen/plugin/show/ext/TreeExt.java
+++ b/src/main/java/io/github/linwancen/plugin/show/ext/TreeExt.java
@@ -1,8 +1,10 @@
package io.github.linwancen.plugin.show.ext;
+import com.intellij.ide.projectView.ProjectViewNode;
import com.intellij.openapi.vfs.VirtualFile;
import io.github.linwancen.plugin.show.ext.conf.ConfCache;
import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
import java.util.List;
import java.util.Map;
@@ -11,8 +13,16 @@ public class TreeExt {
private TreeExt() {}
+ public static @Nullable String doc(ProjectViewNode> node) {
+ VirtualFile file = node.getVirtualFile();
+ if (file == null) {
+ return null;
+ }
+ return TreeExt.extDoc(file);
+ }
+
public static String extDoc(@NotNull VirtualFile file) {
- Map>> docMap = ConfCache.treeMap(file.getPath());
+ Map>> docMap = ConfCache.treeMap(file.getPath(), file.getName(), file.getPath());
String[] words = {
file.getName(),
file.getNameWithoutExtension(),
diff --git a/src/main/java/io/github/linwancen/plugin/show/ext/conf/ConfCache.java b/src/main/java/io/github/linwancen/plugin/show/ext/conf/ConfCache.java
index d7928f0..aea67c5 100644
--- a/src/main/java/io/github/linwancen/plugin/show/ext/conf/ConfCache.java
+++ b/src/main/java/io/github/linwancen/plugin/show/ext/conf/ConfCache.java
@@ -63,8 +63,10 @@ public class ConfCache {
}
@NotNull
- public static Map>> treeMap(@NotNull String path) {
- return ConfCacheGetUtils.filterPath(TREE_CACHE, path);
+ public static Map>> treeMap(@NotNull String path,
+ @NotNull String name,
+ @Nullable String ext) {
+ return ConfCacheGetUtils.filterPath(TREE_CACHE, path, name, ext);
}
static void clearAll() {
@@ -113,13 +115,13 @@ public class ConfCache {
new NotificationGroup("Ext Doc Conf Load All", NotificationDisplayType.BALLOON, true);
static void loadAll(@NotNull Project project) {
- ApplicationManager.getApplication().runReadAction(() ->
- DumbService.getInstance(project).runReadActionInSmartMode(() -> {
+ DumbService.getInstance(project).runReadActionInSmartMode(() ->
+ ApplicationManager.getApplication().runReadAction(() -> {
Collection files = FilenameIndex.getAllFilesByExt(project, EXT);
StringBuilder sb = new StringBuilder();
for (VirtualFile file : files) {
load(project, file);
- sb.append(file.getPath()).append("\n");
+ sb.append(file.getName()).append("\n");
}
if (files.isEmpty()) {
return;
diff --git a/src/main/java/io/github/linwancen/plugin/show/ext/conf/ConfCacheGetUtils.java b/src/main/java/io/github/linwancen/plugin/show/ext/conf/ConfCacheGetUtils.java
index 3958e41..20130ff 100644
--- a/src/main/java/io/github/linwancen/plugin/show/ext/conf/ConfCacheGetUtils.java
+++ b/src/main/java/io/github/linwancen/plugin/show/ext/conf/ConfCacheGetUtils.java
@@ -75,7 +75,7 @@ class ConfCacheGetUtils {
@NotNull
static TreeMap filterPath(@SuppressWarnings("SameParameterValue")
@NotNull Map cache,
- @NotNull String path) {
+ @NotNull String path, String name, String ext) {
TreeMap map = new TreeMap<>();
int max = path.length();
int length = String.valueOf(max).length();
diff --git a/src/main/java/io/github/linwancen/plugin/show/ext/conf/ConfFactory.java b/src/main/java/io/github/linwancen/plugin/show/ext/conf/ConfFactory.java
index e3cc1e7..1b89251 100644
--- a/src/main/java/io/github/linwancen/plugin/show/ext/conf/ConfFactory.java
+++ b/src/main/java/io/github/linwancen/plugin/show/ext/conf/ConfFactory.java
@@ -94,8 +94,6 @@ class ConfFactory {
map.put(key, words);
}
}
- DATA_LOG.createNotification("Ext doc file load complete", map.size() + " lines",
- "\n" + path, NotificationType.INFORMATION).notify(project);
return map;
}
}
diff --git a/src/main/java/io/github/linwancen/plugin/show/jump/JsonRef.java b/src/main/java/io/github/linwancen/plugin/show/jump/JsonRef.java
index 987802b..b34df07 100644
--- a/src/main/java/io/github/linwancen/plugin/show/jump/JsonRef.java
+++ b/src/main/java/io/github/linwancen/plugin/show/jump/JsonRef.java
@@ -6,12 +6,12 @@ import org.jetbrains.annotations.Nullable;
import java.util.List;
-public class JsonRef extends PsiReferenceBase implements PsiPolyVariantReference {
+public class JsonRef extends PsiReferenceBase implements PsiPolyVariantReference {
- final PsiField psiField;
- final List tips;
+ final T psiField;
+ final List tips;
- public JsonRef(@NotNull PsiElement element, @NotNull PsiField psiField, @NotNull List tips) {
+ public JsonRef(@NotNull PsiElement element, @NotNull T psiField, @NotNull List tips) {
super(element);
this.psiField = psiField;
this.tips = tips;
@@ -21,13 +21,12 @@ public class JsonRef extends PsiReferenceBase implements PsiPolyVari
* do not use it because PsiReference.resolveReference() is @Experimental
*/
@Override
- public ResolveResult @NotNull [] multiResolve(boolean incompleteCode) {
+ public @NotNull ResolveResult[] multiResolve(boolean incompleteCode) {
return new ResolveResult[]{new PsiElementResolveResult(psiField)};
}
- @Nullable
@Override
- public PsiElement resolve() {
+ public @Nullable PsiElement resolve() {
return psiField;
}
@@ -35,7 +34,7 @@ public class JsonRef extends PsiReferenceBase implements PsiPolyVari
* I don't know how to use it
*/
@Override
- public Object @NotNull [] getVariants() {
+ public @NotNull Object[] getVariants() {
return tips.toArray();
}
}
\ No newline at end of file
diff --git a/src/main/java/io/github/linwancen/plugin/show/lang/GoLangDoc.java b/src/main/java/io/github/linwancen/plugin/show/lang/GoLangDoc.java
new file mode 100644
index 0000000..23832d6
--- /dev/null
+++ b/src/main/java/io/github/linwancen/plugin/show/lang/GoLangDoc.java
@@ -0,0 +1,37 @@
+package io.github.linwancen.plugin.show.lang;
+
+import com.goide.GoLanguage;
+import com.goide.documentation.GoDocumentationProvider;
+import com.goide.psi.GoReferenceExpressionBase;
+import com.intellij.psi.PsiComment;
+import com.intellij.psi.PsiElement;
+import io.github.linwancen.plugin.show.lang.base.BaseLangDoc;
+import io.github.linwancen.plugin.show.bean.LineInfo;
+import io.github.linwancen.plugin.show.bean.SettingsInfo;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+
+import java.util.List;
+
+public class GoLangDoc extends BaseLangDoc {
+
+ static {
+ LANG_DOC_MAP.put(GoLanguage.INSTANCE.getID(), new GoLangDoc());
+ }
+
+ @Override
+ public @NotNull Class extends PsiElement> getRefClass() {
+ return GoReferenceExpressionBase.class;
+ }
+
+ @Override
+ public boolean show(@NotNull LineInfo lineInfo) {
+ return lineInfo.appSettings.showLineEndCommentGo;
+ }
+
+ @Override
+ public @Nullable String resolveDocRaw(@NotNull T lineInfo, @NotNull PsiElement resolve) {
+ List comments = GoDocumentationProvider.getCommentsForElement(resolve);
+ return GoDocumentationProvider.getCommentText(comments, false);
+ }
+}
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
new file mode 100644
index 0000000..7ad174b
--- /dev/null
+++ b/src/main/java/io/github/linwancen/plugin/show/lang/JsLangDoc.java
@@ -0,0 +1,45 @@
+package io.github.linwancen.plugin.show.lang;
+
+import com.intellij.lang.javascript.JavascriptLanguage;
+import com.intellij.lang.javascript.documentation.JSDocumentationUtils;
+import com.intellij.lang.javascript.psi.JSPsiReferenceElement;
+import com.intellij.psi.PsiComment;
+import com.intellij.psi.PsiElement;
+import io.github.linwancen.plugin.show.lang.base.BaseLangDoc;
+import io.github.linwancen.plugin.show.bean.LineInfo;
+import io.github.linwancen.plugin.show.bean.SettingsInfo;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+
+public class JsLangDoc extends BaseLangDoc {
+
+ static {
+ LANG_DOC_MAP.put(JavascriptLanguage.INSTANCE.getID(), new JsLangDoc());
+ }
+
+ @Override
+ public @NotNull Class extends PsiElement> getRefClass() {
+ return JSPsiReferenceElement.class;
+ }
+
+ @Override
+ public boolean show(@NotNull LineInfo lineInfo) {
+ return lineInfo.appSettings.showLineEndCommentJs;
+ }
+
+ @Override
+ public @Nullable String resolveDocRaw(@NotNull T lineInfo, @NotNull PsiElement resolve) {
+ PsiComment psiComment = JSDocumentationUtils.findOwnDocCommentForImplicitElement(resolve);
+ if (psiComment == null) {
+ return null;
+ }
+ String text = psiComment.getText();
+ if (text!=null) {
+ return text;
+ }
+ if (!lineInfo.appSettings.jsDoc) {
+ return super.resolveDocRaw(lineInfo, resolve);
+ }
+ return null;
+ }
+}
diff --git a/src/main/java/io/github/linwancen/plugin/show/lang/JsonLangDoc.java b/src/main/java/io/github/linwancen/plugin/show/lang/JsonLangDoc.java
new file mode 100644
index 0000000..789053e
--- /dev/null
+++ b/src/main/java/io/github/linwancen/plugin/show/lang/JsonLangDoc.java
@@ -0,0 +1,63 @@
+package io.github.linwancen.plugin.show.lang;
+
+import com.intellij.json.psi.JsonProperty;
+import com.intellij.psi.PsiElement;
+import com.intellij.psi.PsiReference;
+import io.github.linwancen.plugin.show.bean.SettingsInfo;
+import io.github.linwancen.plugin.show.lang.base.BaseLangDoc;
+import io.github.linwancen.plugin.show.bean.LineInfo;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+
+public class JsonLangDoc extends BaseLangDoc {
+
+ public static final JsonLangDoc INSTANCE = new JsonLangDoc();
+
+ @Override
+ public @NotNull Class extends PsiElement> getRefClass() {
+ return JsonProperty.class;
+ }
+
+ @Override
+ public boolean show(@NotNull LineInfo lineInfo) {
+ return lineInfo.appSettings.showLineEndCommentJson;
+ }
+
+ @Override
+ public @Nullable String findRefDoc(@NotNull LineInfo lineInfo, @NotNull PsiElement element) {
+ PsiElement start = lineInfo.viewProvider.findElementAt(lineInfo.startOffset);
+ if (start == null) {
+ return null;
+ }
+ PsiElement jsonProperty = start.getNextSibling();
+ if (jsonProperty == null) {
+ return null;
+ }
+ return refElementDoc(lineInfo, jsonProperty);
+ }
+
+ @Override
+ protected @Nullable String refDoc(@NotNull T lineInfo, @NotNull PsiElement ref) {
+ if (!(ref instanceof JsonProperty)) {
+ return null;
+ }
+ JsonProperty jsonProperty = (JsonProperty) ref;
+ PsiReference[] references = jsonProperty.getNameElement().getReferences();
+ for (PsiReference reference : references) {
+ PsiElement resolve = null;
+ try {
+ resolve = reference.resolve();
+ } catch (Throwable ignore) {
+ // ignore
+ }
+ if (resolve == null) {
+ continue;
+ }
+ String doc = BaseLangDoc.resolveDoc(lineInfo, resolve);
+ if (doc != null) {
+ return doc;
+ }
+ }
+ return null;
+ }
+}
diff --git a/src/main/java/io/github/linwancen/plugin/show/lang/PythonLangDoc.java b/src/main/java/io/github/linwancen/plugin/show/lang/PythonLangDoc.java
new file mode 100644
index 0000000..5725a97
--- /dev/null
+++ b/src/main/java/io/github/linwancen/plugin/show/lang/PythonLangDoc.java
@@ -0,0 +1,25 @@
+package io.github.linwancen.plugin.show.lang;
+
+import com.intellij.psi.PsiElement;
+import com.jetbrains.python.PythonLanguage;
+import com.jetbrains.python.psi.PyReferenceExpression;
+import io.github.linwancen.plugin.show.lang.base.BaseLangDoc;
+import io.github.linwancen.plugin.show.bean.LineInfo;
+import org.jetbrains.annotations.NotNull;
+
+public class PythonLangDoc extends BaseLangDoc {
+
+ static {
+ LANG_DOC_MAP.put(PythonLanguage.INSTANCE.getID(), new PythonLangDoc());
+ }
+
+ @Override
+ public @NotNull Class extends PsiElement> getRefClass() {
+ return PyReferenceExpression.class;
+ }
+
+ @Override
+ public boolean show(@NotNull LineInfo lineInfo) {
+ return lineInfo.appSettings.showLineEndCommentPy;
+ }
+}
diff --git a/src/main/java/io/github/linwancen/plugin/show/lang/SqlLangDoc.java b/src/main/java/io/github/linwancen/plugin/show/lang/SqlLangDoc.java
new file mode 100644
index 0000000..f6bf7a1
--- /dev/null
+++ b/src/main/java/io/github/linwancen/plugin/show/lang/SqlLangDoc.java
@@ -0,0 +1,50 @@
+package io.github.linwancen.plugin.show.lang;
+
+import com.intellij.database.psi.DbElement;
+import com.intellij.psi.PsiElement;
+import com.intellij.sql.SqlDocumentationProvider;
+import com.intellij.sql.psi.SqlLanguage;
+import com.intellij.sql.psi.SqlReferenceExpression;
+import com.intellij.util.containers.JBIterable;
+import io.github.linwancen.plugin.show.bean.SettingsInfo;
+import io.github.linwancen.plugin.show.lang.base.BaseLangDoc;
+import io.github.linwancen.plugin.show.lang.base.DocSkip;
+import io.github.linwancen.plugin.show.bean.LineInfo;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+
+public class SqlLangDoc extends BaseLangDoc {
+
+ static {
+ LANG_DOC_MAP.put(SqlLanguage.INSTANCE.getID(), new SqlLangDoc());
+ }
+
+ @Override
+ public @NotNull Class extends PsiElement> getRefClass() {
+ return SqlReferenceExpression.class;
+ }
+
+ @Override
+ public boolean show(@NotNull LineInfo lineInfo) {
+ return lineInfo.appSettings.showLineEndCommentSql;
+ }
+
+
+ @Override
+ protected @Nullable String refElementDoc(@NotNull T lineInfo,
+ @NotNull PsiElement ref) {
+ JBIterable relatedDbElements;
+ try {
+ relatedDbElements = SqlDocumentationProvider.findRelatedDbElements(ref, false);
+ } catch (Throwable e) {
+ return null;
+ }
+ for (DbElement dbElement : relatedDbElements) {
+ String refDoc = dbElement.getComment();
+ if (refDoc != null && !DocSkip.skipDoc(lineInfo.appSettings, lineInfo.projectSettings, refDoc)) {
+ return refDoc;
+ }
+ }
+ return 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
new file mode 100644
index 0000000..9d68596
--- /dev/null
+++ b/src/main/java/io/github/linwancen/plugin/show/lang/base/BaseLangDoc.java
@@ -0,0 +1,202 @@
+package io.github.linwancen.plugin.show.lang.base;
+
+import com.intellij.ide.projectView.ProjectViewNode;
+import com.intellij.json.JsonLanguage;
+import com.intellij.lang.Language;
+import com.intellij.openapi.editor.EditorLinePainter;
+import com.intellij.openapi.editor.LineExtensionInfo;
+import com.intellij.openapi.project.Project;
+import com.intellij.openapi.vfs.VirtualFile;
+import com.intellij.psi.FileViewProvider;
+import com.intellij.psi.PsiElement;
+import com.intellij.psi.PsiReference;
+import io.github.linwancen.plugin.show.lang.JsonLangDoc;
+import io.github.linwancen.plugin.show.bean.LineInfo;
+import io.github.linwancen.plugin.show.bean.SettingsInfo;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+
+import java.util.*;
+
+/**
+ *
+ */
+public abstract class BaseLangDoc extends EditorLinePainter {
+ public static final Map LANG_DOC_MAP = new LinkedHashMap<>();
+
+ public abstract @Nullable Class extends PsiElement> getRefClass();
+
+ public abstract boolean show(@NotNull LineInfo lineInfo);
+
+ @Nullable
+ public String treeDoc(T settingsInfo, ProjectViewNode> node, Project project) {
+ return null;
+ }
+
+ @Override
+ public @Nullable Collection getLineExtensions(@NotNull Project project,
+ @NotNull VirtualFile file, int lineNumber) {
+ // Only Load Class
+ return null;
+ }
+
+ public static @Nullable String langDoc(@NotNull LineInfo lineInfo) {
+ PsiElement element = lineInfo.viewProvider.findElementAt(lineInfo.endOffset);
+ if (element == null) {
+ // file end
+ element = lineInfo.viewProvider.findElementAt(lineInfo.endOffset - 1);
+ if (element == null) {
+ return null;
+ }
+ }
+ Language language = PsiElementTo.language(element);
+ BaseLangDoc lineEnd = LANG_DOC_MAP.get(language.getID());
+ if (lineEnd != null && lineEnd.show(lineInfo)) {
+ return lineEnd.findRefDoc(lineInfo, element);
+ } else if (language == JsonLanguage.INSTANCE && JsonLangDoc.INSTANCE.show(lineInfo)) {
+ return JsonLangDoc.INSTANCE.findRefDoc(lineInfo, element);
+ }
+ return null;
+ }
+
+ /**
+ * Override like JSON
+ */
+ @Nullable
+ public String findRefDoc(@NotNull LineInfo lineInfo, @NotNull PsiElement element) {
+ Class extends PsiElement> refClass = getRefClass();
+ if (refClass == null) {
+ return null;
+ }
+ String doc = null;
+ PsiElement refElement = element;
+ while ((refElement = Prev.prevRefChild(lineInfo, refElement, refClass)) != null) {
+ PsiElement parent = refElement.getParent();
+ String filterDoc = refElementDoc(lineInfo, parent);
+ if (filterDoc != null) {
+ doc = filterDoc;
+ refElement = parent;
+ break;
+ }
+ }
+ if (refElement == null) {
+ return null;
+ }
+ // before doc
+ refElement = Prev.prevRefChild(lineInfo, refElement, refClass);
+ if (refElement == null) {
+ return doc;
+ }
+ String text = refElement.getText();
+ boolean set = text.startsWith("set");
+ PsiElement parent = refElement.getParent();
+ String before = refElementDoc(lineInfo, parent);
+ if (before != null) {
+ doc = mergeDoc(set, lineInfo.appSettings.getToSet, before, doc);
+ }
+ return doc;
+ }
+
+ @NotNull
+ private String mergeDoc(boolean set, boolean getToSet, String before, String doc) {
+ if (set) {
+ if (getToSet) {
+ // because lambda is -> or =>
+ doc = doc + " --> " + before;
+ } else {
+ doc = before + " = " + doc;
+ }
+ } else {
+ doc = before + " " + doc;
+ }
+ return doc;
+ }
+
+ /**
+ * Override like SQL
+ */
+ protected String refElementDoc(@NotNull T lineInfo,
+ @NotNull PsiElement refElement) {
+ String refDoc = refDoc(lineInfo, refElement);
+ if (refDoc != null && !DocSkip.skipDoc(lineInfo.appSettings, lineInfo.projectSettings, refDoc)) {
+ return refDoc;
+ }
+ return null;
+ }
+
+ /**
+ * Override like Java/Json
+ */
+ @Nullable
+ protected String refDoc(@NotNull T lineInfo, @NotNull PsiElement ref) {
+ // kotlin ref.getReference() == null but ref.getReferences().length == 2
+ PsiReference[] references = ref.getReferences();
+ if (references.length < 1) {
+ return null;
+ }
+ for (PsiReference reference : references) {
+ PsiElement resolve;
+ try {
+ resolve = reference.resolve();
+ } catch (Throwable e) {
+ // 2021.3: Slow operations are prohibited on EDT. See SlowOperations.assertSlowOperationsAreAllowed javadoc.
+ return null;
+ }
+ if (resolve == null) {
+ return null;
+ }
+ String resolveDoc = resolveDoc(lineInfo, resolve);
+ if (resolveDoc != null) {
+ return resolveDoc;
+ }
+ }
+ return null;
+ }
+
+ public static @Nullable String resolveDoc(T settingsInfo, PsiElement psiElement) {
+ // support like java <-> kotlin
+ Language language = PsiElementTo.language(psiElement);
+ BaseLangDoc lineEnd = LANG_DOC_MAP.get(language.getID());
+ if (lineEnd == null) {
+ return null;
+ }
+ return lineEnd.resolveDocPrint(settingsInfo, psiElement);
+ }
+
+ /**
+ * Override like Java/Kotlin
+ */
+ @Nullable
+ protected String resolveDocPrint(@NotNull T lineInfo, @NotNull PsiElement resolve) {
+ String s = resolveDocRaw(lineInfo, resolve);
+ if (s == null) {
+ return null;
+ }
+ String cutDoc = DocFilter.cutDoc(s, lineInfo.appSettings, true);
+ String filterDoc = DocFilter.filterDoc(cutDoc, lineInfo.appSettings, lineInfo.projectSettings);
+ if (filterDoc.trim().length() == 0) {
+ return null;
+ }
+ return filterDoc;
+ }
+
+ /**
+ * Override like JS/Go
+ */
+ @Nullable
+ protected String resolveDocRaw(@NotNull T lineInfo, @NotNull PsiElement resolve) {
+ FileViewProvider viewProvider = PsiElementTo.viewProvider(resolve);
+ if (viewProvider == null) {
+ return null;
+ }
+ String doc = ResolveDoc.fromLineEnd(lineInfo, resolve, viewProvider);
+ if (doc != null) {
+ return doc;
+ }
+ return ResolveDoc.fromLineUp(lineInfo, resolve, viewProvider, keywords());
+ }
+
+ protected List keywords() {
+ return Collections.emptyList();
+ }
+}
diff --git a/src/main/java/io/github/linwancen/plugin/show/lang/base/BaseTagLangDoc.java b/src/main/java/io/github/linwancen/plugin/show/lang/base/BaseTagLangDoc.java
new file mode 100644
index 0000000..b701fb5
--- /dev/null
+++ b/src/main/java/io/github/linwancen/plugin/show/lang/base/BaseTagLangDoc.java
@@ -0,0 +1,58 @@
+package io.github.linwancen.plugin.show.lang.base;
+
+import com.intellij.psi.PsiElement;
+import io.github.linwancen.plugin.show.bean.SettingsInfo;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+
+public abstract class BaseTagLangDoc extends BaseLangDoc {
+
+ @Override
+ public @Nullable String resolveDocPrint(@NotNull T lineInfo, @NotNull PsiElement resolve) {
+ DocElement docElement = toDocElement(resolve);
+ if (docElement == null) {
+ return null;
+ }
+ return docElementToStr(lineInfo, docElement);
+ }
+
+ @Nullable
+ public String docElementToStr(@NotNull T lineInfo, @Nullable DocElement docElement) {
+ if (docElement == null) {
+ return null;
+ }
+ // desc
+ String descDoc = descDoc(lineInfo, docElement).trim();
+ String desc = DocFilter.filterDoc(descDoc, lineInfo.appSettings, lineInfo.projectSettings);
+ // tag
+ StringBuilder tagStrBuilder = new StringBuilder();
+ String[] names = lineInfo.tagNames();
+ for (String name : names) {
+ appendTag(lineInfo, tagStrBuilder, docElement, name);
+ }
+ if (desc.length() > 0) {
+ if (tagStrBuilder.length() > 0) {
+ tagStrBuilder.insert(0, " @ ");
+ }
+ tagStrBuilder.insert(0, desc);
+ }
+ String text = tagStrBuilder.toString().trim();
+ if (text.length() == 0) {
+ return null;
+ }
+ return text;
+ }
+
+ @Nullable
+ protected abstract DocElement toDocElement(@NotNull PsiElement resolve);
+
+ /**
+ * cut / * # not filter text
+ */
+ @NotNull
+ protected abstract String descDoc(@NotNull T lineInfo, @NotNull DocElement docElement);
+
+ protected abstract void appendTag(@NotNull T lineInfo,
+ @NotNull StringBuilder tagStrBuilder,
+ @NotNull DocElement docElement, @NotNull String name);
+}
diff --git a/src/main/java/io/github/linwancen/plugin/show/lang/base/DocFilter.java b/src/main/java/io/github/linwancen/plugin/show/lang/base/DocFilter.java
new file mode 100644
index 0000000..0ff93a9
--- /dev/null
+++ b/src/main/java/io/github/linwancen/plugin/show/lang/base/DocFilter.java
@@ -0,0 +1,101 @@
+package io.github.linwancen.plugin.show.lang.base;
+
+import io.github.linwancen.plugin.show.settings.AppSettingsState;
+import io.github.linwancen.plugin.show.settings.ProjectSettingsState;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+public class DocFilter {
+
+ private DocFilter() {}
+
+ private static final Pattern DOC_PATTERN = Pattern.compile("(?m" +
+ // ///// xx line start
+ ")^ *//++ *+" +
+ // /**** xx block start
+ "|^ */\\*++ *+" +
+ // ****/ xx block end, not only line start and must before ****
+ "| *\\*++/.*" +
+ // **** xx block body
+ "|^ *\\*++ *+" +
+ // #### xx python and shell start
+ "|^ *#++ *+"
+ );
+
+ private static final Pattern LINE_SEPARATOR_PATTERN = Pattern.compile("[\r\n]");
+
+ /**
+ * delete / * # in resolveDocPrint()
+ * end with space
+ */
+ @NotNull
+ public static String cutDoc(String text,
+ AppSettingsState appSettings, boolean deletePrefix) {
+ String[] split = LINE_SEPARATOR_PATTERN.split(text);
+ int lineCount = 0;
+ StringBuilder sb = new StringBuilder();
+ for (String s : split) {
+ if (deletePrefix) {
+ s = DOC_PATTERN.matcher(s).replaceAll("");
+ }
+ s = s.trim();
+ sb.append(s);
+ if (s.length() > 0) {
+ sb.append(" ");
+ }
+ lineCount++;
+ if (lineCountOrLenOver(appSettings, sb, lineCount)) break;
+ }
+ return sb.toString();
+ }
+
+ public static boolean lineCountOrLenOver(@NotNull AppSettingsState appSettings,
+ @NotNull StringBuilder sb, int lineCount) {
+ boolean countOver = appSettings.lineEndCount > 0 && lineCount >= appSettings.lineEndCount;
+ boolean lenOver = appSettings.lineEndLen > 0 && sb.length() >= appSettings.lineEndLen;
+ return countOver || lenOver;
+ }
+
+ /**
+ * filter doc text in resolveDocPrint()
+ */
+ @NotNull
+ public static String filterDoc(@NotNull String text,
+ AppSettingsState appSettings,
+ ProjectSettingsState projectSettings) {
+ // docGetEffect first because default false
+ if (projectSettings.docGetEffect && projectSettings.projectFilterEffective) {
+ return filterDoc(text, projectSettings.docGet);
+ } else if (appSettings.docGetEffect && projectSettings.globalFilterEffective) {
+ return filterDoc(text, appSettings.docGet);
+ } else {
+ return text;
+ }
+ }
+
+ @NotNull
+ public static String filterDoc(@NotNull String text, @NotNull Pattern docGet) {
+ // if effect skip check empty
+ Matcher m = docGet.matcher(text);
+ if (m.find()) {
+ return m.group(m.groupCount());
+ }
+ // one line
+ return text;
+ }
+
+ private static final Pattern HTML_PATTERN = Pattern.compile("<[^>]++>");
+
+ /**
+ * trim end with space
+ */
+ public static void addHtml(@NotNull StringBuilder sb, @NotNull String s) {
+ String deleteHtml = HTML_PATTERN.matcher(s).replaceAll("").trim();
+ if (deleteHtml.length() > 0) {
+ sb.append(deleteHtml).append(" ");
+ }
+ }
+}
diff --git a/src/main/java/io/github/linwancen/plugin/show/lang/base/DocSkip.java b/src/main/java/io/github/linwancen/plugin/show/lang/base/DocSkip.java
new file mode 100644
index 0000000..4bc531f
--- /dev/null
+++ b/src/main/java/io/github/linwancen/plugin/show/lang/base/DocSkip.java
@@ -0,0 +1,67 @@
+package io.github.linwancen.plugin.show.lang.base;
+
+import io.github.linwancen.plugin.show.settings.AppSettingsState;
+import io.github.linwancen.plugin.show.settings.ProjectSettingsState;
+import org.jetbrains.annotations.NotNull;
+
+import java.util.regex.Pattern;
+
+public class DocSkip {
+
+ private DocSkip() {}
+
+ public static boolean skipSign(AppSettingsState appSettings, ProjectSettingsState projectSettings, String text) {
+ return skipText(text,
+ projectSettings.globalFilterEffective, appSettings.lineInclude, appSettings.lineExclude,
+ projectSettings.projectFilterEffective, projectSettings.lineInclude, projectSettings.lineExclude);
+ }
+
+ private static final Pattern NOT_ASCII_PATTERN = Pattern.compile("[^\u0000-\u007f]");
+
+ public static boolean skipDoc(AppSettingsState appSettings, ProjectSettingsState projectSettings, String text) {
+ if (appSettings.skipAscii && !NOT_ASCII_PATTERN.matcher(text).find()) {
+ return true;
+ }
+ return skipText(text,
+ projectSettings.globalFilterEffective, appSettings.docInclude, appSettings.docExclude,
+ projectSettings.projectFilterEffective, projectSettings.docInclude, projectSettings.docExclude);
+ }
+
+ static boolean skipText(String text,
+ boolean appFilterEffective, Pattern appDocInclude, Pattern appDocExclude,
+ boolean projectFilterEffective, Pattern projectDocInclude, Pattern projectDocExclude
+ ) {
+ if (text == null) {
+ return true;
+ }
+ if (appFilterEffective
+ && skipText(text, appDocInclude, appDocExclude)) {
+ return true;
+ }
+ if (projectFilterEffective) {
+ return skipText(text, projectDocInclude, projectDocExclude);
+ }
+ return false;
+ }
+
+ static boolean skipText(@NotNull String text, Pattern include, Pattern exclude) {
+ if (exclude(text, exclude)) {
+ return true;
+ }
+ return !include(text, include);
+ }
+
+ static boolean include(@NotNull String text, Pattern include) {
+ if (include.pattern().length() == 0) {
+ return true;
+ }
+ return include.matcher(text).find();
+ }
+
+ static boolean exclude(@NotNull String text, Pattern exclude) {
+ if (exclude.pattern().length() == 0) {
+ return false;
+ }
+ return exclude.matcher(text).find();
+ }
+}
diff --git a/src/main/java/io/github/linwancen/plugin/show/lang/base/Prev.java b/src/main/java/io/github/linwancen/plugin/show/lang/base/Prev.java
new file mode 100644
index 0000000..25d00c7
--- /dev/null
+++ b/src/main/java/io/github/linwancen/plugin/show/lang/base/Prev.java
@@ -0,0 +1,88 @@
+package io.github.linwancen.plugin.show.lang.base;
+
+import com.intellij.openapi.editor.Document;
+import com.intellij.openapi.util.TextRange;
+import com.intellij.psi.PsiElement;
+import com.intellij.psi.util.PsiTreeUtil;
+import io.github.linwancen.plugin.show.bean.LineInfo;
+import io.github.linwancen.plugin.show.bean.SettingsInfo;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+
+import java.util.regex.Pattern;
+
+public class Prev {
+
+ private Prev() {}
+
+ public static PsiElement prevRefChild(@NotNull LineInfo lineInfo, @NotNull PsiElement element,
+ @NotNull Class extends PsiElement> refClass) {
+ PsiElement prevParent = element.getParent();
+ while ((element = PsiTreeUtil.prevVisibleLeaf(element)) != null) {
+ if (element.getTextRange().getEndOffset() < lineInfo.startOffset) {
+ return null;
+ }
+ PsiElement parent = refClassParent(element, refClass);
+ if (parent != null) {
+ // skip b in a.b.c
+ if (prevParent.getTextRange().getEndOffset() < lineInfo.endOffset
+ && PsiTreeUtil.findChildOfType(prevParent, refClass) == parent) {
+ prevParent = parent;
+ } else {
+ return element;
+ }
+ }
+ }
+ return null;
+ }
+
+ private static final Pattern SYMBOL_PATTERN = Pattern.compile("[" +
+ ":-@" +
+ "\\[-`" +
+ "{-~" +
+ "]++");
+
+ private static PsiElement refClassParent(@NotNull PsiElement element,
+ @NotNull Class extends PsiElement> refClass) {
+ String text = element.getText();
+ if (SYMBOL_PATTERN.matcher(text).find()) {
+ return null;
+
+ }
+ PsiElement parent = element.getParent();
+ if (parent == null) {
+ return null;
+ }
+ if (!refClass.isAssignableFrom(parent.getClass())) {
+ parent = parent.getParent();
+ if (parent == null) {
+ return null;
+ }
+ }
+ if (!refClass.isAssignableFrom(parent.getClass())) {
+ return null;
+ }
+ return parent;
+ }
+
+ public static @Nullable PsiElement prevCompactElement(
+ @SuppressWarnings("unused") @NotNull T lineInfo, @NotNull PsiElement resolve, @NotNull Document document) {
+ PsiElement element = PsiTreeUtil.prevVisibleLeaf(resolve);
+ if (element == null) {
+ return null;
+ }
+ int endOffset = element.getTextRange().getEndOffset();
+ int startOffset = resolve.getTextRange().getStartOffset();
+ String spaceText;
+ try {
+ spaceText = document.getText(TextRange.create(endOffset, startOffset));
+ } catch (Exception e) {
+ return null;
+ }
+ String replace = spaceText.replace("\n", "");
+ if (spaceText.length() - replace.length() > 1) {
+ return null;
+ }
+ return element;
+ }
+}
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
new file mode 100644
index 0000000..a0f59a7
--- /dev/null
+++ b/src/main/java/io/github/linwancen/plugin/show/lang/base/PsiElementTo.java
@@ -0,0 +1,36 @@
+package io.github.linwancen.plugin.show.lang.base;
+
+import com.intellij.lang.Language;
+import com.intellij.openapi.vfs.VirtualFile;
+import com.intellij.psi.FileViewProvider;
+import com.intellij.psi.PsiElement;
+import com.intellij.psi.PsiFile;
+import com.intellij.psi.PsiManager;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+
+public class PsiElementTo {
+
+ private PsiElementTo() {}
+
+ public static @Nullable FileViewProvider viewProvider(PsiElement resolve) {
+ PsiFile psiFile = resolve.getContainingFile();
+ if (psiFile == null) {
+ return null;
+ }
+ VirtualFile resolveFile = psiFile.getVirtualFile();
+ if (resolveFile == null) {
+ return null;
+ }
+ return PsiManager.getInstance(resolve.getProject()).findViewProvider(resolveFile);
+ }
+
+ public static @NotNull Language language(@NotNull PsiElement element) {
+ Language lang = element.getLanguage();
+ Language base = lang.getBaseLanguage();
+ if (base != null) {
+ return base;
+ }
+ return lang;
+ }
+}
diff --git a/src/main/java/io/github/linwancen/plugin/show/lang/base/ResolveDoc.java b/src/main/java/io/github/linwancen/plugin/show/lang/base/ResolveDoc.java
new file mode 100644
index 0000000..dff973d
--- /dev/null
+++ b/src/main/java/io/github/linwancen/plugin/show/lang/base/ResolveDoc.java
@@ -0,0 +1,85 @@
+package io.github.linwancen.plugin.show.lang.base;
+
+import com.intellij.openapi.editor.Document;
+import com.intellij.psi.FileViewProvider;
+import com.intellij.psi.PsiComment;
+import com.intellij.psi.PsiElement;
+import com.intellij.psi.util.PsiTreeUtil;
+import io.github.linwancen.plugin.show.bean.SettingsInfo;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+
+import java.util.List;
+
+public class ResolveDoc {
+
+ private ResolveDoc() {}
+
+ @Nullable
+ public static String fromLineEnd(@SuppressWarnings("unused") @NotNull T lineInfo,
+ @NotNull PsiElement resolve,
+ @NotNull FileViewProvider resolveViewProvider) {
+ Document document = resolveViewProvider.getDocument();
+ if (document == null) {
+ return null;
+ }
+ int endOffset = resolve.getTextRange().getEndOffset();
+ int lineNumber;
+ int resolveEndOffset;
+ try {
+ lineNumber = document.getLineNumber(endOffset);
+ resolveEndOffset = document.getLineEndOffset(lineNumber);
+ } catch (Exception e) {
+ return null;
+ }
+ // end over will return last
+ PsiElement psiElement = resolveViewProvider.findElementAt(resolveEndOffset);
+ if (psiElement == null) {
+ return null;
+ }
+ PsiElement docElement = PsiTreeUtil.prevVisibleLeaf(psiElement);
+ if (!(docElement instanceof PsiComment)) {
+ return null;
+ }
+ int docEnd = docElement.getTextRange().getEndOffset();
+ int docLineNumber = document.getLineNumber(docEnd);
+ if (lineNumber != docLineNumber) {
+ return null;
+ }
+ return docElement.getText();
+ }
+
+ @Nullable
+ public static String fromLineUp(@NotNull T lineInfo,
+ PsiElement resolve,
+ @NotNull FileViewProvider resolveViewProvider,
+ @NotNull List keywords) {
+ Document document = resolveViewProvider.getDocument();
+ if (document == null) {
+ return null;
+ }
+ PsiElement psiElement = Prev.prevCompactElement(lineInfo, resolve, document);
+ if (!keywords.isEmpty()) {
+ while (psiElement != null) {
+ String text = psiElement.getText();
+ if (keywords.contains(text)) {
+ psiElement = Prev.prevCompactElement(lineInfo, psiElement, document);
+ } else {
+ break;
+ }
+ }
+ }
+ StringBuilder sb = new StringBuilder();
+ while (psiElement instanceof PsiComment) {
+ String text = psiElement.getText();
+ if (text != null) {
+ sb.insert(0, "\n").insert(0, text);
+ }
+ psiElement = Prev.prevCompactElement(lineInfo, psiElement, document);
+ }
+ if (sb.length() == 0) {
+ return null;
+ }
+ return sb.toString();
+ }
+}
diff --git a/src/main/java/io/github/linwancen/plugin/show/settings/AppSettingsComponent.java b/src/main/java/io/github/linwancen/plugin/show/settings/AppSettingsComponent.java
index f86bc90..750ab68 100644
--- a/src/main/java/io/github/linwancen/plugin/show/settings/AppSettingsComponent.java
+++ b/src/main/java/io/github/linwancen/plugin/show/settings/AppSettingsComponent.java
@@ -18,17 +18,23 @@ public class AppSettingsComponent extends AbstractSettingsComponent {
private final JBCheckBox compact = new JBCheckBox("compact ");
private final JBTextField treeTags = new JBTextField();
private final JBCheckBox showLineEndComment = new JBCheckBox("Show line end comment ");
+ private final JBCheckBox showLineEndCommentJava = new JBCheckBox("Java ");
+ private final JBCheckBox showLineEndCommentSql = new JBCheckBox("sql ");
+ private final JBCheckBox showLineEndCommentJson = new JBCheckBox("json ");
+ private final JBCheckBox showLineEndCommentJs = new JBCheckBox("js ");
+ private final JBCheckBox jsdoc = new JBCheckBox("jsdoc ");
+ private final JBCheckBox showLineEndCommentPy = new JBCheckBox("Python ");
+ private final JBCheckBox showLineEndCommentGo = new JBCheckBox("Go ");
+ private final JBCheckBox showLineEndCommentKotlin = new JBCheckBox("Kotlin ");
private final JBTextField lineTags = new JBTextField();
- private final JBCheckBox fromCall = new JBCheckBox("call ");
- private final JBCheckBox fromNew = new JBCheckBox("new ");
- private final JBCheckBox fromRef = new JBCheckBox("ref ");
- private final JBCheckBox inJson = new JBCheckBox("in json ");
+ private final JBCheckBox getToSet = new JBCheckBox("get |> set ");
+ private final JBCheckBox fromNew = new JBCheckBox("java new ");
+ private final JBCheckBox fromParam = new JBCheckBox("java param ");
private final JBCheckBox skipAnnotation = new JBCheckBox("skip @ ");
private final JBCheckBox skipAscii = new JBCheckBox("skip English ");
private final JBCheckBox skipBlank = new JBCheckBox("skip Blank ");
private final ColorPanel lineEndColor = new ColorPanel();
private final ColorPanel lineEndJsonColor = new ColorPanel();
- private final JBCheckBox findElementRightToLeft = new JBCheckBox("Find element right to left");
private final JBTextField lineEndPrefix = new JBTextField();
private final JBTextField lineEndCount = new JBTextField();
@@ -43,8 +49,17 @@ public class AppSettingsComponent extends AbstractSettingsComponent {
@NotNull
private JPanel showPanel() {
JPanel comment = FormBuilder.createFormBuilder()
- .addComponent(showTreeComment, 1)
- .addComponent(showLineEndComment, 1)
+ .addComponent(JPanelFactory.of(showTreeComment, compact), 1)
+ .addComponent(JPanelFactory.of(showLineEndComment,
+ showLineEndCommentJava,
+ showLineEndCommentSql,
+ showLineEndCommentJson,
+ showLineEndCommentJs,
+ jsdoc,
+ showLineEndCommentPy,
+ showLineEndCommentGo,
+ showLineEndCommentKotlin
+ ), 1)
.addLabeledComponent(new JBLabel("tree tags split by |:"), treeTags, 1, true)
.addLabeledComponent(new JBLabel("line tags split by |:"), lineTags, 1, true)
.getPanel();
@@ -60,9 +75,10 @@ public class AppSettingsComponent extends AbstractSettingsComponent {
new JBLabel("json text color: "), lineEndJsonColor,
new JBLabel("prefix: "), lineEndPrefix);
FormBuilder formBuilder = FormBuilder.createFormBuilder()
- .addComponent(JPanelFactory.of(findElementRightToLeft, compact))
+ // .addComponent(JPanelFactory.of(findElementRightToLeft))
.addSeparator()
- .addComponent(JPanelFactory.of(fromCall, fromNew, fromRef, inJson, skipAnnotation, skipAscii, skipBlank), 1)
+ // .addComponent(JPanelFactory.of(fromCall, fromNew, fromRef, inJson, skipAnnotation, skipAscii, skipBlank), 1)
+ .addComponent(JPanelFactory.of(fromNew, fromParam, getToSet, skipAnnotation, skipAscii, skipBlank), 1)
.addSeparator()
.addComponent(text)
.addSeparator();
@@ -111,6 +127,70 @@ public class AppSettingsComponent extends AbstractSettingsComponent {
showLineEndComment.setSelected(newStatus);
}
+ public boolean getShowLineEndCommentJava() {
+ return showLineEndCommentJava.isSelected();
+ }
+
+ public void setShowLineEndCommentJava(boolean newStatus) {
+ showLineEndCommentJava.setSelected(newStatus);
+ }
+
+ public boolean getShowLineEndCommentSql() {
+ return showLineEndCommentSql.isSelected();
+ }
+
+ public void setShowLineEndCommentSql(boolean newStatus) {
+ showLineEndCommentSql.setSelected(newStatus);
+ }
+
+ public boolean getShowLineEndCommentJson() {
+ return showLineEndCommentJson.isSelected();
+ }
+
+ public void setShowLineEndCommentJson(boolean newStatus) {
+ showLineEndCommentJson.setSelected(newStatus);
+ }
+
+ public boolean getShowLineEndCommentJs() {
+ return showLineEndCommentJs.isSelected();
+ }
+
+ public void setShowLineEndCommentJs(boolean newStatus) {
+ showLineEndCommentJs.setSelected(newStatus);
+ }
+
+ public boolean getJsdoc() {
+ return jsdoc.isSelected();
+ }
+
+ public void setJsdoc(boolean newStatus) {
+ jsdoc.setSelected(newStatus);
+ }
+
+ public boolean getShowLineEndCommentPy() {
+ return showLineEndCommentPy.isSelected();
+ }
+
+ public void setShowLineEndCommentPy(boolean newStatus) {
+ showLineEndCommentPy.setSelected(newStatus);
+ }
+
+ public boolean getShowLineEndCommentGo() {
+ return showLineEndCommentGo.isSelected();
+ }
+
+ public void setShowLineEndCommentGo(boolean newStatus) {
+ showLineEndCommentGo.setSelected(newStatus);
+ }
+
+ public boolean getShowLineEndCommentKotlin() {
+ return showLineEndCommentKotlin.isSelected();
+ }
+
+ public void setShowLineEndCommentKotlin(boolean newStatus) {
+ showLineEndCommentKotlin.setSelected(newStatus);
+ }
+
@NotNull
public String getLineTags() {
return lineTags.getText();
@@ -120,12 +200,12 @@ public class AppSettingsComponent extends AbstractSettingsComponent {
lineTags.setText(newText);
}
- public boolean getFromCall() {
- return fromCall.isSelected();
+ public boolean getGetToSet() {
+ return getToSet.isSelected();
}
- public void setFromCall(boolean newStatus) {
- fromCall.setSelected(newStatus);
+ public void setGetToSet(boolean newStatus) {
+ getToSet.setSelected(newStatus);
}
public boolean getFromNew() {
@@ -136,20 +216,12 @@ public class AppSettingsComponent extends AbstractSettingsComponent {
fromNew.setSelected(newStatus);
}
- public boolean getFromRef() {
- return fromRef.isSelected();
+ public boolean getFromParam() {
+ return fromParam.isSelected();
}
- public void setFromRef(boolean newStatus) {
- fromRef.setSelected(newStatus);
- }
-
- public boolean getInJson() {
- return inJson.isSelected();
- }
-
- public void setInJson(boolean newStatus) {
- inJson.setSelected(newStatus);
+ public void setFromParam(boolean newStatus) {
+ fromParam.setSelected(newStatus);
}
public boolean getSkipAnnotation() {
@@ -192,14 +264,6 @@ public class AppSettingsComponent extends AbstractSettingsComponent {
lineEndJsonColor.setSelectedColor(color);
}
- public boolean getFindElementRightToLeft() {
- return findElementRightToLeft.isSelected();
- }
-
- public void setFindElementRightToLeft(boolean newStatus) {
- findElementRightToLeft.setSelected(newStatus);
- }
-
@NotNull
public String getLineEndPrefix() {
return lineEndPrefix.getText();
diff --git a/src/main/java/io/github/linwancen/plugin/show/settings/AppSettingsConfigurable.java b/src/main/java/io/github/linwancen/plugin/show/settings/AppSettingsConfigurable.java
index 070245b..83039f4 100644
--- a/src/main/java/io/github/linwancen/plugin/show/settings/AppSettingsConfigurable.java
+++ b/src/main/java/io/github/linwancen/plugin/show/settings/AppSettingsConfigurable.java
@@ -2,7 +2,6 @@ package io.github.linwancen.plugin.show.settings;
import com.google.common.base.Splitter;
import com.intellij.openapi.options.Configurable;
-import org.jetbrains.annotations.Nls;
import org.jetbrains.annotations.Nullable;
import javax.swing.*;
@@ -11,7 +10,6 @@ public class AppSettingsConfigurable implements Configurable {
private AppSettingsComponent mySettingsComponent;
- @Nls(capitalization = Nls.Capitalization.Title)
@Override
public String getDisplayName() {
return "Show Comment Global.";
@@ -34,8 +32,18 @@ public class AppSettingsConfigurable implements Configurable {
AppSettingsState settings = AppSettingsState.getInstance();
boolean modified = mySettingsComponent.getShowTreeComment() != settings.showTreeComment;
modified |= mySettingsComponent.getCompact() != settings.compact;
- modified |= !mySettingsComponent.getTreeTags().equals(String.join("|", settings.treeTags));
+
modified |= mySettingsComponent.getShowLineEndComment() != settings.showLineEndComment;
+ modified |= mySettingsComponent.getShowLineEndCommentJava() != settings.showLineEndCommentJava;
+ modified |= mySettingsComponent.getShowLineEndCommentSql() != settings.showLineEndCommentSql;
+ modified |= mySettingsComponent.getShowLineEndCommentJson() != settings.showLineEndCommentJson;
+ modified |= mySettingsComponent.getShowLineEndCommentJs() != settings.showLineEndCommentJs;
+ modified |= mySettingsComponent.getJsdoc() != settings.jsDoc;
+ modified |= mySettingsComponent.getShowLineEndCommentPy() != settings.showLineEndCommentPy;
+ modified |= mySettingsComponent.getShowLineEndCommentGo() != settings.showLineEndCommentGo;
+ modified |= mySettingsComponent.getShowLineEndCommentKotlin() != settings.showLineEndCommentKotlin;
+
+ modified |= !mySettingsComponent.getTreeTags().equals(String.join("|", settings.treeTags));
modified |= !mySettingsComponent.getLineTags().equals(String.join("|", settings.lineTags));
modified |= !mySettingsComponent.getLineEndCount().equals(String.valueOf(settings.lineEndCount));
@@ -43,12 +51,9 @@ public class AppSettingsConfigurable implements Configurable {
modified |= !mySettingsComponent.getLineEndJsonColor().equals(settings.lineEndJsonTextAttr.getForegroundColor());
modified |= !mySettingsComponent.getLineEndPrefix().equals(settings.lineEndPrefix);
- modified |= mySettingsComponent.getFindElementRightToLeft() != settings.findElementRightToLeft;
-
- modified |= mySettingsComponent.getFromCall() != settings.fromCall;
+ modified |= mySettingsComponent.getGetToSet() != settings.getToSet;
modified |= mySettingsComponent.getFromNew() != settings.fromNew;
- modified |= mySettingsComponent.getFromRef() != settings.fromRef;
- modified |= mySettingsComponent.getInJson() != settings.inJson;
+ modified |= mySettingsComponent.getFromParam() != settings.fromParam;
modified |= mySettingsComponent.getSkipAnnotation() != settings.skipAnnotation;
modified |= mySettingsComponent.getSkipAscii() != settings.skipAscii;
modified |= mySettingsComponent.getSkipBlank() != settings.skipBlank;
@@ -63,8 +68,18 @@ public class AppSettingsConfigurable implements Configurable {
AppSettingsState settings = AppSettingsState.getInstance();
settings.showTreeComment = mySettingsComponent.getShowTreeComment();
settings.compact = mySettingsComponent.getCompact();
- settings.treeTags = Splitter.on('|').splitToList(mySettingsComponent.getTreeTags()).toArray(new String[0]);
+
settings.showLineEndComment = mySettingsComponent.getShowLineEndComment();
+ settings.showLineEndCommentJava = mySettingsComponent.getShowLineEndCommentJava();
+ settings.showLineEndCommentSql = mySettingsComponent.getShowLineEndCommentSql();
+ settings.showLineEndCommentJson = mySettingsComponent.getShowLineEndCommentJson();
+ settings.showLineEndCommentJs = mySettingsComponent.getShowLineEndCommentJs();
+ settings.jsDoc = mySettingsComponent.getJsdoc();
+ settings.showLineEndCommentPy = mySettingsComponent.getShowLineEndCommentPy();
+ settings.showLineEndCommentGo = mySettingsComponent.getShowLineEndCommentGo();
+ settings.showLineEndCommentKotlin = mySettingsComponent.getShowLineEndCommentKotlin();
+
+ settings.treeTags = Splitter.on('|').splitToList(mySettingsComponent.getTreeTags()).toArray(new String[0]);
settings.lineTags = Splitter.on('|').splitToList(mySettingsComponent.getLineTags()).toArray(new String[0]);
try {
@@ -76,12 +91,9 @@ public class AppSettingsConfigurable implements Configurable {
settings.lineEndJsonTextAttr.setForegroundColor(mySettingsComponent.getLineEndJsonColor());
settings.lineEndPrefix = mySettingsComponent.getLineEndPrefix();
- settings.findElementRightToLeft = mySettingsComponent.getFindElementRightToLeft();
-
- settings.fromCall = mySettingsComponent.getFromCall();
+ settings.getToSet = mySettingsComponent.getGetToSet();
settings.fromNew = mySettingsComponent.getFromNew();
- settings.fromRef = mySettingsComponent.getFromRef();
- settings.inJson = mySettingsComponent.getInJson();
+ settings.fromParam = mySettingsComponent.getFromParam();
settings.skipAnnotation = mySettingsComponent.getSkipAnnotation();
settings.skipAscii = mySettingsComponent.getSkipAscii();
settings.skipBlank = mySettingsComponent.getSkipBlank();
@@ -94,8 +106,18 @@ public class AppSettingsConfigurable implements Configurable {
AppSettingsState settings = AppSettingsState.getInstance();
mySettingsComponent.setShowTreeComment(settings.showTreeComment);
mySettingsComponent.setCompact(settings.compact);
- mySettingsComponent.setTreeTags(String.join("|", settings.treeTags));
+
mySettingsComponent.setShowLineEndComment(settings.showLineEndComment);
+ mySettingsComponent.setShowLineEndCommentJava(settings.showLineEndCommentJava);
+ mySettingsComponent.setShowLineEndCommentSql(settings.showLineEndCommentSql);
+ mySettingsComponent.setShowLineEndCommentJson(settings.showLineEndCommentJson);
+ mySettingsComponent.setShowLineEndCommentJs(settings.showLineEndCommentJs);
+ mySettingsComponent.setJsdoc(settings.jsDoc);
+ mySettingsComponent.setShowLineEndCommentPy(settings.showLineEndCommentPy);
+ mySettingsComponent.setShowLineEndCommentGo(settings.showLineEndCommentGo);
+ mySettingsComponent.setShowLineEndCommentKotlin(settings.showLineEndCommentKotlin);
+
+ mySettingsComponent.setTreeTags(String.join("|", settings.treeTags));
mySettingsComponent.setLineTags(String.join("|", settings.lineTags));
mySettingsComponent.setLineEndCount(String.valueOf(settings.lineEndCount));
@@ -103,12 +125,9 @@ public class AppSettingsConfigurable implements Configurable {
mySettingsComponent.setLineEndJsonColor(settings.lineEndJsonTextAttr.getForegroundColor());
mySettingsComponent.setLineEndPrefix(settings.lineEndPrefix);
- mySettingsComponent.setFindElementRightToLeft(settings.findElementRightToLeft);
-
- mySettingsComponent.setFromCall(settings.fromCall);
+ mySettingsComponent.setGetToSet(settings.getToSet);
mySettingsComponent.setFromNew(settings.fromNew);
- mySettingsComponent.setFromRef(settings.fromRef);
- mySettingsComponent.setInJson(settings.inJson);
+ mySettingsComponent.setFromParam(settings.fromParam);
mySettingsComponent.setSkipAnnotation(settings.skipAnnotation);
mySettingsComponent.setSkipAscii(settings.skipAscii);
mySettingsComponent.setSkipBlank(settings.skipBlank);
diff --git a/src/main/java/io/github/linwancen/plugin/show/settings/AppSettingsState.java b/src/main/java/io/github/linwancen/plugin/show/settings/AppSettingsState.java
index 02e8d97..9f7b2b7 100644
--- a/src/main/java/io/github/linwancen/plugin/show/settings/AppSettingsState.java
+++ b/src/main/java/io/github/linwancen/plugin/show/settings/AppSettingsState.java
@@ -23,8 +23,18 @@ public class AppSettingsState extends AbstractSettingsState implements Persisten
public boolean showTreeComment = true;
public boolean compact = true;
- public String[] treeTags = {"author"};
+
public boolean showLineEndComment = true;
+ public boolean showLineEndCommentJava = true;
+ public boolean showLineEndCommentSql = true;
+ public boolean showLineEndCommentJson = true;
+ public boolean showLineEndCommentJs = true;
+ public boolean jsDoc = true;
+ public boolean showLineEndCommentPy = true;
+ public boolean showLineEndCommentGo = true;
+ public boolean showLineEndCommentKotlin = true;
+
+ public String[] treeTags = {"author"};
public String[] lineTags = {};
public final TextAttributes lineEndTextAttr = new TextAttributes(
@@ -37,10 +47,13 @@ public class AppSettingsState extends AbstractSettingsState implements Persisten
public String lineEndPrefix = " // ";
public int lineEndCount = 2;
public int lineEndLen = 0;
+ public boolean getToSet = true;
+ @Deprecated
public boolean fromCall = true;
public boolean fromNew = true;
+ @Deprecated
public boolean fromRef = true;
- public boolean inJson = true;
+ public boolean fromParam = false;
public boolean skipAnnotation = true;
public boolean skipAscii = !"en".equals(Locale.getDefault().getLanguage());
public boolean skipBlank = true;
diff --git a/src/main/java/io/github/linwancen/plugin/show/settings/ProjectSettingsConfigurable.java b/src/main/java/io/github/linwancen/plugin/show/settings/ProjectSettingsConfigurable.java
index 0e1d96d..64bba5a 100644
--- a/src/main/java/io/github/linwancen/plugin/show/settings/ProjectSettingsConfigurable.java
+++ b/src/main/java/io/github/linwancen/plugin/show/settings/ProjectSettingsConfigurable.java
@@ -3,7 +3,6 @@ package io.github.linwancen.plugin.show.settings;
import com.intellij.application.options.ModuleAwareProjectConfigurable;
import com.intellij.openapi.module.Module;
import com.intellij.openapi.project.Project;
-import org.jetbrains.annotations.Nls;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -23,7 +22,6 @@ public class ProjectSettingsConfigurable extends ModuleAwareProjectConfigurable<
private ProjectSettingsComponent mySettingsComponent;
- @Nls(capitalization = Nls.Capitalization.Title)
@Override
public String getDisplayName() {
return "Show Comment Project.";
diff --git a/src/main/resources/META-INF/cs.xml b/src/main/resources/META-INF/cs.xml
new file mode 100644
index 0000000..378e6e1
--- /dev/null
+++ b/src/main/resources/META-INF/cs.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/src/main/resources/META-INF/go.xml b/src/main/resources/META-INF/go.xml
new file mode 100644
index 0000000..83c4946
--- /dev/null
+++ b/src/main/resources/META-INF/go.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/src/main/resources/META-INF/java.xml b/src/main/resources/META-INF/java.xml
new file mode 100644
index 0000000..34293ac
--- /dev/null
+++ b/src/main/resources/META-INF/java.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/main/resources/META-INF/js.xml b/src/main/resources/META-INF/js.xml
new file mode 100644
index 0000000..448e4da
--- /dev/null
+++ b/src/main/resources/META-INF/js.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/src/main/resources/META-INF/kotlin.xml b/src/main/resources/META-INF/kotlin.xml
new file mode 100644
index 0000000..58051d5
--- /dev/null
+++ b/src/main/resources/META-INF/kotlin.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/src/main/resources/META-INF/plugin.xml b/src/main/resources/META-INF/plugin.xml
index 4fb7d6e..4dc832a 100644
--- a/src/main/resources/META-INF/plugin.xml
+++ b/src/main/resources/META-INF/plugin.xml
@@ -55,15 +55,18 @@ Show doc comment at the Project view Tree, line End, json etc.
- com.intellij.modules.platform
- com.intellij.modules.java
+ com.intellij.modules.java
+ com.intellij.database
+ JavaScript
+ com.intellij.modules.python
+ org.jetbrains.plugins.go
+ org.jetbrains.kotlin
+
+
-
-
-
@@ -74,22 +77,21 @@ Show doc comment at the Project view Tree, line End, json etc.
-
+
+
+
-
-
-
diff --git a/src/main/resources/META-INF/pluginIcon.svg b/src/main/resources/META-INF/pluginIcon.svg
new file mode 100644
index 0000000..22a4863
--- /dev/null
+++ b/src/main/resources/META-INF/pluginIcon.svg
@@ -0,0 +1,12 @@
+
+
+ /
+ /
+
+
+
\ No newline at end of file
diff --git a/src/main/resources/META-INF/python.xml b/src/main/resources/META-INF/python.xml
new file mode 100644
index 0000000..4f45f9c
--- /dev/null
+++ b/src/main/resources/META-INF/python.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/src/main/resources/META-INF/sql.xml b/src/main/resources/META-INF/sql.xml
new file mode 100644
index 0000000..6045846
--- /dev/null
+++ b/src/main/resources/META-INF/sql.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/src/main/resources/liveTemplates/show-comment-doc.xml b/src/main/resources/liveTemplates/show-comment-doc.xml
new file mode 100644
index 0000000..ad25ff4
--- /dev/null
+++ b/src/main/resources/liveTemplates/show-comment-doc.xml
@@ -0,0 +1,254 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/main/resources/liveTemplates/show-comment-xml.xml b/src/main/resources/liveTemplates/show-comment-xml.xml
new file mode 100644
index 0000000..dbcddc9
--- /dev/null
+++ b/src/main/resources/liveTemplates/show-comment-xml.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/main/rider/io/github/linwancen/plugin/show/lang/CsLineEnd.java b/src/main/rider/io/github/linwancen/plugin/show/lang/CsLineEnd.java
new file mode 100644
index 0000000..5f91790
--- /dev/null
+++ b/src/main/rider/io/github/linwancen/plugin/show/lang/CsLineEnd.java
@@ -0,0 +1,29 @@
+package io.github.linwancen.plugin.show.lang;
+
+import com.intellij.psi.PsiElement;
+import com.jetbrains.rider.ideaInterop.fileTypes.csharp.CSharpLanguage;
+import com.jetbrains.rider.ideaInterop.fileTypes.csharp.psi.CSharpDummyNode;
+import io.github.linwancen.plugin.show.bean.LineInfo;
+import io.github.linwancen.plugin.show.lang.base.BaseLangDoc;
+import org.jetbrains.annotations.NotNull;
+
+/**
+ * Doesn't work because I don't know how to get Reference for CSharp PsiElement
+ * https://intellij-support.jetbrains.com/hc/en-us/requests/4228491
+ */
+public class CsLineEnd extends BaseLangDoc {
+
+ static {
+ LANG_DOC_MAP.put(CSharpLanguage.INSTANCE.getID(), new CsLineEnd());
+ }
+
+ @Override
+ public boolean show(@NotNull LineInfo lineInfo) {
+ return true;
+ }
+
+ @Override
+ public @NotNull Class extends PsiElement> getRefClass() {
+ return CSharpDummyNode.class;
+ }
+}
diff --git a/src/test/java/io/github/linwancen/plugin/show/demo/Cs.cs b/src/test/java/io/github/linwancen/plugin/show/demo/Cs.cs
new file mode 100644
index 0000000..4557ff7
--- /dev/null
+++ b/src/test/java/io/github/linwancen/plugin/show/demo/Cs.cs
@@ -0,0 +1,13 @@
+namespace ConsoleApplication1
+{
+ /*
+ * Program
+ */
+ internal class Program
+ {
+ public static void Main(string[] args)
+ {
+ var program = new Program();
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/test/java/io/github/linwancen/plugin/show/demo/Golang.go b/src/test/java/io/github/linwancen/plugin/show/demo/Golang.go
new file mode 100644
index 0000000..9ddfda2
--- /dev/null
+++ b/src/test/java/io/github/linwancen/plugin/show/demo/Golang.go
@@ -0,0 +1,76 @@
+// Copyright
+
+// go package
+package main
+
+// doc
+func main() {
+ line(val)
+ line(val1)
+ line(value)
+
+ t := &Class{}
+ line2(t.a)
+ line2(t.b)
+
+ line(t)
+ multiLine(t)
+ lineBlock(t)
+ block(t)
+
+ // t
+ a := &Class{}
+ line(a)
+ line(multiLine(block(t)))
+}
+
+// const
+const val = ""
+
+const (
+ // val1
+ val1 = ""
+)
+
+// var
+var value *Class
+
+// First Class
+type Class struct {
+ // a
+ a *Class2
+ b *Class2 // b
+}
+
+// Class2
+type Class2 struct{}
+
+// line
+func line(t *Class) *Class {
+ return t
+}
+
+// line2
+func line2(t *Class2) *Class2 {
+ return t
+}
+
+/*** lineBlock */
+func lineBlock(t *Class) *Class {
+ return t
+}
+
+/*****
+ ***** block
+ *****/
+func block(t *Class) *Class {
+ return t
+}
+
+// other
+
+// 1
+// 2
+func multiLine(t *Class) *Class {
+ return t
+}
diff --git a/src/test/java/io/github/linwancen/plugin/show/demo/HTML.html b/src/test/java/io/github/linwancen/plugin/show/demo/HTML.html
new file mode 100644
index 0000000..bab241a
--- /dev/null
+++ b/src/test/java/io/github/linwancen/plugin/show/demo/HTML.html
@@ -0,0 +1,25 @@
+
+
+
+
+ Title
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/test/java/io/github/linwancen/plugin/show/demo/JavaScript.js b/src/test/java/io/github/linwancen/plugin/show/demo/JavaScript.js
new file mode 100644
index 0000000..d621bed
--- /dev/null
+++ b/src/test/java/io/github/linwancen/plugin/show/demo/JavaScript.js
@@ -0,0 +1,23 @@
+
+lineBlock(isNotDoc)
+lineBlock(docVal)
+block()
+
+// isNotDoc
+const isNotDoc = ""
+
+/** docVal */
+const docVal = ""
+
+/*** lineBlock ***/
+function lineBlock(t) {
+ return t
+}
+
+/*****
+ ***** 1
+ ***** 2
+ *****/
+function block(t) {
+ return t
+}
\ No newline at end of file
diff --git a/src/test/java/io/github/linwancen/plugin/show/demo/JavaScriptObject.js b/src/test/java/io/github/linwancen/plugin/show/demo/JavaScriptObject.js
new file mode 100644
index 0000000..ce1531c
--- /dev/null
+++ b/src/test/java/io/github/linwancen/plugin/show/demo/JavaScriptObject.js
@@ -0,0 +1,43 @@
+
+obj.isA(obj.getB())
+obj.setA(obj.getB())
+obj.setB(obj.a)
+
+/** A */
+let a = obj.isA(obj.getA())
+/** B */
+let b = obj
+ .setA(obj.getA())
+/** B */
+let b = obj
+ .setA(
+ obj.getB())
+
+/** obj1 */
+let obj = {
+ /** a */
+ "a":"A",
+ /** b */
+ "b":"B",
+ /** sub */
+ "sub":{
+ /** subKey */
+ "subKey":"subVal"
+ },
+ /** isA */
+ isA: function (t) {
+ return t
+ },
+ /** setA */
+ setA: function (t) {
+ return t
+ },
+ /** getB */
+ getB: function (t) {
+ return t
+ },
+ /** setB */
+ setB: function (t) {
+ return t
+ },
+}
\ No newline at end of file
diff --git a/src/test/java/io/github/linwancen/plugin/show/demo/Python.py b/src/test/java/io/github/linwancen/plugin/show/demo/Python.py
new file mode 100644
index 0000000..2f74150
--- /dev/null
+++ b/src/test/java/io/github/linwancen/plugin/show/demo/Python.py
@@ -0,0 +1,37 @@
+# Copyright
+
+"""
+This module provides Python Demo.
+"""
+
+# VAL1
+VAL = ""
+
+
+# Type1
+class Type:
+ # Type init
+ def __init__(self):
+ pass
+ # field1
+ field = ""
+
+
+# line1
+def line():
+ print()
+
+
+# 1
+# 2
+def multi_line():
+ print()
+
+
+if __name__ == "__main__":
+ print VAL
+ line()
+ multi_line()
+ t1 = Type
+ t2 = Type()
+ print t2.field
diff --git a/src/test/java/io/github/linwancen/plugin/show/demo/c.c b/src/test/java/io/github/linwancen/plugin/show/demo/c.c
new file mode 100644
index 0000000..e69de29
diff --git a/src/test/java/io/github/linwancen/plugin/show/demo/ext/cobol/doc/cbl.doc.tsv b/src/test/java/io/github/linwancen/plugin/show/demo/ext/cobol/doc/cbl.doc.tsv
index c329d16..c1ff82f 100644
--- a/src/test/java/io/github/linwancen/plugin/show/demo/ext/cobol/doc/cbl.doc.tsv
+++ b/src/test/java/io/github/linwancen/plugin/show/demo/ext/cobol/doc/cbl.doc.tsv
@@ -1,5 +1,5 @@
-KEY = '1' 字典1
-KEY = '2' 字典2
+KEY = '1' 字典1 )
+KEY = '2' 字典2 )
HELLO-WORLD 你好世界
B001-A 程序A
A a
diff --git a/src/test/java/io/github/linwancen/plugin/show/demo/java/Call.java b/src/test/java/io/github/linwancen/plugin/show/demo/java/Call.java
index 883f3e8..f8e015c 100644
--- a/src/test/java/io/github/linwancen/plugin/show/demo/java/Call.java
+++ b/src/test/java/io/github/linwancen/plugin/show/demo/java/Call.java
@@ -4,13 +4,17 @@ import io.github.linwancen.plugin.show.demo.java.obj.Child;
import io.github.linwancen.plugin.show.demo.java.obj.Face;
import io.github.linwancen.plugin.show.demo.java.obj.Parent;
+/**
+ * @author lin
+ */
public class Call extends Parent {
public static void call() {
+ new Call();
Child child = new Child(true);
Parent parentMethod = child.parentMethod();
Face faceMethod = child.faceMethod(child);
boolean is = child.isBool();
Child get = child.getField();
- child.setField(new Child(true)); // field
+ child.setField(new Child(true));
}
}
diff --git a/src/test/java/io/github/linwancen/plugin/show/demo/java/InDoc.java b/src/test/java/io/github/linwancen/plugin/show/demo/java/InDoc.java
index ddbcf7d..6d5e739 100644
--- a/src/test/java/io/github/linwancen/plugin/show/demo/java/InDoc.java
+++ b/src/test/java/io/github/linwancen/plugin/show/demo/java/InDoc.java
@@ -2,6 +2,7 @@ package io.github.linwancen.plugin.show.demo.java;
/**
* InDoc
+ *
* {@link InDoc}
* {@link InDoc#field}
* {@link InDoc#method1}
diff --git a/src/test/java/io/github/linwancen/plugin/show/demo/java/Kotlin.kt b/src/test/java/io/github/linwancen/plugin/show/demo/java/Kotlin.kt
new file mode 100644
index 0000000..6516146
--- /dev/null
+++ b/src/test/java/io/github/linwancen/plugin/show/demo/java/Kotlin.kt
@@ -0,0 +1,32 @@
+package io.github.linwancen.plugin.show.demo.java
+
+import io.github.linwancen.plugin.show.demo.java.obj.Child
+import io.github.linwancen.plugin.show.demo.java.obj.Parent
+
+/**
+ * @author l
+ */
+object Kotlin : Parent() {
+ /** call */
+ fun call() {
+ Kotlin()
+ abc()
+ val child = Child(true)
+ val parentMethod = child.parentMethod()
+ val faceMethod = child.faceMethod(child)
+ val `is` = child.isBool // NotAutoComment
+ val get = child.getField()
+ child.setField(Child(true))
+ }
+
+ private operator fun invoke() {
+ TODO("Not yet implemented")
+ }
+
+ /**
+ * abc
+ */
+ private fun abc() {
+ TODO("Not yet implemented")
+ }
+}
\ No newline at end of file
diff --git a/src/test/java/io/github/linwancen/plugin/show/demo/java/Param.java b/src/test/java/io/github/linwancen/plugin/show/demo/java/Param.java
new file mode 100644
index 0000000..1256df8
--- /dev/null
+++ b/src/test/java/io/github/linwancen/plugin/show/demo/java/Param.java
@@ -0,0 +1,12 @@
+package io.github.linwancen.plugin.show.demo.java;
+
+public class Param {
+ /**
+ * @param a a
+ * @param b b
+ */
+ public static void func(String a, String b) {
+ System.out.println(a);
+ System.out.println(b);
+ }
+}
diff --git a/src/test/java/io/github/linwancen/plugin/show/demo/java/Ref.java b/src/test/java/io/github/linwancen/plugin/show/demo/java/Ref.java
index 4b67277..8f120c3 100644
--- a/src/test/java/io/github/linwancen/plugin/show/demo/java/Ref.java
+++ b/src/test/java/io/github/linwancen/plugin/show/demo/java/Ref.java
@@ -16,6 +16,9 @@ public class Ref implements Face {
.faceMethod(face1 -> Child::setFun);
}
+ /**
+ * do not show this after @Override
+ */
@Override
public Face faceMethod(Face face) {
return null;
diff --git a/src/test/java/io/github/linwancen/plugin/show/demo/java/obj/Child.java b/src/test/java/io/github/linwancen/plugin/show/demo/java/obj/Child.java
index 7658759..60959be 100644
--- a/src/test/java/io/github/linwancen/plugin/show/demo/java/obj/Child.java
+++ b/src/test/java/io/github/linwancen/plugin/show/demo/java/obj/Child.java
@@ -22,8 +22,8 @@ public class Child extends Parent implements Face {
return null;
}
- /** String fun */
- public String fun;
+ /** only Name fun */
+ public Face fun;
public static Face setFun(Face face) {
return null;
diff --git a/src/test/java/io/github/linwancen/plugin/show/demo/json/array-Pojo.json b/src/test/java/io/github/linwancen/plugin/show/demo/json/array-Pojo.json5
similarity index 100%
rename from src/test/java/io/github/linwancen/plugin/show/demo/json/array-Pojo.json
rename to src/test/java/io/github/linwancen/plugin/show/demo/json/array-Pojo.json5
diff --git a/src/test/java/io/github/linwancen/plugin/show/demo/sql.sql b/src/test/java/io/github/linwancen/plugin/show/demo/sql.sql
new file mode 100644
index 0000000..ea4a16e
--- /dev/null
+++ b/src/test/java/io/github/linwancen/plugin/show/demo/sql.sql
@@ -0,0 +1 @@
+select * from NewTable where Column1 is not null ;
\ No newline at end of file
diff --git a/src/test/java/io/github/linwancen/plugin/show/doc/PsiDocToStrDocTest.java b/src/test/java/io/github/linwancen/plugin/show/lang/base/DocFilterTest.java
similarity index 82%
rename from src/test/java/io/github/linwancen/plugin/show/doc/PsiDocToStrDocTest.java
rename to src/test/java/io/github/linwancen/plugin/show/lang/base/DocFilterTest.java
index 3297f3a..a14636b 100644
--- a/src/test/java/io/github/linwancen/plugin/show/doc/PsiDocToStrDocTest.java
+++ b/src/test/java/io/github/linwancen/plugin/show/lang/base/DocFilterTest.java
@@ -1,5 +1,6 @@
-package io.github.linwancen.plugin.show.doc;
+package io.github.linwancen.plugin.show.lang.base;
+import io.github.linwancen.plugin.show.lang.base.DocFilter;
import org.jetbrains.annotations.Nullable;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
@@ -7,9 +8,9 @@ import org.junit.jupiter.api.Test;
import java.util.regex.Pattern;
/**
- * @see PsiDocToStrDoc
+ * @see DocFilter
*/
-class PsiDocToStrDocTest {
+class DocFilterTest {
public static final String[] STRS = {
"english. next",
@@ -31,7 +32,7 @@ class PsiDocToStrDocTest {
};
/**
- * @see PsiDocToStrDoc#getDoc
+ * @see DocFilter#filterDoc
*/
@Test
void testGetDoc() {
@@ -39,7 +40,7 @@ class PsiDocToStrDocTest {
Pattern p = PATTERNS[pi];
for (int si = 0; si < STRS.length; si++) {
String s = STRS[si];
- @Nullable String doc = PsiDocToStrDoc.getDoc(s, p);
+ @Nullable String doc = DocFilter.filterDoc(s, p);
String pattern = p.pattern();
System.out.println("(" + s + ", " + pattern + "): " + doc);
if (pi < 2) {
diff --git a/src/test/java/io/github/linwancen/plugin/show/line/PsiClassSkipTest.java b/src/test/java/io/github/linwancen/plugin/show/lang/base/DocSkipTest.java
similarity index 93%
rename from src/test/java/io/github/linwancen/plugin/show/line/PsiClassSkipTest.java
rename to src/test/java/io/github/linwancen/plugin/show/lang/base/DocSkipTest.java
index 9d5b699..fa933ae 100644
--- a/src/test/java/io/github/linwancen/plugin/show/line/PsiClassSkipTest.java
+++ b/src/test/java/io/github/linwancen/plugin/show/lang/base/DocSkipTest.java
@@ -1,4 +1,4 @@
-package io.github.linwancen.plugin.show.line;
+package io.github.linwancen.plugin.show.lang.base;
import groovy.json.JsonOutput;
@@ -9,9 +9,9 @@ import java.util.function.BiPredicate;
import java.util.regex.Pattern;
/**
- * @see SkipUtils
+ * @see DocSkip
*/
-class PsiClassSkipTest {
+class DocSkipTest {
private static final boolean o = true;
private static final boolean x = false;
@@ -66,7 +66,7 @@ class PsiClassSkipTest {
Pattern include = includes[includeIndex];
for (int excludeIndex = 0, excludesLength = excludes.length; excludeIndex < excludesLength; excludeIndex++) {
Pattern exclude = excludes[excludeIndex];
- boolean isSkip = SkipUtils.skipText(name, include, exclude);
+ boolean isSkip = DocSkip.skipText(name, include, exclude);
String tip =
name + "==" + JsonOutput.toJson(include) + "!=" + JsonOutput.toJson(exclude) + "=>" + isSkip;
System.out.println(tip);
@@ -86,7 +86,7 @@ class PsiClassSkipTest {
{x, o, o}, // {"io"},
{o, o, o}, // {"java", "io"},
};
- loopTest(SkipUtils::include, results);
+ loopTest(DocSkip::include, results);
}
@Test
@@ -98,7 +98,7 @@ class PsiClassSkipTest {
{x, o, o}, // {"io"},
{o, o, o}, // {"java", "io"},
};
- loopTest(SkipUtils::exclude, results);
+ loopTest(DocSkip::exclude, results);
}
private void loopTest(BiPredicate biPredicate, boolean[][] results) {