Move $nu.env to $env (#665)

* Move env from nu builtin to its own

* update samples/tests
This commit is contained in:
JT 2022-01-05 08:34:42 +11:00 committed by GitHub
parent 4d1ce6c27b
commit 8f6843c600
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
11 changed files with 95 additions and 80 deletions

View File

@ -48,22 +48,22 @@ impl Command for WithEnv {
vec![ vec![
Example { Example {
description: "Set the MYENV environment variable", description: "Set the MYENV environment variable",
example: r#"with-env [MYENV "my env value"] { $nu.env.MYENV }"#, example: r#"with-env [MYENV "my env value"] { $env.MYENV }"#,
result: Some(Value::test_string("my env value")), result: Some(Value::test_string("my env value")),
}, },
Example { Example {
description: "Set by primitive value list", description: "Set by primitive value list",
example: r#"with-env [X Y W Z] { $nu.env.X }"#, example: r#"with-env [X Y W Z] { $env.X }"#,
result: Some(Value::test_string("Y")), result: Some(Value::test_string("Y")),
}, },
Example { Example {
description: "Set by single row table", description: "Set by single row table",
example: r#"with-env [[X W]; [Y Z]] { $nu.env.W }"#, example: r#"with-env [[X W]; [Y Z]] { $env.W }"#,
result: Some(Value::test_string("Z")), result: Some(Value::test_string("Z")),
}, },
Example { Example {
description: "Set by row(e.g. `open x.json` or `from json`)", description: "Set by row(e.g. `open x.json` or `from json`)",
example: r#"echo '{"X":"Y","W":"Z"}'|from json|with-env $it { echo $nu.env.X $nu.env.W }"#, example: r#"echo '{"X":"Y","W":"Z"}'|from json|with-env $it { echo $env.X $env.W }"#,
result: None, result: None,
}, },
] ]

View File

@ -5,7 +5,7 @@ use nu_protocol::ast::{Block, Call, Expr, Expression, Operator, Statement};
use nu_protocol::engine::{EngineState, Stack}; use nu_protocol::engine::{EngineState, Stack};
use nu_protocol::{ use nu_protocol::{
IntoInterruptiblePipelineData, IntoPipelineData, PipelineData, Range, ShellError, Span, IntoInterruptiblePipelineData, IntoPipelineData, PipelineData, Range, ShellError, Span,
Spanned, Type, Unit, Value, VarId, Spanned, Type, Unit, Value, VarId, ENV_VARIABLE_ID,
}; };
use crate::get_full_help; use crate::get_full_help;
@ -530,26 +530,6 @@ pub fn eval_variable(
let mut output_cols = vec![]; let mut output_cols = vec![];
let mut output_vals = vec![]; let mut output_vals = vec![];
let env_vars = stack.get_env_vars();
let env_columns = env_vars.keys();
let env_values = env_vars.values();
let mut pairs = env_columns
.map(|x| x.to_string())
.zip(env_values.cloned())
.collect::<Vec<(String, Value)>>();
pairs.sort_by(|a, b| a.0.cmp(&b.0));
let (env_columns, env_values) = pairs.into_iter().unzip();
output_cols.push("env".into());
output_vals.push(Value::Record {
cols: env_columns,
vals: env_values,
span,
});
if let Some(mut config_path) = nu_path::config_dir() { if let Some(mut config_path) = nu_path::config_dir() {
config_path.push("nushell"); config_path.push("nushell");
@ -905,6 +885,25 @@ pub fn eval_variable(
vals: output_vals, vals: output_vals,
span, span,
}) })
} else if var_id == ENV_VARIABLE_ID {
let env_vars = stack.get_env_vars();
let env_columns = env_vars.keys();
let env_values = env_vars.values();
let mut pairs = env_columns
.map(|x| x.to_string())
.zip(env_values.cloned())
.collect::<Vec<(String, Value)>>();
pairs.sort_by(|a, b| a.0.cmp(&b.0));
let (env_columns, env_values) = pairs.into_iter().unzip();
Ok(Value::Record {
cols: env_columns,
vals: env_values,
span,
})
} else { } else {
stack stack
.get_var(var_id) .get_var(var_id)

View File

@ -495,10 +495,10 @@ pub fn parse_module_block(
// TODO: Exported env vars are usable iside the module only if correctly // TODO: Exported env vars are usable iside the module only if correctly
// exported by the user. For example: // exported by the user. For example:
// //
// > module foo { export env a { "2" }; export def b [] { $nu.env.a } } // > module foo { export env a { "2" }; export def b [] { $env.a } }
// //
// will work only if you call `use foo *; b` but not with `use foo; foo b` // will work only if you call `use foo *; b` but not with `use foo; foo b`
// since in the second case, the name of the env var would be $nu.env."foo a". // since in the second case, the name of the env var would be $env."foo a".
b"export" => { b"export" => {
let (stmt, exportable, err) = let (stmt, exportable, err) =
parse_export(working_set, &pipeline.commands[0].parts); parse_export(working_set, &pipeline.commands[0].parts);

View File

@ -1331,6 +1331,16 @@ pub fn parse_variable_expr(
}, },
None, None,
); );
} else if contents == b"$env" {
return (
Expression {
expr: Expr::Var(nu_protocol::ENV_VARIABLE_ID),
span,
ty: Type::Unknown,
custom_completion: None,
},
None,
);
} }
let (id, err) = parse_variable(working_set, span); let (id, err) = parse_variable(working_set, span);

