Repository: ManimCommunity/manim
File: manim/renderer/shader.py (Python)

Code before:
        else:
            updater_list.insert(index, update_function)

        self.refresh_has_updater_status()
        if call_updater:
            self.update()
        return self

    def remove_updater(self, update_function: Callable) -> Self:
        for updater_list in [self.time_based_updaters, self.non_time_updaters]:
            while update_function in updater_list:
                updater_list.remove(update_function)
        self.refresh_has_updater_status()
        return self

    def clear_updaters(self) -> Self:
        self.time_based_updaters = []
        self.non_time_updaters = []
        self.refresh_has_updater_status()
        return self

    def match_updaters(self, mobject: Mobject) -> Self:
        self.clear_updaters()
        for updater in mobject.get_updaters():
            self.add_updater(updater)
        return self

    def suspend_updating(self) -> Self:
        self.updating_suspended = True
        return self

    def resume_updating(self, call_updater: bool = True) -> Self:
        self.updating_suspended = False
        if call_updater:
            self.update(dt=0)
        return self

    def refresh_has_updater_status(self) -> Self:
        self.has_updaters = len(self.get_updaters()) > 0
        return self


class Mesh(Object3D):
    def __init__(
        self,
        shader: Shader | None = None,
        attributes: list[Attribute] | None = None,
        # Based on the current codebase, the geometry parameter can only be set to None.
        geometry: None = None,
        # Based on the current codebase, the material parameter can only be set to None.
        material: None = None,

Review comment (suggestion):
Despite the parameter name, I would say it's not a `Mobject`, but an `Object3D`. It's likely that this method was copied directly from `Mobject` without changing the parameter name, although I haven't found any actual references to `Object3D.match_updaters()` in the source code to confirm this...
```suggestion
    def match_updaters(self, mesh: Object3D) -> Self:
        self.clear_updaters()
        for updater in mesh.get_updaters():
            self.add_updater(updater)
        return self
```

Code after:
        if call_updater:
            self.update()
        return self

    def _add_time_based_updater(
        self, update_function: MeshTimeBasedUpdater, index: int | None = None
    ) -> None:
        if index is None:
            self.time_based_updaters.append(update_function)
        else:
            self.time_based_updaters.insert(index, update_function)

    def _add_non_time_updater(
        self, update_function: MeshNonTimeBasedUpdater, index: int | None = None
    ) -> None:
        if index is None:
            self.non_time_updaters.append(update_function)
        else:
            self.non_time_updaters.insert(index, update_function)

    def remove_updater(self, update_function: MeshUpdater) -> Self:
        while update_function in self.time_based_updaters:
            self.time_based_updaters.remove(update_function)  # type: ignore[arg-type]
        while update_function in self.non_time_updaters:
            self.non_time_updaters.remove(update_function)  # type: ignore[arg-type]
        self.refresh_has_updater_status()
        return self

    def clear_updaters(self) -> Self:
        self.time_based_updaters = []
        self.non_time_updaters = []
        self.refresh_has_updater_status()
        return self

    def match_updaters(self, mesh: Object3D) -> Self:
        self.clear_updaters()
        for updater in mesh.get_updaters():
            self.add_updater(updater)
        return self

    def suspend_updating(self) -> Self:
        self.updating_suspended = True
        return self

    def resume_updating(self, call_updater: bool = True) -> Self:
        self.updating_suspended = False
        if call_updater:
            self.update(dt=0)
        return self

    def refresh_has_updater_status(self) -> Self: