57 lines
2.5 KiB
Fennel
57 lines
2.5 KiB
Fennel
(local {: view} (require :fennel))
|
|
(local lint (require :fennel-ls.lint))
|
|
(local utils (require :fennel-ls.utils))
|
|
(local config (require :fennel-ls.config))
|
|
(local files (require :fennel-ls.files))
|
|
(local faith (require :faith))
|
|
|
|
(fn test-lints-are-documented []
|
|
(each [_ lint (ipairs lint.list)]
|
|
(let [name lint.name]
|
|
(when (not= (type lint.what-it-does) "string") (error (.. name " needs a description of what it does in :what-it-does")))
|
|
(when (not= (type lint.why-care?) "string") (error (.. name " needs a description of why the linted pattern is bad in :why-care?")))
|
|
(when (not= (type lint.example) "string") (error (.. name " needs an example of broken and fixed code in :example")))
|
|
(when (not= (type lint.since) "string") (error (.. name " needs version: :since " (view utils.version))))))
|
|
nil)
|
|
|
|
(fn test-release-version-number-is-right []
|
|
(let [commit-message (-> (io.popen "git show -s --format='%s'")
|
|
(: :read "*a")
|
|
(: :match "[^\n]*"))
|
|
version (commit-message:match "^Release (.*)")
|
|
version-from-utils utils.version
|
|
version-from-changelog (-> (io.open "changelog.md")
|
|
(: :read "*a")
|
|
(: :match "## ([%d.-]*) /.*"))]
|
|
(if version
|
|
(do ;; Release checks
|
|
(faith.= version version-from-utils "update `utils.version`")
|
|
(faith.= version version-from-changelog "update `changelog.md`"))
|
|
;; Non-release checks
|
|
(faith.match "%-dev" version-from-utils "Commit message doesn't say \"Release\", so this should be a dev version")))
|
|
nil)
|
|
|
|
(fn test-self-lint []
|
|
(let [server {}]
|
|
(config.initialize server {:capabilities {:general {:positionEncodings [:utf-8]}}
|
|
:clientInfo {:name "fennel-ls"}
|
|
:rootUri "file://."})
|
|
(let [filenames (-> (io.popen "find src -name \"*.fnl\" ! -path \"*/generated/*\" && find test -name \"*.fnl\"" :r)
|
|
(: :read "*a")
|
|
(: :gmatch "[^\n]+"))]
|
|
(each [filename filenames]
|
|
(let [uri (.. "file://" filename)
|
|
file (files.get-by-uri server uri)]
|
|
(lint.add-lint-diagnostics server file)
|
|
(each [_ diagnostic (ipairs file.diagnostics)]
|
|
(faith.= nil diagnostic))))))
|
|
nil)
|
|
|
|
;; other ideas:
|
|
;; selflint
|
|
;; docs on top of each file
|
|
;; makefile covers
|
|
{: test-lints-are-documented
|
|
: test-release-version-number-is-right
|
|
: test-self-lint}
|