View File

@ -148,13 +148,20 @@ pub const NU_VARIABLE_ID: usize = 0;
pub const SCOPE_VARIABLE_ID: usize = 1; pub const SCOPE_VARIABLE_ID: usize = 1;
pub const IN_VARIABLE_ID: usize = 2; pub const IN_VARIABLE_ID: usize = 2;
pub const CONFIG_VARIABLE_ID: usize = 3; pub const CONFIG_VARIABLE_ID: usize = 3;
pub const ENV_VARIABLE_ID: usize = 4;
impl EngineState { impl EngineState {
pub fn new() -> Self { pub fn new() -> Self {
Self { Self {
files: im::vector![], files: im::vector![],
file_contents: im::vector![], file_contents: im::vector![],
vars: im::vector![Type::Unknown, Type::Unknown, Type::Unknown, Type::Unknown], vars: im::vector![
Type::Unknown,
Type::Unknown,
Type::Unknown,
Type::Unknown,
Type::Unknown
],
decls: im::vector![], decls: im::vector![],
blocks: im::vector![], blocks: im::vector![],
overlays: im::vector![], overlays: im::vector![],

View File

@ -15,7 +15,9 @@ mod value;
pub use value::Value; pub use value::Value;
pub use config::*; pub use config::*;
pub use engine::{CONFIG_VARIABLE_ID, IN_VARIABLE_ID, NU_VARIABLE_ID, SCOPE_VARIABLE_ID}; pub use engine::{
CONFIG_VARIABLE_ID, ENV_VARIABLE_ID, IN_VARIABLE_ID, NU_VARIABLE_ID, SCOPE_VARIABLE_ID,
};
pub use example::*; pub use example::*;
pub use exportable::*; pub use exportable::*;
pub use id::*; pub use id::*;

View File

@ -39,7 +39,7 @@ You can test the conversions by manually calling them:
``` ```
> let-env FOO = "a:b:c" > let-env FOO = "a:b:c"
> let list = (do $config.env_conversions.from_string $nu.env.FOO) > let list = (do $config.env_conversions.from_string $env.FOO)
> $list > $list
╭───┬───╮ ╭───┬───╮
@ -58,7 +58,7 @@ To verify the conversion works on startup, you can first set up `FOO`, then laun
> nu > nu
>> $nu.env.FOO >> $env.FOO
╭───┬───╮ ╭───┬───╮
│ 0 │ a │ │ 0 │ a │
│ 1 │ b │ │ 1 │ b │
@ -94,8 +94,8 @@ Out of the box, Nushell ships with several environment variables serving a speci
## Breaking Changes ## Breaking Changes
* Setting environment variable to `$nothing` will no longer remove it -- it will be `$nothing`. Instead, you can use `hide $nu.env.FOO`. * Setting environment variable to `$nothing` will no longer remove it -- it will be `$nothing`. Instead, you can use `hide $env.FOO`.
* `$nu.env.PROMPT_COMMAND` is a block instead of a string containing the source of the command to run. You can put this into your `config.nu`, for example: `let-env PROMPT_COMMAND = { echo "foo" }`. * `$env.PROMPT_COMMAND` is a block instead of a string containing the source of the command to run. You can put this into your `config.nu`, for example: `let-env PROMPT_COMMAND = { echo "foo" }`.
## Future Directions ## Future Directions

View File

@ -163,10 +163,10 @@ export def hello [name: string] {
``` ```
> use greetings.nu > use greetings.nu
> $nu.env."greetings MYNAME" > $env."greetings MYNAME"
Arthur, King of the Britons Arthur, King of the Britons
> greetings hello $nu.env."greetings MYNAME" > greetings hello $env."greetings MYNAME"
hello Arthur, King of the Britons! hello Arthur, King of the Britons!
``` ```
@ -178,18 +178,18 @@ We can demonstrate this property for example with the `random` command:
> use roll ROLL > use roll ROLL
> $nu.env.ROLL > $env.ROLL
4 4
> $nu.env.ROLL > $env.ROLL
4 4
> use roll ROLL > use roll ROLL
> $nu.env.ROLL > $env.ROLL
6 6
> $nu.env.ROLL > $env.ROLL
6 6
``` ```
@ -227,18 +227,18 @@ Let's try environment variables:
``` ```
> let-env FOO = "FOO" > let-env FOO = "FOO"
> $nu.env.FOO > $env.FOO
FOO FOO
> hide FOO > hide FOO
> $nu.env.FOO # error! environment variable not found! > $env.FOO # error! environment variable not found!
``` ```
The first case also applies to commands / environment variables brought from a module (using the "greetings.nu" file defined above): The first case also applies to commands / environment variables brought from a module (using the "greetings.nu" file defined above):
``` ```
> use greetings.nu * > use greetings.nu *
> $nu.env.MYNAME > $env.MYNAME
Arthur, King of the Britons Arthur, King of the Britons
> hello "world" > hello "world"
@ -246,7 +246,7 @@ hello world!
> hide MYNAME > hide MYNAME
> $nu.env.MYNAME # error! environment variable not found! > $env.MYNAME # error! environment variable not found!
> hide hello > hide hello
@ -256,7 +256,7 @@ And finally, when the name is the module name (assuming the previous `greetings`
``` ```
> use greetings.nu > use greetings.nu
> $nu.env."greetings MYNAME" > $env."greetings MYNAME"
Arthur, King of the Britons Arthur, King of the Britons
> greetings hello "world" > greetings hello "world"
@ -264,7 +264,7 @@ hello world!
> hide greetings > hide greetings
> $nu.env."greetings MYNAME" # error! environment variable not found! > $env."greetings MYNAME" # error! environment variable not found!
> greetings hello "world" # error! command not found! > greetings hello "world" # error! command not found!
``` ```
@ -275,7 +275,7 @@ To demonstrate the other cases (again, assuming the same `greetings` module):
> hide greetings hello > hide greetings hello
> $nu.env."greetings MYNAME" > $env."greetings MYNAME"
Arthur, King of the Britons Arthur, King of the Britons
> greetings hello "world" # error! command not found! > greetings hello "world" # error! command not found!
@ -285,7 +285,7 @@ Arthur, King of the Britons
> hide greetings [ hello MYNAME ] > hide greetings [ hello MYNAME ]
> $nu.env."greetings MYNAME" # error! environment variable not found! > $env."greetings MYNAME" # error! environment variable not found!
> greetings hello "world" # error! command not found! > greetings hello "world" # error! command not found!
``` ```
@ -294,7 +294,7 @@ Arthur, King of the Britons
> hide greetings * > hide greetings *
> $nu.env."greetings MYNAME" # error! environment variable not found! > $env."greetings MYNAME" # error! environment variable not found!
> greetings hello "world" # error! command not found! > greetings hello "world" # error! command not found!
``` ```

View File

@ -2,15 +2,15 @@ use crate::tests::{run_test, TestResult};
#[test] #[test]
fn shorthand_env_1() -> TestResult { fn shorthand_env_1() -> TestResult {
run_test(r#"FOO=BAZ $nu.env.FOO"#, "BAZ") run_test(r#"FOO=BAZ $env.FOO"#, "BAZ")
} }
#[test] #[test]
fn shorthand_env_2() -> TestResult { fn shorthand_env_2() -> TestResult {
run_test(r#"FOO=BAZ FOO=MOO $nu.env.FOO"#, "MOO") run_test(r#"FOO=BAZ FOO=MOO $env.FOO"#, "MOO")
} }
#[test] #[test]
fn shorthand_env_3() -> TestResult { fn shorthand_env_3() -> TestResult {
run_test(r#"FOO=BAZ BAR=MOO $nu.env.FOO"#, "BAZ") run_test(r#"FOO=BAZ BAR=MOO $env.FOO"#, "BAZ")
} }

View File

@ -8,10 +8,7 @@ fn hides_def() -> TestResult {
#[test] #[test]
fn hides_env() -> TestResult { fn hides_env() -> TestResult {
fail_test( fail_test(r#"let-env foo = "foo"; hide foo; $env.foo"#, "did you mean")
r#"let-env foo = "foo"; hide foo; $nu.env.foo"#,
"did you mean",
)
} }
#[test] #[test]
@ -27,7 +24,7 @@ fn hides_def_then_redefines() -> TestResult {
#[test] #[test]
fn hides_env_then_redefines() -> TestResult { fn hides_env_then_redefines() -> TestResult {
run_test( run_test(
r#"let-env foo = "foo"; hide foo; let-env foo = "bar"; $nu.env.foo"#, r#"let-env foo = "foo"; hide foo; let-env foo = "bar"; $env.foo"#,
"bar", "bar",
) )
} }
@ -67,7 +64,7 @@ fn hides_def_in_scope_4() -> TestResult {
#[test] #[test]
fn hides_env_in_scope_1() -> TestResult { fn hides_env_in_scope_1() -> TestResult {
fail_test( fail_test(
r#"let-env foo = "foo"; do { hide foo; $nu.env.foo }"#, r#"let-env foo = "foo"; do { hide foo; $env.foo }"#,
"did you mean", "did you mean",
) )
} }
@ -75,7 +72,7 @@ fn hides_env_in_scope_1() -> TestResult {
#[test] #[test]
fn hides_env_in_scope_2() -> TestResult { fn hides_env_in_scope_2() -> TestResult {
run_test( run_test(
r#"let-env foo = "foo"; do { let-env foo = "bar"; hide foo; $nu.env.foo }"#, r#"let-env foo = "foo"; do { let-env foo = "bar"; hide foo; $env.foo }"#,
"foo", "foo",
) )
} }
@ -83,7 +80,7 @@ fn hides_env_in_scope_2() -> TestResult {
#[test] #[test]
fn hides_env_in_scope_3() -> TestResult { fn hides_env_in_scope_3() -> TestResult {
fail_test( fail_test(
r#"let-env foo = "foo"; do { hide foo; let-env foo = "bar"; hide foo; $nu.env.foo }"#, r#"let-env foo = "foo"; do { hide foo; let-env foo = "bar"; hide foo; $env.foo }"#,
"did you mean", "did you mean",
) )
} }
@ -91,7 +88,7 @@ fn hides_env_in_scope_3() -> TestResult {
#[test] #[test]
fn hides_env_in_scope_4() -> TestResult { fn hides_env_in_scope_4() -> TestResult {
fail_test( fail_test(
r#"let-env foo = "foo"; do { let-env foo = "bar"; hide foo; hide foo; $nu.env.foo }"#, r#"let-env foo = "foo"; do { let-env foo = "bar"; hide foo; hide foo; $env.foo }"#,
"did you mean", "did you mean",
) )
} }
@ -112,7 +109,7 @@ fn hide_env_twice_not_allowed() -> TestResult {
#[test] #[test]
fn hides_def_runs_env_1() -> TestResult { fn hides_def_runs_env_1() -> TestResult {
run_test( run_test(
r#"let-env foo = "bar"; def foo [] { "foo" }; hide foo; $nu.env.foo"#, r#"let-env foo = "bar"; def foo [] { "foo" }; hide foo; $env.foo"#,
"bar", "bar",
) )
} }
@ -120,7 +117,7 @@ fn hides_def_runs_env_1() -> TestResult {
#[test] #[test]
fn hides_def_runs_env_2() -> TestResult { fn hides_def_runs_env_2() -> TestResult {
run_test( run_test(
r#"def foo [] { "foo" }; let-env foo = "bar"; hide foo; $nu.env.foo"#, r#"def foo [] { "foo" }; let-env foo = "bar"; hide foo; $env.foo"#,
"bar", "bar",
) )
} }
@ -128,7 +125,7 @@ fn hides_def_runs_env_2() -> TestResult {
#[test] #[test]
fn hides_def_and_env() -> TestResult { fn hides_def_and_env() -> TestResult {
fail_test( fail_test(
r#"let-env foo = "bar"; def foo [] { "foo" }; hide foo; hide foo; $nu.env.foo"#, r#"let-env foo = "bar"; def foo [] { "foo" }; hide foo; hide foo; $env.foo"#,
"did you mean", "did you mean",
) )
} }
@ -184,7 +181,7 @@ fn hides_def_import_6() -> TestResult {
#[test] #[test]
fn hides_env_import_1() -> TestResult { fn hides_env_import_1() -> TestResult {
fail_test( fail_test(
r#"module spam { export env foo { "foo" } }; use spam; hide spam foo; $nu.env.'spam foo'"#, r#"module spam { export env foo { "foo" } }; use spam; hide spam foo; $env.'spam foo'"#,
"did you mean", "did you mean",
) )
} }
@ -192,7 +189,7 @@ fn hides_env_import_1() -> TestResult {
#[test] #[test]
fn hides_env_import_2() -> TestResult { fn hides_env_import_2() -> TestResult {
fail_test( fail_test(
r#"module spam { export env foo { "foo" } }; use spam; hide spam; $nu.env.'spam foo'"#, r#"module spam { export env foo { "foo" } }; use spam; hide spam; $env.'spam foo'"#,
"did you mean", "did you mean",
) )
} }
@ -200,7 +197,7 @@ fn hides_env_import_2() -> TestResult {
#[test] #[test]
fn hides_env_import_3() -> TestResult { fn hides_env_import_3() -> TestResult {
fail_test( fail_test(
r#"module spam { export env foo { "foo" } }; use spam; hide spam [foo]; $nu.env.'spam foo'"#, r#"module spam { export env foo { "foo" } }; use spam; hide spam [foo]; $env.'spam foo'"#,
"did you mean", "did you mean",
) )
} }
@ -208,7 +205,7 @@ fn hides_env_import_3() -> TestResult {
#[test] #[test]
fn hides_env_import_4() -> TestResult { fn hides_env_import_4() -> TestResult {
fail_test( fail_test(
r#"module spam { export env foo { "foo" } }; use spam foo; hide foo; $nu.env.foo"#, r#"module spam { export env foo { "foo" } }; use spam foo; hide foo; $env.foo"#,
"did you mean", "did you mean",
) )
} }
@ -216,7 +213,7 @@ fn hides_env_import_4() -> TestResult {
#[test] #[test]
fn hides_env_import_5() -> TestResult { fn hides_env_import_5() -> TestResult {
fail_test( fail_test(
r#"module spam { export env foo { "foo" } }; use spam *; hide foo; $nu.env.foo"#, r#"module spam { export env foo { "foo" } }; use spam *; hide foo; $env.foo"#,
"did you mean", "did you mean",
) )
} }
@ -224,7 +221,7 @@ fn hides_env_import_5() -> TestResult {
#[test] #[test]
fn hides_env_import_6() -> TestResult { fn hides_env_import_6() -> TestResult {
fail_test( fail_test(
r#"module spam { export env foo { "foo" } }; use spam *; hide spam *; $nu.env.foo"#, r#"module spam { export env foo { "foo" } }; use spam *; hide spam *; $env.foo"#,
"did you mean", "did you mean",
) )
} }
@ -232,7 +229,7 @@ fn hides_env_import_6() -> TestResult {
#[test] #[test]
fn hides_def_runs_env_import() -> TestResult { fn hides_def_runs_env_import() -> TestResult {
run_test( run_test(
r#"module spam { export env foo { "foo" }; export def foo [] { "bar" } }; use spam foo; hide foo; $nu.env.foo"#, r#"module spam { export env foo { "foo" }; export def foo [] { "bar" } }; use spam foo; hide foo; $env.foo"#,
"foo", "foo",
) )
} }
@ -240,7 +237,7 @@ fn hides_def_runs_env_import() -> TestResult {
#[test] #[test]
fn hides_def_and_env_import_1() -> TestResult { fn hides_def_and_env_import_1() -> TestResult {
fail_test( fail_test(
r#"module spam { export env foo { "foo" }; export def foo [] { "bar" } }; use spam foo; hide foo; hide foo; $nu.env.foo"#, r#"module spam { export env foo { "foo" }; export def foo [] { "bar" } }; use spam foo; hide foo; hide foo; $env.foo"#,
"did you mean", "did you mean",
) )
} }
@ -264,7 +261,7 @@ fn use_def_import_after_hide() -> TestResult {
#[test] #[test]
fn use_env_import_after_hide() -> TestResult { fn use_env_import_after_hide() -> TestResult {
run_test( run_test(
r#"module spam { export env foo { "foo" } }; use spam foo; hide foo; use spam foo; $nu.env.foo"#, r#"module spam { export env foo { "foo" } }; use spam foo; hide foo; use spam foo; $env.foo"#,
"foo", "foo",
) )
} }
@ -280,7 +277,7 @@ fn hide_shadowed_decl() -> TestResult {
#[test] #[test]
fn hide_shadowed_env() -> TestResult { fn hide_shadowed_env() -> TestResult {
run_test( run_test(
r#"module spam { export env foo { "bar" } }; let-env foo = "foo"; do { use spam foo; hide foo; $nu.env.foo }"#, r#"module spam { export env foo { "bar" } }; let-env foo = "foo"; do { use spam foo; hide foo; $env.foo }"#,
"foo", "foo",
) )
} }
@ -296,7 +293,7 @@ fn hides_all_decls_within_scope() -> TestResult {
#[test] #[test]
fn hides_all_envs_within_scope() -> TestResult { fn hides_all_envs_within_scope() -> TestResult {
fail_test( fail_test(
r#"module spam { export env foo { "bar" } }; let-env foo = "foo"; use spam foo; hide foo; $nu.env.foo"#, r#"module spam { export env foo { "bar" } }; let-env foo = "foo"; use spam foo; hide foo; $env.foo"#,
"did you mean", "did you mean",
) )
} }

View File

@ -43,7 +43,7 @@ fn module_def_imports_5() -> TestResult {
#[test] #[test]
fn module_env_imports_1() -> TestResult { fn module_env_imports_1() -> TestResult {
run_test( run_test(
r#"module foo { export env a { '1' } }; use foo; $nu.env.'foo a'"#, r#"module foo { export env a { '1' } }; use foo; $env.'foo a'"#,
"1", "1",
) )
} }
@ -51,7 +51,7 @@ fn module_env_imports_1() -> TestResult {
#[test] #[test]
fn module_env_imports_2() -> TestResult { fn module_env_imports_2() -> TestResult {
run_test( run_test(
r#"module foo { export env a { '1' } }; use foo a; $nu.env.a"#, r#"module foo { export env a { '1' } }; use foo a; $env.a"#,
"1", "1",
) )
} }
@ -59,7 +59,7 @@ fn module_env_imports_2() -> TestResult {
#[test] #[test]
fn module_env_imports_3() -> TestResult { fn module_env_imports_3() -> TestResult {
run_test( run_test(
r#"module foo { export env a { '1' }; export env b { '2' } }; use foo *; $nu.env.b"#, r#"module foo { export env a { '1' }; export env b { '2' } }; use foo *; $env.b"#,
"2", "2",
) )
} }
@ -75,7 +75,7 @@ fn module_env_imports_4() -> TestResult {
#[test] #[test]
fn module_env_imports_5() -> TestResult { fn module_env_imports_5() -> TestResult {
run_test( run_test(
r#"module foo { export env a { '1' }; export env b { '2' }; export env c { '3' } }; use foo [a, c]; $nu.env.c"#, r#"module foo { export env a { '1' }; export env b { '2' }; export env c { '3' } }; use foo [a, c]; $env.c"#,
"3", "3",
) )
} }
@ -83,7 +83,7 @@ fn module_env_imports_5() -> TestResult {
#[test] #[test]
fn module_def_and_env_imports_1() -> TestResult { fn module_def_and_env_imports_1() -> TestResult {
run_test( run_test(
r#"module spam { export env foo { "foo" }; export def foo [] { "bar" } }; use spam foo; $nu.env.foo"#, r#"module spam { export env foo { "foo" }; export def foo [] { "bar" } }; use spam foo; $env.foo"#,
"foo", "foo",
) )
} }
@ -107,7 +107,7 @@ fn module_def_import_uses_internal_command() -> TestResult {
#[test] #[test]
fn module_env_import_uses_internal_command() -> TestResult { fn module_env_import_uses_internal_command() -> TestResult {
run_test( run_test(
r#"module foo { def b [] { "2" }; export env a { b } }; use foo; $nu.env.'foo a'"#, r#"module foo { def b [] { "2" }; export env a { b } }; use foo; $env.'foo a'"#,
"2", "2",
) )
} }