Skip to content

Commit ea03371

Browse files
committed
Embedded code accounts for concatenated strings and escape chars
1 parent 3957aac commit ea03371

File tree

55 files changed

+2272
-1595
lines changed

Some content is hidden

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

55 files changed

+2272
-1595
lines changed

headless-services/commons/commons-language-server/src/main/java/org/springframework/ide/vscode/commons/languageserver/semantic/tokens/SemanticTokenData.java

Lines changed: 21 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -13,27 +13,33 @@
1313
import java.util.Arrays;
1414
import java.util.Objects;
1515

16+
import org.springframework.ide.vscode.commons.util.text.IRegion;
17+
import org.springframework.ide.vscode.commons.util.text.Region;
18+
1619
public record SemanticTokenData(
17-
int start,
18-
int end,
20+
IRegion range,
1921
String type,
2022
String[] modifiers
2123
) implements Comparable<SemanticTokenData> {
24+
25+
public SemanticTokenData(int start, int end, String type, String[] modifiers) {
26+
this(new Region(start, end -start), type, modifiers);
27+
}
2228

2329
@Override
2430
public int compareTo(SemanticTokenData o) {
25-
if (start == o.start) {
26-
return end - o.end;
31+
if (range.getOffset() == o.range().getOffset()) {
32+
return range.getLength() - o.range().getLength();
2733
}
28-
return start - o.start;
34+
return range.getOffset() - o.range().getOffset();
2935
}
3036

3137
@Override
3238
public int hashCode() {
3339
final int prime = 31;
3440
int result = 1;
3541
result = prime * result + Arrays.hashCode(modifiers);
36-
result = prime * result + Objects.hash(end, start, type);
42+
result = prime * result + Objects.hash(range, type);
3743
return result;
3844
}
3945

@@ -46,8 +52,16 @@ public boolean equals(Object obj) {
4652
if (getClass() != obj.getClass())
4753
return false;
4854
SemanticTokenData other = (SemanticTokenData) obj;
49-
return end == other.end && Arrays.equals(modifiers, other.modifiers) && start == other.start
55+
return range.getLength() == other.range.getLength() && Arrays.equals(modifiers, other.modifiers) && range.getOffset() == other.range().getOffset()
5056
&& Objects.equals(type, other.type);
5157
}
5258

59+
public int getStart() {
60+
return range.getStart();
61+
}
62+
63+
public int getEnd() {
64+
return range.getEnd();
65+
}
66+
5367
}

headless-services/commons/commons-language-server/src/main/java/org/springframework/ide/vscode/commons/languageserver/semantic/tokens/SemanticTokensDataProvider.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,6 @@ public interface SemanticTokensDataProvider {
1717

1818
List<String> getTokenTypes();
1919
default List<String> getTypeModifiers() { return Collections.emptyList(); }
20-
List<SemanticTokenData> computeTokens(String text, int initialOffset);
20+
List<SemanticTokenData> computeTokens(String text);
2121

2222
}

headless-services/commons/commons-language-server/src/main/java/org/springframework/ide/vscode/commons/languageserver/semantic/tokens/SemanticTokensUtils.java

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -52,11 +52,11 @@ public static List<Integer> mapTokensDataToLsp(List<SemanticTokenData> tokensDat
5252
int previousLine = 0;
5353
int previousColumn = 0;
5454
for (SemanticTokenData tokenData : tokensData) {
55-
int currentLine = getLineNumber.apply(tokenData.start());
56-
int currentColumn = getColumnNumber.apply(tokenData.start());
55+
int currentLine = getLineNumber.apply(tokenData.getStart());
56+
int currentColumn = getColumnNumber.apply(tokenData.getStart());
5757
data.add(currentLine - previousLine);
5858
data.add(currentLine == previousLine ? currentColumn - previousColumn : currentColumn);
59-
data.add(tokenData.end() - tokenData.start());
59+
data.add(tokenData.getEnd() - tokenData.getStart());
6060
data.add(SemanticTokensUtils.getSemanticTokenTypeIndex(legend, tokenData.type()));
6161
data.add(SemanticTokensUtils.getSemanticTokenModifiersFlags(legend, tokenData.modifiers()));
6262
previousLine = currentLine;
@@ -79,11 +79,11 @@ public static List<Integer> mapTokensDataToLsp(TextDocument doc, SemanticTokensL
7979
int previousColumn = 0;
8080
for (SemanticTokenData tokenData : tokensData) {
8181
try {
82-
int currentLine = doc.getLineOfOffset(tokenData.start());
83-
int currentColumn = tokenData.start() - doc.getLineOffset(currentLine);
82+
int currentLine = doc.getLineOfOffset(tokenData.getStart());
83+
int currentColumn = tokenData.getStart() - doc.getLineOffset(currentLine);
8484
data.add(currentLine - previousLine);
8585
data.add(currentLine == previousLine ? currentColumn - previousColumn : currentColumn);
86-
data.add(tokenData.end() - tokenData.start());
86+
data.add(tokenData.getEnd() - tokenData.getStart());
8787
data.add(SemanticTokensUtils.getSemanticTokenTypeIndex(legend, tokenData.type()));
8888
data.add(SemanticTokensUtils.getSemanticTokenModifiersFlags(legend, tokenData.modifiers()));
8989
previousLine = currentLine;

headless-services/commons/commons-util/src/main/java/org/springframework/ide/vscode/commons/util/text/IRegion.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,5 +18,11 @@ public interface IRegion {
1818

1919
int getOffset();
2020
int getLength();
21+
default int getEnd() {
22+
return getOffset() + getLength();
23+
}
24+
default int getStart() {
25+
return getOffset();
26+
}
2127

2228
}

headless-services/commons/jpql/grammars/PostgreSqlLexer.g4

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1489,7 +1489,7 @@ InvalidUnterminatedUnicodeQuotedIdentifier: 'U' '&' InvalidUnterminatedQuotedIde
14891489
14901490
StringConstant: UnterminatedStringConstant '\'';
14911491

1492-
UnterminatedStringConstant: '\'' ('\'\'' | ~ '\'' | '\\\\\'' | '\\\'')*;
1492+
UnterminatedStringConstant: '\'' ('\'\'' | ~ '\'' | '\\\'')*;
14931493
// String Constants with C-style Escapes (4.1.2.2)
14941494

14951495
BeginEscapeStringConstant: 'E' '\'' -> more, pushMode (EscapeStringConstantMode);
@@ -1625,7 +1625,6 @@ fragment EscapeStringText options {
16251625
}:
16261626
(
16271627
'\\\''
1628-
| '\'\'\''
16291628
| '\\' (
16301629
// two-digit hex escapes are still valid when treated as single-digit escapes
16311630
'x' [0-9a-fA-F]

0 commit comments

Comments
 (0)