mirror of
https://github.com/nushell/nushell.git
synced 2025-08-09 15:06:03 +02:00
Span ID Refactor (Step 2): Make Call SpanId-friendly (#13268)
<!-- if this PR closes one or more issues, you can automatically link the PR with them by using one of the [*linking keywords*](https://docs.github.com/en/issues/tracking-your-work-with-issues/linking-a-pull-request-to-an-issue#linking-a-pull-request-to-an-issue-using-a-keyword), e.g. - this PR should close #xxxx - fixes #xxxx you can also mention related issues, PRs or discussions! --> # Description <!-- Thank you for improving Nushell. Please, check our [contributing guide](../CONTRIBUTING.md) and talk to the core team before making major changes. Description of your pull request goes here. **Provide examples and/or screenshots** if your changes affect the user experience. --> Part of https://github.com/nushell/nushell/issues/12963, step 2. This PR refactors Call and related argument structures to remove their dependency on `Expression::span` which will be removed in the future. # User-Facing Changes <!-- List of all changes that impact the user experience here. This helps us keep track of breaking changes. --> Should be none. If you see some error messages that look broken, please report. # 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 toolkit.nu; toolkit test stdlib"` 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:
@ -113,7 +113,7 @@ impl CallExt for Call {
|
||||
let stack = &mut stack.use_call_arg_out_dest();
|
||||
let mut output = vec![];
|
||||
|
||||
for result in self.rest_iter_flattened(starting_pos, |expr| {
|
||||
for result in self.rest_iter_flattened(&engine_state, starting_pos, |expr| {
|
||||
eval_expression::<WithoutDebug>(engine_state, stack, expr)
|
||||
})? {
|
||||
output.push(FromValue::from_value(result)?);
|
||||
|
@ -48,7 +48,7 @@ fn nu_highlight_string(code_string: &str, engine_state: &EngineState, stack: &mu
|
||||
if let Ok(output) = decl.run(
|
||||
engine_state,
|
||||
stack,
|
||||
&Call::new(Span::unknown()),
|
||||
&Call::new(Span::unknown(), Span::unknown()),
|
||||
Value::string(code_string, Span::unknown()).into_pipeline_data(),
|
||||
) {
|
||||
let result = output.into_value(Span::unknown());
|
||||
@ -241,7 +241,10 @@ fn get_documentation(
|
||||
&Call {
|
||||
decl_id,
|
||||
head: span,
|
||||
arguments: vec![],
|
||||
arguments: Spanned {
|
||||
item: vec![],
|
||||
span: span.past(),
|
||||
},
|
||||
parser_info: HashMap::new(),
|
||||
},
|
||||
PipelineData::Value(Value::list(vals, span), None),
|
||||
@ -273,7 +276,7 @@ fn get_documentation(
|
||||
match decl.run(
|
||||
engine_state,
|
||||
stack,
|
||||
&Call::new(Span::unknown()),
|
||||
&Call::new(Span::unknown(), Span::unknown()),
|
||||
Value::string(example.example, Span::unknown()).into_pipeline_data(),
|
||||
) {
|
||||
Ok(output) => {
|
||||
@ -296,7 +299,7 @@ fn get_documentation(
|
||||
}
|
||||
|
||||
if let Some(result) = &example.result {
|
||||
let mut table_call = Call::new(Span::unknown());
|
||||
let mut table_call = Call::new(Span::unknown(), Span::unknown());
|
||||
if example.example.ends_with("--collapse") {
|
||||
// collapse the result
|
||||
table_call.add_named((
|
||||
@ -306,6 +309,7 @@ fn get_documentation(
|
||||
},
|
||||
None,
|
||||
None,
|
||||
UNKNOWN_SPAN_ID,
|
||||
))
|
||||
} else {
|
||||
// expand the result
|
||||
@ -316,6 +320,7 @@ fn get_documentation(
|
||||
},
|
||||
None,
|
||||
None,
|
||||
UNKNOWN_SPAN_ID,
|
||||
))
|
||||
}
|
||||
let table = engine_state
|
||||
@ -368,13 +373,17 @@ fn get_ansi_color_for_component_or_default(
|
||||
// Call ansi command using argument
|
||||
if let Some(argument) = argument_opt {
|
||||
if let Some(decl_id) = engine_state.find_decl(b"ansi", &[]) {
|
||||
let arg_span = argument.span(&engine_state);
|
||||
if let Ok(result) = eval_call::<WithoutDebug>(
|
||||
engine_state,
|
||||
caller_stack,
|
||||
&Call {
|
||||
decl_id,
|
||||
head: span,
|
||||
arguments: vec![argument],
|
||||
arguments: Spanned {
|
||||
item: vec![argument],
|
||||
span: arg_span,
|
||||
},
|
||||
parser_info: HashMap::new(),
|
||||
},
|
||||
PipelineData::Empty,
|
||||
|
@ -26,7 +26,7 @@ pub fn eval_call<D: DebugContext>(
|
||||
}
|
||||
let decl = engine_state.get_decl(call.decl_id);
|
||||
|
||||
if !decl.is_known_external() && call.named_iter().any(|(flag, _, _)| flag.item == "help") {
|
||||
if !decl.is_known_external() && call.named_iter().any(|(flag, _, _, _)| flag.item == "help") {
|
||||
let help = get_full_help(decl, engine_state, caller_stack);
|
||||
Ok(Value::string(help, call.head).into_pipeline_data())
|
||||
} else if let Some(block_id) = decl.block_id() {
|
||||
@ -100,6 +100,7 @@ pub fn eval_call<D: DebugContext>(
|
||||
let mut rest_items = vec![];
|
||||
|
||||
for result in call.rest_iter_flattened(
|
||||
&engine_state,
|
||||
decl.signature().required_positional.len()
|
||||
+ decl.signature().optional_positional.len(),
|
||||
|expr| eval_expression::<D>(engine_state, caller_stack, expr),
|
||||
@ -213,8 +214,16 @@ fn eval_external(
|
||||
})?;
|
||||
|
||||
let command = engine_state.get_decl(decl_id);
|
||||
let spans: Vec<Span> = args
|
||||
.iter()
|
||||
.map(|arg| match arg {
|
||||
ExternalArgument::Regular(expr) | ExternalArgument::Spread(expr) => {
|
||||
expr.span(&engine_state)
|
||||
}
|
||||
})
|
||||
.collect();
|
||||
|
||||
let mut call = Call::new(head.span(&engine_state));
|
||||
let mut call = Call::new(head.span(&engine_state), Span::concat(&spans));
|
||||
|
||||
call.add_positional(head.clone());
|
||||
|
||||
|
Reference in New Issue
Block a user