What uses that callable?
Hello people. Assume you have a software system that is self-contained: you do not need to concern yourself with client code that is outside that tree (because there is none, or you arbitrarily declare it unimportant as a simplifying assumption). Is there a tool for Python that can assess whether a given function (or list of functions, method or list of methods) is used or not, within that source tree? grep, which is what I've been using, only goes so far. It finds comments, and it finds methods by name independent of what class they are associated with. I have a feeling there are IDE's that do this. These I'm interested in, but I'm a bit more interested in standalone tools apart from a GUI. Thanks.
Hi,
I'm using vulture to find dead code:
https://pypi.org/project/vulture/
In my case it just generates a list of warnings for the whole project, but it should be simple to retrieve information about just one callable from its output.
Best regards, Ulf
Am 26. Oktober 2022 01:19:16 MESZ schrieb Dan Stromberg
Hello people.
Assume you have a software system that is self-contained: you do not need to concern yourself with client code that is outside that tree (because there is none, or you arbitrarily declare it unimportant as a simplifying assumption).
Is there a tool for Python that can assess whether a given function (or list of functions, method or list of methods) is used or not, within that source tree?
grep, which is what I've been using, only goes so far. It finds comments, and it finds methods by name independent of what class they are associated with.
I have a feeling there are IDE's that do this. These I'm interested in, but I'm a bit more interested in standalone tools apart from a GUI.
Thanks.
Hi Dan, jedi [1] or a python language server implementation (e.g. [2]) can probably help you finding all the usages of a function or class (for methods you will to have need decent typing information). Here is a little example using jedi: import jedi code = '''\ class Foo: def used(self): pass def unused(self): pass def my_func(f: Foo): f.used() def my_unused_func(): pass def main(): my_func(Foo()) ''' script = jedi.Script(code) definitions = script.get_names(definitions=True) while definitions: name = definitions.pop() if name.type == 'class': definitions.extend(name.defined_names()) elif name.type == 'function': usages = [ ref for ref in script.get_references(line=name.line, column=name.column) if not ref.is_definition() ] print(name.full_name, " <- UNUSED" if not usages else "") Please note that the notion of unused code is not transitive in this example, ie. you will have to remove unused functions and run it again to see if you have new results. Also note that jedi probably cuts some corners and the results are not 100% accurate all the time. Finally, note that this will be pretty slow on larger code bases :-) Cheers, Martin [1] https://pypi.org/project/jedi/ [2] https://github.com/palantir/python-language-server On 26.10.22 01:19, Dan Stromberg wrote:
Hello people.
Assume you have a software system that is self-contained: you do not need to concern yourself with client code that is outside that tree (because there is none, or you arbitrarily declare it unimportant as a simplifying assumption).
Is there a tool for Python that can assess whether a given function (or list of functions, method or list of methods) is used or not, within that source tree?
grep, which is what I've been using, only goes so far. It finds comments, and it finds methods by name independent of what class they are associated with.
I have a feeling there are IDE's that do this. These I'm interested in, but I'm a bit more interested in standalone tools apart from a GUI.
Thanks.
_______________________________________________ code-quality mailing list -- code-quality@python.org To unsubscribe send an email to code-quality-leave@python.org https://mail.python.org/mailman3/lists/code-quality.python.org/ Member address: martin@vielsmaier.net
participants (3)
-
Dan Stromberg
-
Martin Vielsmaier
-
Ulf Rompe