Skip to content

Commit 2628112

Browse files
committed
[INTERNAL] Column highlighting only happens on selection
1 parent c368a3f commit 2628112

File tree

11 files changed

+59
-26
lines changed

11 files changed

+59
-26
lines changed

src/main/java/net/seesharpsoft/intellij/plugins/csv/highlighter/CsvHighlightUsagesHandler.java

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

33
import com.intellij.codeInsight.highlighting.HighlightUsagesHandlerBase;
4-
import com.intellij.lang.injection.InjectedLanguageManager;
54
import com.intellij.openapi.editor.Caret;
65
import com.intellij.openapi.editor.Editor;
76
import com.intellij.openapi.util.TextRange;
@@ -28,6 +27,10 @@ protected CsvFile getCsvFile() {
2827

2928
@Override
3029
public List<PsiElement> getTargets() {
30+
if (!this.myEditor.getSelectionModel().hasSelection()) {
31+
return Collections.emptyList();
32+
}
33+
3134
Caret primaryCaret = this.myEditor.getCaretModel().getPrimaryCaret();
3235
PsiElement myFocusedElement = this.myFile.getViewProvider().findElementAt(primaryCaret.getOffset());
3336
if (myFocusedElement == null) {
@@ -39,8 +42,7 @@ public List<PsiElement> getTargets() {
3942
return Collections.emptyList();
4043
}
4144

42-
CsvColumnInfo<PsiElement> columnInfo = getCsvFile().getMyColumnInfoMap().getColumnInfo(myFocusedElement);
43-
return columnInfo == null ? Collections.emptyList() : Collections.unmodifiableList(columnInfo.getElements());
45+
return Collections.singletonList(myFocusedElement);
4446
}
4547

4648
@Override
@@ -51,19 +53,21 @@ protected void selectTargets(List<PsiElement> list, Consumer<List<PsiElement>> c
5153
@Override
5254
public void computeUsages(List<PsiElement> list) {
5355
CsvColumnInfoMap<PsiElement> columnInfoMap = getCsvFile().getMyColumnInfoMap();
54-
list.forEach(element -> {
55-
if (element != null && !element.getText().isEmpty()) { this.addOccurrence(columnInfoMap.getRowInfo(element)); }
56-
});
56+
for (PsiElement listElement : list) {
57+
CsvColumnInfo<PsiElement> csvColumnInfo = getCsvFile().getMyColumnInfoMap().getColumnInfo(listElement);
58+
if (csvColumnInfo == null) {
59+
continue;
60+
}
61+
csvColumnInfo.getElements().forEach(element -> this.addOccurrence(columnInfoMap.getRowInfo(element)));
62+
}
5763
}
5864

5965
protected void addOccurrence(CsvColumnInfo<PsiElement>.RowInfo rowInfo) {
6066
if (rowInfo == null) {
6167
return;
6268
}
6369
TextRange range = rowInfo.getTextRange();
64-
if (range != null) {
65-
PsiElement element = rowInfo.getElement();
66-
range = InjectedLanguageManager.getInstance(element.getProject()).injectedToHost(element, range);
70+
if (range != null && range.getLength() > 0) {
6771
this.myReadUsages.add(range);
6872
}
6973
}

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@
3939
<change-notes><![CDATA[
4040
<b>NEW:</b> Custom 'Wrapping' settings<br>
4141
<b>NEW:</b> Column highlighter takes whitespaces into account<br>
42+
<b>CHANGE:</b> Column highlighting only happens on selection<br>
4243
<b>FIX:</b> CSV column info tooltip trumps spellchecker tooltip (but keeps the visualization of a typo)<br>
4344
<b>FIX:</b> Show tooltip even when caret is at the last position withing the CSV file<br>
4445
<b>FIX:</b> Support for suppressing inspections not relevant for CSV (e.g. 'Problematic Whitespace')<br>
Lines changed: 35 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11
package net.seesharpsoft.intellij.plugins.csv.highlighter;
22

3+
import com.intellij.codeInsight.highlighting.HighlightUsagesHandler;
4+
import com.intellij.codeInsight.highlighting.HighlightUsagesHandlerBase;
5+
import com.intellij.featureStatistics.FeatureUsageTracker;
6+
import com.intellij.openapi.editor.Editor;
37
import com.intellij.openapi.editor.markup.RangeHighlighter;
48
import com.intellij.openapi.util.TextRange;
59
import com.intellij.testFramework.fixtures.LightCodeInsightFixtureTestCase;
@@ -12,59 +16,80 @@ protected String getTestDataPath() {
1216
}
1317

1418
private void assertHighlightedText(RangeHighlighter rangeHighlighter, String text) {
15-
assertEquals(text,rangeHighlighter.getDocument().getText(TextRange.create(rangeHighlighter.getStartOffset(), rangeHighlighter.getEndOffset())));
19+
assertEquals(text, rangeHighlighter.getDocument().getText(TextRange.create(rangeHighlighter.getStartOffset(), rangeHighlighter.getEndOffset())));
20+
}
21+
22+
private RangeHighlighter[] testHighlightUsages(String... fileNames) {
23+
myFixture.configureByFiles(fileNames);
24+
25+
HighlightUsagesHandlerBase handler = HighlightUsagesHandler.createCustomHandler(myFixture.getEditor(), myFixture.getFile());
26+
27+
String featureId = handler.getFeatureId();
28+
if (featureId != null) {
29+
FeatureUsageTracker.getInstance().triggerFeatureUsed(featureId);
30+
}
31+
32+
handler.highlightUsages();
33+
34+
Editor editor = this.getEditor();
35+
return editor.getMarkupModel().getAllHighlighters();
1636
}
1737

1838
public void testHighlightUsages01() {
19-
RangeHighlighter[] rangeHighlighters = myFixture.testHighlightUsages("HighlightUsagesTestData01.csv");
39+
RangeHighlighter[] rangeHighlighters = testHighlightUsages("HighlightUsagesTestData01.csv");
2040

2141
assertSize(2, rangeHighlighters);
2242
assertHighlightedText(rangeHighlighters[0], " Header 2");
2343
assertHighlightedText(rangeHighlighters[1], " Value 2");
2444
}
2545

2646
public void testHighlightUsages02() {
27-
RangeHighlighter[] rangeHighlighters = myFixture.testHighlightUsages("HighlightUsagesTestData02.csv");
47+
RangeHighlighter[] rangeHighlighters = testHighlightUsages("HighlightUsagesTestData02.csv");
2848

2949
assertSize(2, rangeHighlighters);
3050
assertHighlightedText(rangeHighlighters[0], " Header 2");
3151
assertHighlightedText(rangeHighlighters[1], " Value 2");
3252
}
3353

3454
public void testHighlightUsages03() {
35-
RangeHighlighter[] rangeHighlighters = myFixture.testHighlightUsages("HighlightUsagesTestData03.csv");
55+
RangeHighlighter[] rangeHighlighters = testHighlightUsages("HighlightUsagesTestData03.csv");
3656

3757
assertSize(2, rangeHighlighters);
3858
assertHighlightedText(rangeHighlighters[0], "Header 1");
3959
assertHighlightedText(rangeHighlighters[1], "Value 1");
4060
}
4161

4262
public void testHighlightUsages04() {
43-
RangeHighlighter[] rangeHighlighters = myFixture.testHighlightUsages("HighlightUsagesTestData04.csv");
63+
RangeHighlighter[] rangeHighlighters = testHighlightUsages("HighlightUsagesTestData04.csv");
4464

4565
assertSize(1, rangeHighlighters);
4666
assertHighlightedText(rangeHighlighters[0], " Value 3");
4767
}
4868

4969
public void testHighlightUsages05() {
50-
RangeHighlighter[] rangeHighlighters = myFixture.testHighlightUsages("HighlightUsagesTestData05.csv");
70+
RangeHighlighter[] rangeHighlighters = testHighlightUsages("HighlightUsagesTestData05.csv");
5171

5272
assertSize(2, rangeHighlighters);
5373
assertHighlightedText(rangeHighlighters[0], " Header 2");
5474
assertHighlightedText(rangeHighlighters[1], " Value 2");
5575
}
5676

5777
public void testHighlightUsages06() {
58-
RangeHighlighter[] rangeHighlighters = myFixture.testHighlightUsages("HighlightUsagesTestData06.csv");
78+
RangeHighlighter[] rangeHighlighters = testHighlightUsages("HighlightUsagesTestData06.csv");
5979

6080
assertSize(1, rangeHighlighters);
6181
assertHighlightedText(rangeHighlighters[0], " Value 3");
6282
}
6383

6484
public void testHighlightUsages07() {
65-
RangeHighlighter[] rangeHighlighters = myFixture.testHighlightUsages("HighlightUsagesTestData07.csv");
85+
RangeHighlighter[] rangeHighlighters = testHighlightUsages("HighlightUsagesTestData07.csv");
6686

67-
assertSize(1, rangeHighlighters);
68-
assertHighlightedText(rangeHighlighters[0], " Header 2");
87+
assertSize(0, rangeHighlighters);
88+
}
89+
90+
public void testHighlightUsages08() {
91+
RangeHighlighter[] rangeHighlighters = testHighlightUsages("HighlightUsagesTestData08.csv");
92+
93+
assertSize(0, rangeHighlighters);
6994
}
7095
}
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
11
Header 1, Header 2
2-
Value 1, Value<caret> 2, Value 3
2+
Value 1, <selection>Value<caret></selection> 2, Value 3
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
1-
Header 1, Header 2<caret>
1+
Header 1, Header <selection>2<caret></selection>
22
Value 1, Value 2, Value 3
Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,3 @@
11
Header 1, Header 2
2-
Value 1<caret>, Value 2, Value 3
2+
,
3+
<selection>Value 1<caret></selection>, Value 2, Value 3
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
11
Header 1, Header 2
2-
Value 1, Value 2, Value <caret>3
2+
Value 1, Value 2, Value<selection> <caret></selection>3
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
Header 1, Header 2
22
Value 1, Value 2, Value 3
3-
,<caret>,
3+
<selection>,<caret></selection>,
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
11
Header 1, Header 2
2-
Value 1, Value 2, Value 3<caret>
2+
Value 1, Value 2, Value <selection>3<caret></selection>
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
11
Header 1, Header 2
2-
Value 1,<caret>
2+
Value 1,<selection><caret></selection>

0 commit comments

Comments
 (0)