PostgreSQL grammar allow placeholders

This commit is contained in:
BoykoAlex
2024-12-06 18:32:50 -05:00
parent 7dd3592d9d
commit 3e44b798ef
7 changed files with 10741 additions and 10638 deletions

View File

@@ -111,6 +111,8 @@ public class PostgreSqlSemanticTokens implements SemanticTokensDataProvider {
semantics.put(token, "comment");
} else if (type == PostgreSqlLexer.SPEL) {
tokens.addAll(JpqlSemanticTokens.computeTokensFromSpelNode(node, 0, optSpelTokens));
} else if (type == PostgreSqlLexer.PLACEHOLDER) {
semantics.put(token, "parameter");
}
}
@@ -126,7 +128,7 @@ public class PostgreSqlSemanticTokens implements SemanticTokensDataProvider {
@Override
public void exitFunc_name(Func_nameContext funcName) {
AntlrUtils.getAllLeafs(funcName).filter(t -> t.getType() != PostgreSqlLexer.DOT)
AntlrUtils.getAllLeafs(funcName).filter(t -> t.getType() != PostgreSqlLexer.DOT && t.getType() != PostgreSqlLexer.PLACEHOLDER)
.forEach(t -> semantics.put(t, "method"));
}

View File

@@ -332,4 +332,19 @@ public class PostgreSqlSemanticTokensTest {
assertThat(tokens.get(7)).isEqualTo(new SemanticTokenData(34, 39, "variable", new String[0])); // test1
}
@Test
void placeholder() {
List<SemanticTokenData> tokens = provider.computeTokens("CALL {h-schema}calcRequest( :i_session_id );");
assertThat(tokens.size()).isEqualTo(8);
assertThat(tokens.get(0)).isEqualTo(new SemanticTokenData(0, 4, "keyword", new String[0])); // CALL
assertThat(tokens.get(1)).isEqualTo(new SemanticTokenData(5, 15, "parameter", new String[0])); // {h-schema}
assertThat(tokens.get(2)).isEqualTo(new SemanticTokenData(15, 26, "method", new String[0])); // calcRequest
assertThat(tokens.get(3)).isEqualTo(new SemanticTokenData(26, 27, "operator", new String[0])); // (
assertThat(tokens.get(4)).isEqualTo(new SemanticTokenData(28, 29, "operator", new String[0])); // :
assertThat(tokens.get(5)).isEqualTo(new SemanticTokenData(29, 41, "parameter", new String[0])); // i_session_id
assertThat(tokens.get(6)).isEqualTo(new SemanticTokenData(42, 43, "operator", new String[0])); // )
assertThat(tokens.get(7)).isEqualTo(new SemanticTokenData(43, 44, "operator", new String[0])); // ;
}
}