mirror of
https://github.com/nushell/nushell.git
synced 2024-11-22 08:23:24 +01:00
add a few more logging statements for debugging startup (#12316)
# Description This PR adds a few more `trace!()` and `perf()` statements that allowed a deeper understanding of the nushell startup process when used with `nu -n --no-std-lib --log-level trace`. # User-Facing Changes <!-- List of all changes that impact the user experience here. This helps us keep track of breaking changes. --> # Tests + Formatting <!-- Don't forget to add tests that cover your changes. Make sure you've run and fixed any issues with these commands: - `cargo fmt --all -- --check` to check standard code formatting (`cargo fmt --all` applies these changes) - `cargo clippy --workspace -- -D warnings -D clippy::unwrap_used` to check that you're using the standard code style - `cargo test --workspace` to check that all tests pass (on Windows make sure to [enable developer mode](https://learn.microsoft.com/en-us/windows/apps/get-started/developer-mode-features-and-debugging)) - `cargo run -- -c "use std testing; testing run-tests --path crates/nu-std"` to run the tests for the standard library > **Note** > from `nushell` you can also use the `toolkit` as follows > ```bash > use toolkit.nu # or use an `env_change` hook to activate it automatically > toolkit check pr > ``` --> # After Submitting <!-- If your PR had any user-facing changes, update [the documentation](https://github.com/nushell/nushell.github.io) after the PR is merged, if necessary. This will help us keep the docs up to date. -->
This commit is contained in:
parent
910e3b52a7
commit
e97368433b
1
Cargo.lock
generated
1
Cargo.lock
generated
@ -3108,6 +3108,7 @@ dependencies = [
|
|||||||
name = "nu-std"
|
name = "nu-std"
|
||||||
version = "0.91.1"
|
version = "0.91.1"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
|
"log",
|
||||||
"miette",
|
"miette",
|
||||||
"nu-engine",
|
"nu-engine",
|
||||||
"nu-parser",
|
"nu-parser",
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
use crate::{menus::NuMenuCompleter, NuHelpCompleter};
|
use crate::{menus::NuMenuCompleter, NuHelpCompleter};
|
||||||
use crossterm::event::{KeyCode, KeyModifiers};
|
use crossterm::event::{KeyCode, KeyModifiers};
|
||||||
|
use log::trace;
|
||||||
use nu_color_config::{color_record_to_nustyle, lookup_ansi_color_style};
|
use nu_color_config::{color_record_to_nustyle, lookup_ansi_color_style};
|
||||||
use nu_engine::eval_block;
|
use nu_engine::eval_block;
|
||||||
use nu_parser::parse;
|
use nu_parser::parse;
|
||||||
@ -78,6 +79,7 @@ pub(crate) fn add_menus(
|
|||||||
stack: &Stack,
|
stack: &Stack,
|
||||||
config: &Config,
|
config: &Config,
|
||||||
) -> Result<Reedline, ShellError> {
|
) -> Result<Reedline, ShellError> {
|
||||||
|
trace!("add_menus: config: {:#?}", &config);
|
||||||
line_editor = line_editor.clear_menus();
|
line_editor = line_editor.clear_menus();
|
||||||
|
|
||||||
for menu in &config.menus {
|
for menu in &config.menus {
|
||||||
|
@ -360,6 +360,7 @@ fn loop_iteration(ctx: LoopContext) -> (bool, Stack, Reedline) {
|
|||||||
);
|
);
|
||||||
|
|
||||||
start_time = std::time::Instant::now();
|
start_time = std::time::Instant::now();
|
||||||
|
trace!("adding menus");
|
||||||
line_editor =
|
line_editor =
|
||||||
add_menus(line_editor, engine_reference, &stack_arc, config).unwrap_or_else(|e| {
|
add_menus(line_editor, engine_reference, &stack_arc, config).unwrap_or_else(|e| {
|
||||||
report_error_new(engine_state, &e);
|
report_error_new(engine_state, &e);
|
||||||
|
@ -13,3 +13,4 @@ nu-protocol = { version = "0.91.1", path = "../nu-protocol" }
|
|||||||
nu-engine = { version = "0.91.1", path = "../nu-engine" }
|
nu-engine = { version = "0.91.1", path = "../nu-engine" }
|
||||||
miette = { workspace = true, features = ["fancy-no-backtrace"] }
|
miette = { workspace = true, features = ["fancy-no-backtrace"] }
|
||||||
|
|
||||||
|
log = "0.4"
|
||||||
|
@ -1,3 +1,4 @@
|
|||||||
|
use log::trace;
|
||||||
use nu_engine::{env::current_dir, eval_block};
|
use nu_engine::{env::current_dir, eval_block};
|
||||||
use nu_parser::parse;
|
use nu_parser::parse;
|
||||||
use nu_protocol::{
|
use nu_protocol::{
|
||||||
@ -13,6 +14,7 @@ const NU_STDLIB_VIRTUAL_DIR: &str = "NU_STDLIB_VIRTUAL_DIR";
|
|||||||
pub fn load_standard_library(
|
pub fn load_standard_library(
|
||||||
engine_state: &mut nu_protocol::engine::EngineState,
|
engine_state: &mut nu_protocol::engine::EngineState,
|
||||||
) -> Result<(), miette::ErrReport> {
|
) -> Result<(), miette::ErrReport> {
|
||||||
|
trace!("load_standard_library");
|
||||||
let (block, delta) = {
|
let (block, delta) = {
|
||||||
// Using full virtual path to avoid potential conflicts with user having 'std' directory
|
// Using full virtual path to avoid potential conflicts with user having 'std' directory
|
||||||
// in their working directory.
|
// in their working directory.
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
use log::info;
|
use log::{info, trace};
|
||||||
#[cfg(feature = "plugin")]
|
#[cfg(feature = "plugin")]
|
||||||
use nu_cli::read_plugin_file;
|
use nu_cli::read_plugin_file;
|
||||||
use nu_cli::{eval_config_contents, eval_source};
|
use nu_cli::{eval_config_contents, eval_source};
|
||||||
@ -27,6 +27,7 @@ pub(crate) fn read_config_file(
|
|||||||
config_file: Option<Spanned<String>>,
|
config_file: Option<Spanned<String>>,
|
||||||
is_env_config: bool,
|
is_env_config: bool,
|
||||||
) {
|
) {
|
||||||
|
trace!("read_config_file {:?}", &config_file);
|
||||||
// Load config startup file
|
// Load config startup file
|
||||||
if let Some(file) = config_file {
|
if let Some(file) = config_file {
|
||||||
let working_set = StateWorkingSet::new(engine_state);
|
let working_set = StateWorkingSet::new(engine_state);
|
||||||
@ -129,6 +130,7 @@ pub(crate) fn read_loginshell_file(engine_state: &mut EngineState, stack: &mut S
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub(crate) fn read_default_env_file(engine_state: &mut EngineState, stack: &mut Stack) {
|
pub(crate) fn read_default_env_file(engine_state: &mut EngineState, stack: &mut Stack) {
|
||||||
|
trace!("read_default_env_file");
|
||||||
let config_file = get_default_env();
|
let config_file = get_default_env();
|
||||||
eval_source(
|
eval_source(
|
||||||
engine_state,
|
engine_state,
|
||||||
@ -161,6 +163,11 @@ fn eval_default_config(
|
|||||||
config_file: &str,
|
config_file: &str,
|
||||||
is_env_config: bool,
|
is_env_config: bool,
|
||||||
) {
|
) {
|
||||||
|
trace!(
|
||||||
|
"eval_default_config: config_file: {:?}, is_env_config: {}",
|
||||||
|
&config_file,
|
||||||
|
is_env_config
|
||||||
|
);
|
||||||
println!("Continuing without config file");
|
println!("Continuing without config file");
|
||||||
// Just use the contents of "default_config.nu" or "default_env.nu"
|
// Just use the contents of "default_config.nu" or "default_env.nu"
|
||||||
eval_source(
|
eval_source(
|
||||||
@ -199,6 +206,12 @@ pub(crate) fn setup_config(
|
|||||||
env_file: Option<Spanned<String>>,
|
env_file: Option<Spanned<String>>,
|
||||||
is_login_shell: bool,
|
is_login_shell: bool,
|
||||||
) {
|
) {
|
||||||
|
trace!(
|
||||||
|
"setup_config: config: {:?}, env: {:?}, login: {}",
|
||||||
|
&config_file,
|
||||||
|
&env_file,
|
||||||
|
is_login_shell
|
||||||
|
);
|
||||||
let result = catch_unwind(AssertUnwindSafe(|| {
|
let result = catch_unwind(AssertUnwindSafe(|| {
|
||||||
#[cfg(feature = "plugin")]
|
#[cfg(feature = "plugin")]
|
||||||
read_plugin_file(engine_state, stack, plugin_file, NUSHELL_FOLDER);
|
read_plugin_file(engine_state, stack, plugin_file, NUSHELL_FOLDER);
|
||||||
@ -225,6 +238,13 @@ pub(crate) fn set_config_path(
|
|||||||
key: &str,
|
key: &str,
|
||||||
config_file: Option<&Spanned<String>>,
|
config_file: Option<&Spanned<String>>,
|
||||||
) {
|
) {
|
||||||
|
trace!(
|
||||||
|
"set_config_path: cwd: {:?}, default_config: {}, key: {}, config_file: {:?}",
|
||||||
|
&cwd,
|
||||||
|
&default_config_name,
|
||||||
|
&key,
|
||||||
|
&config_file
|
||||||
|
);
|
||||||
let config_path = match config_file {
|
let config_path = match config_file {
|
||||||
Some(s) => canonicalize_with(&s.item, cwd).ok(),
|
Some(s) => canonicalize_with(&s.item, cwd).ok(),
|
||||||
None => nu_path::config_dir().map(|mut p| {
|
None => nu_path::config_dir().map(|mut p| {
|
||||||
|
31
src/main.rs
31
src/main.rs
@ -20,7 +20,7 @@ use crate::{
|
|||||||
logger::{configure, logger},
|
logger::{configure, logger},
|
||||||
};
|
};
|
||||||
use command::gather_commandline_args;
|
use command::gather_commandline_args;
|
||||||
use log::Level;
|
use log::{trace, Level};
|
||||||
use miette::Result;
|
use miette::Result;
|
||||||
use nu_cli::gather_parent_env_vars;
|
use nu_cli::gather_parent_env_vars;
|
||||||
use nu_cmd_base::util::get_init_cwd;
|
use nu_cmd_base::util::get_init_cwd;
|
||||||
@ -233,6 +233,7 @@ fn main() -> Result<()> {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
start_time = std::time::Instant::now();
|
||||||
if let Some(include_path) = &parsed_nu_cli_args.include_path {
|
if let Some(include_path) = &parsed_nu_cli_args.include_path {
|
||||||
let span = include_path.span;
|
let span = include_path.span;
|
||||||
let vals: Vec<_> = include_path
|
let vals: Vec<_> = include_path
|
||||||
@ -243,6 +244,14 @@ fn main() -> Result<()> {
|
|||||||
|
|
||||||
engine_state.add_env_var("NU_LIB_DIRS".into(), Value::list(vals, span));
|
engine_state.add_env_var("NU_LIB_DIRS".into(), Value::list(vals, span));
|
||||||
}
|
}
|
||||||
|
perf(
|
||||||
|
"NU_LIB_DIRS setup",
|
||||||
|
start_time,
|
||||||
|
file!(),
|
||||||
|
line!(),
|
||||||
|
column!(),
|
||||||
|
use_color,
|
||||||
|
);
|
||||||
|
|
||||||
start_time = std::time::Instant::now();
|
start_time = std::time::Instant::now();
|
||||||
// First, set up env vars as strings only
|
// First, set up env vars as strings only
|
||||||
@ -265,7 +274,16 @@ fn main() -> Result<()> {
|
|||||||
load_standard_library(&mut engine_state)?;
|
load_standard_library(&mut engine_state)?;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
start_time = std::time::Instant::now();
|
||||||
if parsed_nu_cli_args.lsp {
|
if parsed_nu_cli_args.lsp {
|
||||||
|
perf(
|
||||||
|
"lsp starting",
|
||||||
|
start_time,
|
||||||
|
file!(),
|
||||||
|
line!(),
|
||||||
|
column!(),
|
||||||
|
use_color,
|
||||||
|
);
|
||||||
return LanguageServer::initialize_stdio_connection()?.serve_requests(engine_state, ctrlc);
|
return LanguageServer::initialize_stdio_connection()?.serve_requests(engine_state, ctrlc);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -330,6 +348,7 @@ fn main() -> Result<()> {
|
|||||||
|
|
||||||
start_time = std::time::Instant::now();
|
start_time = std::time::Instant::now();
|
||||||
let input = if let Some(redirect_stdin) = &parsed_nu_cli_args.redirect_stdin {
|
let input = if let Some(redirect_stdin) = &parsed_nu_cli_args.redirect_stdin {
|
||||||
|
trace!("redirecting stdin");
|
||||||
let stdin = std::io::stdin();
|
let stdin = std::io::stdin();
|
||||||
let buf_reader = BufReader::new(stdin);
|
let buf_reader = BufReader::new(stdin);
|
||||||
|
|
||||||
@ -347,6 +366,7 @@ fn main() -> Result<()> {
|
|||||||
trim_end_newline: false,
|
trim_end_newline: false,
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
trace!("not redirecting stdin");
|
||||||
PipelineData::empty()
|
PipelineData::empty()
|
||||||
};
|
};
|
||||||
perf(
|
perf(
|
||||||
@ -358,9 +378,18 @@ fn main() -> Result<()> {
|
|||||||
use_color,
|
use_color,
|
||||||
);
|
);
|
||||||
|
|
||||||
|
start_time = std::time::Instant::now();
|
||||||
// Set up the $nu constant before evaluating config files (need to have $nu available in them)
|
// Set up the $nu constant before evaluating config files (need to have $nu available in them)
|
||||||
let nu_const = create_nu_constant(&engine_state, input.span().unwrap_or_else(Span::unknown))?;
|
let nu_const = create_nu_constant(&engine_state, input.span().unwrap_or_else(Span::unknown))?;
|
||||||
engine_state.set_variable_const_val(NU_VARIABLE_ID, nu_const);
|
engine_state.set_variable_const_val(NU_VARIABLE_ID, nu_const);
|
||||||
|
perf(
|
||||||
|
"create_nu_constant",
|
||||||
|
start_time,
|
||||||
|
file!(),
|
||||||
|
line!(),
|
||||||
|
column!(),
|
||||||
|
use_color,
|
||||||
|
);
|
||||||
|
|
||||||
if let Some(commands) = parsed_nu_cli_args.commands.clone() {
|
if let Some(commands) = parsed_nu_cli_args.commands.clone() {
|
||||||
run_commands(
|
run_commands(
|
||||||
|
@ -4,6 +4,7 @@ use crate::{
|
|||||||
command,
|
command,
|
||||||
config_files::{self, setup_config},
|
config_files::{self, setup_config},
|
||||||
};
|
};
|
||||||
|
use log::trace;
|
||||||
#[cfg(feature = "plugin")]
|
#[cfg(feature = "plugin")]
|
||||||
use nu_cli::read_plugin_file;
|
use nu_cli::read_plugin_file;
|
||||||
use nu_cli::{evaluate_commands, evaluate_file, evaluate_repl};
|
use nu_cli::{evaluate_commands, evaluate_file, evaluate_repl};
|
||||||
@ -18,6 +19,7 @@ pub(crate) fn run_commands(
|
|||||||
input: PipelineData,
|
input: PipelineData,
|
||||||
entire_start_time: std::time::Instant,
|
entire_start_time: std::time::Instant,
|
||||||
) -> Result<(), miette::ErrReport> {
|
) -> Result<(), miette::ErrReport> {
|
||||||
|
trace!("run_commands");
|
||||||
let mut stack = nu_protocol::engine::Stack::new();
|
let mut stack = nu_protocol::engine::Stack::new();
|
||||||
let start_time = std::time::Instant::now();
|
let start_time = std::time::Instant::now();
|
||||||
|
|
||||||
@ -141,6 +143,7 @@ pub(crate) fn run_file(
|
|||||||
args_to_script: Vec<String>,
|
args_to_script: Vec<String>,
|
||||||
input: PipelineData,
|
input: PipelineData,
|
||||||
) -> Result<(), miette::ErrReport> {
|
) -> Result<(), miette::ErrReport> {
|
||||||
|
trace!("run_file");
|
||||||
let mut stack = nu_protocol::engine::Stack::new();
|
let mut stack = nu_protocol::engine::Stack::new();
|
||||||
let start_time = std::time::Instant::now();
|
let start_time = std::time::Instant::now();
|
||||||
|
|
||||||
@ -242,6 +245,7 @@ pub(crate) fn run_repl(
|
|||||||
parsed_nu_cli_args: command::NushellCliArgs,
|
parsed_nu_cli_args: command::NushellCliArgs,
|
||||||
entire_start_time: std::time::Instant,
|
entire_start_time: std::time::Instant,
|
||||||
) -> Result<(), miette::ErrReport> {
|
) -> Result<(), miette::ErrReport> {
|
||||||
|
trace!("run_repl");
|
||||||
let mut stack = nu_protocol::engine::Stack::new();
|
let mut stack = nu_protocol::engine::Stack::new();
|
||||||
let start_time = std::time::Instant::now();
|
let start_time = std::time::Instant::now();
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user