aboutsummaryrefslogtreecommitdiff
blob: d0dc58ab280db89f699377ecbb1f173e5543fa6f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
"""String related methods."""

from .demandload import demand_compile_regexp

demand_compile_regexp("_whitespace_regex", r"^(?P<indent>\s+)")


def pluralism(obj, none=None, singular="", plural="s"):
    """Return singular or plural suffix depending on object's length or value."""
    # default to plural for empty objects, e.g. there are 0 repos
    if none is None:
        none = plural

    try:
        value = len(obj)
    except TypeError:
        # value is probably an int
        value = obj

    if value == 0:
        return none
    elif value == 1:
        return singular
    return plural


def doc_dedent(s):
    """Support dedenting docstrings with initial line having no indentation."""
    try:
        lines = s.split("\n")
    except AttributeError:
        raise TypeError(f"{s!r} is not a string")
    if lines:
        # find first line with an indent if one exists
        for line in lines:
            if mo := _whitespace_regex.match(line):
                indent = mo.group("indent")
                break
        else:
            indent = ""
    len_i = len(indent)
    return "\n".join(x[len_i:] if x.startswith(indent) else x for x in lines)