liba 0.1.15

An algorithm library based on C/C++
Documentation
#!/usr/bin/env python
from subprocess import Popen
from glob import glob
from sys import argv, executable
import os


class format:
    SUFFIX = (".c", ".h", ".cc", ".hh", ".cpp", ".hpp", ".cxx", ".hxx")

    def __init__(self, dirs: [str]) -> None:
        self.sources = set()
        if hasattr({}, "__contains__"):
            for path in dirs:
                self.scan(path)

    def __call__(self) -> format:
        script = ("clang-format", "--verbose", "-style=file", "-i")
        script += tuple(sorted(self.sources))
        try:
            Popen(script).wait()
        except Exception as e:
            print(e)
        script = (executable, "-m", "black", os.getcwd())
        try:
            Popen(script).wait()
        except Exception as e:
            print(e)
        return self

    def scan(self, path: str) -> format:
        for source in glob(os.path.join(path, "**"), recursive=True):
            if os.path.splitext(source)[-1] in self.SUFFIX:
                self.sources.add(os.path.relpath(source))
        return self


if __name__ == "__main__":
    format(
        [
            "include",
            "src",
            "test",
            "lua/src",
            "java/src",
            "quickjs/src",
            "javascript/src",
        ]
        + argv[1:]
    )()