Index: third_party/pylint/pylint/pyreverse/main.py |
diff --git a/third_party/pylint/pylint/pyreverse/main.py b/third_party/pylint/pylint/pyreverse/main.py |
new file mode 100644 |
index 0000000000000000000000000000000000000000..408c1722413326c3d9ec2ad8abf32f5ae81be12c |
--- /dev/null |
+++ b/third_party/pylint/pylint/pyreverse/main.py |
@@ -0,0 +1,124 @@ |
+# # Copyright (c) 2000-2013 LOGILAB S.A. (Paris, FRANCE). |
+# http://www.logilab.fr/ -- mailto:contact@logilab.fr |
+# |
+# This program is free software; you can redistribute it and/or modify it under |
+# the terms of the GNU General Public License as published by the Free Software |
+# Foundation; either version 2 of the License, or (at your option) any later |
+# version. |
+# |
+# This program is distributed in the hope that it will be useful, but WITHOUT |
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS |
+# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. |
+# |
+# You should have received a copy of the GNU General Public License along with |
+# this program; if not, write to the Free Software Foundation, Inc., |
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. |
+""" |
+ %prog [options] <packages> |
+ |
+ create UML diagrams for classes and modules in <packages> |
+""" |
+from __future__ import print_function |
+ |
+import sys, os |
+from logilab.common.configuration import ConfigurationMixIn |
+from astroid.manager import AstroidManager |
+from astroid.inspector import Linker |
+ |
+from pylint.pyreverse.diadefslib import DiadefsHandler |
+from pylint.pyreverse import writer |
+from pylint.pyreverse.utils import insert_default_options |
+ |
+OPTIONS = ( |
+ ("filter-mode", |
+ dict(short='f', default='PUB_ONLY', dest='mode', type='string', |
+ action='store', metavar='<mode>', |
+ help="""filter attributes and functions according to |
+ <mode>. Correct modes are : |
+ 'PUB_ONLY' filter all non public attributes |
+ [DEFAULT], equivalent to PRIVATE+SPECIAL_A |
+ 'ALL' no filter |
+ 'SPECIAL' filter Python special functions |
+ except constructor |
+ 'OTHER' filter protected and private |
+ attributes""")), |
+ |
+ ("class", |
+ dict(short='c', action="append", metavar="<class>", dest="classes", default=[], |
+ help="create a class diagram with all classes related to <class>;\ |
+ this uses by default the options -ASmy")), |
+ |
+ ("show-ancestors", |
+ dict(short="a", action="store", metavar='<ancestor>', type='int', |
+ help='show <ancestor> generations of ancestor classes not in <projects>')), |
+ ("all-ancestors", |
+ dict(short="A", default=None, |
+ help="show all ancestors off all classes in <projects>")), |
+ ("show-associated", |
+ dict(short='s', action="store", metavar='<ass_level>', type='int', |
+ help='show <ass_level> levels of associated classes not in <projects>')), |
+ ("all-associated", |
+ dict(short='S', default=None, |
+ help='show recursively all associated off all associated classes')), |
+ ("show-builtin", |
+ dict(short="b", action="store_true", default=False, |
+ help='include builtin objects in representation of classes')), |
+ |
+ ("module-names", |
+ dict(short="m", default=None, type='yn', metavar='[yn]', |
+ help='include module name in representation of classes')), |
+ # TODO : generate dependencies like in pylint |
+ # ("package-dependencies", |
+ # dict(short="M", action="store", metavar='<package_depth>', type='int', |
+ # help='show <package_depth> module dependencies beyond modules in \ |
+ # <projects> (for the package diagram)')), |
+ ("only-classnames", |
+ dict(short='k', action="store_true", default=False, |
+ help="don't show attributes and methods in the class boxes; \ |
+this disables -f values")), |
+ ("output", dict(short="o", dest="output_format", action="store", |
+ default="dot", metavar="<format>", |
+ help="create a *.<format> output file if format available.")), |
+) |
+# FIXME : quiet mode |
+#( ('quiet', |
+ #dict(help='run quietly', action='store_true', short='q')), ) |
+ |
+class Run(ConfigurationMixIn): |
+ """base class providing common behaviour for pyreverse commands""" |
+ |
+ options = OPTIONS |
+ |
+ def __init__(self, args): |
+ ConfigurationMixIn.__init__(self, usage=__doc__) |
+ insert_default_options() |
+ self.manager = AstroidManager() |
+ self.register_options_provider(self.manager) |
+ args = self.load_command_line_configuration() |
+ sys.exit(self.run(args)) |
+ |
+ def run(self, args): |
+ """checking arguments and run project""" |
+ if not args: |
+ print(self.help()) |
+ return 1 |
+ # insert current working directory to the python path to recognize |
+ # dependencies to local modules even if cwd is not in the PYTHONPATH |
+ sys.path.insert(0, os.getcwd()) |
+ try: |
+ project = self.manager.project_from_files(args) |
+ linker = Linker(project, tag=True) |
+ handler = DiadefsHandler(self.config) |
+ diadefs = handler.get_diadefs(project, linker) |
+ finally: |
+ sys.path.pop(0) |
+ |
+ if self.config.output_format == "vcg": |
+ writer.VCGWriter(self.config).write(diadefs) |
+ else: |
+ writer.DotWriter(self.config).write(diadefs) |
+ return 0 |
+ |
+ |
+if __name__ == '__main__': |
+ Run(sys.argv[1:]) |