@@ -209,42 +209,80 @@ namespace NSQLComplete {
209
209
if constexpr (std::is_base_of_v<TKeyword, T>) {
210
210
TVector<TString>& seq = context.Keywords [name.Content ];
211
211
seq.insert (std::begin (seq), name.Content );
212
- return {ECandidateKind::Keyword, FormatKeywords (seq)};
212
+
213
+ TCandidate candidate = {
214
+ .Kind = ECandidateKind::Keyword,
215
+ .Content = FormatKeywords (seq),
216
+ };
217
+
218
+ if (candidate.Content .EndsWith (' (' )) {
219
+ candidate.Content += ' )' ;
220
+ candidate.CursorShift = 1 ;
221
+ }
222
+
223
+ return candidate;
213
224
}
214
225
215
226
if constexpr (std::is_base_of_v<TPragmaName, T>) {
216
227
return {ECandidateKind::PragmaName, std::move (name.Indentifier )};
217
228
}
218
229
219
230
if constexpr (std::is_base_of_v<TTypeName, T>) {
231
+ TCandidate candidate = {
232
+ .Kind = ECandidateKind::TypeName,
233
+ .Content = std::move (name.Indentifier ),
234
+ };
235
+
220
236
switch (name.Kind ) {
221
237
case TTypeName::EKind::Simple: {
222
238
} break ;
223
239
case TTypeName::EKind::Container: {
224
- name.Indentifier += " <" ;
240
+ candidate.Content += " <>" ;
241
+ candidate.CursorShift = 1 ;
225
242
} break ;
226
243
case TTypeName::EKind::Parameterized: {
227
- name.Indentifier += " (" ;
244
+ candidate.Content += " ()" ;
245
+ candidate.CursorShift = 1 ;
228
246
} break ;
229
247
}
230
- return {ECandidateKind::TypeName, std::move (name.Indentifier )};
248
+
249
+ return candidate;
231
250
}
232
251
233
252
if constexpr (std::is_base_of_v<TFunctionName, T>) {
234
- name.Indentifier += " (" ;
235
- return {ECandidateKind::FunctionName, std::move (name.Indentifier )};
253
+ TCandidate candidate = {
254
+ .Kind = ECandidateKind::FunctionName,
255
+ .Content = std::move (name.Indentifier ),
256
+ };
257
+
258
+ candidate.Content += " ()" ;
259
+ candidate.CursorShift = 1 ;
260
+
261
+ return candidate;
236
262
}
237
263
238
264
if constexpr (std::is_base_of_v<THintName, T>) {
239
265
return {ECandidateKind::HintName, std::move (name.Indentifier )};
240
266
}
241
267
242
268
if constexpr (std::is_base_of_v<TFolderName, T>) {
243
- name.Indentifier .append (' /' );
269
+ TCandidate candidate = {
270
+ .Kind = ECandidateKind::FolderName,
271
+ .Content = std::move (name.Indentifier ),
272
+ };
273
+
244
274
if (!context.IsQuoted .AtLhs ) {
245
- name.Indentifier .prepend (' `' );
275
+ candidate.Content .prepend (' `' );
276
+ }
277
+
278
+ candidate.Content .append (' /' );
279
+
280
+ if (!context.IsQuoted .AtRhs ) {
281
+ candidate.Content .append (' `' );
282
+ candidate.CursorShift = 1 ;
246
283
}
247
- return {ECandidateKind::FolderName, std::move (name.Indentifier )};
284
+
285
+ return candidate;
248
286
}
249
287
250
288
if constexpr (std::is_base_of_v<TTableName, T>) {
@@ -396,5 +434,9 @@ void Out<NSQLComplete::ECandidateKind>(IOutputStream& out, NSQLComplete::ECandid
396
434
397
435
template <>
398
436
void Out<NSQLComplete::TCandidate>(IOutputStream& out, const NSQLComplete::TCandidate& value) {
399
- out << " {" << value.Kind << " , \" " << value.Content << " \" }" ;
437
+ out << " {" << value.Kind << " , \" " << value.Content << " \" " ;
438
+ if (value.CursorShift != 0 ) {
439
+ out << " , " << value.CursorShift ;
440
+ }
441
+ out << " }" ;
400
442
}
0 commit comments