Skip to content

Commit bf16e50

Browse files
authored
Merge pull request #86 from 0verEngineer/feature/max-problems-per-line
Max problems per line feature
2 parents b18265a + e9c9d5e commit bf16e50

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 JFormattedTextField maxFileLines;
6970
private final JBCheckBox fillProblemLabels = new JBCheckBox(SettingsBundle.message("settings.fillProblemLabels"));
7071
private final JBCheckBox boldProblemLabels = new JBCheckBox(SettingsBundle.message("settings.boldProblemLabels"));
@@ -128,6 +129,9 @@ public SettingsComponent() {
128129
inlayFontSizeDeltaText = new JFormattedTextField(numberFormatter);
129130
inlayFontSizeDeltaText.setText(Integer.toString(settingsState.getInlayFontSizeDelta()));
130131

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

@@ -178,6 +182,8 @@ public SettingsComponent() {
178182
.addTooltip(SettingsBundle.message("settings.problemFilterListTooltip"))
179183
.addLabeledComponent(new JLabel(SettingsBundle.message("settings.fileExtensionBlacklistLabel")), fileExtensionBlacklist)
180184
.addTooltip(SettingsBundle.message("settings.fileExtensionBlacklistTooltip"))
185+
.addLabeledComponent(new JBLabel(SettingsBundle.message("settings.maxProblemsPerLineLabel")), maxProblemsPerLine)
186+
.addTooltip(SettingsBundle.message("settings.maxProblemsPerLineTooltip"))
181187
.addLabeledComponent(new JLabel(SettingsBundle.message("settings.maxFileLinesLabel")), maxFileLines)
182188
.addTooltip(SettingsBundle.message("settings.maxFileLinesTooltip"))
183189
.addSeparator()
@@ -616,6 +622,19 @@ public void setManualScannerDelay(int delay) {
616622
manualScannerDelay.setText(Integer.toString(Math.max(10, delay)));
617623
}
618624

625+
public int getMaxProblemsPerLine() {
626+
try {
627+
return Math.max(Integer.parseInt(maxProblemsPerLine.getText()), 0);
628+
}
629+
catch (NumberFormatException e) {
630+
return 0;
631+
}
632+
}
633+
634+
public void setMaxProblemsPerLine(int max) {
635+
maxProblemsPerLine.setText(Integer.toString(Math.max(0, max)));
636+
}
637+
619638
public int getMaxFileLines() {
620639
try {
621640
return Math.max(Integer.parseInt(maxFileLines.getText()), 0);

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() &&
@@ -139,6 +140,7 @@ public void apply() {
139140
state.setRoundedCornerBoxes(settingsComponent.isRoundedCornerBoxes());
140141
state.setUseEditorFont(settingsComponent.isUseEditorFont());
141142
state.setShowOnlyHighestSeverityPerLine(settingsComponent.isShowOnlyHighestSeverityPerLine());
143+
state.setMaxProblemsPerLine(settingsComponent.getMaxProblemsPerLine());
142144
state.setEnableHtmlStripping(settingsComponent.isEnableHtmlStripping());
143145
state.setEnableXmlUnescaping(settingsComponent.isEnableXmlUnescaping());
144146
state.setInlayFontSizeDelta(settingsComponent.getInlayFontSizeDelta());
@@ -210,6 +212,7 @@ public void reset() {
210212
settingsComponent.setRoundedCornerBoxes(state.isRoundedCornerBoxes());
211213
settingsComponent.setUseEditorFont(state.isUseEditorFont());
212214
settingsComponent.setShowOnlyHighestSeverityPerLine(state.isShowOnlyHighestSeverityPerLine());
215+
settingsComponent.setMaxProblemsPerLine(state.getMaxProblemsPerLine());
213216
settingsComponent.setEnableHtmlStripping(state.isEnableHtmlStripping());
214217
settingsComponent.setEnableXmlUnescaping(state.isEnableXmlUnescaping());
215218
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
@@ -107,6 +107,7 @@ public class SettingsState implements PersistentStateComponent<SettingsState> {
107107
private boolean showOnlyHighestSeverityPerLine = false;
108108
private boolean enableHtmlStripping = true;
109109
private boolean enableXmlUnescaping = true;
110+
private int maxProblemsPerLine = 20;
110111

111112
// migration booleans
112113
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
@@ -53,5 +53,7 @@ settings.additionalSeveritiesInfoDesc=Semicolon separated list of additional inf
5353
settings.forceProblemsInOneLine=Force problems in the same line even if they are too long to fit
5454
settings.useEditorFont=Use editor font instead of tooltip font
5555
settings.showOnlyHighestPerLine=Show only the problem with the highest severity per line
56+
settings.maxProblemsPerLineLabel=Max problems per line (0 = unlimited)
57+
settings.maxProblemsPerLineTooltip=Limits the number of problems shown per line. Set to 0 for unlimited.
5658
settings.enableHtmlStripping=Enable stripping of HTML in the messages
5759
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
@@ -53,5 +53,7 @@ settings.additionalSeveritiesInfoDesc=\u9644\u52A0\u4FE1\u606F\u4E25\u91CD\u6027
5353
settings.forceProblemsInOneLine=\u5F3A\u5236\u5728\u540C\u4E00\u884C\u663E\u793A\u95EE\u9898\uFF0C\u5373\u4F7F\u5B83\u4EEC\u592A\u957F\u800C\u65E0\u6CD5\u9002\u5E94
5454
settings.useEditorFont=\u4F7F\u7528\u7F16\u8F91\u5668\u5B57\u4F53\u800C\u4E0D\u662F\u63D0\u793A\u5B57\u4F53
5555
settings.showOnlyHighestPerLine=\u4ec5\u663e\u793a\u6bcf\u884c\u4e2d\u6700\u4e25\u91cd\u7684\u95ee\u9898
56+
settings.maxProblemsPerLineLabel=Max problems per line (0 = unlimited)
57+
settings.maxProblemsPerLineTooltip=Limits the number of problems shown per line. Set to 0 for unlimited.
5658
settings.enableHtmlStripping=Enable stripping of HTML in the messages
5759
settings.enableXmlUnescaping=Enable unescaping of XML in the messages

0 commit comments

Comments
 (0)