[HQL] Semantic tokens adjustment
This commit is contained in:
@@ -40,13 +40,14 @@ import org.springframework.ide.vscode.parser.hql.HqlLexer;
|
||||
import org.springframework.ide.vscode.parser.hql.HqlParser;
|
||||
import org.springframework.ide.vscode.parser.hql.HqlParser.EntityNameContext;
|
||||
import org.springframework.ide.vscode.parser.hql.HqlParser.IdentifierContext;
|
||||
import org.springframework.ide.vscode.parser.hql.HqlParser.InstantiationTargetContext;
|
||||
import org.springframework.ide.vscode.parser.hql.HqlParser.ParameterContext;
|
||||
import org.springframework.ide.vscode.parser.hql.HqlParser.SimplePathElementContext;
|
||||
|
||||
public class HqlSemanticTokens implements SemanticTokensDataProvider {
|
||||
|
||||
private static List<String> TOKEN_TYPES = List.of("keyword", "type", "class", "string", "number", "operator",
|
||||
"variable", "method", "parameter");
|
||||
"variable", "method", "parameter", "property");
|
||||
|
||||
private final Optional<SpelSemanticTokens> optSpelTokens;
|
||||
|
||||
@@ -128,10 +129,18 @@ public class HqlSemanticTokens implements SemanticTokensDataProvider {
|
||||
public void visitErrorNode(ErrorNode node) {
|
||||
processTerminalNode(node);
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void exitInstantiationTarget(InstantiationTargetContext ctx) {
|
||||
int offset = initialOffset + ctx.getStart().getStartIndex();
|
||||
int length = ctx.getText().length();
|
||||
tokens.add(new SemanticTokenData(offset, offset + length , "method", new String[0]));
|
||||
AntlrUtils.getAllLeafs(ctx).forEach(semantics::remove);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void exitSimplePathElement(SimplePathElementContext ctx) {
|
||||
semantics.put(ctx.identifier().getStart(), "method");
|
||||
semantics.put(ctx.identifier().getStart(), "property");
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -66,7 +66,7 @@ public class HqlSemanticTokensTest {
|
||||
assertThat(tokens.get(6)).isEqualTo(new SemanticTokenData(28, 30, "keyword", new String[0]));
|
||||
assertThat(tokens.get(7)).isEqualTo(new SemanticTokenData(31, 32, "variable", new String[0]));
|
||||
assertThat(tokens.get(8)).isEqualTo(new SemanticTokenData(32, 33, "operator", new String[0]));
|
||||
assertThat(tokens.get(9)).isEqualTo(new SemanticTokenData(33, 37, "method", new String[0]));
|
||||
assertThat(tokens.get(9)).isEqualTo(new SemanticTokenData(33, 37, "property", new String[0]));
|
||||
|
||||
assertThat(tokens.size()).isEqualTo(10);
|
||||
}
|
||||
@@ -84,11 +84,11 @@ public class HqlSemanticTokensTest {
|
||||
assertThat(tokens.get(7)).isEqualTo(new SemanticTokenData(44, 48, "keyword", new String[0])); // join
|
||||
assertThat(tokens.get(8)).isEqualTo(new SemanticTokenData(50, 55, "variable", new String[0])); // owner
|
||||
assertThat(tokens.get(9)).isEqualTo(new SemanticTokenData(55, 56, "operator", new String[0])); // .
|
||||
assertThat(tokens.get(10)).isEqualTo(new SemanticTokenData(56, 60, "method", new String[0])); // pets
|
||||
assertThat(tokens.get(10)).isEqualTo(new SemanticTokenData(56, 60, "property", new String[0])); // pets
|
||||
assertThat(tokens.get(11)).isEqualTo(new SemanticTokenData(61, 66, "keyword", new String[0])); // WHERE
|
||||
assertThat(tokens.get(12)).isEqualTo(new SemanticTokenData(67, 72, "variable", new String[0])); // owner
|
||||
assertThat(tokens.get(13)).isEqualTo(new SemanticTokenData(72, 73, "operator", new String[0])); // .
|
||||
assertThat(tokens.get(14)).isEqualTo(new SemanticTokenData(73, 81, "method", new String[0])); // lastName
|
||||
assertThat(tokens.get(14)).isEqualTo(new SemanticTokenData(73, 81, "property", new String[0])); // lastName
|
||||
assertThat(tokens.get(15)).isEqualTo(new SemanticTokenData(82, 86, "keyword", new String[0])); // LIKE
|
||||
assertThat(tokens.get(16)).isEqualTo(new SemanticTokenData(87, 88, "operator", new String[0])); // :
|
||||
assertThat(tokens.get(17)).isEqualTo(new SemanticTokenData(88, 96, "parameter", new String[0])); // lastName
|
||||
@@ -110,11 +110,11 @@ public class HqlSemanticTokensTest {
|
||||
assertThat(tokens.get(7)).isEqualTo(new SemanticTokenData(40, 45, "keyword", new String[0])); // fetch
|
||||
assertThat(tokens.get(8)).isEqualTo(new SemanticTokenData(46, 51, "variable", new String[0])); // owner
|
||||
assertThat(tokens.get(9)).isEqualTo(new SemanticTokenData(51, 52, "operator", new String[0])); // .
|
||||
assertThat(tokens.get(10)).isEqualTo(new SemanticTokenData(52, 56, "method", new String[0])); // pets
|
||||
assertThat(tokens.get(10)).isEqualTo(new SemanticTokenData(52, 56, "property", new String[0])); // pets
|
||||
assertThat(tokens.get(11)).isEqualTo(new SemanticTokenData(57, 62, "keyword", new String[0])); // WHERE
|
||||
assertThat(tokens.get(12)).isEqualTo(new SemanticTokenData(63, 68, "variable", new String[0])); // owner
|
||||
assertThat(tokens.get(13)).isEqualTo(new SemanticTokenData(68, 69, "operator", new String[0])); // .
|
||||
assertThat(tokens.get(14)).isEqualTo(new SemanticTokenData(69, 71, "method", new String[0])); // id
|
||||
assertThat(tokens.get(14)).isEqualTo(new SemanticTokenData(69, 71, "property", new String[0])); // id
|
||||
assertThat(tokens.get(15)).isEqualTo(new SemanticTokenData(72, 73, "operator", new String[0])); // =
|
||||
assertThat(tokens.get(16)).isEqualTo(new SemanticTokenData(73, 74, "operator", new String[0])); // :
|
||||
assertThat(tokens.get(17)).isEqualTo(new SemanticTokenData(74, 76, "operator", new String[0])); // #{
|
||||
@@ -138,11 +138,11 @@ public class HqlSemanticTokensTest {
|
||||
assertThat(tokens.get(7)).isEqualTo(new SemanticTokenData(40, 45, "keyword", new String[0])); // fetch
|
||||
assertThat(tokens.get(8)).isEqualTo(new SemanticTokenData(46, 51, "variable", new String[0])); // owner
|
||||
assertThat(tokens.get(9)).isEqualTo(new SemanticTokenData(51, 52, "operator", new String[0])); // .
|
||||
assertThat(tokens.get(10)).isEqualTo(new SemanticTokenData(52, 56, "method", new String[0])); // pets
|
||||
assertThat(tokens.get(10)).isEqualTo(new SemanticTokenData(52, 56, "property", new String[0])); // pets
|
||||
assertThat(tokens.get(11)).isEqualTo(new SemanticTokenData(57, 62, "keyword", new String[0])); // WHERE
|
||||
assertThat(tokens.get(12)).isEqualTo(new SemanticTokenData(63, 68, "variable", new String[0])); // owner
|
||||
assertThat(tokens.get(13)).isEqualTo(new SemanticTokenData(68, 69, "operator", new String[0])); // .
|
||||
assertThat(tokens.get(14)).isEqualTo(new SemanticTokenData(69, 71, "method", new String[0])); // id
|
||||
assertThat(tokens.get(14)).isEqualTo(new SemanticTokenData(69, 71, "property", new String[0])); // id
|
||||
assertThat(tokens.get(15)).isEqualTo(new SemanticTokenData(72, 73, "operator", new String[0])); // =
|
||||
assertThat(tokens.get(16)).isEqualTo(new SemanticTokenData(73, 74, "operator", new String[0])); // :
|
||||
assertThat(tokens.get(17)).isEqualTo(new SemanticTokenData(74, 76, "operator", new String[0])); // #{
|
||||
@@ -166,11 +166,11 @@ public class HqlSemanticTokensTest {
|
||||
assertThat(tokens.get(7)).isEqualTo(new SemanticTokenData(40, 45, "keyword", new String[0])); // fetch
|
||||
assertThat(tokens.get(8)).isEqualTo(new SemanticTokenData(46, 51, "variable", new String[0])); // owner
|
||||
assertThat(tokens.get(9)).isEqualTo(new SemanticTokenData(51, 52, "operator", new String[0])); // .
|
||||
assertThat(tokens.get(10)).isEqualTo(new SemanticTokenData(52, 56, "method", new String[0])); // pets
|
||||
assertThat(tokens.get(10)).isEqualTo(new SemanticTokenData(52, 56, "property", new String[0])); // pets
|
||||
assertThat(tokens.get(11)).isEqualTo(new SemanticTokenData(57, 62, "keyword", new String[0])); // WHERE
|
||||
assertThat(tokens.get(12)).isEqualTo(new SemanticTokenData(63, 68, "variable", new String[0])); // owner
|
||||
assertThat(tokens.get(13)).isEqualTo(new SemanticTokenData(68, 69, "operator", new String[0])); // .
|
||||
assertThat(tokens.get(14)).isEqualTo(new SemanticTokenData(69, 71, "method", new String[0])); // id
|
||||
assertThat(tokens.get(14)).isEqualTo(new SemanticTokenData(69, 71, "property", new String[0])); // id
|
||||
assertThat(tokens.get(15)).isEqualTo(new SemanticTokenData(72, 73, "operator", new String[0])); // =
|
||||
assertThat(tokens.get(16)).isEqualTo(new SemanticTokenData(73, 74, "operator", new String[0])); // :
|
||||
assertThat(tokens.get(17)).isEqualTo(new SemanticTokenData(74, 76, "operator", new String[0])); // #{
|
||||
@@ -189,4 +189,44 @@ public class HqlSemanticTokensTest {
|
||||
|
||||
assertThat(tokens.size()).isEqualTo(30);
|
||||
}
|
||||
|
||||
@Test
|
||||
void instatiotation_1() {
|
||||
provider = new HqlSemanticTokens(Optional.of(new SpelSemanticTokens()));
|
||||
List<SemanticTokenData> tokens = provider.computeTokens("SELECT new com.example.ls.issue.SampleTableSizePojo(t.schemaName, sum(t.tableSize) ) FROM MTables t GROUP BY t.schemaName ORDER BY sum(t.tableSize) DESC", 0);
|
||||
assertThat(tokens.size()).isEqualTo(32);
|
||||
|
||||
assertThat(tokens.get(0)).isEqualTo(new SemanticTokenData(0, 6, "keyword", new String[0])); // SELECT
|
||||
assertThat(tokens.get(1)).isEqualTo(new SemanticTokenData(7, 10, "keyword", new String[0])); // new
|
||||
assertThat(tokens.get(2)).isEqualTo(new SemanticTokenData(11, 51, "method", new String[0])); // com.example.ls.issue.SampleTableSizePojo
|
||||
assertThat(tokens.get(3)).isEqualTo(new SemanticTokenData(51, 52, "operator", new String[0])); // (
|
||||
assertThat(tokens.get(4)).isEqualTo(new SemanticTokenData(52, 53, "variable", new String[0])); // t
|
||||
assertThat(tokens.get(5)).isEqualTo(new SemanticTokenData(53, 54, "operator", new String[0])); // .
|
||||
assertThat(tokens.get(6)).isEqualTo(new SemanticTokenData(54, 64, "property", new String[0])); // schemaName
|
||||
assertThat(tokens.get(7)).isEqualTo(new SemanticTokenData(64, 65, "operator", new String[0])); // ,
|
||||
assertThat(tokens.get(8)).isEqualTo(new SemanticTokenData(66, 69, "keyword", new String[0])); // sum
|
||||
assertThat(tokens.get(9)).isEqualTo(new SemanticTokenData(69, 70, "operator", new String[0])); // (
|
||||
assertThat(tokens.get(10)).isEqualTo(new SemanticTokenData(70, 71, "variable", new String[0])); // t
|
||||
assertThat(tokens.get(11)).isEqualTo(new SemanticTokenData(71, 72, "operator", new String[0])); // .
|
||||
assertThat(tokens.get(12)).isEqualTo(new SemanticTokenData(72, 81, "property", new String[0])); // tableSize
|
||||
assertThat(tokens.get(13)).isEqualTo(new SemanticTokenData(81, 82, "operator", new String[0])); // )
|
||||
assertThat(tokens.get(14)).isEqualTo(new SemanticTokenData(83, 84, "operator", new String[0])); // )
|
||||
assertThat(tokens.get(15)).isEqualTo(new SemanticTokenData(85, 89, "keyword", new String[0])); // FROM
|
||||
assertThat(tokens.get(16)).isEqualTo(new SemanticTokenData(90, 97, "class", new String[0])); // MTables
|
||||
assertThat(tokens.get(17)).isEqualTo(new SemanticTokenData(98, 99, "variable", new String[0])); // t
|
||||
assertThat(tokens.get(18)).isEqualTo(new SemanticTokenData(100, 105, "keyword", new String[0])); // GROUP
|
||||
assertThat(tokens.get(19)).isEqualTo(new SemanticTokenData(106, 108, "keyword", new String[0])); // BY
|
||||
assertThat(tokens.get(20)).isEqualTo(new SemanticTokenData(109, 110, "variable", new String[0])); // t
|
||||
assertThat(tokens.get(21)).isEqualTo(new SemanticTokenData(110, 111, "operator", new String[0])); // .
|
||||
assertThat(tokens.get(22)).isEqualTo(new SemanticTokenData(111, 121, "property", new String[0])); // schemaName
|
||||
assertThat(tokens.get(23)).isEqualTo(new SemanticTokenData(122, 127, "keyword", new String[0])); // ORDER
|
||||
assertThat(tokens.get(24)).isEqualTo(new SemanticTokenData(128, 130, "keyword", new String[0])); // BY
|
||||
assertThat(tokens.get(25)).isEqualTo(new SemanticTokenData(131, 134, "keyword", new String[0])); // sum
|
||||
assertThat(tokens.get(26)).isEqualTo(new SemanticTokenData(134, 135, "operator", new String[0])); // (
|
||||
assertThat(tokens.get(27)).isEqualTo(new SemanticTokenData(135, 136, "variable", new String[0])); // t
|
||||
assertThat(tokens.get(28)).isEqualTo(new SemanticTokenData(136, 137, "operator", new String[0])); // .
|
||||
assertThat(tokens.get(29)).isEqualTo(new SemanticTokenData(137, 146, "property", new String[0])); // tableSize
|
||||
assertThat(tokens.get(30)).isEqualTo(new SemanticTokenData(146, 147, "operator", new String[0])); // )
|
||||
assertThat(tokens.get(31)).isEqualTo(new SemanticTokenData(148, 152, "keyword", new String[0])); // DESC
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user