I am trying to find all missing import statements and errors for each module and its sub modules.
Is there a dedicated tool for what I am trying to do?
The code that I wrote, but seems really terrible and maybe something like this exists already?:
import os
def find_missing_imports(walk):
for items in walk:
d = items[0]
f_list = items[1]
for f in f_list:
module = f[:-3]
# posix_path
module_path = d.lstrip('.').replace('/','.').lstrip('.')
try:
__import__(module_path, fromlist=[module])
except IndentationError, e:
#print(f,e)
pass
except NameError, e:
print(d,f,e)
pass
except Exception, e:
print(f,e)
pass
walk = [[root,files] for root,dirs,files in os.walk('.') for fn in files if fn.endswith('.py')]
find_missing_imports(walk)
Outputs:
.[snip]
('./Sky_Group_Inventory_Scanner-wxpython/display_image/Dialogs', 'ImageSelectionFrame.py', NameError("name 'wx' is not defined",))
('./Sky_Group_Inventory_Scanner-wxpython/display_image/Dialogs', 'ItemSpecificsDialog.py', NameError("name 'wx' is not defined",))
('./Sky_Group_Inventory_Scanner-wxpython/display_image/Dialogs', 'ReturnCorrectWatchTitle.py', NameError("name 'wx' is not defined",))
.[snip]
My project before refactoring was a mess but sort of useful, now its broken after refactoring.
After reading 'The Pragmatic Programmer' based on suggestions from my initial post on codereview:
I have been digging around in the source code of:
/usr/local/lib/python2.7/dist-packages/rope
Documentation for ROPE seems a little sparse. I have also been using Ninja-IDE, but haven't been able to find a solution for the problem that I am facing.
Overall I think I missed the boat on what refactoring is all about.
The current parent directory layout can be seen here.
In comparison to what it was before.
Any help, on filling in missing terminology, or on what I am even asking would be great.
pylint -E /path/to/module
pip install pylint
Point pylint to the folder/module in question:
pylint /path/to/module > pylint_output
Where /path/to/module
is the location of the python module you're interested in looking at.
For example:
my_project
|____ moduleA
|____ __init__.py
|____ A.py
|____ moduleB
|____ __init__.py
|____ B.py
./my_project/moduleA
./my_project/moduleB
This will create a file with Global Evaluations on:
Of interest and the direct answer to my question is that within the pylint results there will be lines that have this sort of layout:
************* Module module_name.sub_module.class_name.method_name
R: line_no, column: Issue description 'some_name' (issue-type)
C: line_no, column: Issue description 'some_name' (issue-type)
W: line_no, column: Issue description 'some_name' (issue-type)
E: line_no, column: Issue description 'some_name' (issue-type)
F: line_no, column: Issue description 'some_name' (issue-type)
************* Module module_name.sub_module.class_name.method_name
R: line_no, column: Issue description 'some_name' (issue-type)
C: line_no, column: Issue description 'some_name' (issue-type)
W: line_no, column: Issue description 'some_name' (issue-type)
E: line_no, column: Issue description 'some_name' (issue-type)
F: line_no, column: Issue description 'some_name' (issue-type)
So an issue-type of (undefined-variable) in most of my cases indicate modules that have not been imported. pylint -E /path/to/module
will return only the undefined-variable errors.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With