Skip to content

Commit c3df973

Browse files
authored
load all the submodules (amtoine#2)
1 parent f44a4f8 commit c3df973

2 files changed

Lines changed: 47 additions & 29 deletions

File tree

crates/nu-std/lib/mod.nu

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
# std.nu, `used` to load all standard library components
22

3-
export use crates/nu-std/lib/assert.nu *
4-
export use crates/nu-std/lib/dirs.nu *
3+
export use assert *
4+
export use dirs *
55
export-env {
6-
use crates/nu-std/lib/dirs.nu *
6+
use dirs *
77
}
8-
export use crates/nu-std/lib/help.nu *
9-
export use crates/nu-std/lib/log.nu *
10-
export use crates/nu-std/lib/xml.nu *
8+
export use help *
9+
export use log *
10+
export use xml *
1111

1212
# Add the given paths to the PATH.
1313
#

crates/nu-std/src/lib.rs

Lines changed: 41 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,29 @@ use nu_parser::{parse, parse_module_block};
22
use nu_protocol::report_error;
33
use nu_protocol::{engine::StateWorkingSet, Module, ShellError, Span};
44

5-
fn get_standard_library() -> &'static str {
6-
include_str!("../lib/mod.nu")
5+
fn add_file(
6+
working_set: &mut StateWorkingSet,
7+
name: &String,
8+
content: &[u8],
9+
) -> (Module, Vec<Span>) {
10+
let start = working_set.next_span_start();
11+
working_set.add_file(name.clone(), content);
12+
let end = working_set.next_span_start();
13+
14+
let (_, module, comments) =
15+
parse_module_block(working_set, Span::new(start, end), name.as_bytes());
16+
17+
if let Some(err) = working_set.parse_errors.first() {
18+
report_error(working_set, err);
19+
}
20+
21+
parse(working_set, Some(name), content, true);
22+
23+
if let Some(err) = working_set.parse_errors.first() {
24+
report_error(working_set, err);
25+
}
26+
27+
(module, comments)
728
}
829

930
fn load_prelude(working_set: &mut StateWorkingSet, prelude: Vec<(&str, &str)>, module: &Module) {
@@ -45,26 +66,15 @@ pub fn load_standard_library(
4566
) -> Result<(), miette::ErrReport> {
4667
let delta = {
4768
let name = "std".to_string();
48-
let content = get_standard_library().as_bytes();
49-
50-
let mut working_set = StateWorkingSet::new(engine_state);
51-
52-
let start = working_set.next_span_start();
53-
working_set.add_file(name.clone(), content);
54-
let end = working_set.next_span_start();
55-
56-
let (_, module, comments) =
57-
parse_module_block(&mut working_set, Span::new(start, end), name.as_bytes());
58-
59-
if let Some(err) = working_set.parse_errors.first() {
60-
report_error(&working_set, err);
61-
}
62-
63-
parse(&mut working_set, Some(&name), content, true);
64-
65-
if let Some(err) = working_set.parse_errors.first() {
66-
report_error(&working_set, err);
67-
}
69+
let content = include_str!("../lib/mod.nu");
70+
71+
let submodules = vec![
72+
("assert", include_str!("../lib/assert.nu")),
73+
("dirs", include_str!("../lib/dirs.nu")),
74+
("help", include_str!("../lib/help.nu")),
75+
("log", include_str!("../lib/log.nu")),
76+
("xml", include_str!("../lib/xml.nu")),
77+
];
6878

6979
let prelude = vec![
7080
("std help", "help"),
@@ -75,8 +85,16 @@ pub fn load_standard_library(
7585
("std help operators", "help operators"),
7686
];
7787

78-
load_prelude(&mut working_set, prelude, &module);
88+
let mut working_set = StateWorkingSet::new(engine_state);
7989

90+
for (name, content) in submodules {
91+
let (module, comments) =
92+
add_file(&mut working_set, &name.to_string(), content.as_bytes());
93+
working_set.add_module(name, module, comments);
94+
}
95+
96+
let (module, comments) = add_file(&mut working_set, &name, content.as_bytes());
97+
load_prelude(&mut working_set, prelude, &module);
8098
working_set.add_module(&name, module, comments);
8199

82100
working_set.render()

0 commit comments

Comments
 (0)