@@ -36,9 +36,9 @@ impl<'b, W: Write> Drop for JsonDumper<'b, W> {
3636}
3737
3838macro_rules! impl_fn {
39- ( $fn_name: ident, $data_type: ident, $bin : ident) => {
39+ ( $fn_name: ident, $data_type: ident, $bucket : ident) => {
4040 fn $fn_name( & mut self , data: $data_type) {
41- self . result. $bin . push( From :: from( data) ) ;
41+ self . result. $bucket . push( From :: from( data) ) ;
4242 }
4343 }
4444}
@@ -105,10 +105,27 @@ impl Analysis {
105105 }
106106}
107107
108+ // DefId::index is a newtype and so the JSON serialisation is ugly. Therefore
109+ // we use our own Id which is the same, but without the newtype.
110+ #[ derive( Debug , RustcEncodable ) ]
111+ struct Id {
112+ krate : u32 ,
113+ index : u32 ,
114+ }
115+
116+ impl From < DefId > for Id {
117+ fn from ( id : DefId ) -> Id {
118+ Id {
119+ krate : id. krate ,
120+ index : id. index . as_u32 ( ) ,
121+ }
122+ }
123+ }
124+
108125#[ derive( Debug , RustcEncodable ) ]
109126struct Import {
110127 kind : ImportKind ,
111- id : DefId ,
128+ id : Id ,
112129 span : SpanData ,
113130 name : String ,
114131 value : String ,
@@ -125,7 +142,7 @@ impl From<ExternCrateData> for Import {
125142 fn from ( data : ExternCrateData ) -> Import {
126143 Import {
127144 kind : ImportKind :: ExternCrate ,
128- id : data. id ,
145+ id : From :: from ( data. id ) ,
129146 span : data. span ,
130147 name : data. name ,
131148 value : String :: new ( ) ,
@@ -136,7 +153,7 @@ impl From<UseData> for Import {
136153 fn from ( data : UseData ) -> Import {
137154 Import {
138155 kind : ImportKind :: Use ,
139- id : data. id ,
156+ id : From :: from ( data. id ) ,
140157 span : data. span ,
141158 name : data. name ,
142159 value : String :: new ( ) ,
@@ -147,7 +164,7 @@ impl From<UseGlobData> for Import {
147164 fn from ( data : UseGlobData ) -> Import {
148165 Import {
149166 kind : ImportKind :: GlobUse ,
150- id : data. id ,
167+ id : From :: from ( data. id ) ,
151168 span : data. span ,
152169 name : "*" . to_owned ( ) ,
153170 value : data. names . join ( ", " ) ,
@@ -158,7 +175,7 @@ impl From<UseGlobData> for Import {
158175#[ derive( Debug , RustcEncodable ) ]
159176struct Def {
160177 kind : DefKind ,
161- id : DefId ,
178+ id : Id ,
162179 span : SpanData ,
163180 name : String ,
164181 qualname : String ,
@@ -191,7 +208,7 @@ impl From<EnumData> for Def {
191208 fn from ( data : EnumData ) -> Def {
192209 Def {
193210 kind : DefKind :: Enum ,
194- id : data. id ,
211+ id : From :: from ( data. id ) ,
195212 span : data. span ,
196213 name : data. name ,
197214 qualname : data. qualname ,
@@ -204,7 +221,7 @@ impl From<TupleVariantData> for Def {
204221 fn from ( data : TupleVariantData ) -> Def {
205222 Def {
206223 kind : DefKind :: Tuple ,
207- id : data. id ,
224+ id : From :: from ( data. id ) ,
208225 span : data. span ,
209226 name : data. name ,
210227 qualname : data. qualname ,
@@ -216,7 +233,7 @@ impl From<StructVariantData> for Def {
216233 fn from ( data : StructVariantData ) -> Def {
217234 Def {
218235 kind : DefKind :: Struct ,
219- id : data. id ,
236+ id : From :: from ( data. id ) ,
220237 span : data. span ,
221238 name : data. name ,
222239 qualname : data. qualname ,
@@ -228,7 +245,7 @@ impl From<StructData> for Def {
228245 fn from ( data : StructData ) -> Def {
229246 Def {
230247 kind : DefKind :: Struct ,
231- id : data. id ,
248+ id : From :: from ( data. id ) ,
232249 span : data. span ,
233250 name : data. name ,
234251 qualname : data. qualname ,
@@ -240,7 +257,7 @@ impl From<TraitData> for Def {
240257 fn from ( data : TraitData ) -> Def {
241258 Def {
242259 kind : DefKind :: Trait ,
243- id : data. id ,
260+ id : From :: from ( data. id ) ,
244261 span : data. span ,
245262 name : data. name ,
246263 qualname : data. qualname ,
@@ -252,7 +269,7 @@ impl From<FunctionData> for Def {
252269 fn from ( data : FunctionData ) -> Def {
253270 Def {
254271 kind : DefKind :: Function ,
255- id : data. id ,
272+ id : From :: from ( data. id ) ,
256273 span : data. span ,
257274 name : data. name ,
258275 qualname : data. qualname ,
@@ -264,7 +281,7 @@ impl From<MethodData> for Def {
264281 fn from ( data : MethodData ) -> Def {
265282 Def {
266283 kind : DefKind :: Function ,
267- id : data. id ,
284+ id : From :: from ( data. id ) ,
268285 span : data. span ,
269286 name : data. name ,
270287 qualname : data. qualname ,
@@ -276,7 +293,7 @@ impl From<MacroData> for Def {
276293 fn from ( data : MacroData ) -> Def {
277294 Def {
278295 kind : DefKind :: Macro ,
279- id : null_def_id ( ) ,
296+ id : From :: from ( null_def_id ( ) ) ,
280297 span : data. span ,
281298 name : data. name ,
282299 qualname : data. qualname ,
@@ -288,7 +305,7 @@ impl From<ModData> for Def {
288305 fn from ( data : ModData ) -> Def {
289306 Def {
290307 kind : DefKind :: Mod ,
291- id : data. id ,
308+ id : From :: from ( data. id ) ,
292309 span : data. span ,
293310 name : data. name ,
294311 qualname : data. qualname ,
@@ -300,7 +317,7 @@ impl From<TypeDefData> for Def {
300317 fn from ( data : TypeDefData ) -> Def {
301318 Def {
302319 kind : DefKind :: Type ,
303- id : data. id ,
320+ id : From :: from ( data. id ) ,
304321 span : data. span ,
305322 name : data. name ,
306323 qualname : data. qualname ,
@@ -312,7 +329,7 @@ impl From<VariableData> for Def {
312329 fn from ( data : VariableData ) -> Def {
313330 Def {
314331 kind : DefKind :: Variable ,
315- id : data. id ,
332+ id : From :: from ( data. id ) ,
316333 span : data. span ,
317334 name : data. name ,
318335 qualname : data. qualname ,
@@ -333,15 +350,15 @@ enum RefKind {
333350struct Ref {
334351 kind : RefKind ,
335352 span : SpanData ,
336- ref_id : DefId ,
353+ ref_id : Id ,
337354}
338355
339356impl From < FunctionRefData > for Ref {
340357 fn from ( data : FunctionRefData ) -> Ref {
341358 Ref {
342359 kind : RefKind :: Function ,
343360 span : data. span ,
344- ref_id : data. ref_id ,
361+ ref_id : From :: from ( data. ref_id ) ,
345362 }
346363 }
347364}
@@ -350,7 +367,7 @@ impl From<FunctionCallData> for Ref {
350367 Ref {
351368 kind : RefKind :: Function ,
352369 span : data. span ,
353- ref_id : data. ref_id ,
370+ ref_id : From :: from ( data. ref_id ) ,
354371 }
355372 }
356373}
@@ -359,7 +376,7 @@ impl From<MethodCallData> for Ref {
359376 Ref {
360377 kind : RefKind :: Function ,
361378 span : data. span ,
362- ref_id : data. ref_id . or ( data. decl_id ) . unwrap_or ( null_def_id ( ) ) ,
379+ ref_id : From :: from ( data. ref_id . or ( data. decl_id ) . unwrap_or ( null_def_id ( ) ) ) ,
363380 }
364381 }
365382}
@@ -368,7 +385,7 @@ impl From<ModRefData> for Ref {
368385 Ref {
369386 kind : RefKind :: Mod ,
370387 span : data. span ,
371- ref_id : data. ref_id . unwrap_or ( null_def_id ( ) ) ,
388+ ref_id : From :: from ( data. ref_id . unwrap_or ( null_def_id ( ) ) ) ,
372389 }
373390 }
374391}
@@ -377,7 +394,7 @@ impl From<TypeRefData> for Ref {
377394 Ref {
378395 kind : RefKind :: Type ,
379396 span : data. span ,
380- ref_id : data. ref_id . unwrap_or ( null_def_id ( ) ) ,
397+ ref_id : From :: from ( data. ref_id . unwrap_or ( null_def_id ( ) ) ) ,
381398 }
382399 }
383400}
@@ -386,7 +403,7 @@ impl From<VariableRefData> for Ref {
386403 Ref {
387404 kind : RefKind :: Variable ,
388405 span : data. span ,
389- ref_id : data. ref_id ,
406+ ref_id : From :: from ( data. ref_id ) ,
390407 }
391408 }
392409}
0 commit comments