forked from extern/nushell
Add environment variable support for modules (#331)
* Add 'expor env' dummy command * (WIP) Abstract away module exportables as Overlay * Switch to Overlays for use/hide Works for decls only right now. * Fix passing import patterns of hide to eval * Simplify use/hide of decls * Add ImportPattern as Expr; Add use env eval Still no parsing of "export env" so I can't test it yet. * Refactor export parsing; Add InternalError * Add env var export and activation; Misc changes Now it is possible to `use` env var that was exported from a module. This commit also adds some new errors and other small changes. * Add env var hiding * Fix eval not recognizing hidden decls Without this change, calling `hide foo`, the evaluator does not know whether a custom command named "foo" was hidden during parsing, therefore, it is not possible to reliably throw an error about the "foo" name not found. * Add use/hide/export env var tests; Cleanup; Notes * Ignore hide env related tests for now * Fix main branch merge mess * Fixed multi-word export def * Fix hiding tests on Windows * Remove env var hiding for now
This commit is contained in:
@ -7,8 +7,9 @@ use crate::{
|
||||
|
||||
use nu_protocol::{
|
||||
ast::{
|
||||
Block, Call, CellPath, Expr, Expression, FullCellPath, ImportPattern, ImportPatternMember,
|
||||
Operator, PathMember, Pipeline, RangeInclusion, RangeOperator, Statement,
|
||||
Block, Call, CellPath, Expr, Expression, FullCellPath, ImportPattern, ImportPatternHead,
|
||||
ImportPatternMember, Operator, PathMember, Pipeline, RangeInclusion, RangeOperator,
|
||||
Statement,
|
||||
},
|
||||
engine::StateWorkingSet,
|
||||
span, Flag, PositionalArg, Signature, Span, Spanned, SyntaxShape, Type, Unit, VarId,
|
||||
@ -1788,12 +1789,18 @@ pub fn parse_import_pattern(
|
||||
) -> (ImportPattern, Option<ParseError>) {
|
||||
let mut error = None;
|
||||
|
||||
let head = if let Some(head_span) = spans.get(0) {
|
||||
working_set.get_span_contents(*head_span).to_vec()
|
||||
let (head, head_span) = if let Some(head_span) = spans.get(0) {
|
||||
(
|
||||
working_set.get_span_contents(*head_span).to_vec(),
|
||||
head_span,
|
||||
)
|
||||
} else {
|
||||
return (
|
||||
ImportPattern {
|
||||
head: vec![],
|
||||
head: ImportPatternHead {
|
||||
name: vec![],
|
||||
span: Span::unknown(),
|
||||
},
|
||||
members: vec![],
|
||||
},
|
||||
Some(ParseError::WrongImportPattern(span(spans))),
|
||||
@ -1806,7 +1813,10 @@ pub fn parse_import_pattern(
|
||||
if tail == b"*" {
|
||||
(
|
||||
ImportPattern {
|
||||
head,
|
||||
head: ImportPatternHead {
|
||||
name: head,
|
||||
span: *head_span,
|
||||
},
|
||||
members: vec![ImportPatternMember::Glob { span: *tail_span }],
|
||||
},
|
||||
error,
|
||||
@ -1830,7 +1840,10 @@ pub fn parse_import_pattern(
|
||||
|
||||
(
|
||||
ImportPattern {
|
||||
head,
|
||||
head: ImportPatternHead {
|
||||
name: head,
|
||||
span: *head_span,
|
||||
},
|
||||
members: vec![ImportPatternMember::List { names: output }],
|
||||
},
|
||||
error,
|
||||
@ -1838,7 +1851,10 @@ pub fn parse_import_pattern(
|
||||
}
|
||||
_ => (
|
||||
ImportPattern {
|
||||
head,
|
||||
head: ImportPatternHead {
|
||||
name: head,
|
||||
span: *head_span,
|
||||
},
|
||||
members: vec![],
|
||||
},
|
||||
Some(ParseError::ExportNotFound(result.span)),
|
||||
@ -1848,7 +1864,10 @@ pub fn parse_import_pattern(
|
||||
let tail = trim_quotes(tail);
|
||||
(
|
||||
ImportPattern {
|
||||
head,
|
||||
head: ImportPatternHead {
|
||||
name: head,
|
||||
span: *head_span,
|
||||
},
|
||||
members: vec![ImportPatternMember::Name {
|
||||
name: tail.to_vec(),
|
||||
span: *tail_span,
|
||||
@ -1860,7 +1879,10 @@ pub fn parse_import_pattern(
|
||||
} else {
|
||||
(
|
||||
ImportPattern {
|
||||
head,
|
||||
head: ImportPatternHead {
|
||||
name: head,
|
||||
span: *head_span,
|
||||
},
|
||||
members: vec![],
|
||||
},
|
||||
None,
|
||||
@ -3419,6 +3441,7 @@ pub fn find_captures_in_expr(
|
||||
let result = find_captures_in_expr(working_set, &cell_path.head, seen);
|
||||
output.extend(&result);
|
||||
}
|
||||
Expr::ImportPattern(_) => {}
|
||||
Expr::Garbage => {}
|
||||
Expr::GlobPattern(_) => {}
|
||||
Expr::Int(_) => {}
|
||||
|
Reference in New Issue
Block a user