; -*- mode: emacs-lisp; lexical-binding: t -*-

(eldev-require-version "1.8.2")

(eldev-use-package-archive 'gnu-elpa)
(eldev-use-package-archive 'nongnu-elpa)

(eldev-use-package-archive 'melpa-stable)
(eldev-use-package-archive 'melpa-unstable)

(eldev-use-plugin 'autoloads)

(eldev-add-extra-dependencies 'test 'buttercup)

(setq byte-compile-docstring-max-column 240)
(setq checkdoc-force-docstrings-flag nil)
(setq checkdoc-permit-comma-termination-flag t)
(setq checkdoc--interactive-docstring-flag nil)

(setq eldev-lint-default-excluded '(package))

(with-eval-after-load 'elisp-lint
  ;; We will byte-compile with Eldev.
  (setf elisp-lint-ignored-validators '("fill-column" "check-declare")
        enable-local-variables        :safe))

(setq eldev-project-main-file "clojure-ts-mode.el")

;; Exclude tests merged from clojure-mode from running, linting and byte compiling
(setf eldev-test-fileset
      `(:and ,eldev-test-fileset
             (:not "./clojure-mode-tests/*")))
(setf eldev-standard-excludes
      `(:or ,eldev-standard-excludes "./clojure-mode-tests/*"))
(setf eldev-lint-ignored-fileset
      `(:or ,eldev-lint-ignored-fileset "./clojure-mode-tests/*"))

(defvar clojure-ts-mode-indent-check-fix nil
  "Whether `eldev indent' should rewrite the misindented files.")

(eldev-defcommand clojure-ts-mode-indent-check-command (&rest parameters)
  "Check that every Emacs Lisp source file of the project is indented the way
Emacs would indent it.  Pass `--fix' to reindent the offenders in place
instead of only reporting them."
  :command indent
  :category testing
  (when parameters
    (signal 'eldev-wrong-command-usage `(t "Unexpected command parameters")))
  (eldev-load-project-dependencies 'test)
  (load (expand-file-name "test/indent-check.el" eldev-project-dir) nil t)
  (unless (zerop (clojure-ts-mode-indent-check clojure-ts-mode-indent-check-fix))
    (unless clojure-ts-mode-indent-check-fix
      (signal 'eldev-error `("Some files are misindented; run `eldev indent --fix'")))))

(eldev-defbooloptions clojure-ts-mode-indent-check-do-fix
  clojure-ts-mode-indent-check-just-check
  clojure-ts-mode-indent-check-fix
  ("Reindent the misindented files in place"
   :options (--fix))
  ("Only report the misindented lines"
   :options (--check)
   :hidden-if :default)
  :for-command indent)
