Skip to content

Commit 2987e88

Browse files
committed
[INTERNAL] rework value separator handling
1 parent a7a304d commit 2987e88

File tree

49 files changed

+226
-256
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

49 files changed

+226
-256
lines changed

gradle.properties

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,5 +3,5 @@
33
# https://www.jetbrains.com/intellij-repository/snapshots
44

55
name='CSV Plugin'
6-
javaVersion=1.8
7-
javaTargetVersion=1.8
6+
javaVersion=8
7+
javaTargetVersion=8

src/main/java/net/seesharpsoft/intellij/plugins/csv/CsvHelper.java

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
import com.intellij.psi.util.PsiTreeUtil;
1919
import net.seesharpsoft.intellij.lang.FileParserDefinition;
2020
import net.seesharpsoft.intellij.plugins.csv.components.CsvFileAttributes;
21-
import net.seesharpsoft.intellij.plugins.csv.editor.CsvEditorSettings;
21+
import net.seesharpsoft.intellij.plugins.csv.settings.CsvEditorSettings;
2222
import net.seesharpsoft.intellij.plugins.csv.psi.CsvField;
2323
import net.seesharpsoft.intellij.plugins.csv.psi.CsvFile;
2424
import net.seesharpsoft.intellij.plugins.csv.psi.CsvRecord;
@@ -152,6 +152,14 @@ public static int getFieldEndOffset(PsiElement field) {
152152
return separator == null ? field.getContainingFile().getTextLength() : separator.getTextOffset();
153153
}
154154

155+
public static CsvEditorSettings.ValueSeparator getCurrentValueSeparator(CsvFile csvFile) {
156+
return getCurrentValueSeparator(csvFile.getContainingFile());
157+
}
158+
159+
public static CsvEditorSettings.ValueSeparator getCurrentValueSeparator(PsiFile psiFile) {
160+
return CsvFileAttributes.getInstance(psiFile.getProject()).getFileSeparator(psiFile);
161+
}
162+
155163
public static CsvEditorSettings.EscapeCharacter getCurrentEscapeCharacter(CsvFile csvFile) {
156164
return getCurrentEscapeCharacter(csvFile.getContainingFile());
157165
}
@@ -194,15 +202,19 @@ public static String unquoteCsvValue(String content, CsvEditorSettings.EscapeCha
194202
return result;
195203
}
196204

