2.10 not doc comment | 非文档注释

This commit is contained in:
林万程
2023-08-31 08:08:34 +08:00
parent c37148a56a
commit f41dce0241
16 changed files with 185 additions and 72 deletions

View File

@@ -1,6 +1,5 @@
package io.github.linwancen.plugin.show;
import com.intellij.ide.IdeBundle;
import com.intellij.ide.actions.CopyReferenceAction;
import com.intellij.openapi.actionSystem.AnActionEvent;
import com.intellij.openapi.editor.Document;

View File

@@ -37,7 +37,7 @@ public class JsLangDoc extends BaseLangDoc {
if (text != null) {
return text;
}
if (!lineInfo.appSettings.jsDoc) {
if (lineInfo.appSettings.showLineEndCommentJsBase) {
return super.resolveDocRaw(lineInfo, resolve);
}
return null;

View File

@@ -31,6 +31,11 @@ public class PythonLangDoc extends BaseTagLangDoc<StructuredDocString> {
return lineInfo.appSettings.showLineEndCommentPy;
}
@Override
protected <T extends SettingsInfo> boolean parseBaseComment(@NotNull T settingsInfo) {
return settingsInfo.appSettings.showLineEndCommentPyBase;
}
@Nullable
@Override
protected <T extends SettingsInfo> StructuredDocString toDocElement(@NotNull T settingsInfo,

View File

@@ -69,12 +69,14 @@ public abstract class BaseLangDoc extends EditorLinePainter {
return null;
}
@Nullable String doc = null;
@Nullable String text = null;
@Nullable PsiElement refElement = element;
while ((refElement = Prev.prevRefChild(lineInfo, refElement, refClass)) != null) {
PsiElement parent = refElement.getParent();
@Nullable String filterDoc = refElementDoc(lineInfo, parent);
if (filterDoc != null) {
doc = filterDoc;
text = refElement.getText();
refElement = parent;
break;
}
@@ -87,24 +89,29 @@ public abstract class BaseLangDoc extends EditorLinePainter {
if (refElement == null) {
return doc;
}
String text = refElement.getText();
boolean set = text.startsWith("set");
PsiElement parent = refElement.getParent();
@Nullable String before = refElementDoc(lineInfo, parent);
if (before != null) {
doc = mergeDoc(set, lineInfo.appSettings.getToSet, before, doc);
doc = mergeDoc(refElement.getText(), text, lineInfo.appSettings.getToSet, before, doc);
}
return doc;
}
@NotNull
private String mergeDoc(boolean set, boolean getToSet, String before, String doc) {
if (set) {
private String mergeDoc(@NotNull String beforeText, @NotNull String text, boolean getToSet, String before, String doc) {
if (beforeText.startsWith("set")) {
beforeText = beforeText.substring(3);
if (text.startsWith("get")) {
text = text.substring(3);
} else if (text.startsWith("is")) {
text = text.substring(2);
}
boolean same = beforeText.equals(text);
if (getToSet) {
// because lambda is -> or =>
doc = doc + " --> " + before;
doc = doc + (same ? " ==> " : " --> ") + before;
} else {
doc = before + " = " + doc;
doc = before + (same ? " <== " : " <-- ") + doc;
}
} else {
doc = before + " | " + doc;

View File

@@ -11,8 +11,8 @@ public abstract class BaseTagLangDoc<DocElement> extends BaseLangDoc {
public @Nullable <T extends SettingsInfo> String resolveDocPrint(@NotNull T settingsInfo,
@NotNull PsiElement resolve) {
@Nullable DocElement docElement = toDocElement(settingsInfo, resolve);
if (docElement == null) {
return null;
if (docElement == null && parseBaseComment(settingsInfo)) {
return super.resolveDocPrint(settingsInfo, resolve);
}
return docElementToStr(settingsInfo, docElement);
}
@@ -44,6 +44,8 @@ public abstract class BaseTagLangDoc<DocElement> extends BaseLangDoc {
return text;
}
protected abstract <T extends SettingsInfo> boolean parseBaseComment(T settingsInfo);
@Nullable
protected abstract <T extends SettingsInfo> DocElement toDocElement(@NotNull T settingsInfo,
@NotNull PsiElement resolve);

View File

@@ -18,7 +18,7 @@ public class Prev {
@Nullable
public static PsiElement prevRefChild(@NotNull LineInfo lineInfo, @NotNull PsiElement element,
@NotNull Class<? extends PsiElement> refClass) {
PsiElement prevParent = element.getParent();
PsiElement prevParent = refClassParent(element, refClass);
while ((element = PsiTreeUtil.prevVisibleLeaf(element)) != null) {
if (element.getTextRange().getEndOffset() < lineInfo.startOffset) {
return null;
@@ -26,7 +26,8 @@ public class Prev {
@Nullable PsiElement parent = refClassParent(element, refClass);
if (parent != null) {
// skip b in a.b.c
if (prevParent.getTextRange().getEndOffset() < lineInfo.endOffset
if (prevParent != null
&& prevParent.getTextRange().getEndOffset() < lineInfo.endOffset
&& PsiTreeUtil.findChildOfType(prevParent, refClass) == parent) {
prevParent = parent;
} else {

View File

@@ -58,7 +58,10 @@ public class ResolveDoc {
if (document == null) {
return null;
}
@Nullable PsiElement psiElement = Prev.prevCompactElement(lineInfo, resolve, document);
@Nullable PsiElement psiElement = PsiTreeUtil.getChildOfType(resolve, PsiComment.class);
if (psiElement == null) {
psiElement = Prev.prevCompactElement(lineInfo, resolve, document);
}
if (!keywords.isEmpty()) {
while (psiElement != null) {
String text = psiElement.getText();

View File

@@ -9,7 +9,7 @@ public abstract class AbstractSettingsState {
@NotNull
public transient Pattern lineInclude = Pattern.compile("");
@NotNull
public transient Pattern lineExclude = Pattern.compile("^java");
public transient Pattern lineExclude = Pattern.compile("^(java)\\.");
@NotNull
public transient Pattern docInclude = Pattern.compile("");
@NotNull

View File

@@ -20,13 +20,17 @@ public class AppSettingsComponent extends AbstractSettingsComponent {
private final JBTextField treeTags = new JBTextField();
private final JBCheckBox showLineEndComment = new JBCheckBox(ShowBundle.message("show.line.end.comment"));
private final JBCheckBox showLineEndCommentJava = new JBCheckBox("Java ");
private final JBCheckBox showLineEndCommentJavaBase = new JBCheckBox("// Java ");
private final JBCheckBox showLineEndCommentKotlin = new JBCheckBox("Kotlin ");
private final JBCheckBox showLineEndCommentKotlinBase = new JBCheckBox("// Kotlin ");
private final JBCheckBox showLineEndCommentJs = new JBCheckBox("js ");
private final JBCheckBox showLineEndCommentJsBase = new JBCheckBox("// js ");
private final JBCheckBox showLineEndCommentPy = new JBCheckBox("Python ");
private final JBCheckBox showLineEndCommentPyBase = new JBCheckBox("# Python ");
private final JBCheckBox showLineEndCommentGo = new JBCheckBox("Go ");
private final JBCheckBox showLineEndCommentGoBase = new JBCheckBox("// Go ");
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 getToSet = new JBCheckBox("get --> set ");
private final JBCheckBox fromNew = new JBCheckBox("java new ");
@@ -40,7 +44,7 @@ public class AppSettingsComponent extends AbstractSettingsComponent {
private final JBTextField lineEndCount = new JBTextField();
public AppSettingsComponent() {
JButton resetDefault = new JButton(ShowBundle.message("reset.default"));
@NotNull JButton resetDefault = new JButton(ShowBundle.message("reset.default"));
resetDefault.addActionListener(e -> AppSettingsConfigurable.reset(AppSettingsState.DEFAULT_SETTING, this));
myMainPanel = FormBuilder.createFormBuilder()
.addComponent(resetDefault, 1)
@@ -56,13 +60,18 @@ public class AppSettingsComponent extends AbstractSettingsComponent {
.addComponent(JPanelFactory.of(showTreeComment, compact), 1)
.addComponent(JPanelFactory.of(showLineEndComment,
showLineEndCommentJava,
showLineEndCommentKotlin,
showLineEndCommentJs,
showLineEndCommentPy,
showLineEndCommentGo
), 1)
.addComponent(JPanelFactory.of(
showLineEndCommentSql,
showLineEndCommentJson,
showLineEndCommentJs,
jsdoc,
showLineEndCommentPy,
showLineEndCommentGo,
showLineEndCommentKotlin
showLineEndCommentJavaBase,
showLineEndCommentKotlinBase,
showLineEndCommentJsBase,
showLineEndCommentPyBase
), 1)
.addLabeledComponent(new JBLabel(ShowBundle.message("tree.tags")), treeTags, 1, true)
.addLabeledComponent(new JBLabel(ShowBundle.message("line.tags")), lineTags, 1, true)
@@ -122,6 +131,7 @@ public class AppSettingsComponent extends AbstractSettingsComponent {
treeTags.setText(newText);
}
// region line end
public boolean getShowLineEndComment() {
return showLineEndComment.isSelected();
}
@@ -138,20 +148,12 @@ public class AppSettingsComponent extends AbstractSettingsComponent {
showLineEndCommentJava.setSelected(newStatus);
}
public boolean getShowLineEndCommentSql() {
return showLineEndCommentSql.isSelected();
public boolean getShowLineEndCommentKotlin() {
return showLineEndCommentKotlin.isSelected();
}
public void setShowLineEndCommentSql(boolean newStatus) {
showLineEndCommentSql.setSelected(newStatus);
}
public boolean getShowLineEndCommentJson() {
return showLineEndCommentJson.isSelected();
}
public void setShowLineEndCommentJson(boolean newStatus) {
showLineEndCommentJson.setSelected(newStatus);
public void setShowLineEndCommentKotlin(boolean newStatus) {
showLineEndCommentKotlin.setSelected(newStatus);
}
public boolean getShowLineEndCommentJs() {
@@ -162,14 +164,6 @@ public class AppSettingsComponent extends AbstractSettingsComponent {
showLineEndCommentJs.setSelected(newStatus);
}
public boolean getJsdoc() {
return jsdoc.isSelected();
}
public void setJsdoc(boolean newStatus) {
jsdoc.setSelected(newStatus);
}
public boolean getShowLineEndCommentPy() {
return showLineEndCommentPy.isSelected();
}
@@ -186,14 +180,64 @@ public class AppSettingsComponent extends AbstractSettingsComponent {
showLineEndCommentGo.setSelected(newStatus);
}
public boolean getShowLineEndCommentKotlin() {
return showLineEndCommentKotlin.isSelected();
public boolean getShowLineEndCommentJavaBase() {
return showLineEndCommentJavaBase.isSelected();
}
public void setShowLineEndCommentKotlin(boolean newStatus) {
showLineEndCommentKotlin.setSelected(newStatus);
public void setShowLineEndCommentJavaBase(boolean newStatus) {
showLineEndCommentJavaBase.setSelected(newStatus);
}
public boolean getShowLineEndCommentKotlinBase() {
return showLineEndCommentKotlinBase.isSelected();
}
public void setShowLineEndCommentKotlinBase(boolean newStatus) {
showLineEndCommentKotlinBase.setSelected(newStatus);
}
public boolean getShowLineEndCommentJsBase() {
return showLineEndCommentJsBase.isSelected();
}
public void setShowLineEndCommentJsBase(boolean newStatus) {
showLineEndCommentJsBase.setSelected(newStatus);
}
public boolean getShowLineEndCommentPyBase() {
return showLineEndCommentPyBase.isSelected();
}
public void setShowLineEndCommentPyBase(boolean newStatus) {
showLineEndCommentPyBase.setSelected(newStatus);
}
public boolean getShowLineEndCommentGoBase() {
return showLineEndCommentGoBase.isSelected();
}
public void setShowLineEndCommentGoBase(boolean newStatus) {
showLineEndCommentGoBase.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);
}
// endregion line end
@NotNull
public String getLineTags() {
return lineTags.getText();

View File

@@ -40,13 +40,17 @@ public class AppSettingsConfigurable implements Configurable {
modified |= mySettingsComponent.getShowLineEndComment() != settings.showLineEndComment;
modified |= mySettingsComponent.getShowLineEndCommentJava() != settings.showLineEndCommentJava;
modified |= mySettingsComponent.getShowLineEndCommentSql() != settings.showLineEndCommentSql;
modified |= mySettingsComponent.getShowLineEndCommentJson() != settings.showLineEndCommentJson;
modified |= mySettingsComponent.getShowLineEndCommentKotlin() != settings.showLineEndCommentKotlin;
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.getShowLineEndCommentJavaBase() != settings.showLineEndCommentJavaBase;
modified |= mySettingsComponent.getShowLineEndCommentKotlinBase() != settings.showLineEndCommentKotlinBase;
modified |= mySettingsComponent.getShowLineEndCommentJsBase() != settings.showLineEndCommentJsBase;
modified |= mySettingsComponent.getShowLineEndCommentPyBase() != settings.showLineEndCommentPyBase;
modified |= mySettingsComponent.getShowLineEndCommentGoBase() != settings.showLineEndCommentGoBase;
modified |= mySettingsComponent.getShowLineEndCommentSql() != settings.showLineEndCommentSql;
modified |= mySettingsComponent.getShowLineEndCommentJson() != settings.showLineEndCommentJson;
modified |= !mySettingsComponent.getTreeTags().equals(String.join("|", settings.treeTags));
modified |= !mySettingsComponent.getLineTags().equals(String.join("|", settings.lineTags));
@@ -76,13 +80,17 @@ public class AppSettingsConfigurable implements Configurable {
settings.showLineEndComment = mySettingsComponent.getShowLineEndComment();
settings.showLineEndCommentJava = mySettingsComponent.getShowLineEndCommentJava();
settings.showLineEndCommentSql = mySettingsComponent.getShowLineEndCommentSql();
settings.showLineEndCommentJson = mySettingsComponent.getShowLineEndCommentJson();
settings.showLineEndCommentKotlin = mySettingsComponent.getShowLineEndCommentKotlin();
settings.showLineEndCommentJs = mySettingsComponent.getShowLineEndCommentJs();
settings.jsDoc = mySettingsComponent.getJsdoc();
settings.showLineEndCommentPy = mySettingsComponent.getShowLineEndCommentPy();
settings.showLineEndCommentGo = mySettingsComponent.getShowLineEndCommentGo();
settings.showLineEndCommentKotlin = mySettingsComponent.getShowLineEndCommentKotlin();
settings.showLineEndCommentJavaBase = mySettingsComponent.getShowLineEndCommentJavaBase();
settings.showLineEndCommentKotlinBase = mySettingsComponent.getShowLineEndCommentKotlinBase();
settings.showLineEndCommentJsBase = mySettingsComponent.getShowLineEndCommentJsBase();
settings.showLineEndCommentPyBase = mySettingsComponent.getShowLineEndCommentPyBase();
settings.showLineEndCommentGoBase = mySettingsComponent.getShowLineEndCommentGoBase();
settings.showLineEndCommentSql = mySettingsComponent.getShowLineEndCommentSql();
settings.showLineEndCommentJson = mySettingsComponent.getShowLineEndCommentJson();
settings.treeTags = Splitter.on('|').splitToList(mySettingsComponent.getTreeTags()).toArray(new String[0]);
settings.lineTags = Splitter.on('|').splitToList(mySettingsComponent.getLineTags()).toArray(new String[0]);
@@ -112,19 +120,23 @@ public class AppSettingsConfigurable implements Configurable {
reset(settings, mySettingsComponent);
}
static void reset(@NotNull AppSettingsState settings, AppSettingsComponent mySettingsComponent) {
static void reset(@NotNull AppSettingsState settings, @NotNull AppSettingsComponent mySettingsComponent) {
mySettingsComponent.setShowTreeComment(settings.showTreeComment);
mySettingsComponent.setCompact(settings.compact);
mySettingsComponent.setShowLineEndComment(settings.showLineEndComment);
mySettingsComponent.setShowLineEndCommentJava(settings.showLineEndCommentJava);
mySettingsComponent.setShowLineEndCommentSql(settings.showLineEndCommentSql);
mySettingsComponent.setShowLineEndCommentJson(settings.showLineEndCommentJson);
mySettingsComponent.setShowLineEndCommentKotlin(settings.showLineEndCommentKotlin);
mySettingsComponent.setShowLineEndCommentJs(settings.showLineEndCommentJs);
mySettingsComponent.setJsdoc(settings.jsDoc);
mySettingsComponent.setShowLineEndCommentPy(settings.showLineEndCommentPy);
mySettingsComponent.setShowLineEndCommentGo(settings.showLineEndCommentGo);
mySettingsComponent.setShowLineEndCommentKotlin(settings.showLineEndCommentKotlin);
mySettingsComponent.setShowLineEndCommentJavaBase(settings.showLineEndCommentJavaBase);
mySettingsComponent.setShowLineEndCommentKotlinBase(settings.showLineEndCommentKotlinBase);
mySettingsComponent.setShowLineEndCommentJsBase(settings.showLineEndCommentJsBase);
mySettingsComponent.setShowLineEndCommentPyBase(settings.showLineEndCommentPyBase);
mySettingsComponent.setShowLineEndCommentGoBase(settings.showLineEndCommentGoBase);
mySettingsComponent.setShowLineEndCommentSql(settings.showLineEndCommentSql);
mySettingsComponent.setShowLineEndCommentJson(settings.showLineEndCommentJson);
mySettingsComponent.setTreeTags(String.join("|", settings.treeTags));
mySettingsComponent.setLineTags(String.join("|", settings.lineTags));

View File

@@ -28,13 +28,17 @@ public class AppSettingsState extends AbstractSettingsState implements Persisten
public boolean showLineEndComment = true;
public boolean showLineEndCommentJava = true;
public boolean showLineEndCommentJavaBase = false;
public boolean showLineEndCommentKotlin = true;
public boolean showLineEndCommentKotlinBase = false;
public boolean showLineEndCommentJs = true;
public boolean showLineEndCommentJsBase = false;
public boolean showLineEndCommentPy = true;
public boolean showLineEndCommentPyBase = false;
public boolean showLineEndCommentGo = true;
public boolean showLineEndCommentGoBase = false;
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;
@NotNull
public String[] treeTags = {"author"};