def METHOD_NAME(
    settings: Settings,
    vars_dir: Path,
    cwd: PurePath,
    supervisor: Supervisor,
) -> Iterator[Worker]:
    clients = settings.clients
    if clients.buffers.enabled:
        bdb = BDB(
            settings.limits.tokenization_limit,
            unifying_chars=settings.match.unifying_chars,
            include_syms=settings.clients.buffers.match_syms,
        )
        yield BuffersWorker(supervisor, options=clients.buffers, misc=bdb)
    if clients.paths.enabled:
        yield PathsWorker(supervisor, options=clients.paths, misc=None)
    if clients.tree_sitter.enabled:
        tdb = TDB()
        yield TreeWorker(supervisor, options=clients.tree_sitter, misc=tdb)
    if clients.lsp.enabled:
        yield LspWorker(supervisor, options=clients.lsp, misc=None)
    if clients.registers.enabled:
        rdb = RDB(
            settings.limits.tokenization_limit,
            unifying_chars=settings.match.unifying_chars,
            include_syms=settings.clients.buffers.match_syms,
        )
        yield RegistersWorker(supervisor, options=clients.registers, misc=rdb)
    if clients.third_party.enabled:
        yield ThirdPartyWorker(
            supervisor, options=cast(LSPClient, clients.third_party), misc=None
        )
    if clients.snippets.enabled:
        sdb = SDB(vars_dir)
        yield SnippetWorker(supervisor, options=clients.snippets, misc=sdb)
    if clients.tags.enabled and (ctags := which("ctags")):
        ctdb = CTDB(vars_dir, cwd=cwd)
        yield TagsWorker(supervisor, options=clients.tags, misc=(Path(ctags), ctdb))
    if clients.tmux.enabled and (tmux := which("tmux")):
        tmdb = TMDB(
            settings.limits.tokenization_limit,
            unifying_chars=settings.match.unifying_chars,
            include_syms=settings.clients.buffers.match_syms,
        )
        yield TmuxWorker(supervisor, options=clients.tmux, misc=(Path(tmux), tmdb))
    if clients.tabnine.enabled:
        yield T9Worker(supervisor, options=clients.tabnine, misc=None)