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

Commit 3fd70ac

Browse files
author
Mikhail Arkhipov
committed
Fix References_GrammarTest_Statements
1 parent 423234f commit 3fd70ac

2 files changed

Lines changed: 18 additions & 4 deletions

File tree

src/Analysis/Engine/Impl/ModuleAnalysis.cs

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -294,15 +294,23 @@ private VariablesResult GetVariablesFromNameExpression(Expression expr, Analysis
294294
mainDefinition = mainDefinition ?? definitions.FirstOrDefault();
295295
if (mainDefinition != null) {
296296
// Drop definitions in outer scopes and convert those in inner scopes to references.
297+
// Exception is when variable is an import as in
298+
// abc = 1
299+
// import abc
300+
var imports = definitions
301+
.Where(d => d.Variable.Variable.Types.Any(t => t.TypeId == BuiltinTypeId.Module) && d.Location.DocumentUri != DocumentUri)
302+
.ToArray();
303+
297304
// Scope levels are numbered in reverse (X == main definition level, x+1 == one up).
298305
var defsToRefs = definitions
306+
.Except(imports)
299307
.Where(d => d != mainDefinition && d.ScopeLevel <= mainDefinition.ScopeLevel)
300308
.Select(v => new VariableScopePair(new AnalysisVariable(v.Variable.Variable, VariableType.Reference, v.Location), v.ScopeLevel));
301309

302310
var others = variables
303311
.Where(v => (v.VariableType == VariableType.Reference || v.VariableType == VariableType.Value) &&
304312
v.ScopeLevel <= mainDefinition.ScopeLevel);
305-
variables = new[] { mainDefinition }.Concat(others.Concat(defsToRefs));
313+
variables = new[] { mainDefinition }.Concat(imports).Concat(others.Concat(defsToRefs));
306314
}
307315

308316
return new VariablesResult(variables.Select(v => v.Variable), unit.Tree);

src/Analysis/Engine/Test/AnalysisTest.cs

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2936,7 +2936,6 @@ print abc
29362936
}
29372937

29382938
[TestMethod, Priority(0)]
2939-
[Ignore("https://github.com/Microsoft/python-language-server/issues/40")]
29402939
public async Task References_GrammarTest_Statements() {
29412940
using (var server = await CreateServerAsync(PythonVersions.LatestAvailable2X)) {
29422941
var uri = TestData.GetDefaultModuleUri();
@@ -2992,12 +2991,19 @@ print abc
29922991
await server.SendDidOpenTextDocument(uri, text);
29932992

29942993
var references = await server.SendFindReferences(uri, 3, 12);
2994+
2995+
// External module 'abc', URI varies depending on install
2996+
var externalUri = references[1].uri;
2997+
externalUri.LocalPath.Should().Contain("abc.py");
2998+
29952999
references.Should().OnlyHaveReferences(
29963000
(uri, (1, 6, 1, 9), ReferenceKind.Definition),
3001+
(externalUri, (0, 0, 0, 0), ReferenceKind.Definition),
3002+
29973003
(uri, (3, 11, 3, 14), ReferenceKind.Reference),
2998-
(uri, (6, 22, 6, 25), ReferenceKind.Definition),
3004+
(uri, (6, 22, 6, 25), ReferenceKind.Reference),
29993005

3000-
(uri, (8, 4, 8, 7), ReferenceKind.Definition),
3006+
(uri, (8, 4, 8, 7), ReferenceKind.Reference),
30013007
(uri, (9, 4, 9, 7), ReferenceKind.Reference),
30023008
(uri, (10, 4, 10, 7), ReferenceKind.Reference),
30033009
(uri, (11, 4, 11, 7), ReferenceKind.Reference),

0 commit comments

Comments
 (0)