aboutsummaryrefslogtreecommitdiffstats
path: root/yql/essentials/public/fastcheck/linter.cpp
diff options
context:
space:
mode:
authorAlexander Smirnov <alex@ydb.tech>2025-02-11 03:36:29 +0000
committerAlexander Smirnov <alex@ydb.tech>2025-02-11 03:36:29 +0000
commitc166bec95e44baf473bfdd28aaf976a85da110a3 (patch)
tree7adfb406024a2ecd912a7daae4796ab5c68d24a7 /yql/essentials/public/fastcheck/linter.cpp
parente86276c064f63bbda07d6ddd5834401eb00a4d30 (diff)
parentf992866ec874491c1e07e4cb4f90c595668e2864 (diff)
downloadydb-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.cpp54
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);