Skip to content

Commit 409784f

Browse files
committed
lint: add linter for define-type
1 parent 0cc99bd commit 409784f

File tree

1 file changed

+22
-2
lines changed

1 file changed

+22
-2
lines changed

deta-lint-lib/review.rkt

+22-2
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,9 @@
1010
review-syntax)
1111

1212
(define (should-review-syntax? stx)
13-
(syntax-case stx (define-schema)
13+
(syntax-case stx (define-schema define-type)
1414
[(define-schema . _rest) #t]
15+
[(define-type . _rest) #t]
1516
[_ #f]))
1617

1718
(define-splicing-syntax-class schema-field-option
@@ -56,7 +57,26 @@
5657
#:check-usages? #f
5758
(format "~a~a-~~a" p schema-id-sym))))]))
5859

60+
(define-syntax-class type-definition
61+
#:datum-literals (define-type)
62+
(pattern (define-type
63+
~!
64+
type-id:id
65+
{~do (push-scope)}
66+
{~optional (field-id:id ...)}
67+
{~alt {~optional {~seq {~or #:contract
68+
#:contract-fn}
69+
contract-expr:expression}}
70+
{~optional {~seq #:declaration declaration-expr:expression}}
71+
{~optional {~seq #:constructor constructor-expr:expression}}
72+
{~optional {~seq #:dump dump-expr:expression}}
73+
{~optional {~seq #:load load-expr:expression}}} ...)
74+
#:do [(pop-scope)
75+
(track-binding #'type-id "~a/f" #:check-usages? #f)
76+
(track-binding #'type-id "~a/f?" #:check-usages? #f)]))
77+
5978
(define (review-syntax stx)
6079
(syntax-parse stx
6180
[d:schema-definition #'d]
62-
[_ (track-error stx "expected a deta schema definition")]))
81+
[t:type-definition #'t]
82+
[_ (track-error stx "expected a deta schema or type definition")]))

0 commit comments

Comments
 (0)