diff options
| author | vitya-smirnov <[email protected]> | 2025-10-02 21:18:00 +0300 |
|---|---|---|
| committer | vitya-smirnov <[email protected]> | 2025-10-02 22:11:56 +0300 |
| commit | 6192f768fab5d54dd697cf6b5f884d5cd3145b1c (patch) | |
| tree | 81342cd8bb7ed07f6b8b3b9754522ad283bc045d /yql/essentials/sql/v1/highlight/sql_highlight.cpp | |
| parent | c1a5e76d42fda9476a375e0638b415c78d46f599 (diff) | |
YQL-20086: Format yql/essentials/sql/v1/highlight
This patch adds a style check for `yql/essentials/sql/v1`.
To format use `ya style`.
To test use `ya test ya test --test-type clang_format`.
To enable style checking in a module, need to add:
`ENABLE(YQL_STYLE_CPP)`. So in a such way we gradually will
format all YQL modules, expect those, where fluent YQL-builders
are used. Then we will revert activation macro, so switch from
`ENABLE(YQL_STYLE_CPP)` to`ENABLE(YQL_STYLE_CPP_XFAIL)`.
Guide: <https://nda.ya.ru/t/XzkoRIGg7KjXmq>.
commit_hash:fa758a214e094c74821fe896184f30483dd18c55
Diffstat (limited to 'yql/essentials/sql/v1/highlight/sql_highlight.cpp')
| -rw-r--r-- | yql/essentials/sql/v1/highlight/sql_highlight.cpp | 374 |
1 files changed, 187 insertions, 187 deletions
diff --git a/yql/essentials/sql/v1/highlight/sql_highlight.cpp b/yql/essentials/sql/v1/highlight/sql_highlight.cpp index b4f577eda67..72dd095ec3f 100644 --- a/yql/essentials/sql/v1/highlight/sql_highlight.cpp +++ b/yql/essentials/sql/v1/highlight/sql_highlight.cpp @@ -15,221 +15,221 @@ namespace NSQLHighlight { - using NSQLTranslationV1::Merged; - using NSQLTranslationV1::TRegexPattern; - - struct Syntax { - const NSQLReflect::TLexerGrammar* Grammar; - THashMap<TString, TString> RegexesDefault; - THashMap<TString, TString> RegexesANSI; - - TString Concat(const TVector<TStringBuf>& names) { - TString concat; - for (const auto& name : names) { - concat += Get(name); - } - return concat; +using NSQLTranslationV1::Merged; +using NSQLTranslationV1::TRegexPattern; + +struct Syntax { + const NSQLReflect::TLexerGrammar* Grammar; + THashMap<TString, TString> RegexesDefault; + THashMap<TString, TString> RegexesANSI; + + TString Concat(const TVector<TStringBuf>& names) { + TString concat; + for (const auto& name : names) { + concat += Get(name); } + return concat; + } - TString Get(const TStringBuf name, bool ansi = false) const { - if (Grammar->PunctuationNames.contains(name)) { - return RE2::QuoteMeta(Grammar->BlockByName.at(name)); - } - if (ansi) { - return RegexesANSI.at(name); - } - return RegexesDefault.at(name); + TString Get(const TStringBuf name, bool ansi = false) const { + if (Grammar->PunctuationNames.contains(name)) { + return RE2::QuoteMeta(Grammar->BlockByName.at(name)); } - }; - - NSQLTranslationV1::TRegexPattern CaseInsensitive(TStringBuf text) { - return { - .Body = TString(text), - .IsCaseInsensitive = true, - }; + if (ansi) { + return RegexesANSI.at(name); + } + return RegexesDefault.at(name); } +}; - template <EUnitKind K> - TUnit MakeUnit(Syntax& syntax); +NSQLTranslationV1::TRegexPattern CaseInsensitive(TStringBuf text) { + return { + .Body = TString(text), + .IsCaseInsensitive = true, + }; +} - template <> - TUnit MakeUnit<EUnitKind::Keyword>(Syntax& s) { - using NSQLReflect::TLexerGrammar; +template <EUnitKind K> +TUnit MakeUnit(Syntax& syntax); - TUnit unit = {.Kind = EUnitKind::Keyword}; - for (const auto& keyword : s.Grammar->KeywordNames) { - const TStringBuf content = TLexerGrammar::KeywordBlockByName(keyword); - unit.Patterns.push_back(CaseInsensitive(content)); - } +template <> +TUnit MakeUnit<EUnitKind::Keyword>(Syntax& s) { + using NSQLReflect::TLexerGrammar; - unit.Patterns = {Merged(std::move(unit.Patterns))}; - return unit; + TUnit unit = {.Kind = EUnitKind::Keyword}; + for (const auto& keyword : s.Grammar->KeywordNames) { + const TStringBuf content = TLexerGrammar::KeywordBlockByName(keyword); + unit.Patterns.push_back(CaseInsensitive(content)); } - template <> - TUnit MakeUnit<EUnitKind::Punctuation>(Syntax& s) { - TUnit unit = {.Kind = EUnitKind::Punctuation}; - for (const auto& name : s.Grammar->PunctuationNames) { - const TString content = s.Get(name); - unit.Patterns.push_back({content}); - } + unit.Patterns = {Merged(std::move(unit.Patterns))}; + return unit; +} - unit.Patterns = {Merged(std::move(unit.Patterns))}; - unit.IsPlain = false; - unit.IsCodeGenExcluded = true; - return unit; +template <> +TUnit MakeUnit<EUnitKind::Punctuation>(Syntax& s) { + TUnit unit = {.Kind = EUnitKind::Punctuation}; + for (const auto& name : s.Grammar->PunctuationNames) { + const TString content = s.Get(name); + unit.Patterns.push_back({content}); } - template <> - TUnit MakeUnit<EUnitKind::QuotedIdentifier>(Syntax& s) { - return { - .Kind = EUnitKind::QuotedIdentifier, - .Patterns = { - {s.Get("ID_QUOTED")}, - }, - .IsPlain = false, - }; - } + unit.Patterns = {Merged(std::move(unit.Patterns))}; + unit.IsPlain = false; + unit.IsCodeGenExcluded = true; + return unit; +} - template <> - TUnit MakeUnit<EUnitKind::BindParameterIdentifier>(Syntax& s) { - return { - .Kind = EUnitKind::BindParameterIdentifier, - .Patterns = { - {s.Concat({"DOLLAR", "ID_PLAIN"})}, - }, - .IsPlain = false, - }; - } +template <> +TUnit MakeUnit<EUnitKind::QuotedIdentifier>(Syntax& s) { + return { + .Kind = EUnitKind::QuotedIdentifier, + .Patterns = { + {s.Get("ID_QUOTED")}, + }, + .IsPlain = false, + }; +} - template <> - TUnit MakeUnit<EUnitKind::TypeIdentifier>(Syntax& s) { - TVector<NSQLTranslationV1::TRegexPattern> types; - NJson::TJsonValue json = NJson::ReadJsonFastTree(NResource::Find("types.json")); - for (const NJson::TJsonValue& value : json.GetArraySafe()) { - types.emplace_back(CaseInsensitive(value["name"].GetStringSafe())); - } +template <> +TUnit MakeUnit<EUnitKind::BindParameterIdentifier>(Syntax& s) { + return { + .Kind = EUnitKind::BindParameterIdentifier, + .Patterns = { + {s.Concat({"DOLLAR", "ID_PLAIN"})}, + }, + .IsPlain = false, + }; +} - return { - .Kind = EUnitKind::TypeIdentifier, - .Patterns = { - {s.Get("ID_PLAIN"), s.Get("LESS")}, - {Merged(std::move(types))}, - }, - }; +template <> +TUnit MakeUnit<EUnitKind::TypeIdentifier>(Syntax& s) { + TVector<NSQLTranslationV1::TRegexPattern> types; + NJson::TJsonValue json = NJson::ReadJsonFastTree(NResource::Find("types.json")); + for (const NJson::TJsonValue& value : json.GetArraySafe()) { + types.emplace_back(CaseInsensitive(value["name"].GetStringSafe())); } - template <> - TUnit MakeUnit<EUnitKind::FunctionIdentifier>(Syntax& s) { - return { - .Kind = EUnitKind::FunctionIdentifier, - .Patterns = { - {s.Concat({"ID_PLAIN", "NAMESPACE", "ID_PLAIN"})}, - {s.Get("ID_PLAIN"), s.Get("LPAREN")}, - }, - }; - } + return { + .Kind = EUnitKind::TypeIdentifier, + .Patterns = { + {s.Get("ID_PLAIN"), s.Get("LESS")}, + {Merged(std::move(types))}, + }, + }; +} - template <> - TUnit MakeUnit<EUnitKind::Identifier>(Syntax& s) { - return { - .Kind = EUnitKind::Identifier, - .Patterns = { - {s.Get("ID_PLAIN")}, - }, - }; - } +template <> +TUnit MakeUnit<EUnitKind::FunctionIdentifier>(Syntax& s) { + return { + .Kind = EUnitKind::FunctionIdentifier, + .Patterns = { + {s.Concat({"ID_PLAIN", "NAMESPACE", "ID_PLAIN"})}, + {s.Get("ID_PLAIN"), s.Get("LPAREN")}, + }, + }; +} - template <> - TUnit MakeUnit<EUnitKind::Literal>(Syntax& s) { - return { - .Kind = EUnitKind::Literal, - .Patterns = { - {s.Get("REAL")}, - {s.Get("INTEGER_VALUE")}, - {s.Get("DIGITS")}, - }, - }; - } +template <> +TUnit MakeUnit<EUnitKind::Identifier>(Syntax& s) { + return { + .Kind = EUnitKind::Identifier, + .Patterns = { + {s.Get("ID_PLAIN")}, + }, + }; +} - template <> - TUnit MakeUnit<EUnitKind::StringLiteral>(Syntax& s) { - return { - .Kind = EUnitKind::StringLiteral, - .Patterns = {{s.Get("STRING_VALUE")}}, - .PatternsANSI = TVector<TRegexPattern>{ - TRegexPattern{s.Get("STRING_VALUE", /* ansi = */ true)}, - }, - .RangePattern = TRangePattern{ - .Begin = R"(@@)", - .End = R"(@@)", - }, - .IsPlain = false, - }; - } +template <> +TUnit MakeUnit<EUnitKind::Literal>(Syntax& s) { + return { + .Kind = EUnitKind::Literal, + .Patterns = { + {s.Get("REAL")}, + {s.Get("INTEGER_VALUE")}, + {s.Get("DIGITS")}, + }, + }; +} - template <> - TUnit MakeUnit<EUnitKind::Comment>(Syntax& s) { - return { - .Kind = EUnitKind::Comment, - .Patterns = {{s.Get("COMMENT")}}, - .PatternsANSI = Nothing(), - .RangePattern = TRangePattern{ - .Begin = R"(/*)", - .End = R"(*/)", - }, - .IsPlain = false, - }; - } +template <> +TUnit MakeUnit<EUnitKind::StringLiteral>(Syntax& s) { + return { + .Kind = EUnitKind::StringLiteral, + .Patterns = {{s.Get("STRING_VALUE")}}, + .PatternsANSI = TVector<TRegexPattern>{ + TRegexPattern{s.Get("STRING_VALUE", /* ansi = */ true)}, + }, + .RangePattern = TRangePattern{ + .Begin = R"(@@)", + .End = R"(@@)", + }, + .IsPlain = false, + }; +} - template <> - TUnit MakeUnit<EUnitKind::Whitespace>(Syntax& s) { - return { - .Kind = EUnitKind::Whitespace, - .Patterns = { - {s.Get("WS")}, - }, - .IsPlain = false, - .IsCodeGenExcluded = true, - }; - } +template <> +TUnit MakeUnit<EUnitKind::Comment>(Syntax& s) { + return { + .Kind = EUnitKind::Comment, + .Patterns = {{s.Get("COMMENT")}}, + .PatternsANSI = Nothing(), + .RangePattern = TRangePattern{ + .Begin = R"(/*)", + .End = R"(*/)", + }, + .IsPlain = false, + }; +} - Syntax MakeSyntax(const NSQLReflect::TLexerGrammar& grammar) { - using NSQLTranslationV1::MakeRegexByOtherName; +template <> +TUnit MakeUnit<EUnitKind::Whitespace>(Syntax& s) { + return { + .Kind = EUnitKind::Whitespace, + .Patterns = { + {s.Get("WS")}, + }, + .IsPlain = false, + .IsCodeGenExcluded = true, + }; +} - Syntax syntax; - syntax.Grammar = &grammar; - for (auto& [k, v] : MakeRegexByOtherName(*syntax.Grammar, /* ansi = */ false)) { - syntax.RegexesDefault.emplace(std::move(k), std::move(v)); - } - for (auto& [k, v] : MakeRegexByOtherName(*syntax.Grammar, /* ansi = */ true)) { - syntax.RegexesANSI.emplace(std::move(k), std::move(v)); - } - return syntax; - } +Syntax MakeSyntax(const NSQLReflect::TLexerGrammar& grammar) { + using NSQLTranslationV1::MakeRegexByOtherName; - THighlighting MakeHighlighting() { - return MakeHighlighting(NSQLReflect::LoadLexerGrammar()); + Syntax syntax; + syntax.Grammar = &grammar; + for (auto& [k, v] : MakeRegexByOtherName(*syntax.Grammar, /* ansi = */ false)) { + syntax.RegexesDefault.emplace(std::move(k), std::move(v)); } - - THighlighting MakeHighlighting(const NSQLReflect::TLexerGrammar& grammar) { - Syntax s = MakeSyntax(grammar); - - THighlighting h; - h.Units.emplace_back(MakeUnit<EUnitKind::Comment>(s)); - h.Units.emplace_back(MakeUnit<EUnitKind::Punctuation>(s)); - h.Units.emplace_back(MakeUnit<EUnitKind::FunctionIdentifier>(s)); - h.Units.emplace_back(MakeUnit<EUnitKind::TypeIdentifier>(s)); - h.Units.emplace_back(MakeUnit<EUnitKind::Keyword>(s)); - h.Units.emplace_back(MakeUnit<EUnitKind::QuotedIdentifier>(s)); - h.Units.emplace_back(MakeUnit<EUnitKind::BindParameterIdentifier>(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::Whitespace>(s)); - - return h; + for (auto& [k, v] : MakeRegexByOtherName(*syntax.Grammar, /* ansi = */ true)) { + syntax.RegexesANSI.emplace(std::move(k), std::move(v)); } + return syntax; +} + +THighlighting MakeHighlighting() { + return MakeHighlighting(NSQLReflect::LoadLexerGrammar()); +} + +THighlighting MakeHighlighting(const NSQLReflect::TLexerGrammar& grammar) { + Syntax s = MakeSyntax(grammar); + + THighlighting h; + h.Units.emplace_back(MakeUnit<EUnitKind::Comment>(s)); + h.Units.emplace_back(MakeUnit<EUnitKind::Punctuation>(s)); + h.Units.emplace_back(MakeUnit<EUnitKind::FunctionIdentifier>(s)); + h.Units.emplace_back(MakeUnit<EUnitKind::TypeIdentifier>(s)); + h.Units.emplace_back(MakeUnit<EUnitKind::Keyword>(s)); + h.Units.emplace_back(MakeUnit<EUnitKind::QuotedIdentifier>(s)); + h.Units.emplace_back(MakeUnit<EUnitKind::BindParameterIdentifier>(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::Whitespace>(s)); + + return h; +} } // namespace NSQLHighlight |
