Skip to content

Commit 8af6e21

Browse files
committed
Max problems per line feature
1 parent 9a6304e commit 8af6e21

File tree

6 files changed

+33
-0
lines changed

6 files changed

+33
-0
lines changed

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

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,12 @@ public void addProblem(InlineProblem problem) {
6464
removeProblem(p);
6565
});
6666

67+
// Limit problems per line
68+
int maxProblemsPerLine = settingsState.getMaxProblemsPerLine();
69+
if (maxProblemsPerLine > 0 && problemsInLine.size() > maxProblemsPerLine) {
70+
problemsInLine.subList(maxProblemsPerLine, problemsInLine.size()).clear();
71+
}
72+
6773
/* This only works when using a method reference, if we move the code from the addProblemPrivate func into a lambda
6874
* it does not work like expected, that is because there are differences in the evaluation and the way it is called */
6975
problemsInLine.forEach(this::addProblemPrivate);

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

Lines changed: 19 additions & 0 deletions
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 maxProblemsPerLine;
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"));
@@ -127,6 +128,9 @@ public SettingsComponent() {
127128
inlayFontSizeDeltaText = new JFormattedTextField(numberFormatter);
128129
inlayFontSizeDeltaText.setText(Integer.toString(settingsState.getInlayFontSizeDelta()));
129130

131+
maxProblemsPerLine = new JFormattedTextField(numberFormatter);
132+
maxProblemsPerLine.setText(Integer.toString(settingsState.getMaxProblemsPerLine()));
133+
130134
manualScannerDelay = new JFormattedTextField(numberFormatter);
131135
manualScannerDelay.setText(Integer.toString(settingsState.getManualScannerDelay()));
132136

@@ -174,6 +178,8 @@ public SettingsComponent() {
174178
.addTooltip(SettingsBundle.message("settings.problemFilterListTooltip"))
175179
.addLabeledComponent(new JLabel(SettingsBundle.message("settings.fileExtensionBlacklistLabel")), fileExtensionBlacklist)
176180
.addTooltip(SettingsBundle.message("settings.fileExtensionBlaclistTooltip"))
181+
.addLabeledComponent(new JBLabel(SettingsBundle.message("settings.maxProblemsPerLineLabel")), maxProblemsPerLine)
182+
.addTooltip(SettingsBundle.message("settings.maxProblemsPerLineTooltip"))
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 getMaxProblemsPerLine() {
620+
try {
621+
return Math.max(Integer.parseInt(maxProblemsPerLine.getText()), 0);
622+
}
623+
catch (NumberFormatException e) {
624+
return 0;
625+
}
626+
}
627+
628+
public void setMaxProblemsPerLine(int max) {
629+
maxProblemsPerLine.setText(Integer.toString(Math.max(0, max)));
630+
}
612631
}

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ public boolean isModified() {
4646
state.isRoundedCornerBoxes() == settingsComponent.isRoundedCornerBoxes() &&
4747
state.isUseEditorFont() == settingsComponent.isUseEditorFont() &&
4848
state.isShowOnlyHighestSeverityPerLine() == settingsComponent.isShowOnlyHighestSeverityPerLine() &&
49+
state.getMaxProblemsPerLine() == settingsComponent.getMaxProblemsPerLine() &&
4950
state.isEnableHtmlStripping() == settingsComponent.isEnableHtmlStripping() &&
5051
state.isEnableXmlUnescaping() == settingsComponent.isEnableXmlUnescaping() &&
5152
state.getInlayFontSizeDelta() == settingsComponent.getInlayFontSizeDelta() &&
@@ -137,6 +138,7 @@ public void apply() {
137138
state.setRoundedCornerBoxes(settingsComponent.isRoundedCornerBoxes());
138139
state.setUseEditorFont(settingsComponent.isUseEditorFont());
139140
state.setShowOnlyHighestSeverityPerLine(settingsComponent.isShowOnlyHighestSeverityPerLine());
141+
state.setMaxProblemsPerLine(settingsComponent.getMaxProblemsPerLine());
140142
state.setEnableHtmlStripping(settingsComponent.isEnableHtmlStripping());
141143
state.setEnableXmlUnescaping(settingsComponent.isEnableXmlUnescaping());
142144
state.setInlayFontSizeDelta(settingsComponent.getInlayFontSizeDelta());
@@ -207,6 +209,7 @@ public void reset() {
207209
settingsComponent.setRoundedCornerBoxes(state.isRoundedCornerBoxes());
208210
settingsComponent.setUseEditorFont(state.isUseEditorFont());
209211
settingsComponent.setShowOnlyHighestSeverityPerLine(state.isShowOnlyHighestSeverityPerLine());
212+
settingsComponent.setMaxProblemsPerLine(state.getMaxProblemsPerLine());
210213
settingsComponent.setEnableHtmlStripping(state.isEnableHtmlStripping());
211214
settingsComponent.setEnableXmlUnescaping(state.isEnableXmlUnescaping());
212215
settingsComponent.setInlayFontSizeDelta(state.getInlayFontSizeDelta());

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,7 @@ public class SettingsState implements PersistentStateComponent<SettingsState> {
106106
private boolean showOnlyHighestSeverityPerLine = false;
107107
private boolean enableHtmlStripping = true;
108108
private boolean enableXmlUnescaping = true;
109+
private int maxProblemsPerLine = 20;
109110

110111
// migration booleans
111112
private boolean highlightProblemListenerDeprecateMigrationDone = false;

src/main/resources/messages/SettingsBundle_en.properties

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,5 +51,7 @@ settings.additionalSeveritiesInfoDesc=Semicolon separated list of additional inf
5151
settings.forceProblemsInOneLine=Force problems in the same line even if they are too long to fit
5252
settings.useEditorFont=Use editor font instead of tooltip font
5353
settings.showOnlyHighestPerLine=Show only the problem with the highest severity per line
54+
settings.maxProblemsPerLineLabel=Max problems per line (0 = unlimited)
55+
settings.maxProblemsPerLineTooltip=Limits the number of problems shown per line. Set to 0 for unlimited.
5456
settings.enableHtmlStripping=Enable stripping of HTML in the messages
5557
settings.enableXmlUnescaping=Enable unescaping of XML in the messages

src/main/resources/messages/SettingsBundle_zh_CN.properties

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,5 +49,7 @@ settings.additionalSeveritiesInfoDesc=\u9644\u52A0\u4FE1\u606F\u4E25\u91CD\u6027
4949
settings.forceProblemsInOneLine=\u5F3A\u5236\u5728\u540C\u4E00\u884C\u663E\u793A\u95EE\u9898\uFF0C\u5373\u4F7F\u5B83\u4EEC\u592A\u957F\u800C\u65E0\u6CD5\u9002\u5E94
5050
settings.useEditorFont=\u4F7F\u7528\u7F16\u8F91\u5668\u5B57\u4F53\u800C\u4E0D\u662F\u63D0\u793A\u5B57\u4F53
5151
settings.showOnlyHighestPerLine=\u4ec5\u663e\u793a\u6bcf\u884c\u4e2d\u6700\u4e25\u91cd\u7684\u95ee\u9898
52+
settings.maxProblemsPerLineLabel=Max problems per line (0 = unlimited)
53+
settings.maxProblemsPerLineTooltip=Limits the number of problems shown per line. Set to 0 for unlimited.
5254
settings.enableHtmlStripping=Enable stripping of HTML in the messages
5355
settings.enableXmlUnescaping=Enable unescaping of XML in the messages

0 commit comments

Comments
 (0)