diff --git a/packages/cli/src/serve/output.rs b/packages/cli/src/serve/output.rs index 8289b5b1d2..f5170279aa 100644 --- a/packages/cli/src/serve/output.rs +++ b/packages/cli/src/serve/output.rs @@ -647,19 +647,19 @@ impl Output { ]) .areas(area); - frame.render_widget( - Paragraph::new(Line::from(vec![ - "Platform: ".gray(), - self.platform.expected_name().yellow(), - if state.opts.build_arguments.fullstack { - " + fullstack".yellow() - } else { - " ".dark_gray() - }, - ])) - .wrap(Wrap { trim: false }), - current_platform, - ); + let platform_widget = Paragraph::new(Line::from(vec![ + "Platform: ".gray(), + self.platform.expected_name().yellow(), + if state.opts.build_arguments.fullstack { + " + fullstack".yellow() + } else { + " ".dark_gray() + }, + ])) + .wrap(Wrap { trim: false }); + if platform_widget.line_width() <= current_platform.width as _ { + frame.render_widget(platform_widget, current_platform); + } self.render_feature_list(frame, app_features, state); @@ -669,44 +669,45 @@ impl Output { None => "no server address".dark_gray(), }; - frame.render_widget_ref( - Paragraph::new(Line::from(vec![ - if self.platform == Platform::Web { - "Serving at: ".gray() - } else { - "ServerFns at: ".gray() - }, - address, - ])) - .wrap(Wrap { trim: false }), - serve_address, - ); + let serve_widget = Paragraph::new(Line::from(vec![ + if self.platform == Platform::Web { + "Serving at: ".gray() + } else { + "ServerFns at: ".gray() + }, + address, + ])) + .wrap(Wrap { trim: false }); + // Only show the address if there is enough space + if serve_widget.line_width() <= serve_address.width as _ { + frame.render_widget_ref(serve_widget, serve_address); + } } fn render_feature_list(&self, frame: &mut Frame<'_>, area: Rect, state: RenderState) { - frame.render_widget( - Paragraph::new(Line::from({ - let mut lines = vec!["App features: ".gray(), "[".yellow()]; - - let feature_list: Vec = state.build_engine.request.all_target_features(); - let num_features = feature_list.len(); - - for (idx, feature) in feature_list.into_iter().enumerate() { - lines.push("\"".yellow()); - lines.push(feature.yellow()); - lines.push("\"".yellow()); - if idx != num_features - 1 { - lines.push(", ".dark_gray()); - } + let widget = Paragraph::new(Line::from({ + let mut lines = vec!["App features: ".gray(), "[".yellow()]; + + let feature_list: Vec = state.build_engine.request.all_target_features(); + let num_features = feature_list.len(); + + for (idx, feature) in feature_list.into_iter().enumerate() { + lines.push("\"".yellow()); + lines.push(feature.yellow()); + lines.push("\"".yellow()); + if idx != num_features - 1 { + lines.push(", ".dark_gray()); } + } - lines.push("]".yellow()); + lines.push("]".yellow()); - lines - })) - .wrap(Wrap { trim: false }), - area, - ); + lines + })) + .wrap(Wrap { trim: false }); + if widget.line_width() <= area.width as _ { + frame.render_widget(widget, area); + } } fn render_more_modal(&self, frame: &mut Frame<'_>, area: Rect, state: RenderState) { diff --git a/packages/cli/src/serve/server.rs b/packages/cli/src/serve/server.rs index d431e275b2..d9cfe08ff2 100644 --- a/packages/cli/src/serve/server.rs +++ b/packages/cli/src/serve/server.rs @@ -49,6 +49,7 @@ use tower_http::{ /// and better tooling on the pages that we serve. pub(crate) struct WebServer { devserver_exposed_ip: IpAddr, + devserver_ip_from_args: bool, devserver_bind_ip: IpAddr, devserver_port: u16, proxied_port: Option, @@ -77,6 +78,9 @@ impl WebServer { // devserver to the network (for other devices like phones/embedded) let devserver_bind_ip = args.address.addr.unwrap_or(SELF_IP); + // We always show the actual port if it is passed by the user in the args + let devserver_ip_from_args = args.address.addr.is_some(); + // If the user specified a port, use that, otherwise use any available port, preferring 8080 let devserver_port = args .address @@ -131,6 +135,7 @@ impl WebServer { build_status, proxied_port, devserver_bind_ip, + devserver_ip_from_args, devserver_exposed_ip, devserver_port, hot_reload_sockets: Default::default(), @@ -375,7 +380,10 @@ impl WebServer { // Set the port to the devserver port since that's usually what people expect address.set_port(self.devserver_port); - if self.devserver_bind_ip == IpAddr::V4(Ipv4Addr::new(0, 0, 0, 0)) { + // If the user passed in the ip in the args manually, always show that + if self.devserver_ip_from_args { + address = SocketAddr::new(self.devserver_bind_ip, address.port()); + } else if self.devserver_bind_ip == IpAddr::V4(Ipv4Addr::new(0, 0, 0, 0)) { address = SocketAddr::new(IpAddr::V4(Ipv4Addr::new(127, 0, 0, 1)), address.port()); }