summaryrefslogtreecommitdiffstats
path: root/yql/essentials/sql
diff options
context:
space:
mode:
authorvitya-smirnov <[email protected]>2025-07-15 18:32:56 +0300
committervitya-smirnov <[email protected]>2025-07-15 18:59:24 +0300
commit9fa5e2a8b51a9c6072fc06bb8cd3ba0994e1cf7e (patch)
tree41ba4e41729cf88f32cb6ad492b25120b662a2ea /yql/essentials/sql
parent892100046de6ef219e524c90cdd95bc4e81a128a (diff)
YQL-19616: Generate Vim SQL syntax highlighting
Introduced a Vim syntax highlighting for YQL. This is a replacement for an existing almost manually written conguration. It uses regexes generated from the original ANTLR4 grammar. Now only Default lexer mode is supported. commit_hash:85fa094593bd9d80373754a492b46ede1a50148d
Diffstat (limited to 'yql/essentials/sql')
-rw-r--r--yql/essentials/sql/v1/highlight/sql_highlight.cpp4
-rw-r--r--yql/essentials/sql/v1/highlight/ut/suite.json4
-rw-r--r--yql/essentials/sql/v1/lexer/regex/generic.cpp7
3 files changed, 10 insertions, 5 deletions
diff --git a/yql/essentials/sql/v1/highlight/sql_highlight.cpp b/yql/essentials/sql/v1/highlight/sql_highlight.cpp
index e35bb5fb736..ff5b06a77ca 100644
--- a/yql/essentials/sql/v1/highlight/sql_highlight.cpp
+++ b/yql/essentials/sql/v1/highlight/sql_highlight.cpp
@@ -227,16 +227,16 @@ namespace NSQLHighlight {
Syntax s = MakeSyntax(grammar);
THighlighting h;
+ h.Units.emplace_back(MakeUnit<EUnitKind::Comment>(s));
h.Units.emplace_back(MakeUnit<EUnitKind::Keyword>(s));
h.Units.emplace_back(MakeUnit<EUnitKind::Punctuation>(s));
h.Units.emplace_back(MakeUnit<EUnitKind::QuotedIdentifier>(s));
h.Units.emplace_back(MakeUnit<EUnitKind::BindParamterIdentifier>(s));
- h.Units.emplace_back(MakeUnit<EUnitKind::TypeIdentifier>(s));
h.Units.emplace_back(MakeUnit<EUnitKind::FunctionIdentifier>(s));
+ h.Units.emplace_back(MakeUnit<EUnitKind::TypeIdentifier>(s));
h.Units.emplace_back(MakeUnit<EUnitKind::Identifier>(s));
h.Units.emplace_back(MakeUnit<EUnitKind::Literal>(s));
h.Units.emplace_back(MakeUnit<EUnitKind::StringLiteral>(s));
- h.Units.emplace_back(MakeUnit<EUnitKind::Comment>(s));
h.Units.emplace_back(MakeUnit<EUnitKind::Whitespace>(s));
return h;
diff --git a/yql/essentials/sql/v1/highlight/ut/suite.json b/yql/essentials/sql/v1/highlight/ut/suite.json
index 04e961a6f91..26fb2f3f4f4 100644
--- a/yql/essentials/sql/v1/highlight/ut/suite.json
+++ b/yql/essentials/sql/v1/highlight/ut/suite.json
@@ -47,11 +47,11 @@
["SELECT id, alias from users", "KKKKKK#_#II#P#_#IIIII#_#KKKK#_#IIIII"],
["INSERT INTO users (id, alias) VALUES (12, \"tester\")", "KKKKKK#_#KKKK#_#IIIII#_#P#II#P#_#IIIII#P#_#KKKKKK#_#P#LL#P#_#SSSSSSSS#P"],
["SELECT 123467, \"HeLLo, {name}!\", (1 + (5 * 1 / 0)), MIN(identifier) FROM `local/test/space/table` JOIN test;", "KKKKKK#_#LLLLLL#P#_#SSSSSSSSSSSSSSSS#P#_#P#L#_#P#_#P#L#_#P#_#L#_#P#_#L#P#P#P#_#FFF#P#IIIIIIIIII#P#_#KKKK#_#QQQQQQQQQQQQQQQQQQQQQQQQ#_#KKKK#_#IIII#P"],
- ["SELECT Bool(phone) FROM customer", "KKKKKK#_#TTTT#P#IIIII#P#_#KKKK#_#IIIIIIII"]
+ ["SELECT Bool(phone) FROM customer", "KKKKKK#_#FFFF#P#IIIII#P#_#KKKK#_#IIIIIIII"]
],
"TypeIdentifier": [
["Bool", "TTTT"],
- ["Bool(value)", "TTTT#P#IIIII#P"]
+ ["Bool(value)", "FFFF#P#IIIII#P"]
],
"Identifier": [
["test", "IIII"]
diff --git a/yql/essentials/sql/v1/lexer/regex/generic.cpp b/yql/essentials/sql/v1/lexer/regex/generic.cpp
index 83ad5b4155d..926c50dde2c 100644
--- a/yql/essentials/sql/v1/lexer/regex/generic.cpp
+++ b/yql/essentials/sql/v1/lexer/regex/generic.cpp
@@ -130,7 +130,12 @@ namespace NSQLTranslationV1 {
TStringBuilder body;
for (const auto& pattern : patterns) {
- body << "(" << pattern.Body << ")|";
+ TString regex = pattern.Body;
+ if (pattern.Body.Contains('|')) {
+ regex.prepend('(');
+ regex.append(')');
+ }
+ body << regex << "|";
}
Y_ENSURE(body.back() == '|');
body.pop_back();