Skip to content

Commit 904f4a9

Browse files
author
Kusto Build System
committed
Auto-sync from Azure-Kusto-Service
1 parent 155c48c commit 904f4a9

19 files changed

Lines changed: 8097 additions & 11808 deletions

src/Kusto.Language/Binder/Binder_ContextBuilder.cs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -471,10 +471,20 @@ public override void VisitInlineExternalTableExpression(InlineExternalTableExpre
471471
}
472472
}
473473

474+
public override void VisitPartialCommand(PartialCommand node)
475+
{
476+
base.VisitPartialCommand(node);
477+
SetCommandContext(node);
478+
}
479+
474480
public override void VisitCustomCommand(CustomCommand node)
475481
{
476482
base.VisitCustomCommand(node);
483+
SetCommandContext(node);
484+
}
477485

486+
private void SetCommandContext(SyntaxNode node)
487+
{
478488
var nearestTableRef = node.GetDescendants<NameReference>(nr => nr.ReferencedSymbol is TableSymbol)
479489
.Where(nr => nr.End <= _position)
480490
.LastOrDefault();

src/Kusto.Language/Binder/Binder_Names.cs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -358,8 +358,7 @@ private static string GetFunctionName(CustomNode node)
358358

359359
private static bool IsInsideControlCommand(SyntaxNode location)
360360
{
361-
// so far, only control commands use CustomNode
362-
return location.GetFirstAncestor<CustomNode>() != null;
361+
return location.GetFirstAncestor<Command>() != null;
363362
}
364363

365364
private static bool IsInsideControlCommandProper(SyntaxNode location)

src/Kusto.Language/Binder/Binder_NodeBinder.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4573,6 +4573,11 @@ public override SemanticInfo VisitCustomCommand(CustomCommand node)
45734573
return null;
45744574
}
45754575

