mattwparas / steel

An embedded scheme interpreter in Rust
Apache License 2.0
1.07k stars 50 forks source link

Add custom lints to the language server #129

Closed mattwparas closed 8 months ago

mattwparas commented 8 months ago

By adding files in the $STEEL_LSP_HOME/lints directory, you can add custom lints:

(require-builtin "lsp/diagnostics")

(define-syntax define/lint
  (syntax-rules ()
    [(_ (name expr) pat ...)

     (begin
       (define name
         (lambda (expr)

           (match-syntax expr
             pat ...
             [other other])

           (match-syntax expr
             [(list other ...)
              (syntax/loc (map name other)
                (syntax-span expr))]

             [other other])))

       (#%register-lint (symbol->string (quote name))))]))

;; define/lint
(define/lint (null-cdr-check expr)
             [`(null? (cdr ,expr))
              (suggest (syntax-span expr) "Consider turning this into cdr-null?")])