Skip to content

Commit 4b7ccd9

Browse files
authored
Merge pull request #190 from SeeSharpSoft/fb_strip_trailing_spaces_filter_factory
[FEATURE] provide option to keep trailing spaces for CSV files
2 parents 0266222 + a39d1cc commit 4b7ccd9

File tree

5 files changed

+53
-2
lines changed

5 files changed

+53
-2
lines changed

src/main/java/net/seesharpsoft/intellij/plugins/csv/settings/CsvEditorSettings.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@ public static final class OptionSet {
5656
public boolean FILE_END_LINE_BREAK;
5757
public CsvEscapeCharacter DEFAULT_ESCAPE_CHARACTER = ESCAPE_CHARACTER_DEFAULT;
5858
public CsvValueSeparator DEFAULT_VALUE_SEPARATOR = VALUE_SEPARATOR_DEFAULT;
59+
public boolean KEEP_TRAILING_SPACES = false;
5960

6061
public OptionSet() {
6162
EditorSettingsExternalizable editorSettingsExternalizable = EditorSettingsExternalizable.getInstance();
@@ -260,4 +261,12 @@ public void setDefaultValueSeparator(CsvValueSeparator defaultValueSeparator) {
260261
public CsvValueSeparator getDefaultValueSeparator() {
261262
return getState().DEFAULT_VALUE_SEPARATOR;
262263
}
264+
265+
public void setKeepTrailingSpaces(boolean keepTrailingSpaces) {
266+
getState().KEEP_TRAILING_SPACES = keepTrailingSpaces;
267+
}
268+
269+
public boolean getKeepTrailingSpaces() {
270+
return getState().KEEP_TRAILING_SPACES;
271+
}
263272
}

src/main/java/net/seesharpsoft/intellij/plugins/csv/settings/CsvEditorSettingsProvider.form

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121
<properties/>
2222
<border type="line" title="Text Editor"/>
2323
<children>
24-
<grid id="d2422" layout-manager="GridLayoutManager" row-count="3" column-count="1" same-size-horizontally="false" same-size-vertically="false" hgap="-1" vgap="-1">
24+
<grid id="d2422" layout-manager="GridLayoutManager" row-count="4" column-count="1" same-size-horizontally="false" same-size-vertically="false" hgap="-1" vgap="-1">
2525
<margin top="10" left="10" bottom="10" right="10"/>
2626
<constraints>
2727
<grid row="0" column="0" row-span="1" col-span="1" vsize-policy="3" hsize-policy="3" anchor="0" fill="3" indent="0" use-parent-layout="false"/>
@@ -51,6 +51,14 @@
5151
</constraints>
5252
<properties/>
5353
</component>
54+
<component id="8ed01" class="javax.swing.JCheckBox" binding="cbKeepTrailingWhitespaces">
55+
<constraints>
56+
<grid row="3" column="0" row-span="1" col-span="1" vsize-policy="0" hsize-policy="3" anchor="8" fill="0" indent="0" use-parent-layout="false"/>
57+
</constraints>
58+
<properties>
59+
<text value="Keep trailing white spaces (if unchecked, general editor setting is applied)"/>
60+
</properties>
61+
</component>
5462
</children>
5563
</grid>
5664
<grid id="6ba47" layout-manager="GridLayoutManager" row-count="2" column-count="2" same-size-horizontally="false" same-size-vertically="false" hgap="-1" vgap="-1">

src/main/java/net/seesharpsoft/intellij/plugins/csv/settings/CsvEditorSettingsProvider.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ public class CsvEditorSettingsProvider implements SearchableConfigurable {
4141
private JCheckBox cbAdjustColumnWidthOnOpen;
4242
private JComboBox comboEscapeCharacter;
4343
private JComboBox comboValueSeparator;
44+
private JCheckBox cbKeepTrailingWhitespaces;
4445

4546
@NotNull
4647
@Override
@@ -90,7 +91,8 @@ public boolean isModified() {
9091
!tfDefaultColumnWidth.getValue().equals(csvEditorSettings.getTableDefaultColumnWidth()) ||
9192
isModified(cbAdjustColumnWidthOnOpen, csvEditorSettings.isTableAutoColumnWidthOnOpen()) ||
9293
!Objects.equals(comboEscapeCharacter.getSelectedItem(), csvEditorSettings.getDefaultEscapeCharacter()) ||
93-
!Objects.equals(comboValueSeparator.getSelectedItem(), csvEditorSettings.getDefaultValueSeparator());
94+
!Objects.equals(comboValueSeparator.getSelectedItem(), csvEditorSettings.getDefaultValueSeparator()) ||
95+
isModified(cbKeepTrailingWhitespaces, csvEditorSettings.getKeepTrailingSpaces());
9496
}
9597

9698
@Override
@@ -114,6 +116,7 @@ public void reset() {
114116
cbAdjustColumnWidthOnOpen.setSelected(csvEditorSettings.isTableAutoColumnWidthOnOpen());
115117
comboEscapeCharacter.setSelectedItem(csvEditorSettings.getDefaultEscapeCharacter());
116118
comboValueSeparator.setSelectedItem(csvEditorSettings.getDefaultValueSeparator());
119+
cbKeepTrailingWhitespaces.setSelected(csvEditorSettings.getKeepTrailingSpaces());
117120
}
118121

119122
@Override
@@ -137,6 +140,7 @@ public void apply() throws ConfigurationException {
137140
csvEditorSettings.setTableAutoColumnWidthOnOpen(cbAdjustColumnWidthOnOpen.isSelected());
138141
csvEditorSettings.setDefaultEscapeCharacter((CsvEscapeCharacter)comboEscapeCharacter.getSelectedItem());
139142
csvEditorSettings.setDefaultValueSeparator((CsvValueSeparator)comboValueSeparator.getSelectedItem());
143+
csvEditorSettings.setKeepTrailingSpaces(cbKeepTrailingWhitespaces.isSelected());
140144
}
141145

142146
protected void createUIComponents() {
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
package net.seesharpsoft.intellij.plugins.csv.settings;
2+
3+
import com.intellij.openapi.editor.Document;
4+
import com.intellij.openapi.editor.StripTrailingSpacesFilter;
5+
import com.intellij.openapi.editor.StripTrailingSpacesFilterFactory;
6+
import com.intellij.openapi.fileEditor.FileDocumentManager;
7+
import com.intellij.openapi.fileTypes.LanguageFileType;
8+
import com.intellij.openapi.project.Project;
9+
import com.intellij.openapi.vfs.VirtualFile;
10+
import net.seesharpsoft.intellij.plugins.csv.CsvLanguage;
11+
import org.jetbrains.annotations.NotNull;
12+
import org.jetbrains.annotations.Nullable;
13+
14+
public class CsvStripTrailingSpacesFilterFactory extends StripTrailingSpacesFilterFactory {
15+
@NotNull
16+
@Override
17+
public StripTrailingSpacesFilter createFilter(@Nullable Project project, @NotNull Document document) {
18+
VirtualFile virtualFile = FileDocumentManager.getInstance().getFile(document);
19+
if (project != null &&
20+
virtualFile != null &&
21+
virtualFile.getFileType() instanceof LanguageFileType &&
22+
((LanguageFileType) virtualFile.getFileType()).getLanguage().isKindOf(CsvLanguage.INSTANCE) &&
23+
CsvEditorSettings.getInstance().getKeepTrailingSpaces()) {
24+
return StripTrailingSpacesFilter.NOT_ALLOWED;
25+
}
26+
return StripTrailingSpacesFilter.ALL_LINES;
27+
}
28+
}

src/main/resources/META-INF/plugin.xml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -151,6 +151,8 @@ FIX: NullPointerException thrown when trying to view CSV as table #185
151151
<category>CSV</category>
152152
<descriptionDirectoryName>UnquoteAll</descriptionDirectoryName>
153153
</intentionAction>
154+
155+
<stripTrailingSpacesFilterFactory implementation="net.seesharpsoft.intellij.plugins.csv.settings.CsvStripTrailingSpacesFilterFactory" />
154156
</extensions>
155157

156158
<actions>

0 commit comments

Comments
 (0)