Skip to content
This repository was archived by the owner on Apr 14, 2022. It is now read-only.

Commit 08d4995

Browse files
author
MikhailArkhipov
committed
Reference filtering (partial)
1 parent b1e5f31 commit 08d4995

2 files changed

Lines changed: 19 additions & 6 deletions

File tree

src/Analysis/Engine/Impl/ModuleAnalysis.cs

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -237,7 +237,15 @@ public VariablesResult GetVariables(Expression expr, SourceLocation location, st
237237
foreach (var defScope in scope.EnumerateTowardsGlobal
238238
.Where(s => s.ContainsVariable(name.Name) && (s == scope || s.VisibleToChildren || IsFirstLineOfFunction(scope, s, location)))) {
239239
var scopeVariables = GetVariablesInScope(name, defScope).Distinct();
240-
variables = variables.Union(scopeVariables);
240+
// Filter our definitions that are below the requested location (such as reassignments)
241+
var above = scopeVariables.Where(v => new SourceLocation(v.Location.StartLine, v.Location.StartColumn) <= location);
242+
variables = variables.Union(above);
243+
244+
// Break at the first definition so we don't spill into global scope
245+
// for similarly named function parameters.
246+
if (scopeVariables.Any(v => v.Type == VariableType.Definition)) {
247+
break;
248+
}
241249
}
242250
}
243251
} else if (expr is MemberExpression member && !string.IsNullOrEmpty(member.Name)) {

src/Analysis/Engine/Test/AnalysisTest.cs

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3132,23 +3132,28 @@ def g():
31323132
print(a)
31333133
assert isinstance(a, int)
31343134
a = 200
3135+
print(a)
31353136
";
31363137
await server.SendDidOpenTextDocument(uri, text);
31373138

31383139
var references = await server.SendFindReferences(uri, 3, 15);
31393140
references.Should().OnlyHaveReferences(
31403141
(uri, (1, 6, 1, 7), ReferenceKind.Definition),
31413142
(uri, (3, 14, 3, 15), ReferenceKind.Reference),
3142-
(uri, (4, 26, 4, 27), ReferenceKind.Reference),
3143-
(uri, (5, 8, 5, 9), ReferenceKind.Definition)
3143+
(uri, (4, 26, 4, 27), ReferenceKind.Reference)
31443144
);
31453145

31463146
references = await server.SendFindReferences(uri, 5, 9);
31473147
references.Should().OnlyHaveReferences(
31483148
(uri, (1, 6, 1, 7), ReferenceKind.Definition),
31493149
(uri, (3, 14, 3, 15), ReferenceKind.Reference),
3150-
(uri, (4, 26, 4, 27), ReferenceKind.Reference),
3151-
(uri, (5, 8, 5, 9), ReferenceKind.Definition)
3150+
(uri, (4, 26, 4, 27), ReferenceKind.Reference)
3151+
);
3152+
3153+
references = await server.SendFindReferences(uri, 6, 15);
3154+
references.Should().OnlyHaveReferences(
3155+
(uri, (5, 9, 5, 10), ReferenceKind.Definition),
3156+
(uri, (6, 15, 6, 16), ReferenceKind.Reference)
31523157
);
31533158
}
31543159
}
@@ -4367,7 +4372,7 @@ def f(a, b, c=0):
43674372
var uri = await server.OpenDefaultDocumentAndGetUriAsync(code);
43684373
var signatures = await server.SendSignatureHelp(uri, 6, 2);
43694374

4370-
signatures.Should().OnlyHaveSignature("f(a: float, int, str, b: float, int, str, c: float, int, str=0)");
4375+
signatures.Should().OnlyHaveSignature("f(a, b, c: int=0)");
43714376
}
43724377
}
43734378

0 commit comments

Comments
 (0)