Skip to content

Commit 7fb4e67

Browse files
committed
Adjusted signature ranges.
1 parent 3216ae3 commit 7fb4e67

4 files changed

Lines changed: 23 additions & 19 deletions

File tree

Deltinteger/Deltinteger/Compiler/Parse/Parser.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -444,14 +444,14 @@ public IParseExpression GetArrayAndInvokes(IParseExpression expression)
444444
expression = EndNodeFrom(new ValueInArray(expression, index, Lexer.Tokens[Token - 1]), expression.Range.Start);
445445
}
446446
// Invoke
447-
else if (ParseOptional(TokenType.Parentheses_Open))
447+
else if (ParseOptional(TokenType.Parentheses_Open, out Token leftParentheses))
448448
{
449449
// Parse parameters.
450450
var values = ParseParameterValues();
451451
// End the parentheses.
452-
ParseExpected(TokenType.Parentheses_Close);
452+
Token rightParentheses = ParseExpected(TokenType.Parentheses_Close);
453453
// Update the expression.
454-
expression = EndNodeFrom(new FunctionExpression(expression, values), expression.Range.Start);
454+
expression = EndNodeFrom(new FunctionExpression(expression, leftParentheses, rightParentheses, values), expression.Range.Start);
455455
}
456456
// No more array indices or invocations.
457457
else break;

Deltinteger/Deltinteger/Compiler/Syntax Tree/Syntax Tree.cs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -315,12 +315,16 @@ public Hook(IParseExpression variable, IParseExpression value)
315315
public class FunctionExpression : Node, IParseExpression, IParseStatement
316316
{
317317
public IParseExpression Target { get; }
318+
public Token LeftParentheses { get; }
319+
public Token RightParentheses { get; }
318320
public List<ParameterValue> Parameters { get; }
319321
public MetaComment Comment { get; set; }
320322

321-
public FunctionExpression(IParseExpression target, List<ParameterValue> parameters)
323+
public FunctionExpression(IParseExpression target, Token leftParentheses, Token rightParentheses, List<ParameterValue> parameters)
322324
{
323325
Target = target;
326+
LeftParentheses = leftParentheses;
327+
RightParentheses = rightParentheses;
324328
Parameters = parameters;
325329
}
326330

Deltinteger/Deltinteger/Parse/Functions/IInvokeInfo.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,7 @@ public InvokeData(ParseInfo parseInfo, FunctionExpression context, IExpression t
106106
ParseInfo = parseInfo;
107107
Context = context;
108108
TargetRange = context.Target.Range;
109-
CallRange = context.Range;
109+
CallRange = context.LeftParentheses.Range.Start + context.RightParentheses.Range.Start;
110110
Target = target;
111111
Scope = scope;
112112
Getter = getter;

Deltinteger/Deltinteger/Parse/Parameters/OverloadChooser.cs

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,9 @@ public class OverloadChooser
2020
private ParseInfo parseInfo { get; }
2121
private Scope scope { get; }
2222
private Scope getter { get; }
23-
private DocRange genericErrorRange { get; }
2423
public DocRange CallRange { get; }
25-
private OverloadError ErrorMessages { get; }
24+
private OverloadError _errorMessages;
25+
private readonly DocRange _targetRange;
2626

2727
private IParameterCallable[] AllOverloads { get; }
2828
private List<IParameterCallable> CurrentOptions { get; set; }
@@ -44,9 +44,9 @@ public OverloadChooser(IParameterCallable[] overloads, ParseInfo parseInfo, Scop
4444
this.parseInfo = parseInfo;
4545
this.scope = elementScope;
4646
this.getter = getter;
47-
this.genericErrorRange = genericErrorRange;
47+
this._targetRange = genericErrorRange;
4848
CallRange = callRange;
49-
this.ErrorMessages = errorMessages;
49+
this._errorMessages = errorMessages;
5050

5151
parseInfo.Script.AddOverloadData(this);
5252
}
@@ -157,7 +157,7 @@ private OverloadMatch MatchOverload(IParameterCallable option, PickyParameter[]
157157
for (int i = 0; i < match.OrderedParameters.Length; i++) match.CompareParameterTypes(i);
158158

159159
// Get the missing parameters.
160-
match.GetMissingParameters(genericErrorRange, ErrorMessages, context, CallRange);
160+
match.GetMissingParameters(_errorMessages, context, _targetRange, CallRange);
161161

162162
return match;
163163
}
@@ -199,7 +199,7 @@ private void CheckAccessLevel()
199199
else if (!getter.AccessorMatches(scope, Overload.AccessLevel)) accessable = false;
200200

201201
if (!accessable)
202-
parseInfo.Script.Diagnostics.Error(string.Format("'{0}' is inaccessable due to its access level.", Overload.GetLabel(false)), genericErrorRange);
202+
parseInfo.Script.Diagnostics.Error(string.Format("'{0}' is inaccessable due to its access level.", Overload.GetLabel(false)), _targetRange);
203203
}
204204

205205
private bool SetParameterCount(int numberOfParameters)
@@ -215,8 +215,8 @@ private bool SetParameterCount(int numberOfParameters)
215215
if (CurrentOptions.Count == 0)
216216
{
217217
parseInfo.Script.Diagnostics.Error(
218-
string.Format(ErrorMessages.BadParameterCount, numberOfParameters),
219-
genericErrorRange
218+
string.Format(_errorMessages.BadParameterCount, numberOfParameters),
219+
_targetRange
220220
);
221221
return false;
222222
}
@@ -349,33 +349,33 @@ public void CompareParameterTypes(int parameter)
349349
}
350350

