@@ -136,8 +136,14 @@ def complete(cursor_offset, line):
136136def find_modules (path ):
137137 """Find all modules (and packages) for a given directory."""
138138
139- #global nameSubname
140- #nameSubname = []
139+ global nameSubname
140+ nameSubname = []
141+
142+ #Decides if you are using the first method: usng name subname (1),
143+ # the second method: using pathname (2) or the original (3)
144+ global useNameSubname
145+ useNameSubname = 3
146+ #print("useNameSubname:", useNameSubname)
141147
142148 if not os .path .isdir (path ):
143149 # Perhaps a zip file
@@ -195,40 +201,51 @@ def find_modules(path):
195201 continue
196202 else :
197203 if is_package :
198- pathGood = True
199-
200- pathList = re .split ("[/]" , pathname )
201- #print("pathL length:", len(pathList))
202- #for pathL in pathList:
203- #print("pathL:", pathL)
204-
205- for folder in range (len (pathList ) - 2 ):
206- if pathList [folder ] == pathList [len (pathList ) - 1 ]:
207- pathGood = False
208- #print(pathGood)
209- #print()
210- if pathGood :
211- #pathNameList.append(pathname)
212- #print("PathGood len", len(pathNameList), pathname)
204+ pathGood = False
205+ if useNameSubname == 2 :
206+ pathGood = True
207+
208+ pathList = re .split ("[/]" , pathname )
209+ #print("pathL length:", len(pathList))
210+ #for pathL in pathList:
211+ #print("pathL:", pathL)
212+
213+ #I did path len - 2 because I am worried about folders like bpython/bpython
214+ # but if it is a symbolic link it will stop at bpython/bpython/bpython
215+ for folder in range (len (pathList ) - 2 ):
216+ if pathList [folder ] == pathList [len (pathList ) - 1 ]:
217+ pathGood = False
218+ #print(pathGood)
219+ #print()
220+ if useNameSubname == 1 or pathGood :
221+ for subname in find_modules (pathname ):
222+ if subname != "__init__" :
223+ #If trying the first method using name and subname
224+ if useNameSubname == 1 :
225+ doNotAppend = False
226+ #print("name: ", name, " subname: ", subname)
227+ for obj in nameSubname :
228+ nam = obj [0 ]
229+ subnam = obj [1 ]
230+ #print("name: ", name, " nam: ", nam, " subname: ", subname, " subnam: ", subnam)
231+ if (name == nam and subname == subnam ) or \
232+ any (name in sub for sub in re .split ("[.]" , subnam )):
233+ #print("Excluded: ", name, subname, "because ", nam, subnam)
234+ doNotAppend = True
235+ break
236+ #print()
237+ if not doNotAppend :
238+ nameSubname .append ((name , subname ))
239+ #print(name, subname)
240+ yield "%s.%s" % (name , subname )
241+ #If trying seconf methond using the pathname
242+ else :
243+ yield "%s.%s" % (name , subname )
244+ elif useNameSubname == 3 :
213245 for subname in find_modules (pathname ):
214246 if subname != "__init__" :
215- #doNotAppend = False
216- #print("name: ", name, " subname: ", subname)
217- #for obj in nameSubname:
218- #nam = obj[0]
219- #subnam = obj[1]
220- #print("name: ", name, " nam: ", nam, " subname: ", subname, " subnam: ", subnam)
221- #if (name == nam and subname == subnam) or \
222- #any(name in sub for sub in re.split("[.]", subnam)):
223- #print("Excluded: ", name, subname, "because ", nam, subnam)
224- #doNotAppend = True
225- #break
226- #print()
227- #if not doNotAppend:
228- #nameSubname.append((name, subname))
229- print (name , subname )
230- yield "%s.%s" % (name , subname )
231- print (name )
247+ yield "%s.%s" % (name , subname )
248+ #print("Name: ", name)
232249 yield name
233250
234251def find_all_modules (path = None ):
0 commit comments