mirror of
https://github.com/nushell/nushell.git
synced 2025-08-10 17:54:22 +02:00
Further cleanup of Span::test_data
usage + span fixes (#7595)
# Description Inspired by #7592 For brevity use `Value::test_{string,int,float,bool}` Includes fixes to commands that were abusing `Span::test_data` in their implementation. Now the call span is used where possible or the explicit `Span::unknonw` is used. ## Command fixes - Fix abuse of `Span::test_data()` in `query_xml` - Fix abuse of `Span::test_data()` in `term size` - Fix abuse of `Span::test_data()` in `seq date` - Fix two abuses of `Span::test_data` in `nu-cli` - Change `Span::test_data` to `Span::unknown` in `keybindings listen` - Add proper call span to `registry query` - Fix span use in `nu_plugin_query` - Fix span assignment in `select` - Use `Span::unknown` instead of `test_data` in more places ## Other - Use `Value::test_int`/`test_float()` consistently - More `test_string` and `test_bool` - Fix unused imports # User-Facing Changes Some commands may now provide more helpful spans for downstream use in errors
This commit is contained in:
committed by
GitHub
parent
dd6fe6a04a
commit
45fe3be83e
@ -94,6 +94,8 @@ fn registry_query(
|
||||
stack: &mut Stack,
|
||||
call: &Call,
|
||||
) -> Result<nu_protocol::PipelineData, nu_protocol::ShellError> {
|
||||
let call_span = call.head;
|
||||
|
||||
let registry_key: Spanned<String> = call.req(engine_state, stack, 0)?;
|
||||
let registry_key_span = ®istry_key.clone().span;
|
||||
let registry_value: Option<Spanned<String>> = call.opt(engine_state, stack, 1)?;
|
||||
@ -112,18 +114,18 @@ fn registry_query(
|
||||
key: registry_key.item,
|
||||
};
|
||||
|
||||
let reg_key = get_reg_key(reg_params)?;
|
||||
let reg_key = get_reg_key(reg_params, call_span)?;
|
||||
|
||||
if registry_value.is_none() {
|
||||
let mut reg_values = vec![];
|
||||
for (name, val) in reg_key.enum_values().flatten() {
|
||||
let (nu_value, reg_type) = reg_value_to_nu_value(val);
|
||||
let (nu_value, reg_type) = reg_value_to_nu_value(val, call_span);
|
||||
reg_values.push(Value::Record {
|
||||
cols: vec!["name".to_string(), "value".to_string(), "type".to_string()],
|
||||
vals: vec![
|
||||
Value::string(name, Span::test_data()),
|
||||
Value::string(name, call_span),
|
||||
nu_value,
|
||||
Value::string(format!("{:?}", reg_type), Span::test_data()),
|
||||
Value::string(format!("{:?}", reg_type), call_span),
|
||||
],
|
||||
span: *registry_key_span,
|
||||
})
|
||||
@ -135,13 +137,13 @@ fn registry_query(
|
||||
let reg_value = reg_key.get_raw_value(value.item.as_str());
|
||||
match reg_value {
|
||||
Ok(val) => {
|
||||
let (nu_value, reg_type) = reg_value_to_nu_value(val);
|
||||
let (nu_value, reg_type) = reg_value_to_nu_value(val, call_span);
|
||||
Ok(Value::Record {
|
||||
cols: vec!["name".to_string(), "value".to_string(), "type".to_string()],
|
||||
vals: vec![
|
||||
Value::string(value.item, Span::test_data()),
|
||||
Value::string(value.item, call_span),
|
||||
nu_value,
|
||||
Value::string(format!("{:?}", reg_type), Span::test_data()),
|
||||
Value::string(format!("{:?}", reg_type), call_span),
|
||||
],
|
||||
span: value.span,
|
||||
}
|
||||
@ -156,12 +158,12 @@ fn registry_query(
|
||||
)),
|
||||
}
|
||||
}
|
||||
None => Ok(Value::nothing(Span::test_data()).into_pipeline_data()),
|
||||
None => Ok(Value::nothing(call_span).into_pipeline_data()),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fn get_reg_key(reg_params: RegistryQueryArgs) -> Result<RegKey, ShellError> {
|
||||
fn get_reg_key(reg_params: RegistryQueryArgs, call_span: Span) -> Result<RegKey, ShellError> {
|
||||
let mut key_count = 0;
|
||||
let registry_key = if reg_params.hkcr {
|
||||
key_count += 1;
|
||||
@ -201,7 +203,7 @@ fn get_reg_key(reg_params: RegistryQueryArgs) -> Result<RegKey, ShellError> {
|
||||
return Err(ShellError::GenericError(
|
||||
"Only one registry key can be specified".into(),
|
||||
"Only one registry key can be specified".into(),
|
||||
Some(Span::test_data()),
|
||||
Some(call_span),
|
||||
None,
|
||||
Vec::new(),
|
||||
));
|
||||
@ -211,59 +213,57 @@ fn get_reg_key(reg_params: RegistryQueryArgs) -> Result<RegKey, ShellError> {
|
||||
|
||||
fn reg_value_to_nu_value(
|
||||
reg_value: winreg::RegValue,
|
||||
call_span: Span,
|
||||
) -> (nu_protocol::Value, winreg::enums::RegType) {
|
||||
match reg_value.vtype {
|
||||
REG_NONE => (Value::nothing(Span::test_data()), reg_value.vtype),
|
||||
REG_NONE => (Value::nothing(call_span), reg_value.vtype),
|
||||
REG_SZ => (
|
||||
Value::string(reg_value.to_string(), Span::test_data()),
|
||||
Value::string(reg_value.to_string(), call_span),
|
||||
reg_value.vtype,
|
||||
),
|
||||
REG_EXPAND_SZ => (
|
||||
Value::string(reg_value.to_string(), Span::test_data()),
|
||||
reg_value.vtype,
|
||||
),
|
||||
REG_BINARY => (
|
||||
Value::binary(reg_value.bytes, Span::test_data()),
|
||||
Value::string(reg_value.to_string(), call_span),
|
||||
reg_value.vtype,
|
||||
),
|
||||
REG_BINARY => (Value::binary(reg_value.bytes, call_span), reg_value.vtype),
|
||||
REG_DWORD => (
|
||||
Value::int(
|
||||
unsafe { *(reg_value.bytes.as_ptr() as *const u32) } as i64,
|
||||
Span::test_data(),
|
||||
call_span,
|
||||
),
|
||||
reg_value.vtype,
|
||||
),
|
||||
REG_DWORD_BIG_ENDIAN => (
|
||||
Value::int(
|
||||
unsafe { *(reg_value.bytes.as_ptr() as *const u32) } as i64,
|
||||
Span::test_data(),
|
||||
call_span,
|
||||
),
|
||||
reg_value.vtype,
|
||||
),
|
||||
REG_LINK => (
|
||||
Value::string(reg_value.to_string(), Span::test_data()),
|
||||
Value::string(reg_value.to_string(), call_span),
|
||||
reg_value.vtype,
|
||||
),
|
||||
REG_MULTI_SZ => (
|
||||
Value::string(reg_value.to_string(), Span::test_data()),
|
||||
Value::string(reg_value.to_string(), call_span),
|
||||
reg_value.vtype,
|
||||
),
|
||||
REG_RESOURCE_LIST => (
|
||||
Value::string(reg_value.to_string(), Span::test_data()),
|
||||
Value::string(reg_value.to_string(), call_span),
|
||||
reg_value.vtype,
|
||||
),
|
||||
REG_FULL_RESOURCE_DESCRIPTOR => (
|
||||
Value::string(reg_value.to_string(), Span::test_data()),
|
||||
Value::string(reg_value.to_string(), call_span),
|
||||
reg_value.vtype,
|
||||
),
|
||||
REG_RESOURCE_REQUIREMENTS_LIST => (
|
||||
Value::string(reg_value.to_string(), Span::test_data()),
|
||||
Value::string(reg_value.to_string(), call_span),
|
||||
reg_value.vtype,
|
||||
),
|
||||
REG_QWORD => (
|
||||
Value::int(
|
||||
unsafe { *(reg_value.bytes.as_ptr() as *const u32) } as i64,
|
||||
Span::test_data(),
|
||||
call_span,
|
||||
),
|
||||
reg_value.vtype,
|
||||
),
|
||||
|
Reference in New Issue
Block a user