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

Commit 67fed10

Browse files
author
MikhailArkhipov
committed
Unify package search in imports
1 parent 08b5971 commit 67fed10

File tree

2 files changed

+13
-10
lines changed

2 files changed

+13
-10
lines changed

src/Analysis/Ast/Impl/Analyzer/Handlers/FromImportHandler.cs

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -40,10 +40,8 @@ public bool HandleFromImport(FromImportStatement node) {
4040
}
4141
}
4242

43-
var imports = ModuleResolution.CurrentPathResolver.FindImports(Module.FilePath, node);
44-
if (HandleImportSearchResult(imports, null, null, node.Root, out var variableModule)) {
45-
AssignVariables(node, imports, variableModule);
46-
}
43+
FindModule(node.Root, null, node.ForceAbsolute, out var firstModule, out var lastModule, out _, out var imports);
44+
AssignVariables(node, imports, lastModule);
4745
return false;
4846
}
4947

@@ -82,7 +80,7 @@ private void HandleModuleImportStar(PythonVariableModule variableModule, bool is
8280
}
8381

8482
// If __all__ is present, take it, otherwise declare all members from the module that do not begin with an underscore.
85-
var memberNames = isImplicitPackage
83+
var memberNames = isImplicitPackage
8684
? variableModule.GetMemberNames()
8785
: variableModule.Analysis.StarImportMemberNames ?? variableModule.GetMemberNames().Where(s => !s.StartsWithOrdinal("_"));
8886

src/Analysis/Ast/Impl/Analyzer/Handlers/ImportHandler.cs

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -49,17 +49,19 @@ public bool HandleImport(ImportStatement node) {
4949
return false;
5050
}
5151

52-
private void HandleImport(ModuleName moduleImportExpression, NameExpression asNameExpression, bool forceAbsolute) {
52+
private void FindModule(ModuleName moduleImportExpression, NameExpression asNameExpression, bool forceAbsolute,
53+
out PythonVariableModule firstModule, out PythonVariableModule lastModule, out ImmutableArray<string> importNames, out IImportSearchResult imports) {
5354
// "import fob.oar.baz" means
5455
// import_module('fob')
5556
// import_module('fob.oar')
5657
// import_module('fob.oar.baz')
57-
var importNames = ImmutableArray<string>.Empty;
58-
var lastModule = default(PythonVariableModule);
59-
var firstModule = default(PythonVariableModule);
58+
importNames = ImmutableArray<string>.Empty;
59+
lastModule = default;
60+
firstModule = default;
61+
imports = null;
6062
foreach (var nameExpression in moduleImportExpression.Names) {
6163
importNames = importNames.Add(nameExpression.Name);
62-
var imports = ModuleResolution.CurrentPathResolver.GetImportsFromAbsoluteName(Module.FilePath, importNames, forceAbsolute);
64+
imports = ModuleResolution.CurrentPathResolver.GetImportsFromAbsoluteName(Module.FilePath, importNames, forceAbsolute);
6365
if (!HandleImportSearchResult(imports, lastModule, asNameExpression, moduleImportExpression, out lastModule)) {
6466
lastModule = default;
6567
break;
@@ -69,7 +71,10 @@ private void HandleImport(ModuleName moduleImportExpression, NameExpression asNa
6971
firstModule = lastModule;
7072
}
7173
}
74+
}
7275

76+
private void HandleImport(ModuleName moduleImportExpression, NameExpression asNameExpression, bool forceAbsolute) {
77+
FindModule(moduleImportExpression, asNameExpression, forceAbsolute, out var firstModule, out var lastModule, out var importNames, out _);
7378
// "import fob.oar.baz as baz" is handled as baz = import_module('fob.oar.baz')
7479
// "import fob.oar.baz" is handled as fob = import_module('fob')
7580
if (!string.IsNullOrEmpty(asNameExpression?.Name) && lastModule != default) {

0 commit comments

Comments
 (0)