Postupoval jsem přesně podle návodu a opravdu nechápu, v čem by mi to mělo pomoci více než integrovaný lint v PyCharmu.
Vůbec to není interaktivní, prostě napíšu kód, z lokálního menu spustím flake8 (--max-complexity 10, jak bylo v tutoriálu), vidím, co je blbě. Ta integrace ani nedělá klikací skok na řádek, je to jenom výpis do konzole.
Bohužel to vůbec nekontroluje typehinty (možná se to musí nějak zapnout). V takto triviální metodě
def _isLeaf(self, path: Path) -> bool:
return path.is_file() or not hasSubitems(path)
změním hint na str:
def _isLeaf(self, path: str) -> bool:
return path.is_file() or not hasSubitems(path)
Pycharm samozřejmě hned podtržením označí is_file a parametr hasSubitems(path) jako chybu, protože str nemá is_file() a nepasuje do hasSubitems(path: Path). flake8 si toho vůbec nevšimne. A to navíc je _isLeaf implementace abstrakní metody _isLeaf(PATH), kde PATH je generická a nadefinovaná v této třídě jako třída Path. O tom flake8 vůbec netuší (což Pycharm bohužel také ne, ač je to jasně v definici třídy napsané "class FileSource(MPVTreeSource[Path])"). Pokud někdo považuje generika jako javovský styl, pak s ním není moc co řešit, pro typový popis je něco takového zásadní.
_isLeaf jsem smazal, flake8 vůbec nezdetekoval chybějící implementaci abstraktní metody (označená přes @abc.abstractmethod). Pycharm to hned samozřejmě označí a přes Alt+Enter nabízí implementaci všech chybějících abstrakních metod, jako standardní IntelliJ.
Stejně jako flake8 nepochopil ifovaný import a řve "F401 'dispatcher.Dispatcher' imported but unused", přestože je Dispatcher v typehintu.
Sorry, ale tohle nemá s usnadněním vývoje v IDE nic společného.