4576+
public override SemanticInfo VisitPartialCommand(PartialCommand node)
4577+
{
4578+
return null;
4579+
}
4580+
45764581
public override SemanticInfo VisitUnknownCommand(UnknownCommand node)
45774582
{
45784583
return null;

src/Kusto.Language/Binder/Binder_TreeBinder.cs

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1010,9 +1010,12 @@ public override void VisitNameReference(NameReference node)
10101010
private static bool IsCommandButNotQueryPart(SyntaxNode node)
10111011
{
10121012
// if the name/path is a part of a command expression
1013-
while (node.Parent is PathExpression p)
1013+
while (node.Parent is PathExpression
1014+
|| node.Parent is SeparatedElement
1015+
|| node.Parent is SyntaxList
1016+
)
10141017
{
1015-
node = p.Parent;
1018+
node = node.Parent;
10161019
}
10171020

10181021
return node.Parent is Command

src/Kusto.Language/Editor/Kusto/AnnotatedParserFinder.cs

Lines changed: 29 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -16,13 +16,14 @@ internal class AnnotatedParserFinder<TInput> : ParserVisitor<TInput, int, int>
1616
{
1717
private Source<TInput> _source;
1818
private readonly int _findOffset;
19-
private readonly List<Parser<TInput>> _path;
19+
private readonly List<ParserAndIndex<TInput>> _path;
2020
private readonly List<Parser<TInput>> _results;
2121
private readonly List<ParserPath<TInput>> _pathResults;
2222
private bool _prevWasMissing;
2323
private int _missingCount;
2424
private int _listMissingCount;
2525

26+
2627
private AnnotatedParserFinder(
2728
Source<TInput> source,
2829
int findOffset,
@@ -31,7 +32,7 @@ private AnnotatedParserFinder(
3132
_source = source;
3233
_findOffset = findOffset;
3334
_prevWasMissing = false;
34-
_path = new List<Parser<TInput>>();
35+
_path = new List<ParserAndIndex<TInput>>();
3536
_results = new List<Parser<TInput>>();
3637
_pathResults = paths;
3738
}
@@ -42,7 +43,7 @@ private AnnotatedParserFinder(
4243
public static IReadOnlyList<Parser<TInput>> FindParsers(Source<TInput> source, int findOffset, Parser<TInput> root, int start)
4344
{
4445
var finder = new AnnotatedParserFinder<TInput>(source, findOffset, null);
45-
finder.Find(root, start);
46+
finder.Find(root, 0, start);
4647
return finder._results;
4748
}
4849

@@ -53,14 +54,14 @@ public static IReadOnlyList<ParserPath<TInput>> FindPaths(Source<TInput> source,
5354
{
5455
var paths = new List<ParserPath<TInput>>();
5556
var finder = new AnnotatedParserFinder<TInput>(source, findOffset, paths);
56-
finder.Find(root, start);
57+
finder.Find(root, 0, start);
5758
return paths;
5859
}
5960

6061
private const int MaxDepth = 400;
6162
private int _depth;
6263

63-
private int Find(Parser<TInput> parser, int start)
64+
private int Find(Parser<TInput> parser, int indexInParent, int start)
6465
{
6566
if (_depth >= MaxDepth)
6667
{
@@ -74,7 +75,7 @@ private int Find(Parser<TInput> parser, int start)
7475
int len;
7576

7677
// add parser to path
77-
_path.Add(parser);
78+
_path.Add(new ParserAndIndex<TInput>(parser, indexInParent));
7879

7980
if (parser.IsHidden)
8081
{
@@ -117,15 +118,15 @@ private int Find(Parser<TInput> parser, int start)
117118

118119
public override int VisitApply<TLeft, TOutput>(ApplyParser<TInput, TLeft, TOutput> parser, int start)
119120
{
120-
var leftLen = Find(parser.LeftParser, start);
121+
var leftLen = Find(parser.LeftParser, 0, start);
121122
if (leftLen < 0)
122123
{
123124
return leftLen;
124125
}
125126

126127
while (true)
127128
{
128-
var rightLen = Find(parser.RightParser, start + leftLen);
129+
var rightLen = Find(parser.RightParser, 1, start + leftLen);
129130
if (rightLen < 0)
130131
{
131132
if (parser.ApplyKind == ApplyKind.One)
@@ -177,7 +178,7 @@ private int VisitFirstOrBest(IReadOnlyList<Parser<TInput>> parsers, int start, b
177178
_prevWasMissing = oldPrevWasMissing;
178179
_missingCount = oldMissingCount;
179180

180-
n = Find(p, start);
181+
n = Find(p, i, start);
181182

182183
if (i == 0)
183184
{
@@ -207,7 +208,7 @@ private int VisitFirstOrBest(IReadOnlyList<Parser<TInput>> parsers, int start, b
207208

208209
public override int VisitConvert<TOutput>(ConvertParser<TInput, TOutput> parser, int start)
209210
{
210-
return Find(parser.Pattern, start);
211+
return Find(parser.Pattern, 0, start);
211212
}
212213

213214
public override int VisitFails(FailsParser<TInput> parser, int start)
@@ -229,7 +230,7 @@ public override int VisitFirst(FirstParser<TInput> parser, int start)
229230

230231
public override int VisitForward<TOutput>(ForwardParser<TInput, TOutput> parser, int start)
231232
{
232-
return Find(parser.DeferredParser(), start);
233+
return Find(parser.DeferredParser(), 0, start);
233234
}
234235

235236
public override int VisitIf<TOutput>(IfParser<TInput, TOutput> parser, int start)
@@ -240,12 +241,12 @@ public override int VisitIf<TOutput>(IfParser<TInput, TOutput> parser, int start
240241
var length = parser.Test.Scan(_source, start);
241242
if (length >= 0)
242243
{
243-
Find(parser.Test, start); // find annotations inside test too
244-
length = Find(parser.Parser, start);
244+
Find(parser.Test, 0, start); // find annotations inside test too
245+
length = Find(parser.Parser, 1, start);
245246
}
246247
else
247248
{
248-
length = Find(parser.Test, start);
249+
length = Find(parser.Test, 0, start);
249250
}
250251

251252
if (length < 0)
@@ -265,11 +266,12 @@ public override int VisitIf(IfParser<TInput> parser, int start)
265266
var length = parser.Test.Scan(_source, start);
266267
if (length >= 0)
267268
{
268-
length = Find(parser.Parser, start);
269+
Find(parser.Test, 0, start); // find annotations inside test too
270+
length = Find(parser.Parser, 1,start);
269271
}
270272
else
271273
{
272-
length = Find(parser.Test, start);
274+
length = Find(parser.Test, 0, start);
273275
}
274276

275277
if (length < 0)
@@ -288,7 +290,7 @@ public override int VisitLimit<TOutput>(LimitParser<TInput, TOutput> parser, int
288290
{
289291
var oldSource = _source;
290292
_source = new LimitSource<TInput>(_source, start + len);
291-
var result = Find(parser.Limited, start);
293+
var result = Find(parser.Limited, 0,start);
292294
_source = oldSource;
293295
return result;
294296
}
@@ -347,15 +349,15 @@ public override int VisitNot(NotParser<TInput> parser, int start)
347349

348350
public override int VisitOneOrMore(OneOrMoreParser<TInput> parser, int start)
349351
{
350-
int len = Find(parser.Parser, start);
352+
int len = Find(parser.Parser, 0, start);
351353
if (len < 0)
352354
return len;
353355

354356
var totalLen = 0;
355357
while (len > 0)
356358
{
357359
totalLen += len;
358-
len = Find(parser.Parser, start + totalLen);
360+
len = Find(parser.Parser, 0, start + totalLen);
359361
}
360362

361363
return totalLen;
@@ -365,7 +367,7 @@ public override int VisitOptional<TOutput>(OptionalParser<TInput, TOutput> parse
365367
{
366368
var oldPrevWasMissing = _prevWasMissing;
367369

368-
var len = Find(parser.Parser, start);
370+
var len = Find(parser.Parser, 0,start);
369371
if (len < 0)
370372
{
371373
_prevWasMissing = oldPrevWasMissing;
@@ -377,12 +379,12 @@ public override int VisitOptional<TOutput>(OptionalParser<TInput, TOutput> parse
377379

378380
public override int VisitProduce<TOutput>(ProduceParser<TInput, TOutput> parser, int start)
379381
{
380-
return Find(parser.Parser, start);
382+
return Find(parser.Parser, 0, start);
381383
}
382384

383385
public override int VisitRequired<TOutput>(RequiredParser<TInput, TOutput> parser, int start)
384386
{
385-
var len = Find(parser.Parser, start);
387+
var len = Find(parser.Parser, 0,start);
386388
if (len < 0)
387389
{
388390
_prevWasMissing = true;
@@ -409,7 +411,7 @@ private int VisitSequence(IReadOnlyList<Parser<TInput>> parsers, int start)
409411

410412
for (int i = 0; i < parsers.Count; i++)
411413
{
412-
var len = Find(parsers[i], start + totalLen);
414+
var len = Find(parsers[i], i, start + totalLen);
413415
if (len < 0)
414416
{
415417
return len - totalLen;
@@ -427,22 +429,22 @@ public override int VisitZeroOrMore(ZeroOrMoreParser<TInput> parser, int start)
427429

428430
if (parser.ZeroOrOne)
429431
{
430-
var len = Find(parser.Parser, start);
432+
var len = Find(parser.Parser, 0, start);
431433
if (len > 0)
432434
{
433435
totalLen += len;
434-
len = Find(parser.Parser, start + len);
436+
len = Find(parser.Parser, 0, start + len);
435437
if (len > 0)
436438
totalLen += len;
437439
}
438440
}
439441
else
440442
{
441-
var len = Find(parser.Parser, start);
443+
var len = Find(parser.Parser, 0, start);
442444
while (len > 0)
443445
{
444446
totalLen += len;
445-
len = Find(parser.Parser, start + totalLen);
447+
len = Find(parser.Parser, 0, start + totalLen);
446448
}
447449
}
448450

0 commit comments

Comments
 (0)