351351
/// <summary>Determines if there are any missing parameters.</summary>
352-
public void GetMissingParameters(DocRange genericErrorRange, OverloadError messageHandler, List<ParameterValue> context, DocRange functionCallRange)
352+
public void GetMissingParameters(OverloadError messageHandler, List<ParameterValue> context, DocRange targetRange, DocRange signatureRange)
353353
{
354354
for (int i = 0; i < OrderedParameters.Length; i++)
355355
if (OrderedParameters[i]?.Value == null)
356356
{
357357
if (OrderedParameters[i] == null) OrderedParameters[i] = new PickyParameter(true);
358-
AddContextualParameter(context, functionCallRange, i);
358+
AddContextualParameter(context, signatureRange, targetRange, i);
359359

360360
// Default value
361361
if (Option.Parameters[i].DefaultValue != null)
362362
// Set the default value.
363363
OrderedParameters[i].Value = Option.Parameters[i].DefaultValue;
364364
else
365365
// Parameter is missing.
366-
Error(string.Format(messageHandler.MissingParameter, Option.Parameters[i].Name), genericErrorRange);
366+
Error(string.Format(messageHandler.MissingParameter, Option.Parameters[i].Name), targetRange);
367367
}
368368
}
369369

370-
private void AddContextualParameter(List<ParameterValue> context, DocRange functionCallRange, int parameter)
370+
private void AddContextualParameter(List<ParameterValue> context, DocRange targetRange, DocRange signatureRange, int parameter)
371371
{
372372
// No parameters set, set range for first parameter to callRange.
373373
if (parameter == 0 && OrderedParameters.All(p => p?.Value == null))
374-
OrderedParameters[0].ExpressionRange = functionCallRange;
374+
OrderedParameters[0].ExpressionRange = targetRange;
375375
// If this is the last contextual parameter and the context contains comma, set the expression range so signature help works with the last comma when there is no set expression.
376376
else if (LastContextualParameterIndex == parameter && parameter < context.Count && context[parameter].NextComma != null)
377377
// Set the range to be the end of the comma to the start of the call range.
378-
OrderedParameters[parameter].ExpressionRange = context[parameter].NextComma.Range.End + functionCallRange.End;
378+
OrderedParameters[parameter].ExpressionRange = context[parameter].NextComma.Range.End + signatureRange.End;
379379
}
380380

381381
public void AddDiagnostics(FileDiagnostics diagnostics)

0 commit comments

Comments
 (0)