Only allow unaliasing in current scope, add tests (#3936)

* unalias only removes aliases in the current scope

* Add a test and fix previous ones which did not function as expected
This commit is contained in:
Hristo Filaretov 2021-08-19 09:05:36 +02:00 committed by GitHub
parent ead4029d49
commit 6db5692be4
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 31 additions and 10 deletions

View File

@ -408,7 +408,7 @@ impl ParserScope for Scope {
}
fn remove_alias(&self, name: &str) {
for frame in self.frames.lock().iter_mut().rev() {
if let Some(frame) = self.frames.lock().last_mut() {
frame.aliases.remove(name);
}
}

View File

@ -1150,23 +1150,44 @@ fn unalias_shadowing() {
let actual = nu!(
cwd: ".", pipeline(
r#"
alias ll = ls -l
let xyz = { ll -a }
unalias ll
do $xyz
def test-shadowing [] {
alias greet = echo hello;
let xyz = { greet };
unalias greet;
do $xyz
};
test-shadowing
"#)
);
assert_eq!(actual.out, "hello");
}
assert_eq!(actual.out, "");
#[test]
fn unalias_does_not_escape_scope() {
let actual = nu!(
cwd: ".", pipeline(
r#"
def test-alias [] {
alias greet = echo hello;
(unalias greet);
greet
};
test-alias
"#)
);
assert_eq!(actual.out, "hello");
}
#[test]
fn unalias_hides_alias() {
let actual = nu!(cwd: ".", pipeline(
r#"alias ll = ls -l
ll
unalias ll
ll
r#"
def test-alias [] {
alias ll = ls -l;
unalias ll;
ll
};
test-alias
"#)
);