diff options
author | Dylan Baker <dylan@pnwbakers.com> | 2022-01-10 10:31:08 -0800 |
---|---|---|
committer | Eli Schwartz <eschwartz93@gmail.com> | 2022-01-10 23:06:20 -0500 |
commit | fe51450970638d2610519ff2f42b4892bbaab1e0 (patch) | |
tree | 6952e9695b5bde04db16e672db333d53b04a4f28 /mesonbuild/depfile.py | |
parent | 4b351aef26a19b4c73f6ef295f64da1c74bc713d (diff) | |
download | meson-fe51450970638d2610519ff2f42b4892bbaab1e0.zip meson-fe51450970638d2610519ff2f42b4892bbaab1e0.tar.gz meson-fe51450970638d2610519ff2f42b4892bbaab1e0.tar.bz2 |
depfile: type annotate
Diffstat (limited to 'mesonbuild/depfile.py')
-rw-r--r-- | mesonbuild/depfile.py | 35 |
1 files changed, 20 insertions, 15 deletions
diff --git a/mesonbuild/depfile.py b/mesonbuild/depfile.py index 62cbe81..a8b4588 100644 --- a/mesonbuild/depfile.py +++ b/mesonbuild/depfile.py @@ -11,12 +11,13 @@ # See the License for the specific language governing permissions and # limitations under the License. -import collections +import typing as T -def parse(lines): - rules = [] - targets = [] - deps = [] + +def parse(lines: T.Iterable[str]) -> T.List[T.Tuple[T.List[str], T.List[str]]]: + rules: T.List[T.Tuple[T.List[str], T.List[str]]] = [] + targets: T.List[str] = [] + deps: T.List[str] = [] in_deps = False out = '' for line in lines: @@ -56,12 +57,15 @@ def parse(lines): out += c return rules -Target = collections.namedtuple('Target', ['deps']) +class Target(T.NamedTuple): + + deps: T.Set[str] + class DepFile: - def __init__(self, lines): + def __init__(self, lines: T.Iterable[str]): rules = parse(lines) - depfile = {} + depfile: T.Dict[str, Target] = {} for (targets, deps) in rules: for target in targets: t = depfile.setdefault(target, Target(deps=set())) @@ -69,16 +73,17 @@ class DepFile: t.deps.add(dep) self.depfile = depfile - def get_all_dependencies(self, target, visited=None): - deps = set() + def get_all_dependencies(self, name: str, visited: T.Optional[T.Set[str]] = None) -> T.List[str]: + deps: T.Set[str] = set() if not visited: visited = set() - if target in visited: - return set() - visited.add(target) - target = self.depfile.get(target) + if name in visited: + return [] + visited.add(name) + + target = self.depfile.get(name) if not target: - return set() + return [] deps.update(target.deps) for dep in target.deps: deps.update(self.get_all_dependencies(dep, visited)) |