10
10
import static org .aya .prettier .Tokens .*;
11
11
12
12
import com .intellij .openapi .util .text .StringUtil ;
13
+ import kala .collection .Seq ;
13
14
import kala .collection .SeqView ;
14
15
import kala .collection .immutable .ImmutableSeq ;
15
16
import kala .collection .mutable .FreezableMutableList ;
41
42
import org .aya .syntax .ref .LocalVar ;
42
43
import org .aya .syntax .telescope .AbstractTele ;
43
44
import org .aya .util .Arg ;
44
- import org .aya .util .error .Panic ;
45
45
import org .aya .util .error .SourcePos ;
46
46
import org .aya .util .prettier .PrettierOptions ;
47
47
import org .jetbrains .annotations .NotNull ;
@@ -63,10 +63,9 @@ public class CorePrettier extends BasePrettier<Term> {
63
63
return switch (preterm ) {
64
64
case FreeTerm (var var ) -> varDoc (var );
65
65
case LocalTerm (var idx ) -> Doc .plain ("^" + idx );
66
- case MetaCall term -> {
67
- var name = term .ref ();
66
+ case MetaCall (var name , var args ) -> {
68
67
var inner = Doc .cat (Doc .plain ("?" ), varDoc (name ));
69
- Function <Outer , Doc > factory = o -> visitCoreApp (null , inner , term . args () .view (), o , optionImplicit ());
68
+ Function <Outer , Doc > factory = o -> visitCoreApp (null , inner , args .view (), o , optionImplicit ());
70
69
if (options .map .get (AyaPrettierOptions .Key .InlineMetas )) yield factory .apply (outer );
71
70
yield Doc .wrap (HOLE_LEFT , HOLE_RIGHT , factory .apply (Outer .Free ));
72
71
}
@@ -80,10 +79,8 @@ public class CorePrettier extends BasePrettier<Term> {
80
79
case IntegerTerm shaped -> shaped .repr () == 0
81
80
? linkLit (0 , shaped .zero (), CON )
82
81
: linkLit (shaped .repr (), shaped .suc (), CON );
83
- case ListTerm shaped -> {
84
- var subterms = shaped .repr ().map (x -> term (Outer .Free , x ));
85
- var nil = shaped .nil ();
86
- var cons = shaped .cons ();
82
+ case ListTerm (var repr , var nil , var cons , _) -> {
83
+ var subterms = repr .map (x -> term (Outer .Free , x ));
87
84
yield Doc .sep (
88
85
linkListLit (Doc .symbol ("[" ), nil , CON ),
89
86
Doc .join (linkListLit (Doc .COMMA , cons , CON ), subterms ),
@@ -244,8 +241,7 @@ private ImmutableSeq<Term> visibleArgsOf(Callable call) {
244
241
}
245
242
246
243
private @ NotNull Doc visitAccessHead (@ NotNull MemberCall term ) {
247
- return Doc .cat (term (Outer .ProjHead , term .of ()), Doc .symbol ("." ),
248
- refVar (term .ref ()));
244
+ return Doc .cat (term (Outer .ProjHead , term .of ()), Doc .symbol ("." ), refVar (term .ref ()));
249
245
}
250
246
251
247
public @ NotNull Doc pat (@ NotNull Pat pat , boolean licit , Outer outer ) {
@@ -281,10 +277,10 @@ private ImmutableSeq<Term> visibleArgsOf(Callable call) {
281
277
var absTele = TyckDef .defSignature (def );
282
278
yield visitFn (defVar (def .ref ()), def .modifiers (), absTele ,
283
279
(prefix , subst ) -> switch (def .body ()) {
284
- case Either .Left (var term ) -> Doc .sep (prefix , FN_DEFINED_AS , term (Outer .Free , term .instTele (subst .view ())));
285
- case Either .Right (var body ) -> Doc .vcat (prefix ,
286
- Doc .nest (2 , visitClauses (body .matchingsView (), def .telescope ().view ().map (Param ::explicit ))));
287
- });
280
+ case Either .Left (var term ) -> Doc .sep (prefix , FN_DEFINED_AS , term (Outer .Free , term .instTele (subst .view ())));
281
+ case Either .Right (var body ) -> Doc .vcat (prefix ,
282
+ Doc .nest (2 , visitClauses (body .matchingsView (), def .telescope ().view ().map (Param ::explicit ))));
283
+ });
288
284
}
289
285
case MemberDef field -> visitMember (defVar (field .ref ()), TyckDef .defSignature (field ));
290
286
case ConDef con -> visitCon (con .ref , con .coerce , con .selfTele );
@@ -297,10 +293,13 @@ yield visitFn(defVar(def.ref()), def.modifiers(), absTele,
297
293
return switch (unit ) {
298
294
case JitDef jitDef -> def (jitDef );
299
295
case TyckAnyDef <?> tyckAnyDef -> def (tyckAnyDef .ref .core );
300
- default -> Panic .unreachable ();
301
296
};
302
297
}
303
298
299
+ @ Override public @ NotNull Doc visitTele (@ NotNull Seq <? extends ParamLike <Term >> telescope ) {
300
+ return visitTele (telescope , null , FindUsage ::free );
301
+ }
302
+
304
303
public @ NotNull Doc def (@ NotNull JitDef unit ) {
305
304
var dummyVar = new CompiledVar (unit );
306
305
var nameDoc = defVar (dummyVar );
@@ -310,7 +309,7 @@ yield visitFn(defVar(def.ref()), def.modifiers(), absTele,
310
309
Doc .sep (prefix , FN_DEFINED_AS , COMMENT_COMPILED_CODE ));
311
310
case JitCon jitCon -> {
312
311
var dummyOwnerArgs = ImmutableSeq .<Term >fill (jitCon .ownerTeleSize (), i -> new FreeTerm (jitCon .telescopeName (i )));
313
- var rhs = visitConRhs (nameDoc , true && false , jitCon .inst (dummyOwnerArgs ));
312
+ var rhs = visitConRhs (nameDoc , false , jitCon .inst (dummyOwnerArgs ));
314
313
var wholeClause = rhs ;
315
314
316
315
if (jitCon .dataRef ().signature ().telescopeSize () > 0 ) {
@@ -339,7 +338,6 @@ yield visitFn(defVar(def.ref()), def.modifiers(), absTele,
339
338
340
339
var tele = enrich (telescope );
341
340
line1 .append (visitTele (tele ));
342
-
343
341
line1 .append (HAS_TYPE );
344
342
345
343
var subst = tele .<Term >map (x -> new FreeTerm (x .ref ()));
@@ -350,11 +348,7 @@ yield visitFn(defVar(def.ref()), def.modifiers(), absTele,
350
348
}
351
349
352
350
/// @param selfTele self tele of the constructor, unlike [JitCon], the data args/owner args should be supplied.
353
- private @ NotNull Doc visitConRhs (
354
- @ NotNull Doc name ,
355
- boolean coerce ,
356
- @ NotNull AbstractTele selfTele
357
- ) {
351
+ private @ NotNull Doc visitConRhs (@ NotNull Doc name , boolean coerce , @ NotNull AbstractTele selfTele ) {
358
352
return Doc .sepNonEmpty (coe (coerce ), name , visitTele (enrich (selfTele )));
359
353
}
360
354
@@ -381,16 +375,13 @@ yield visitFn(defVar(def.ref()), def.modifiers(), absTele,
381
375
}
382
376
}
383
377
384
- private @ NotNull Doc visitData (
385
- @ NotNull DataDefLike dataDef
386
- ) {
378
+ private @ NotNull Doc visitData (@ NotNull DataDefLike dataDef ) {
387
379
var name = defVar (AnyDef .toVar (dataDef ));
388
380
var telescope = dataDef .signature ();
389
381
var richDataTele = enrich (telescope );
390
382
var dataArgs = richDataTele .<Term >map (t -> new FreeTerm (t .ref ()));
391
383
392
- var line1 = Doc .sepNonEmpty (KW_DATA ,
393
- name ,
384
+ var line1 = Doc .sepNonEmpty (KW_DATA , name ,
394
385
visitTele (richDataTele ),
395
386
HAS_TYPE ,
396
387
term (Outer .Free , telescope .result (dataArgs )));
@@ -400,21 +391,15 @@ yield visitFn(defVar(def.ref()), def.modifiers(), absTele,
400
391
}
401
392
402
393
/// @param telescope the telescope of a [MemberDefLike], including the `self` parameter
403
- private @ NotNull Doc visitMember (
404
- @ NotNull Doc name ,
405
- @ NotNull AbstractTele telescope
406
- ) {
394
+ private @ NotNull Doc visitMember (@ NotNull Doc name , @ NotNull AbstractTele telescope ) {
407
395
// TODO: should we pretty print the `self` parameter?
408
396
// The use of `self` parameter still appears in other parameters.
409
397
var visitTele = visitTele (telescope );
410
398
411
399
return Doc .sepNonEmpty (BAR , name , visitTele .tele , HAS_TYPE , visitTele .result .get ());
412
400
}
413
401
414
- private @ NotNull Doc visitClass (
415
- @ NotNull Doc name ,
416
- @ NotNull SeqView <Doc > members
417
- ) {
402
+ private @ NotNull Doc visitClass (@ NotNull Doc name , @ NotNull SeqView <Doc > members ) {
418
403
return Doc .sepNonEmpty (KW_CLASS , name , Doc .nest (2 , Doc .vcat (members )));
419
404
}
420
405
@@ -449,9 +434,7 @@ yield visitFn(defVar(def.ref()), def.modifiers(), absTele,
449
434
var richTele = FreezableMutableList .<ParamLike <Term >>create ();
450
435
451
436
for (var i = 0 ; i < tele .telescopeSize (); ++i ) {
452
- var binds = richTele .view ()
453
- .<Term >map (x -> new FreeTerm (x .ref ()))
454
- .toImmutableSeq ();
437
+ var binds = richTele .<Term >map (x -> new FreeTerm (x .ref ()));
455
438
var type = tele .telescope (i , binds );
456
439
richTele .append (new RichParam (
457
440
new LocalVar (tele .telescopeName (i ), SourcePos .NONE , Basic .Pretty ),
0 commit comments