summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorvitya-smirnov <[email protected]>2025-07-03 14:40:24 +0300
committervitya-smirnov <[email protected]>2025-07-03 15:02:48 +0300
commitfdc3ed2f3a53f64b189d53b2cb81513916a78dc3 (patch)
treee9749f48aeb08f70fbbd2802c955b9d8a8c100b6
parenta4b1cf6267fe6389feafed4bad620bd7a827b23a (diff)
YQL-19747: Support LSP FilterText
LSP protocol has a property ``` /** * A string that should be used when filtering a set of * completion items. When omitted the label is used as the * filter text for this item. */ filterText?: string; ``` It is useful, e.g. when we prepend some punctuation at a candidate content, but still want to filter by prefix, ignoring that punctuation. Related to https://nda.ya.ru/t/KCkzjhXS7G3Epg. commit_hash:01f258218d312eef764350bd4d78da15acb8c9ea
-rw-r--r--yql/essentials/sql/v1/complete/analysis/global/column.cpp2
-rw-r--r--yql/essentials/sql/v1/complete/sql_complete.cpp8
-rw-r--r--yql/essentials/sql/v1/complete/sql_complete.h2
-rw-r--r--yql/essentials/sql/v1/complete/syntax/format.cpp12
-rw-r--r--yql/essentials/sql/v1/complete/syntax/format.h3
5 files changed, 20 insertions, 7 deletions
diff --git a/yql/essentials/sql/v1/complete/analysis/global/column.cpp b/yql/essentials/sql/v1/complete/analysis/global/column.cpp
index 92665063690..9b6161dc3b8 100644
--- a/yql/essentials/sql/v1/complete/analysis/global/column.cpp
+++ b/yql/essentials/sql/v1/complete/analysis/global/column.cpp
@@ -49,7 +49,7 @@ namespace NSQLComplete {
std::any visitTerminal(antlr4::tree::TerminalNode* node) override {
switch (node->getSymbol()->getType()) {
case SQLv1::TOKEN_ID_QUOTED:
- return Unquoted(GetText(node));
+ return TString(Unquoted(GetText(node)));
case SQLv1::TOKEN_ID_PLAIN:
return GetText(node);
}
diff --git a/yql/essentials/sql/v1/complete/sql_complete.cpp b/yql/essentials/sql/v1/complete/sql_complete.cpp
index 282ceca41b1..fa84e749a8c 100644
--- a/yql/essentials/sql/v1/complete/sql_complete.cpp
+++ b/yql/essentials/sql/v1/complete/sql_complete.cpp
@@ -20,6 +20,14 @@
namespace NSQLComplete {
+ TString TCandidate::FilterText() const {
+ TStringBuf text = Content;
+ if (IsQuoted(text)) {
+ text = Unquoted(text);
+ }
+ return ToLowerUTF8(text);
+ }
+
class TSqlCompletionEngine: public ISqlCompletionEngine {
public:
TSqlCompletionEngine(
diff --git a/yql/essentials/sql/v1/complete/sql_complete.h b/yql/essentials/sql/v1/complete/sql_complete.h
index 3387019e25f..41fb67fc090 100644
--- a/yql/essentials/sql/v1/complete/sql_complete.h
+++ b/yql/essentials/sql/v1/complete/sql_complete.h
@@ -41,6 +41,8 @@ namespace NSQLComplete {
size_t CursorShift = 0;
friend bool operator==(const TCandidate& lhs, const TCandidate& rhs) = default;
+
+ TString FilterText() const;
};
struct TCompletion {
diff --git a/yql/essentials/sql/v1/complete/syntax/format.cpp b/yql/essentials/sql/v1/complete/syntax/format.cpp
index f85c93dd085..824ab0c7529 100644
--- a/yql/essentials/sql/v1/complete/syntax/format.cpp
+++ b/yql/essentials/sql/v1/complete/syntax/format.cpp
@@ -44,17 +44,19 @@ namespace NSQLComplete {
return GetSqlGrammar().IsPlainIdentifier(content);
}
+ bool IsQuoted(TStringBuf content) {
+ return 2 <= content.size() && content.front() == '`' && content.back() == '`';
+ }
+
TString Quoted(TString content) {
content.prepend('`');
content.append('`');
return content;
}
- TString Unquoted(TString content) {
- Y_ENSURE(2 <= content.size() && content.front() == '`' && content.back() == '`');
- content.erase(0, 1);
- content.pop_back();
- return content;
+ TStringBuf Unquoted(TStringBuf content) {
+ Y_ENSURE(IsQuoted(content));
+ return content.SubStr(1, content.size() - 2);
}
} // namespace NSQLComplete
diff --git a/yql/essentials/sql/v1/complete/syntax/format.h b/yql/essentials/sql/v1/complete/syntax/format.h
index ea3274ccf5d..4c5167ceaa1 100644
--- a/yql/essentials/sql/v1/complete/syntax/format.h
+++ b/yql/essentials/sql/v1/complete/syntax/format.h
@@ -7,7 +7,8 @@ namespace NSQLComplete {
TString FormatKeywords(const TVector<TString>& seq);
bool IsPlain(TStringBuf content);
+ bool IsQuoted(TStringBuf content);
TString Quoted(TString content);
- TString Unquoted(TString content);
+ TStringBuf Unquoted(TStringBuf content);
} // namespace NSQLComplete