Skip to content

Commit b18265a

Browse files
authored
Merge pull request #85 from 0verEngineer/feature/max-lines
Max lines feature
2 parents 9a6304e + 0523112 commit b18265a

File tree

11 files changed

+103
-43
lines changed

11 files changed

+103
-43
lines changed

src/main/java/org/overengineer/inlineproblems/DocumentMarkupModelScanner.java

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
import org.overengineer.inlineproblems.entities.enums.Listener;
2020
import org.overengineer.inlineproblems.listeners.HighlightProblemListener;
2121
import org.overengineer.inlineproblems.settings.SettingsState;
22-
import org.overengineer.inlineproblems.utils.FileNameUtil;
22+
import org.overengineer.inlineproblems.utils.FileUtil;
2323

2424
import java.util.ArrayList;
2525
import java.util.Arrays;
@@ -92,12 +92,16 @@ public void scanForProblemsManually() {
9292
FileEditorManager fileEditorManager = FileEditorManager.getInstance(project);
9393
for (var editor : fileEditorManager.getAllEditors()) {
9494

95-
if (editor.getFile() == null || FileNameUtil.ignoreFile(editor.getFile().getName())) {
96-
continue;
97-
}
98-
9995
if (editor instanceof TextEditor) {
10096
var textEditor = (TextEditor) editor;
97+
98+
if (
99+
editor.getFile() == null ||
100+
FileUtil.ignoreFile(editor.getFile().getName(), textEditor.getEditor().getDocument().getLineCount())
101+
) {
102+
continue;
103+
}
104+
101105
problems.addAll(getProblemsInEditor(textEditor));
102106
}
103107
}
@@ -112,7 +116,10 @@ public void scanForProblemsManually() {
112116
* millisecond if the HighlightProblemListener is used.
113117
*/
114118
public void scanForProblemsManuallyInTextEditor(TextEditor textEditor) {
115-
if (textEditor.getFile() == null || FileNameUtil.ignoreFile(textEditor.getFile().getName())) {
119+
if (
120+
textEditor.getFile() == null ||
121+
FileUtil.ignoreFile(textEditor.getFile().getName(), textEditor.getEditor().getDocument().getLineCount())
122+
) {
116123
return;
117124
}
118125

src/main/java/org/overengineer/inlineproblems/ListenerManager.java

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
import org.overengineer.inlineproblems.listeners.HighlightProblemListener;
1010
import org.overengineer.inlineproblems.listeners.MarkupModelProblemListener;
1111
import org.overengineer.inlineproblems.settings.SettingsState;
12-
import org.overengineer.inlineproblems.utils.FileNameUtil;
12+
import org.overengineer.inlineproblems.utils.FileUtil;
1313

1414

1515
public class ListenerManager {
@@ -40,12 +40,15 @@ public void installMarkupModelListenerOnAllProjects() {
4040
for (var project : manager.getOpenProjects()) {
4141
FileEditorManager fileEditorManager = FileEditorManager.getInstance(project);
4242
for (var editor : fileEditorManager.getAllEditors()) {
43-
44-
if (editor.getFile() == null || FileNameUtil.ignoreFile(editor.getFile().getName())) {
45-
continue;
46-
}
47-
4843
if (editor instanceof TextEditor) {
44+
var textEditor = (TextEditor) editor;
45+
if (
46+
editor.getFile() == null ||
47+
FileUtil.ignoreFile(editor.getFile().getName(), textEditor.getEditor().getDocument().getLineCount())
48+
) {
49+
continue;
50+
}
51+
4952
MarkupModelProblemListener.setup((TextEditor) editor);
5053
logger.debug("Installing MarkupModelListener");
5154
}

src/main/java/org/overengineer/inlineproblems/listeners/FileEditorListener.java

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
import org.jetbrains.annotations.NotNull;
77
import org.overengineer.inlineproblems.entities.enums.Listener;
88
import org.overengineer.inlineproblems.settings.SettingsState;
9-
import org.overengineer.inlineproblems.utils.FileNameUtil;
9+
import org.overengineer.inlineproblems.utils.FileUtil;
1010

1111
import java.util.Arrays;
1212

@@ -24,13 +24,15 @@ public void fileOpenedSync(
2424
if (settingsState.getEnabledListener() != Listener.MARKUP_MODEL_LISTENER)
2525
return;
2626

27-
if (FileNameUtil.ignoreFile(file.getName())) {
27+
// Precheck only file name, later we check the line count only
28+
if (FileUtil.ignoreFile(file.getName(), -1)) {
2829
return;
2930
}
3031

3132
Arrays.stream(editors.first)
32-
.filter(e -> e instanceof TextEditor)
33-
.map(e -> (TextEditor)e)
34-
.forEach(MarkupModelProblemListener::setup);
33+
.filter(e -> e instanceof TextEditor)
34+
.map(e -> (TextEditor) e)
35+
.filter(tE -> !FileUtil.ignoreFile(null, tE.getEditor().getDocument().getLineCount()))
36+
.forEach(MarkupModelProblemListener::setup);
3537
}
3638
}

src/main/java/org/overengineer/inlineproblems/listeners/HighlightProblemListener.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
import org.overengineer.inlineproblems.DocumentMarkupModelScanner;
1313
import org.overengineer.inlineproblems.entities.enums.Listener;
1414
import org.overengineer.inlineproblems.settings.SettingsState;
15-
import org.overengineer.inlineproblems.utils.FileNameUtil;
15+
import org.overengineer.inlineproblems.utils.FileUtil;
1616

1717

1818
public class HighlightProblemListener implements HighlightInfoFilter {
@@ -29,7 +29,8 @@ public boolean accept(@NotNull HighlightInfo highlightInfo, @Nullable PsiFile fi
2929
if (file == null || !file.isValid())
3030
return true;
3131

32-
if (FileNameUtil.ignoreFile(file.getName())) {
32+
// Only check file name here, the line count is checked in the scanForProblemsManuallyInTextEditor call
33+
if (FileUtil.ignoreFile(file.getName(), -1)) {
3334
return true;
3435
}
3536

@@ -48,7 +49,7 @@ public void handleAccept(PsiFile file) {
4849
return;
4950

5051
FileEditor editor = FileEditorManager.getInstance(file.getProject()).getSelectedEditor(file.getVirtualFile());
51-
if (editor == null) {
52+
if (editor == null || !(editor instanceof TextEditor)) {
5253
return;
5354
}
5455

src/main/java/org/overengineer/inlineproblems/settings/SettingsComponent.java

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,7 @@ public class SettingsComponent {
6565
private final JBCheckBox enableXmlUnescaping = new JBCheckBox(SettingsBundle.message("settings.enableXmlUnescaping"));
6666
private final JFormattedTextField inlayFontSizeDeltaText;
6767
private final JFormattedTextField manualScannerDelay;
68+
private final JFormattedTextField maxFileLines;
6869
private final JBCheckBox fillProblemLabels = new JBCheckBox(SettingsBundle.message("settings.fillProblemLabels"));
6970
private final JBCheckBox boldProblemLabels = new JBCheckBox(SettingsBundle.message("settings.boldProblemLabels"));
7071
private final JBCheckBox italicProblemLabels = new JBCheckBox(SettingsBundle.message("settings.italicProblemLabels"));
@@ -130,6 +131,9 @@ public SettingsComponent() {
130131
manualScannerDelay = new JFormattedTextField(numberFormatter);
131132
manualScannerDelay.setText(Integer.toString(settingsState.getManualScannerDelay()));
132133

134+
maxFileLines = new JFormattedTextField(numberFormatter);
135+
maxFileLines.setText(Integer.toString(settingsState.getMaxFileLines()));
136+
133137
fillProblemLabels.setSelected(settingsState.isFillProblemLabels());
134138
boldProblemLabels.setSelected(settingsState.isBoldProblemLabels());
135139
italicProblemLabels.setSelected(settingsState.isItalicProblemLabels());
@@ -173,7 +177,9 @@ public SettingsComponent() {
173177
.addLabeledComponent(new JLabel(SettingsBundle.message("settings.problemFilterListLabel")), problemFilterList)
174178
.addTooltip(SettingsBundle.message("settings.problemFilterListTooltip"))
175179
.addLabeledComponent(new JLabel(SettingsBundle.message("settings.fileExtensionBlacklistLabel")), fileExtensionBlacklist)
176-
.addTooltip(SettingsBundle.message("settings.fileExtensionBlaclistTooltip"))
180+
.addTooltip(SettingsBundle.message("settings.fileExtensionBlacklistTooltip"))
181+
.addLabeledComponent(new JLabel(SettingsBundle.message("settings.maxFileLinesLabel")), maxFileLines)
182+
.addTooltip(SettingsBundle.message("settings.maxFileLinesTooltip"))
177183
.addSeparator()
178184
.addComponent(new JBLabel(SettingsBundle.message("settings.submenu.colors")))
179185
.addComponent(showErrors)
@@ -609,4 +615,17 @@ public int getManualScannerDelay() {
609615
public void setManualScannerDelay(int delay) {
610616
manualScannerDelay.setText(Integer.toString(Math.max(10, delay)));
611617
}
618+
619+
public int getMaxFileLines() {
620+
try {
621+
return Math.max(Integer.parseInt(maxFileLines.getText()), 0);
622+
}
623+
catch (NumberFormatException e) {
624+
return 0;
625+
}
626+
}
627+
628+
public void setMaxFileLines(int lines) {
629+
maxFileLines.setText(Integer.toString(Math.max(0, lines)));
630+
}
612631
}

src/main/java/org/overengineer/inlineproblems/settings/SettingsConfigurable.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,7 @@ public boolean isModified() {
8686

8787
state.getProblemFilterList().equals(settingsComponent.getProblemFilterList()) &&
8888
state.getFileExtensionBlacklist().equals(settingsComponent.getFileExtensionBlacklist()) &&
89+
state.getMaxFileLines() == settingsComponent.getMaxFileLines() &&
8990

9091
state.getAdditionalInfoSeveritiesAsString().equals(settingsComponent.getAdditionalInfoSeverities()) &&
9192
state.getAdditionalWarningSeveritiesAsString().equals(settingsComponent.getAdditionalWarningSeverities()) &&
@@ -103,6 +104,7 @@ public void apply() {
103104
boolean listenerChanged = state.getEnabledListener() != settingsComponent.getEnabledListener();
104105
boolean fileExtensionBlacklistChanged = !Objects.equals(state.getFileExtensionBlacklist(), settingsComponent.getFileExtensionBlacklist());
105106
boolean manualScannerDelayChanged = state.getManualScannerDelay() != settingsComponent.getManualScannerDelay();
107+
boolean maxFileLinesChanged = state.getMaxFileLines() != settingsComponent.getMaxFileLines();
106108

107109
state.setShowErrors(settingsComponent.isShowErrors());
108110
state.setHighlightErrors(settingsComponent.isHighlightErrors());
@@ -148,6 +150,7 @@ public void apply() {
148150
state.setManualScannerDelay(settingsComponent.getManualScannerDelay());
149151
state.setProblemFilterList(settingsComponent.getProblemFilterList());
150152
state.setFileExtensionBlacklist(settingsComponent.getFileExtensionBlacklist());
153+
state.setMaxFileLines(settingsComponent.getMaxFileLines());
151154

152155
state.setAdditionalInfoSeverities(settingsComponent.getAdditionalInfoSeveritiesList());
153156
state.setAdditionalWarningSeverities(settingsComponent.getAdditionalWarningSeveritiesList());
@@ -160,8 +163,8 @@ public void apply() {
160163

161164
listenerManager.resetAndRescan();
162165

163-
// When the blacklist changes we need to re-apply all MarkupModelProblemListeners
164-
if (fileExtensionBlacklistChanged && state.getEnabledListener() == Listener.MARKUP_MODEL_LISTENER) {
166+
// When the blacklist or maxFileLines changes we need to re-apply all MarkupModelProblemListeners
167+
if ((fileExtensionBlacklistChanged || maxFileLinesChanged) && state.getEnabledListener() == Listener.MARKUP_MODEL_LISTENER) {
165168
listenerManager.resetMarkupModelProblemListeners();
166169
}
167170

src/main/java/org/overengineer/inlineproblems/settings/SettingsState.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,7 @@ public class SettingsState implements PersistentStateComponent<SettingsState> {
9797
private int enabledListener = Listener.MARKUP_MODEL_LISTENER;
9898
private String problemFilterList = "todo;fixme;open in browser";
9999
private String fileExtensionBlacklist = "";
100+
private int maxFileLines = 0;
100101

101102
private List<Integer> additionalErrorSeverities = new ArrayList<>();
102103
private List<Integer> additionalWarningSeverities = new ArrayList<>();

src/main/java/org/overengineer/inlineproblems/utils/FileNameUtil.java

Lines changed: 0 additions & 19 deletions
This file was deleted.
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
package org.overengineer.inlineproblems.utils;
2+
3+
import org.overengineer.inlineproblems.settings.SettingsState;
4+
5+
public class FileUtil {
6+
7+
/**
8+
* Returns true if the file should be ignored, current checks involve the file name and the line count
9+
* @param fileName can be null to ignore
10+
* @param lineCount can be -1 to ignore
11+
* @return true if the file should be ignored, false otherwise
12+
*/
13+
public static boolean ignoreFile(String fileName, int lineCount) {
14+
boolean ignore = false;
15+
var settings = SettingsState.getInstance();
16+
17+
if (fileName != null) {
18+
for (var e : settings.getFileExtensionBlacklist().split(";")) {
19+
if (e.isBlank() || e.isEmpty() || e.equals(";")) continue;
20+
if (fileName.endsWith(e)) {
21+
ignore = true;
22+
break;
23+
}
24+
}
25+
}
26+
27+
if (lineCount >= 0) {
28+
var maxFileLines = settings.getMaxFileLines();
29+
30+
if (maxFileLines >= 0 && lineCount >= maxFileLines) {
31+
ignore = true;
32+
}
33+
}
34+
35+
return ignore;
36+
}
37+
}

src/main/resources/messages/SettingsBundle_en.properties

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,9 @@ settings.inlaySizeDeltaTooltip=Used to have smaller font size for the inlays, sh
2929
settings.problemFilterListLabel=Problem filter list
3030
settings.problemFilterListTooltip=Semicolon separated list of problem text beginnings that will not be handled
3131
settings.fileExtensionBlacklistLabel=File extension blacklist
32-
settings.fileExtensionBlaclistTooltip=Semicolon separated list of file extensions to ignore (like ".java;.md")
32+
settings.fileExtensionBlacklistTooltip=Semicolon separated list of file extensions to ignore (like ".java;.md")
33+
settings.maxFileLinesLabel=Maximum file lines
34+
settings.maxFileLinesTooltip=Skip files with more lines than this value (0 = unlimited)
3335
settings.submenu.colors=Colors
3436
settings.errorTextColor=Error text color:
3537
settings.errorLabelBorderColor=Error label border color:

0 commit comments

Comments
 (0)