@@ -2,8 +2,29 @@ use nu_parser::{parse, parse_module_block};
22use nu_protocol:: report_error;
33use 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
930fn 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