@@ -133,19 +133,20 @@ pub fn compile(config: PackageConfig, modules: Vec<(&str, &str)>) -> EcoString {
133
133
}
134
134
135
135
fn compile_documentation (
136
- main_module : & str ,
136
+ module_name : & str ,
137
+ module_src : & str ,
137
138
modules : Vec < ( & str , & str , & str ) > ,
138
139
options : PrintOptions ,
139
140
) -> EcoString {
140
- let module = type_:: tests:: compile_module ( "main" , main_module , None , modules. clone ( ) )
141
+ let module = type_:: tests:: compile_module ( module_name , module_src , None , modules. clone ( ) )
141
142
. expect ( "Module should compile successfully" ) ;
142
143
143
144
let mut config = PackageConfig :: default ( ) ;
144
145
config. name = "thepackage" . into ( ) ;
145
146
let paths = ProjectPaths :: new ( "/" . into ( ) ) ;
146
147
let build_module = build:: Module {
147
148
name : "main" . into ( ) ,
148
- code : main_module . into ( ) ,
149
+ code : module_src . into ( ) ,
149
150
mtime : SystemTime :: now ( ) ,
150
151
input_path : "/" . into ( ) ,
151
152
origin : Origin :: Src ,
@@ -168,7 +169,14 @@ fn compile_documentation(
168
169
let types = module
169
170
. definitions
170
171
. iter ( )
171
- . filter_map ( |statement| printer. type_definition ( & source_links, statement) )
172
+ . filter_map (
173
+ |statement : & crate :: ast:: Definition <
174
+ std:: sync:: Arc < type_:: Type > ,
175
+ crate :: ast:: TypedExpr ,
176
+ EcoString ,
177
+ EcoString ,
178
+ > | printer. type_definition ( & source_links, statement) ,
179
+ )
172
180
. sorted ( )
173
181
. collect_vec ( ) ;
174
182
@@ -185,8 +193,10 @@ fn compile_documentation(
185
193
for ( _package, name, src) in modules {
186
194
output. push_str ( & format ! ( "-- {name}.gleam\n {src}\n \n " ) ) ;
187
195
}
188
- output. push_str ( "-- main.gleam\n " ) ;
189
- output. push_str ( main_module) ;
196
+ output. push_str ( "-- " ) ;
197
+ output. push_str ( module_name) ;
198
+ output. push_str ( ".gleam\n " ) ;
199
+ output. push_str ( module_src) ;
190
200
191
201
if !types. is_empty ( ) {
192
202
output. push_str ( "\n \n ---- TYPES" ) ;
@@ -241,27 +251,32 @@ macro_rules! assert_documentation {
241
251
} ;
242
252
243
253
( $src: literal, $options: expr $( , ) ?) => {
244
- let output = compile_documentation( $src, Vec :: new( ) , $options) ;
254
+ let output = compile_documentation( "main" , $src, Vec :: new( ) , $options) ;
245
255
insta:: assert_snapshot!( output) ;
246
256
} ;
247
257
248
258
( $( ( $name: expr, $module_src: literal) ) ,+, $src: literal $( , ) ?) => {
249
- let output = compile_documentation( $src, vec![ $( ( "thepackage" , $name, $module_src) ) ,* ] , PrintOptions :: all( ) ) ;
259
+ let output = compile_documentation( "main" , $src, vec![ $( ( "thepackage" , $name, $module_src) ) ,* ] , PrintOptions :: all( ) ) ;
250
260
insta:: assert_snapshot!( output) ;
251
261
} ;
252
262
253
263
( $( ( $name: expr, $module_src: literal) ) ,+, $src: literal, $options: expr $( , ) ?) => {
254
- let output = compile_documentation( $src, vec![ $( ( "thepackage" , $name, $module_src) ) ,* ] , $options) ;
264
+ let output = compile_documentation( "main" , $src, vec![ $( ( "thepackage" , $name, $module_src) ) ,* ] , $options) ;
265
+ insta:: assert_snapshot!( output) ;
266
+ } ;
267
+
268
+ ( $( ( $name: expr, $module_src: literal) ) ,+, $main_module: literal, $src: literal, $options: expr $( , ) ?) => {
269
+ let output = compile_documentation( $main_module, $src, vec![ $( ( "thepackage" , $name, $module_src) ) ,* ] , $options) ;
255
270
insta:: assert_snapshot!( output) ;
256
271
} ;
257
272
258
273
( $( ( $package: expr, $name: expr, $module_src: literal) ) ,+, $src: literal $( , ) ?) => {
259
- let output = compile_documentation( $src, vec![ $( ( $package, $name, $module_src) ) ,* ] , PrintOptions :: all( ) ) ;
274
+ let output = compile_documentation( "main" , $src, vec![ $( ( $package, $name, $module_src) ) ,* ] , PrintOptions :: all( ) ) ;
260
275
insta:: assert_snapshot!( output) ;
261
276
} ;
262
277
263
278
( $( ( $package: expr, $name: expr, $module_src: literal) ) ,+, $src: literal, $options: expr $( , ) ?) => {
264
- let output = compile_documentation( $src, vec![ $( ( $package, $name, $module_src) ) ,* ] , $options) ;
279
+ let output = compile_documentation( "main" , $src, vec![ $( ( $package, $name, $module_src) ) ,* ] , $options) ;
265
280
insta:: assert_snapshot!( output) ;
266
281
} ;
267
282
}
@@ -834,6 +849,34 @@ pub fn make_dict() -> dict.Dict(a, b) { todo }
834
849
) ;
835
850
}
836
851
852
+ #[ test]
853
+ fn link_to_type_in_different_module_from_nested_module ( ) {
854
+ assert_documentation ! (
855
+ ( "gleam/dict" , "pub type Dict(a, b)" ) ,
856
+ "gleam/dynamic/decode" ,
857
+ "
858
+ import gleam/dict
859
+
860
+ pub fn decode_dict() -> dict.Dict(a, b) { todo }
861
+ " ,
862
+ ONLY_LINKS
863
+ ) ;
864
+ }
865
+
866
+ #[ test]
867
+ fn link_to_type_in_different_module_from_nested_module_with_shared_path ( ) {
868
+ assert_documentation ! (
869
+ ( "gleam/dynamic" , "pub type Dynamic" ) ,
870
+ "gleam/dynamic/decode" ,
871
+ "
872
+ import gleam/dynamic
873
+
874
+ pub type Dynamic = dynamic.Dynamic
875
+ " ,
876
+ ONLY_LINKS
877
+ ) ;
878
+ }
879
+
837
880
// https://github.com/gleam-lang/gleam/issues/3461
838
881
#[ test]
839
882
fn link_to_type_in_different_package ( ) {
0 commit comments