@@ -103,7 +103,7 @@ pub fn header<'a>() -> impl Parser<'a, SpacesBefore<'a, Header<'a>>, EHeader<'a>
103
103
map(
104
104
skip_first(
105
105
keyword( "hosted" , EHeader :: Start ) ,
106
- increment_min_indent( hosted_header( ) )
106
+ increment_min_indent( one_of! [ hosted_header( ) , old_hosted_header ( ) ] )
107
107
) ,
108
108
Header :: Hosted
109
109
) ,
@@ -184,15 +184,38 @@ fn imports_none_if_empty(value: ImportsKeywordItem<'_>) -> Option<ImportsKeyword
184
184
185
185
#[ inline( always) ]
186
186
fn hosted_header < ' a > ( ) -> impl Parser < ' a , HostedHeader < ' a > , EHeader < ' a > > {
187
- record ! ( HostedHeader {
188
- before_name: space0_e( EHeader :: IndentStart ) ,
189
- name: loc( module_name_help( EHeader :: ModuleName ) ) ,
190
- exposes: specialize_err( EHeader :: Exposes , exposes_values_kw( ) ) ,
191
- imports: specialize_err( EHeader :: Imports , imports( ) ) ,
192
- } )
187
+ map (
188
+ and (
189
+ backtrackable ( space0_e ( EHeader :: IndentStart ) ) ,
190
+ specialize_err ( EHeader :: Exposes , exposes_list ( ) ) ,
191
+ ) ,
192
+ |( before_exposes, exposes) | HostedHeader {
193
+ before_exposes,
194
+ exposes,
195
+ old_imports : None ,
196
+ } ,
197
+ )
193
198
. trace ( "hosted_header" )
194
199
}
195
200
201
+ #[ inline( always) ]
202
+ fn old_hosted_header < ' a > ( ) -> impl Parser < ' a , HostedHeader < ' a > , EHeader < ' a > > {
203
+ map (
204
+ record ! ( OldHostedHeader {
205
+ before_name: space0_e( EHeader :: IndentStart ) ,
206
+ name: loc( module_name_help( EHeader :: ModuleName ) ) ,
207
+ exposes: specialize_err( EHeader :: Exposes , exposes_values_kw( ) ) ,
208
+ imports: specialize_err( EHeader :: Imports , imports( ) ) ,
209
+ } ) ,
210
+ |old_hosted| HostedHeader {
211
+ before_exposes : old_hosted. before_name ,
212
+ exposes : old_hosted. exposes . item ,
213
+ old_imports : Some ( old_hosted. imports ) ,
214
+ } ,
215
+ )
216
+ . trace ( "old_hosted_header" )
217
+ }
218
+
196
219
fn chomp_module_name ( buffer : & [ u8 ] ) -> Result < & str , Progress > {
197
220
use encode_unicode:: CharExt ;
198
221
@@ -1196,6 +1219,15 @@ pub type ImportsCollection<'a> = Collection<'a, Loc<Spaced<'a, ImportsEntry<'a>>
1196
1219
1197
1220
#[ derive( Clone , Debug , PartialEq ) ]
1198
1221
pub struct HostedHeader < ' a > {
1222
+ pub before_exposes : & ' a [ CommentOrNewline < ' a > ] ,
1223
+ pub exposes : Collection < ' a , Loc < Spaced < ' a , ExposedName < ' a > > > > ,
1224
+
1225
+ // Keeping this so we can format old interface header into module headers
1226
+ pub old_imports : Option < KeywordItem < ' a , ImportsKeyword , ImportsCollection < ' a > > > ,
1227
+ }
1228
+
1229
+ #[ derive( Clone , Debug , PartialEq ) ]
1230
+ pub struct OldHostedHeader < ' a > {
1199
1231
pub before_name : & ' a [ CommentOrNewline < ' a > ] ,
1200
1232
pub name : Loc < ModuleName < ' a > > ,
1201
1233
pub exposes : KeywordItem < ' a , ExposesKeyword , Collection < ' a , Loc < Spaced < ' a , ExposedName < ' a > > > > > ,
0 commit comments