diff options
author | Alexander Smirnov <alex@ydb.tech> | 2025-02-11 03:36:29 +0000 |
---|---|---|
committer | Alexander Smirnov <alex@ydb.tech> | 2025-02-11 03:36:29 +0000 |
commit | c166bec95e44baf473bfdd28aaf976a85da110a3 (patch) | |
tree | 7adfb406024a2ecd912a7daae4796ab5c68d24a7 /yql/essentials/public/fastcheck/linter.cpp | |
parent | e86276c064f63bbda07d6ddd5834401eb00a4d30 (diff) | |
parent | f992866ec874491c1e07e4cb4f90c595668e2864 (diff) | |
download | ydb-c166bec95e44baf473bfdd28aaf976a85da110a3.tar.gz |
Merge pull request #14412 from ydb-platform/merge-libs-250211-0050
Diffstat (limited to 'yql/essentials/public/fastcheck/linter.cpp')
-rw-r--r-- | yql/essentials/public/fastcheck/linter.cpp | 54 |
1 files changed, 40 insertions, 14 deletions
diff --git a/yql/essentials/public/fastcheck/linter.cpp b/yql/essentials/public/fastcheck/linter.cpp index 971e6fd977..a32814e3ec 100644 --- a/yql/essentials/public/fastcheck/linter.cpp +++ b/yql/essentials/public/fastcheck/linter.cpp @@ -4,11 +4,15 @@ #include <yql/essentials/ast/yql_ast.h> #include <yql/essentials/ast/yql_expr.h> +#include <util/string/split.h> + #include <functional> namespace NYql { namespace NFastCheck { +namespace { + class TCheckRunnerFactory : public ICheckRunnerFactory { public: using TRunnerFactoryFunction = std::function<std::unique_ptr<ICheckRunner>()>; @@ -41,22 +45,13 @@ private: TSet<TString> CheckNames_; }; -TCheckRunnerFactory& GetCheckRunnerFactory() { - return *Singleton<TCheckRunnerFactory>(); -}; - -const TSet<TString>& ListChecks() { - return GetCheckRunnerFactory().ListChecks(); -} - -TChecksResponse RunChecks(const TChecksRequest& request) { - auto filters = request.Filters.GetOrElse(TVector<TCheckFilter>(1, TCheckFilter{.Include = true, .CheckNameGlob = "*"})); - const auto& fullChecks = ListChecks(); +TSet<TString> GetEnabledChecks(const TSet<TString>& allChecks, const TMaybe<TVector<TCheckFilter>>& filters) { + auto usedFilters = filters.GetOrElse(TVector<TCheckFilter>(1, TCheckFilter{.Include = true, .CheckNameGlob = "*"})); TSet<TString> enabledChecks; - for (const auto& f : filters) { + for (const auto& f : usedFilters) { if (f.CheckNameGlob == "*") { if (f.Include) { - enabledChecks = fullChecks; + enabledChecks = allChecks; } else { enabledChecks.clear(); } @@ -65,7 +60,7 @@ TChecksResponse RunChecks(const TChecksRequest& request) { Y_ENSURE(f.CheckNameGlob.find('*') == TString::npos); Y_ENSURE(f.CheckNameGlob.find('?') == TString::npos); if (f.Include) { - if (fullChecks.contains(f.CheckNameGlob)) { + if (allChecks.contains(f.CheckNameGlob)) { enabledChecks.insert(f.CheckNameGlob); } } else { @@ -74,6 +69,37 @@ TChecksResponse RunChecks(const TChecksRequest& request) { } } + return enabledChecks; +} + +TCheckRunnerFactory& GetCheckRunnerFactory() { + return *Singleton<TCheckRunnerFactory>(); +}; + +} + +TVector<TCheckFilter> ParseChecks(const TString& checks) { + TVector<TCheckFilter> res; + for (TStringBuf one: StringSplitter(checks).SplitByString(",")) { + TCheckFilter f; + TStringBuf afterPrefix = one; + if (one.AfterPrefix("-", afterPrefix)) { + f.Include = false; + } + + f.CheckNameGlob = afterPrefix; + res.push_back(f); + } + + return res; +} + +TSet<TString> ListChecks(const TMaybe<TVector<TCheckFilter>>& filters) { + return GetEnabledChecks(GetCheckRunnerFactory().ListChecks(), filters); +} + +TChecksResponse RunChecks(const TChecksRequest& request) { + auto enabledChecks = GetEnabledChecks(GetCheckRunnerFactory().ListChecks(), request.Filters); TChecksResponse res; for (const auto& c : enabledChecks) { auto checkRunner = GetCheckRunnerFactory().MakeRunner(c); |