# Buggy code
def getargvlist(cls, reader, value, replace=True):
    """Parse ``commands`` argvlist multiline string.

    :param SectionReader reader: reader to be used.
    :param str value: Content stored by key.

    :rtype: list[list[str]]
    :raise :class:`tox.exception.ConfigError`:
        line-continuation ends nowhere while resolving for specified section
    """
    commands = []
    current_command = ""
    for line in value.splitlines():
        line = line.rstrip()
        if not line:
            continue
        if line.endswith("\\"):
            current_command += " {}".format(line[:-1])
            continue
        current_command += line

        if is_section_substitution(current_command):
            replaced = reader._replace(current_command, crossonly=True)
            commands.extend(cls.getargvlist(reader, replaced))
        else:
            commands.append(cls.processcommand(reader, current_command, replace))
        current_command = ""
    else:
        if current_command:
            raise tox.exception.ConfigError(
                "line-continuation ends nowhere while resolving for [{}] {}".format(
                    reader.section_name,
                    "commands",
                ),
            )
    return commands


# Traceback (AttributeError)
tox -vv
using tox.ini: /home/jayvdb/projects/tox/my-tox-tests/tests/tox.ini (pid 23538)
removing /home/jayvdb/projects/tox/my-tox-tests/tests/.tox/log
[wikimedia] tox-wikimedia is enabled
Traceback (most recent call last):
File "/home/jayvdb/.cache/tox/my-tox-tests/py38-tox3_20-other/bin/tox", line 8, in <module>
sys.exit(cmdline())
File "/home/jayvdb/.cache/tox/my-tox-tests/py38-tox3_20-other/lib/python3.8/site-packages/tox/session/__init__.py", line 44, in cmdline
main(args)
File "/home/jayvdb/.cache/tox/my-tox-tests/py38-tox3_20-other/lib/python3.8/site-packages/tox/session/__init__.py", line 65, in main
config = load_config(args)
File "/home/jayvdb/.cache/tox/my-tox-tests/py38-tox3_20-other/lib/python3.8/site-packages/tox/session/__init__.py", line 81, in load_config
config = parseconfig(args)
File "/home/jayvdb/.cache/tox/my-tox-tests/py38-tox3_20-other/lib/python3.8/site-packages/tox/config/__init__.py", line 281, in parseconfig
pm.hook.tox_configure(config=config)  # post process config object
File "/home/jayvdb/.cache/tox/my-tox-tests/py38-tox3_20-other/lib/python3.8/site-packages/pluggy/hooks.py", line 286, in __call__
return self._hookexec(self, self.get_hookimpls(), kwargs)
File "/home/jayvdb/.cache/tox/my-tox-tests/py38-tox3_20-other/lib/python3.8/site-packages/pluggy/manager.py", line 93, in _hookexec
return self._inner_hookexec(hook, methods, kwargs)
File "/home/jayvdb/.cache/tox/my-tox-tests/py38-tox3_20-other/lib/python3.8/site-packages/pluggy/manager.py", line 84, in <lambda>
self._inner_hookexec = lambda hook, methods, kwargs: hook.multicall(
File "/home/jayvdb/.cache/tox/my-tox-tests/py38-tox3_20-other/lib/python3.8/site-packages/pluggy/callers.py", line 208, in _multicall
return outcome.get_result()
File "/home/jayvdb/.cache/tox/my-tox-tests/py38-tox3_20-other/lib/python3.8/site-packages/pluggy/callers.py", line 80, in get_result
raise ex[1].with_traceback(ex[2])
File "/home/jayvdb/.cache/tox/my-tox-tests/py38-tox3_20-other/lib/python3.8/site-packages/pluggy/callers.py", line 187, in _multicall
res = hook_impl.function(*args)
File "/home/jayvdb/.cache/tox/my-tox-tests/py38-tox3_20-other/lib/python3.8/site-packages/tox_wikimedia/__init__.py", line 93, in tox_configure
if dep in cdep.name:
AttributeError: 'str' object has no attribute 'name'

# Fixed code
def getargvlist(cls, reader, value, replace=True, name=None):
    """Parse ``commands`` argvlist multiline string.

    :param SectionReader reader: reader to be used.
    :param str value: Content stored by key.

    :rtype: list[list[str]]
    :raise :class:`tox.exception.ConfigError`:
        line-continuation ends nowhere while resolving for specified section
    """
    commands = []
    current_command = ""
    for line in value.splitlines():
        line = line.rstrip()
        if not line:
            continue
        if line.endswith("\\"):
            current_command += " {}".format(line[:-1])
            continue
        current_command += line

        if is_section_substitution(current_command):
            replaced = reader._replace(current_command, crossonly=True, name=name)
            commands.extend(cls.getargvlist(reader, replaced, name=name))
        else:
            commands.append(
                cls.processcommand(reader, current_command, replace, name=name)
            )
        current_command = ""
    else:
        if current_command:
            raise tox.exception.ConfigError(
                "line-continuation ends nowhere while resolving for [{}] {}".format(
                    reader.section_name,
                    "commands",
                ),
            )
    return commands