197-
private static boolean isQuotingRequired(String content, String separator) {
198-
return content != null && (content.contains(separator) || content.contains("\"") || content.contains("\n") || content.startsWith(" ") || content.endsWith(" "));
205+
private static boolean isQuotingRequired(String content, CsvEditorSettings.ValueSeparator valueSeparator) {
206+
return content != null &&
207+
(content.contains(valueSeparator.getCharacter()) || content.contains("\"") || content.contains("\n") || content.startsWith(" ") || content.endsWith(" "));
199208
}
200209

201-
public static String quoteCsvField(String content, CsvEditorSettings.EscapeCharacter escapeCharacter, String separator, boolean quotingEnforced) {
210+
public static String quoteCsvField(String content,
211+
CsvEditorSettings.EscapeCharacter escapeCharacter,
212+
CsvEditorSettings.ValueSeparator valueSeparator,
213+
boolean quotingEnforced) {
202214
if (content == null) {
203215
return "";
204216
}
205-
if (quotingEnforced || isQuotingRequired(content, separator)) {
217+
if (quotingEnforced || isQuotingRequired(content, valueSeparator)) {
206218
String result = content.replaceAll("\"", escapeCharacter.getCharacter() + "\"");
207219
return "\"" + result + "\"";
208220
}

src/main/java/net/seesharpsoft/intellij/plugins/csv/CsvLexer.flex

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
package net.seesharpsoft.intellij.plugins.csv;
22

3-
import com.intellij.lexer.FlexLexer;
43
import com.intellij.psi.tree.IElementType;
5-
import net.seesharpsoft.intellij.plugins.csv.editor.CsvEditorSettings;
4+
import net.seesharpsoft.intellij.plugins.csv.settings.CsvEditorSettings;
65
import net.seesharpsoft.intellij.plugins.csv.psi.CsvTypes;
6+
import com.intellij.lexer.FlexLexer;
77
import com.intellij.psi.TokenType;
88

99
import java.util.regex.Pattern;
@@ -16,17 +16,17 @@ import java.util.regex.Pattern;
1616
%function advance
1717
%type IElementType
1818
%{
19-
private String currentSeparator;
19+
private CsvEditorSettings.ValueSeparator myValueSeparator;
2020
private CsvEditorSettings.EscapeCharacter myEscapeCharacter;
2121

2222
private static final Pattern ESCAPE_TEXT_PATTERN = Pattern.compile("[,;|\\t\\r\\n]");
2323

2424
/**
2525
* Provide constructor that supports a Project as parameter.
2626
*/
27-
CsvLexer(java.io.Reader in, String separator, CsvEditorSettings.EscapeCharacter escapeCharacter) {
27+
CsvLexer(java.io.Reader in, CsvEditorSettings.ValueSeparator valueSeparator, CsvEditorSettings.EscapeCharacter escapeCharacter) {
2828
this(in);
29-
this.currentSeparator = separator;
29+
myValueSeparator = valueSeparator;
3030
myEscapeCharacter = escapeCharacter;
3131
}
3232
%}
@@ -82,7 +82,7 @@ WHITE_SPACE=[ \f]+
8282

8383
<YYINITIAL, AFTER_TEXT, UNESCAPED_TEXT> {COMMA}
8484
{
85-
if (currentSeparator.equals(yytext().toString())) {
85+
if (myValueSeparator.isValueSeparator(yytext().toString())) {
8686
yybegin(YYINITIAL);
8787
return CsvTypes.COMMA;
8888
}
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
package net.seesharpsoft.intellij.plugins.csv;
22

33
import com.intellij.lexer.FlexAdapter;
4-
import net.seesharpsoft.intellij.plugins.csv.editor.CsvEditorSettings;
4+
import net.seesharpsoft.intellij.plugins.csv.settings.CsvEditorSettings;
55

66
public class CsvLexerAdapter extends FlexAdapter {
7-
public CsvLexerAdapter(String separator, CsvEditorSettings.EscapeCharacter escapeCharacter) {
7+
public CsvLexerAdapter(CsvEditorSettings.ValueSeparator separator, CsvEditorSettings.EscapeCharacter escapeCharacter) {
88
super(new CsvLexer(null, separator, escapeCharacter));
99
}
1010
}

src/main/java/net/seesharpsoft/intellij/plugins/csv/CsvParserDefinition.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ public PsiElement createElement(ASTNode node) {
7777

7878
@Override
7979
public Lexer createLexer(@NotNull PsiFile file) {
80-
return new CsvLexerAdapter(CsvCodeStyleSettings.getCurrentSeparator(file), CsvFileAttributes.getInstance(file.getProject()).getEscapeCharacter(file));
80+
return new CsvLexerAdapter(CsvHelper.getCurrentValueSeparator(file), CsvFileAttributes.getInstance(file.getProject()).getEscapeCharacter(file));
8181
}
8282

8383
@Override

src/main/java/net/seesharpsoft/intellij/plugins/csv/CsvParserUtil.java

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,7 @@
33
import com.intellij.lang.PsiBuilder;
44
import com.intellij.psi.PsiFile;
55
import com.intellij.psi.impl.source.resolve.FileContextUtil;
6-
import net.seesharpsoft.intellij.plugins.csv.components.CsvFileAttributes;
76
import net.seesharpsoft.intellij.plugins.csv.psi.CsvTypes;
8-
import net.seesharpsoft.intellij.plugins.csv.settings.CsvCodeStyleSettings;
97

108
import java.util.regex.Pattern;
119

@@ -23,9 +21,7 @@ public static boolean separator(PsiBuilder builder, int tokenType) {
2321
if (psiFile == null) {
2422
throw new UnsupportedOperationException("parser requires containing file");
2523
}
26-
return builder.getTokenText().equals(
27-
CsvCodeStyleSettings.getCurrentSeparator(psiFile)
28-
);
24+
return CsvHelper.getCurrentValueSeparator(psiFile).isValueSeparator(builder.getTokenText());
2925
}
3026
return false;
3127
}
@@ -37,7 +33,7 @@ public static boolean escapeCharacter(PsiBuilder builder, int tokenType) {
3733
throw new UnsupportedOperationException("parser requires containing file");
3834
}
3935
String tokenText = builder.getTokenText();
40-
return CsvFileAttributes.getInstance(psiFile.getProject()).getEscapeCharacter(psiFile).isEscapedQuote(tokenText) ||
36+
return CsvHelper.getCurrentEscapeCharacter(psiFile).isEscapedQuote(tokenText) ||
4137
ESCAPE_TEXT_PATTERN.matcher(tokenText).matches();
4238
}
4339
return false;
Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package net.seesharpsoft.intellij.plugins.csv;
22

3+
import net.seesharpsoft.intellij.plugins.csv.settings.CsvEditorSettings;
4+
35
public interface CsvSeparatorHolder {
4-
String getSeparator();
6+
CsvEditorSettings.ValueSeparator getSeparator();
57
}

src/main/java/net/seesharpsoft/intellij/plugins/csv/actions/CsvChangeEscapeCharacterAction.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
import com.intellij.psi.PsiFile;
99
import com.intellij.util.FileContentUtilCore;
1010
import net.seesharpsoft.intellij.plugins.csv.components.CsvFileAttributes;
11-
import net.seesharpsoft.intellij.plugins.csv.editor.CsvEditorSettings;
11+
import net.seesharpsoft.intellij.plugins.csv.settings.CsvEditorSettings;
1212
import org.jetbrains.annotations.NotNull;
1313

1414
public class CsvChangeEscapeCharacterAction extends ToggleAction {

src/main/java/net/seesharpsoft/intellij/plugins/csv/actions/CsvChangeEscapeCharacterActionGroup.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
import com.intellij.psi.PsiFile;
99
import net.seesharpsoft.intellij.plugins.csv.CsvLanguage;
1010
import net.seesharpsoft.intellij.plugins.csv.components.CsvFileAttributes;
11-
import net.seesharpsoft.intellij.plugins.csv.editor.CsvEditorSettings;
11+
import net.seesharpsoft.intellij.plugins.csv.settings.CsvEditorSettings;
1212
import org.jetbrains.annotations.NotNull;
1313
import org.jetbrains.annotations.Nullable;
1414

src/main/java/net/seesharpsoft/intellij/plugins/csv/actions/CsvChangeSeparatorAction.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -12,14 +12,14 @@
1212
import net.seesharpsoft.intellij.plugins.csv.CsvLanguage;
1313
import net.seesharpsoft.intellij.plugins.csv.CsvSeparatorHolder;
1414
import net.seesharpsoft.intellij.plugins.csv.components.CsvFileAttributes;
15-
import net.seesharpsoft.intellij.plugins.csv.settings.CsvCodeStyleSettings;
15+
import net.seesharpsoft.intellij.plugins.csv.settings.CsvEditorSettings;
1616
import org.jetbrains.annotations.NotNull;
1717

1818
public class CsvChangeSeparatorAction extends ToggleAction {
19-
private String mySeparator;
19+
private CsvEditorSettings.ValueSeparator mySeparator;
2020

21-
CsvChangeSeparatorAction(String separator, String mySeparatorTextArg) {
22-
super(mySeparatorTextArg);
21+
CsvChangeSeparatorAction(CsvEditorSettings.ValueSeparator separator) {
22+
super(separator.getDisplay());
2323
mySeparator = separator;
2424
}
2525

@@ -30,7 +30,7 @@ public boolean isSelected(@NotNull AnActionEvent anActionEvent) {
3030
return false;
3131
}
3232
CsvFileAttributes csvFileAttributes = ServiceManager.getService(psiFile.getProject(), CsvFileAttributes.class);
33-
return csvFileAttributes.getFileSeparator(psiFile) != null && CsvCodeStyleSettings.getCurrentSeparator(anActionEvent.getProject(), psiFile).equals(mySeparator);
33+
return csvFileAttributes.getFileSeparator(psiFile) != null && csvFileAttributes.getFileSeparator(psiFile).equals(mySeparator);
3434
}
3535

3636
@Override

0 commit comments

Comments
 (0)