Skip to content

Commit be1e6e1

Browse files
Copilotjackfirth
andauthored
Implement compact printing for syntax-path (#718)
Co-authored-by: copilot-swe-agent[bot] <[email protected]> Co-authored-by: jackfirth <[email protected]>
1 parent 5ec9d76 commit be1e6e1

File tree

1 file changed

+32
-1
lines changed

1 file changed

+32
-1
lines changed

private/syntax-path.rkt

Lines changed: 32 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@
3636
racket/syntax)
3737
data/order
3838
guard
39+
racket/format
3940
racket/mutability
4041
racket/sequence
4142
racket/string
@@ -52,6 +53,7 @@
5253

5354
(module+ test
5455
(require (submod "..")
56+
racket/format
5557
racket/syntax
5658
rackunit))
5759

@@ -61,12 +63,41 @@
6163
(struct syntax-path (elements)
6264
#:transparent
6365
#:sealed
64-
#:guard (λ (elements _) (sequence->treelist elements)))
66+
#:guard (λ (elements _) (sequence->treelist elements))
67+
68+
#:methods gen:custom-write
69+
[(define (write-proc this out mode)
70+
(write-string "#<syntax-path:" out)
71+
(write-string (syntax-path->string this) out)
72+
(write-string ">" out))])
6573

6674

6775
(define empty-syntax-path (syntax-path (treelist)))
6876

6977

78+
(module+ test
79+
(test-case "syntax-path custom printing"
80+
81+
(test-case "empty path prints as #<syntax-path:/>"
82+
(check-equal? (~a empty-syntax-path) "#<syntax-path:/>")
83+
(check-equal? (~v empty-syntax-path) "#<syntax-path:/>")
84+
(check-equal? (~s empty-syntax-path) "#<syntax-path:/>"))
85+
86+
(test-case "single element path prints compactly"
87+
(define path (syntax-path (list 0)))
88+
(check-equal? (~a path) "#<syntax-path:/0>")
89+
(check-equal? (~v path) "#<syntax-path:/0>"))
90+
91+
(test-case "multiple element path prints with slashes"
92+
(define path (syntax-path (list 1 2 3 4)))
93+
(check-equal? (~a path) "#<syntax-path:/1/2/3/4>")
94+
(check-equal? (~v path) "#<syntax-path:/1/2/3/4>"))
95+
96+
(test-case "path with large numbers"
97+
(define path (syntax-path (list 42 99 1000)))
98+
(check-equal? (~a path) "#<syntax-path:/42/99/1000>"))))
99+
100+
70101
(define (empty-syntax-path? v)
71102
(and (syntax-path? v) (treelist-empty? (syntax-path-elements v))))
72103

0 commit comments

Comments
 (0)