forked from extern/nushell
Retain tag when accessing a var (#3535)
This commit is contained in:
parent
2486492c4d
commit
290c712cde
@ -200,7 +200,11 @@ pub fn evaluate_baseline_expr(
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
Ok(item.value.into_value(tag))
|
if path.tail.is_empty() {
|
||||||
|
Ok(item)
|
||||||
|
} else {
|
||||||
|
Ok(item.value.into_value(tag))
|
||||||
|
}
|
||||||
}
|
}
|
||||||
Expression::Boolean(_boolean) => Ok(UntaggedValue::boolean(*_boolean).into_value(tag)),
|
Expression::Boolean(_boolean) => Ok(UntaggedValue::boolean(*_boolean).into_value(tag)),
|
||||||
Expression::Garbage => unimplemented!(),
|
Expression::Garbage => unimplemented!(),
|
||||||
@ -289,7 +293,10 @@ fn evaluate_invocation(block: &hir::Block, ctx: &EvaluationContext) -> Result<Va
|
|||||||
}
|
}
|
||||||
|
|
||||||
match output.len() {
|
match output.len() {
|
||||||
x if x > 1 => Ok(UntaggedValue::Table(output).into_value(Tag::unknown())),
|
x if x > 1 => {
|
||||||
|
let tag = output[0].tag.clone();
|
||||||
|
Ok(UntaggedValue::Table(output).into_value(tag))
|
||||||
|
}
|
||||||
1 => Ok(output[0].clone()),
|
1 => Ok(output[0].clone()),
|
||||||
_ => Ok(UntaggedValue::nothing().into_value(Tag::unknown())),
|
_ => Ok(UntaggedValue::nothing().into_value(Tag::unknown())),
|
||||||
}
|
}
|
||||||
|
@ -61,6 +61,60 @@ fn treats_dot_dot_as_path_not_range() {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn tags_dont_persist_through_column_path() {
|
||||||
|
Playground::setup("dot_dot_dir", |dirs, sandbox| {
|
||||||
|
sandbox.with_files(vec![FileWithContentToBeTrimmed(
|
||||||
|
"nu_times.csv",
|
||||||
|
r#"
|
||||||
|
name,rusty_luck,origin
|
||||||
|
Jason,1,Canada
|
||||||
|
"#,
|
||||||
|
)]);
|
||||||
|
|
||||||
|
let actual = nu!(
|
||||||
|
cwd: dirs.test(), pipeline(
|
||||||
|
r#"
|
||||||
|
mkdir temp;
|
||||||
|
cd temp;
|
||||||
|
let x = (open ../nu_times.csv).name;
|
||||||
|
$x | tags | get anchor | autoview;
|
||||||
|
rmdir temp
|
||||||
|
"#
|
||||||
|
));
|
||||||
|
|
||||||
|
// chop will remove the last escaped double quote from \"Estados Unidos\"
|
||||||
|
assert!(actual.err.contains("isn't a column"));
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn tags_persist_through_vars() {
|
||||||
|
Playground::setup("dot_dot_dir", |dirs, sandbox| {
|
||||||
|
sandbox.with_files(vec![FileWithContentToBeTrimmed(
|
||||||
|
"nu_times.csv",
|
||||||
|
r#"
|
||||||
|
name,rusty_luck,origin
|
||||||
|
Jason,1,Canada
|
||||||
|
"#,
|
||||||
|
)]);
|
||||||
|
|
||||||
|
let actual = nu!(
|
||||||
|
cwd: dirs.test(), pipeline(
|
||||||
|
r#"
|
||||||
|
mkdir temp;
|
||||||
|
cd temp;
|
||||||
|
let x = (open ../nu_times.csv);
|
||||||
|
$x | tags | get anchor | autoview;
|
||||||
|
rmdir temp
|
||||||
|
"#
|
||||||
|
));
|
||||||
|
|
||||||
|
// chop will remove the last escaped double quote from \"Estados Unidos\"
|
||||||
|
assert!(actual.out.contains("nu_times.csv"));
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn invocation_properly_redirects() {
|
fn invocation_properly_redirects() {
|
||||||
let actual = nu!(
|
let actual = nu!(
|
||||||
|
Loading…
Reference in New Issue
Block a user