def scavenge(self, paths, exclude=None): def prepare_pattern(pattern): if not any(char in pattern for char in "*?["): pattern = f"*{pattern}*" return pattern exclude = [prepare_pattern(pattern) for pattern in (exclude or [])] def exclude_path(path): return _match(path, exclude, case=False) paths = [Path(path) for path in paths] for module in utils.get_modules(paths): if exclude_path(module): self._log("Excluded:", module) continue self._log("Scanning:", module) try: module_string = utils.read_file(module) except utils.VultureInputException as err: # noqa: F841 print( f"Error: Could not read file {module} - {err}\n" f"Try to change the encoding to UTF-8.", file=sys.stderr, ) self.found_dead_code_or_error = True else: self.scan(module_string, filename=module) unique_imports = {item.name for item in self.defined_imports} for import_name in unique_imports: path = Path("whitelists") / (import_name + "_whitelist.py") if exclude_path(path): self._log("Excluded whitelist:", path) else: try: module_data = pkgutil.get_data("vulture", str(path)) self._log("Included whitelist:", path) except OSError: # Most imported modules don't have a whitelist. continue module_string = module_data.decode("utf-8") self.scan(module_string, filename=path)
def scavenge(self, paths, exclude=None): def prepare_pattern(pattern): if not any(char in pattern for char in ['*', '?', '[']): pattern = '*{pattern}*'.format(**locals()) return pattern exclude = [prepare_pattern(pattern) for pattern in (exclude or [])] def exclude_file(name): return any(fnmatchcase(name, pattern) for pattern in exclude) for module in utils.get_modules(paths): if exclude_file(module): self._log('Excluded:', module) continue self._log('Scanning:', module) try: module_string = utils.read_file(module) except utils.VultureInputException as err: print( 'Error: Could not read file {module} - {err}\n' 'Try to change the encoding to UTF-8.'.format(**locals()), file=sys.stderr) self.found_dead_code_or_error = True else: self.scan(module_string, filename=module) unique_imports = set(item.name for item in self.defined_imports) for import_name in unique_imports: path = os.path.join('whitelists', import_name) + '.py' if exclude_file(path): self._log('Excluded whitelist:', path) else: try: module_data = pkgutil.get_data('vulture', path) self._log('Included whitelist:', path) except IOError: # Most imported modules don't have a whitelist. continue if module_data is None: sys.exit('Error: Please use "python -m vulture".') module_string = module_data.decode("utf-8") self.scan(module_string, filename=path)
def scavenge(self, paths, exclude=None): def prepare_pattern(pattern): if not any(char in pattern for char in ["*", "?", "["]): pattern = "*{pattern}*".format(**locals()) return pattern exclude = [prepare_pattern(pattern) for pattern in (exclude or [])] def exclude_file(name): return any(fnmatch(name, pattern) for pattern in exclude) for module in utils.get_modules(paths): if exclude_file(module): self._log("Excluded:", module) continue self._log("Scanning:", module) try: module_string = utils.read_file(module) except utils.VultureInputException as err: # noqa: F841 print( "Error: Could not read file {module} - {err}\n" "Try to change the encoding to UTF-8.".format(**locals()), file=sys.stderr, ) self.found_dead_code_or_error = True else: self.scan(module_string, filename=module) unique_imports = {item.name for item in self.defined_imports} for import_name in unique_imports: path = os.path.join("whitelists", import_name) + "_whitelist.py" if exclude_file(path): self._log("Excluded whitelist:", path) else: try: module_data = pkgutil.get_data("vulture", path) self._log("Included whitelist:", path) except IOError: # Most imported modules don't have a whitelist. continue module_string = module_data.decode("utf-8") self.scan(module_string, filename=path)