Repository: alacritty/alacritty
File: alacritty/src/event.rs (Rust)

Code before:
        }
    }

    #[inline]
    /// Return `true` if `event_queue` is empty, `true` otherwise.
    fn event_queue_empty(&mut self) -> bool {
        #[cfg(not(any(target_os = "macos", windows)))]
        {
            let wayland_event_queue = match self.display.wayland_event_queue.as_mut() {
                Some(wayland_event_queue) => wayland_event_queue,
                None => return self.event_queue.is_empty(),
            };

            // On Wayland we also dispatch and check its own event queue
            let events_dispatched = wayland_event_queue
                .dispatch_pending(&mut (), |_, _, _| {})
                .expect("failed to dispatch event queue");

            self.event_queue.is_empty() && events_dispatched == 0
        }

        #[cfg(any(target_os = "macos", windows))]
        self.event_queue.is_empty()
    }

    /// Run the event loop.
    pub fn run<T>(&mut self, terminal: Arc<FairMutex<Term<T>>>, mut event_loop: EventLoop<Event>)
    where
        T: EventListener,
    {
        event_loop.run_return(|event, event_loop, control_flow| {
            if self.config.debug.print_events {
                info!("glutin event: {:?}", event);
            }

            // Ignore all events we do not care about
            if Self::skip_event(&event) {
                return;
            }

            match event {
                // Check for shutdown
                GlutinEvent::UserEvent(Event::Exit) => {
                    *control_flow = ControlFlow::Exit;
                    return;
                },
                // Process events
                GlutinEvent::RedrawEventsCleared => {
                    *control_flow = ControlFlow::Wait;

                    if self.event_queue_empty() {

Review comment (refactor):
I think we should just duplicate the entire method. I usually find it much easier to read than having different blocks inside of it.

That way we don't need the extra empty block just for the config attribute.

Code after:
        }
    }

    /// Return `true` if `event_queue` is empty, `false` otherwise.
    #[inline]
    #[cfg(not(any(target_os = "macos", windows)))]
    fn event_queue_empty(&mut self) -> bool {
        let wayland_event_queue = match self.display.wayland_event_queue.as_mut() {
            Some(wayland_event_queue) => wayland_event_queue,
            // Since frame callbacks do not exist on X11, just check for event queue.
            None => return self.event_queue.is_empty(),
        };

        // Check for pending frame callbacks on Wayland.
        let events_dispatched = wayland_event_queue
            .dispatch_pending(&mut (), |_, _, _| {})
            .expect("failed to dispatch event queue");

        self.event_queue.is_empty() && events_dispatched == 0
    }

    /// Return `true` if `event_queue` is empty, `false` otherwise.
    #[inline]
    #[cfg(any(target_os = "macos", windows))]
    fn event_queue_empty(&mut self) -> bool {
        self.event_queue.is_empty()
    }

    /// Run the event loop.
    pub fn run<T>(&mut self, terminal: Arc<FairMutex<Term<T>>>, mut event_loop: EventLoop<Event>)
    where
        T: EventListener,
    {
        event_loop.run_return(|event, event_loop, control_flow| {
            if self.config.debug.print_events {
                info!("glutin event: {:?}", event);
            }

            // Ignore all events we do not care about.
            if Self::skip_event(&event) {
                return;
            }

            match event {
                // Check for shutdown.
                GlutinEvent::UserEvent(Event::Exit) => {
                    *control_flow = ControlFlow::Exit;
                    return;
                },
                // Process events.
                GlutinEvent::RedrawEventsCleared => {