summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorrobot-piglet <[email protected]>2025-04-10 17:08:18 +0300
committerrobot-piglet <[email protected]>2025-04-10 17:19:18 +0300
commitad6f8c8e4e2fa19203ed9f28d4eb74827e937d3e (patch)
tree0aa939adc5e6508e0ba3bdef2c7b467f110af735
parente4ca0cae001c7a0cc845bca18daff015123a1294 (diff)
Intermediate changes
commit_hash:9f456514216b568e1c58c25d3902d410da1e76cf
-rw-r--r--yql/essentials/public/fastcheck/format.cpp17
-rw-r--r--yql/essentials/public/fastcheck/linter_ut.cpp20
2 files changed, 36 insertions, 1 deletions
diff --git a/yql/essentials/public/fastcheck/format.cpp b/yql/essentials/public/fastcheck/format.cpp
index d4717b4bf79..b487c56fc19 100644
--- a/yql/essentials/public/fastcheck/format.cpp
+++ b/yql/essentials/public/fastcheck/format.cpp
@@ -25,6 +25,21 @@ TString NormalizeEOL(TStringBuf input) {
return res;
}
+TString ReplaceHidden(TStringBuf input) {
+ TStringBuilder res;
+ for (const auto c : input) {
+ if (c == ' ') {
+ res << "\xe2\x80\xa2";
+ } else if (c == '\t') {
+ res << "\xe2\x86\x92";
+ } else {
+ res << c;
+ }
+ }
+
+ return res;
+}
+
class TFormatRunner : public ICheckRunner {
public:
TString GetCheckName() const final {
@@ -107,7 +122,7 @@ private:
}
auto issue = TIssue(origPos, TStringBuilder() <<
- "Format mismatch, expected:\n" << formattedSample << "\nbut got:\n" << origSample);
+ "Format mismatch, expected:\n" << ReplaceHidden(formattedSample) << "\nbut got:\n" << ReplaceHidden(origSample) << "\n");
issue.SetCode(EYqlIssueCode::TIssuesIds_EIssueCode_WARNING, ESeverity::TSeverityIds_ESeverityId_S_WARNING);
res.Issues.AddIssue(issue);
}
diff --git a/yql/essentials/public/fastcheck/linter_ut.cpp b/yql/essentials/public/fastcheck/linter_ut.cpp
index c0315d20cf3..c7f7cb45d20 100644
--- a/yql/essentials/public/fastcheck/linter_ut.cpp
+++ b/yql/essentials/public/fastcheck/linter_ut.cpp
@@ -173,6 +173,26 @@ Y_UNIT_TEST_SUITE(TLinterTests) {
UNIT_ASSERT_VALUES_EQUAL(pos.Column, 13);
}
+ Y_UNIT_TEST(BadFormatYqlHidden) {
+ TChecksRequest request;
+ request.Program = "select\t1 ";
+ request.Syntax = ESyntax::YQL;
+ request.Filters.ConstructInPlace();
+ request.Filters->push_back(TCheckFilter{.CheckNameGlob = "format"});
+ auto res = RunChecks(request);
+ UNIT_ASSERT_VALUES_EQUAL(res.Checks.size(), 1);
+ UNIT_ASSERT_VALUES_EQUAL(res.Checks[0].CheckName, "format");
+ UNIT_ASSERT(!res.Checks[0].Success);
+ UNIT_ASSERT_NO_DIFF(res.Checks[0].Issues.ToString(),
+ "<main>:1:0: Warning: Format mismatch, expected:\n"
+ "SELECT\n"
+ "••••1\n"
+ ";\n\n"
+ "but got:\n"
+ "select→1•\n"
+ ", code: 3\n");
+ }
+
Y_UNIT_TEST(GoodParserSExpr) {
TChecksRequest request;
request.Program = "((return world))";