Skip to content

Commit 9f8fabb

Browse files
committed
test: why it passes for me?
1 parent d7f8a56 commit 9f8fabb

File tree

3 files changed

+40
-55
lines changed

3 files changed

+40
-55
lines changed

Diff for: cli-impl/src/test/java/org/aya/test/cli/ReplCompilerTest.java

+8-3
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
import org.aya.syntax.ref.AnyVar;
2222
import org.aya.syntax.ref.CompiledVar;
2323
import org.aya.syntax.ref.DefVar;
24+
import org.aya.util.error.Global;
2425
import org.aya.util.error.SourcePos;
2526
import org.aya.util.reporter.ThrowingReporter;
2627
import org.jetbrains.annotations.NotNull;
@@ -34,6 +35,7 @@ public class ReplCompilerTest {
3435
@BeforeEach public void setup() {
3536
compiler.getContext().clear();
3637
compiler.imports.clear();
38+
Global.NO_RANDOM_NAME = true;
3739
}
3840

3941
@Test public void library() throws IOException {
@@ -42,12 +44,15 @@ public class ReplCompilerTest {
4244
assertNotNull(findContext("VecCore::vnil"));
4345
var zero = assertInstanceOf(CompiledVar.class, findContext("Nat::Core::zero"));
4446
assertNotNull(zero);
45-
assertEquals("| /* compiled pattern */ ⇒ zero",
46-
zero.core().easyToString());
47+
assertEquals("| zero", zero.core().easyToString());
4748

4849
var Nat = assertInstanceOf(CompiledVar.class, findContext("Nat::Core::Nat"));
4950
assertNotNull(Nat);
50-
System.out.println(Nat.core().easyToString());
51+
assertEquals("""
52+
inductive Nat : Type 0
53+
| zero
54+
| suc (_ : Nat)
55+
""".trim(), Nat.core().easyToString());
5156

5257
// Don't be too harsh on the test lib structure, maybe we will change it
5358
var rootHints = compiler.getContext().giveMeHint(ImmutableSeq.empty());

Diff for: syntax/src/main/java/org/aya/prettier/BasePrettier.java

+11-14
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,12 @@
22
// Use of this source code is governed by the MIT license that can be found in the LICENSE.md file.
33
package org.aya.prettier;
44

5+
import java.util.Objects;
6+
import java.util.function.BiFunction;
7+
import java.util.function.ToIntBiFunction;
8+
9+
import static org.aya.prettier.Tokens.KW_PRIM;
10+
511
import kala.collection.Seq;
612
import kala.collection.SeqLike;
713
import kala.collection.SeqView;
@@ -30,12 +36,6 @@
3036
import org.jetbrains.annotations.NotNull;
3137
import org.jetbrains.annotations.Nullable;
3238

33-
import java.util.Objects;
34-
import java.util.function.BiFunction;
35-
import java.util.function.ToIntBiFunction;
36-
37-
import static org.aya.prettier.Tokens.KW_PRIM;
38-
3939
public abstract class BasePrettier<Term extends AyaDocile> {
4040
public static @NotNull Doc coreArgsDoc(@NotNull PrettierOptions options, @NotNull SeqView<? extends AyaDocile> self) {
4141
return Doc.commaList(self.map(t -> t.toDoc(options)));
@@ -191,11 +191,9 @@ protected static <T extends AyaDocile> Doc arg(@NotNull Fmt<T> fmt, @NotNull Bin
191191
? Doc.parened(withEx) : withEx;
192192
}
193193

194-
/**
195-
* Pretty-print a telescope in a dumb (but conservative) way.
196-
*
197-
* @see #visitTele(Seq, AyaDocile, Usage)
198-
*/
194+
/// Pretty-print a telescope in a dumb (but conservative) way.
195+
///
196+
/// @see #visitTele(Seq, AyaDocile, Usage)
199197
public @NotNull Doc visitTele(@NotNull Seq<? extends ParamLike<Term>> telescope) {
200198
return visitTele(telescope, null, (_, _) -> 1);
201199
}
@@ -211,7 +209,7 @@ protected static <T extends AyaDocile> Doc arg(@NotNull Fmt<T> fmt, @NotNull Bin
211209
* @param altF7 a function for finding usages.
212210
* @see #visitTele(Seq)
213211
*/
214-
public @NotNull Doc visitTele(
212+
public final @NotNull Doc visitTele(
215213
@NotNull Seq<? extends ParamLike<Term>> telescope,
216214
@Nullable Term body, @NotNull Usage<Term, LocalVar> altF7
217215
) {
@@ -256,8 +254,7 @@ protected static <T extends AyaDocile> Doc arg(@NotNull Fmt<T> fmt, @NotNull Bin
256254

257255
private Doc mutableListNames(MutableList<? extends ParamLike<?>> names, ParamLike<?> param) {
258256
// We HAVE TO collect the results, since {names} is mutable, therefore {names.view()} becomes mutable.
259-
var namesDocs = names.view().map(ParamLike::nameDoc)
260-
.toImmutableSeq();
257+
var namesDocs = names.map(ParamLike::nameDoc);
261258
return param.toDoc(Doc.sep(namesDocs), options);
262259
}
263260

Diff for: syntax/src/main/java/org/aya/prettier/CorePrettier.java

+21-38
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
import static org.aya.prettier.Tokens.*;
1111

1212
import com.intellij.openapi.util.text.StringUtil;
13+
import kala.collection.Seq;
1314
import kala.collection.SeqView;
1415
import kala.collection.immutable.ImmutableSeq;
1516
import kala.collection.mutable.FreezableMutableList;
@@ -41,7 +42,6 @@
4142
import org.aya.syntax.ref.LocalVar;
4243
import org.aya.syntax.telescope.AbstractTele;
4344
import org.aya.util.Arg;
44-
import org.aya.util.error.Panic;
4545
import org.aya.util.error.SourcePos;
4646
import org.aya.util.prettier.PrettierOptions;
4747
import org.jetbrains.annotations.NotNull;
@@ -63,10 +63,9 @@ public class CorePrettier extends BasePrettier<Term> {
6363
return switch (preterm) {
6464
case FreeTerm(var var) -> varDoc(var);
6565
case LocalTerm(var idx) -> Doc.plain("^" + idx);
66-
case MetaCall term -> {
67-
var name = term.ref();
66+
case MetaCall(var name, var args) -> {
6867
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());
7069
if (options.map.get(AyaPrettierOptions.Key.InlineMetas)) yield factory.apply(outer);
7170
yield Doc.wrap(HOLE_LEFT, HOLE_RIGHT, factory.apply(Outer.Free));
7271
}
@@ -80,10 +79,8 @@ public class CorePrettier extends BasePrettier<Term> {
8079
case IntegerTerm shaped -> shaped.repr() == 0
8180
? linkLit(0, shaped.zero(), CON)
8281
: 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));
8784
yield Doc.sep(
8885
linkListLit(Doc.symbol("["), nil, CON),
8986
Doc.join(linkListLit(Doc.COMMA, cons, CON), subterms),
@@ -244,8 +241,7 @@ private ImmutableSeq<Term> visibleArgsOf(Callable call) {
244241
}
245242

246243
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()));
249245
}
250246

251247
public @NotNull Doc pat(@NotNull Pat pat, boolean licit, Outer outer) {
@@ -281,10 +277,10 @@ private ImmutableSeq<Term> visibleArgsOf(Callable call) {
281277
var absTele = TyckDef.defSignature(def);
282278
yield visitFn(defVar(def.ref()), def.modifiers(), absTele,
283279
(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+
});
288284
}
289285
case MemberDef field -> visitMember(defVar(field.ref()), TyckDef.defSignature(field));
290286
case ConDef con -> visitCon(con.ref, con.coerce, con.selfTele);
@@ -297,10 +293,13 @@ yield visitFn(defVar(def.ref()), def.modifiers(), absTele,
297293
return switch (unit) {
298294
case JitDef jitDef -> def(jitDef);
299295
case TyckAnyDef<?> tyckAnyDef -> def(tyckAnyDef.ref.core);
300-
default -> Panic.unreachable();
301296
};
302297
}
303298

299+
@Override public @NotNull Doc visitTele(@NotNull Seq<? extends ParamLike<Term>> telescope) {
300+
return visitTele(telescope, null, FindUsage::free);
301+
}
302+
304303
public @NotNull Doc def(@NotNull JitDef unit) {
305304
var dummyVar = new CompiledVar(unit);
306305
var nameDoc = defVar(dummyVar);
@@ -310,7 +309,7 @@ yield visitFn(defVar(def.ref()), def.modifiers(), absTele,
310309
Doc.sep(prefix, FN_DEFINED_AS, COMMENT_COMPILED_CODE));
311310
case JitCon jitCon -> {
312311
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));
314313
var wholeClause = rhs;
315314

316315
if (jitCon.dataRef().signature().telescopeSize() > 0) {
@@ -339,7 +338,6 @@ yield visitFn(defVar(def.ref()), def.modifiers(), absTele,
339338

340339
var tele = enrich(telescope);
341340
line1.append(visitTele(tele));
342-
343341
line1.append(HAS_TYPE);
344342

345343
var subst = tele.<Term>map(x -> new FreeTerm(x.ref()));
@@ -350,11 +348,7 @@ yield visitFn(defVar(def.ref()), def.modifiers(), absTele,
350348
}
351349

352350
/// @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) {
358352
return Doc.sepNonEmpty(coe(coerce), name, visitTele(enrich(selfTele)));
359353
}
360354

@@ -381,16 +375,13 @@ yield visitFn(defVar(def.ref()), def.modifiers(), absTele,
381375
}
382376
}
383377

384-
private @NotNull Doc visitData(
385-
@NotNull DataDefLike dataDef
386-
) {
378+
private @NotNull Doc visitData(@NotNull DataDefLike dataDef) {
387379
var name = defVar(AnyDef.toVar(dataDef));
388380
var telescope = dataDef.signature();
389381
var richDataTele = enrich(telescope);
390382
var dataArgs = richDataTele.<Term>map(t -> new FreeTerm(t.ref()));
391383

392-
var line1 = Doc.sepNonEmpty(KW_DATA,
393-
name,
384+
var line1 = Doc.sepNonEmpty(KW_DATA, name,
394385
visitTele(richDataTele),
395386
HAS_TYPE,
396387
term(Outer.Free, telescope.result(dataArgs)));
@@ -400,21 +391,15 @@ yield visitFn(defVar(def.ref()), def.modifiers(), absTele,
400391
}
401392

402393
/// @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) {
407395
// TODO: should we pretty print the `self` parameter?
408396
// The use of `self` parameter still appears in other parameters.
409397
var visitTele = visitTele(telescope);
410398

411399
return Doc.sepNonEmpty(BAR, name, visitTele.tele, HAS_TYPE, visitTele.result.get());
412400
}
413401

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) {
418403
return Doc.sepNonEmpty(KW_CLASS, name, Doc.nest(2, Doc.vcat(members)));
419404
}
420405

@@ -449,9 +434,7 @@ yield visitFn(defVar(def.ref()), def.modifiers(), absTele,
449434
var richTele = FreezableMutableList.<ParamLike<Term>>create();
450435

451436
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()));
455438
var type = tele.telescope(i, binds);
456439
richTele.append(new RichParam(
457440
new LocalVar(tele.telescopeName(i), SourcePos.NONE, Basic.Pretty),

0 commit comments

Comments
 (0)