Narzędzie ułatwiające eliminację importu symboli wieloznacznych

Refaktoryzuję i eliminuję import symboli wieloznacznych na jakimś dość monolitycznym kodzie.

Pylint wydaje się wykonywać świetną robotę, wymieniając wszystkie nieużywane importy, które przychodzą wraz z importem symboli wieloznacznych, ale chciałbym, aby dostarczył listę używanych importów , abym mógł szybko zastąpić import symboli wieloznacznych. Jakiś szybki sposób? Mam zamiar przeanalizować wyjście pyLint i zrobić set.difference() Na tym i dir() zaimportowanego modułu. Ale założę się, że jest jakieś narzędzie / procedura Nie jestem tego świadoma.

Author: Paul, 2011-08-31

2 answers

Uwaga: pylint nie zaleca zestawu używanych importów. Zmieniając to, musisz być świadomy innych modułów importujących kod, który modyfikujesz, które mogą używać symboli należących do przestrzeni nazw modułu, który refaktoryzujesz, tylko dlatego, że masz nieużywany import.

Zalecam następującą procedurę do refaktor from foo import *:

  • W powłoce interaktywnej wpisz:

    import re
    import foo as module # XXX use the correct module name here!
    
    module_name = module.__name__
    import_line = 'from %s import (%%s)' % module_name
    length = len(import_line) - 3
    print import_line % (',\n' + length * ' ').join([a for a in dir(module) 
                                                                   if not re.match('__.*[^_]{2}', a)])
    
  • Zastąp linię from foo import * wydrukowaną above

  • Uruchom pylint i usuń nieużywany import oznaczony przez pylint
  • uruchom ponownie pylint na podstawie całego kodu, szukając importu nieistniejących symplów
  • uruchom testy jednostkowe

Powtórz z from bar import *

 4
Author: gurney alex,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-08-31 08:19:55

Oto dewildcard, bardzo proste narzędzie oparte na początkowych pomysłach Alexa:

Https://github.com/quentinsf/dewildcard

 2
Author: Quentin Stafford-Fraser,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-08-26 16:16:31