mirror of
https://github.com/PyCQA/flake8.git
synced 2026-04-07 13:36:54 +00:00
Extract _walk_up_directories_to_root_or_home.
Extract _walk_up_directories_to_root_or_home and give it a PEP-0257 docstring. Resolves #1702.
This commit is contained in:
parent
7a6c42fc43
commit
25757d9d05
1 changed files with 27 additions and 9 deletions
|
|
@ -5,6 +5,7 @@ import configparser
|
||||||
import logging
|
import logging
|
||||||
import os.path
|
import os.path
|
||||||
from typing import Any
|
from typing import Any
|
||||||
|
from typing import Generator
|
||||||
|
|
||||||
from flake8 import exceptions
|
from flake8 import exceptions
|
||||||
from flake8.options.manager import OptionManager
|
from flake8.options.manager import OptionManager
|
||||||
|
|
@ -18,7 +19,20 @@ def _stat_key(s: str) -> tuple[int, int]:
|
||||||
return st.st_ino, st.st_dev
|
return st.st_ino, st.st_dev
|
||||||
|
|
||||||
|
|
||||||
def _find_config_file(path: str) -> str | None:
|
def _walk_up_directories_to_root_or_home(
|
||||||
|
path: str
|
||||||
|
) -> Generator[str, None, None]:
|
||||||
|
"""Walk upwards from the given directory.
|
||||||
|
|
||||||
|
Walk upwards from the given directory until either the root or the home
|
||||||
|
directory is reached. Do not include the root or home directory.
|
||||||
|
|
||||||
|
:param path:
|
||||||
|
The starting path. The generator will yield this path, followed by its
|
||||||
|
parent, followed by the parent of its parent, and so forth.
|
||||||
|
:returns:
|
||||||
|
The directory paths, as strings, from bottom to top.
|
||||||
|
"""
|
||||||
# on windows if the homedir isn't detected this returns back `~`
|
# on windows if the homedir isn't detected this returns back `~`
|
||||||
home = os.path.expanduser("~")
|
home = os.path.expanduser("~")
|
||||||
try:
|
try:
|
||||||
|
|
@ -28,6 +42,18 @@ def _find_config_file(path: str) -> str | None:
|
||||||
|
|
||||||
dir_stat = _stat_key(path)
|
dir_stat = _stat_key(path)
|
||||||
while True:
|
while True:
|
||||||
|
new_path = os.path.dirname(path)
|
||||||
|
new_dir_stat = _stat_key(new_path)
|
||||||
|
if new_dir_stat == dir_stat or new_dir_stat == home_stat:
|
||||||
|
break
|
||||||
|
else:
|
||||||
|
path = new_path
|
||||||
|
dir_stat = new_dir_stat
|
||||||
|
yield path
|
||||||
|
|
||||||
|
|
||||||
|
def _find_config_file(path: str) -> str | None:
|
||||||
|
for path in _walk_up_directories_to_root_or_home(path):
|
||||||
for candidate in ("setup.cfg", "tox.ini", ".flake8"):
|
for candidate in ("setup.cfg", "tox.ini", ".flake8"):
|
||||||
cfg = configparser.RawConfigParser()
|
cfg = configparser.RawConfigParser()
|
||||||
cfg_path = os.path.join(path, candidate)
|
cfg_path = os.path.join(path, candidate)
|
||||||
|
|
@ -40,14 +66,6 @@ def _find_config_file(path: str) -> str | None:
|
||||||
if "flake8" in cfg or "flake8:local-plugins" in cfg:
|
if "flake8" in cfg or "flake8:local-plugins" in cfg:
|
||||||
return cfg_path
|
return cfg_path
|
||||||
|
|
||||||
new_path = os.path.dirname(path)
|
|
||||||
new_dir_stat = _stat_key(new_path)
|
|
||||||
if new_dir_stat == dir_stat or new_dir_stat == home_stat:
|
|
||||||
break
|
|
||||||
else:
|
|
||||||
path = new_path
|
|
||||||
dir_stat = new_dir_stat
|
|
||||||
|
|
||||||
# did not find any configuration file
|
# did not find any configuration file
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue