Skip to content

Commit 6d6986b

Browse files
committed
save-analysis: make DefIds prettier
1 parent 3e14f01 commit 6d6986b

File tree

1 file changed

+42
-25
lines changed

1 file changed

+42
-25
lines changed

src/librustc_save_analysis/json_dumper.rs

Lines changed: 42 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -36,9 +36,9 @@ impl<'b, W: Write> Drop for JsonDumper<'b, W> {
3636
}
3737

3838
macro_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)]
109126
struct 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)]
159176
struct 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 {
333350
struct Ref {
334351
kind: RefKind,
335352
span: SpanData,
336-
ref_id: DefId,
353+
ref_id: Id,
337354
}
338355

339356
impl 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

Comments
 (0)