diff --git a/core/core-packages.el b/core/core-packages.el index d237c0e9d..d28d176d0 100644 --- a/core/core-packages.el +++ b/core/core-packages.el @@ -233,27 +233,5 @@ Only use this macro in a module's packages.el file." (cl-loop for pkg in packages collect (macroexpand `(package! ,pkg :disable t))))) -(defmacro depends-on! (category module &rest flags) - "Declares that this CATEGORY depends on another. - -Emits a warning if CATEGORY MODULE isn't enabled, or is enabled without FLAGS. - -Only use this macro in a CATEGORY's packages.el file." - (doom--assert-stage-p 'packages #'depends-on!) - `(let ((desired-flags ',flags)) - (unless (doom-module-locate-path ,category ',module) - (error "The '%s %s' module is required, but doesn't exist" - ,category ',module)) - (unless (doom-module-p ,category ',module) - (error "The '%s %s' module is required, but disabled" - ,category ',module)) - (let ((flags (doom-module-get ,category ',module :flags))) - (when (and desired-flags - (/= (length (cl-intersection flags desired-flags)) - (length desired-flags))) - (error "The '%s %s' module is missing the required %S flag(s)" - ,category ',module - (cl-set-difference desired-flags flags)))))) - (provide 'core-packages) ;;; core-packages.el ends here diff --git a/modules/lang/cc/doctor.el b/modules/lang/cc/doctor.el index bb1d22c3e..77a0ee9ba 100644 --- a/modules/lang/cc/doctor.el +++ b/modules/lang/cc/doctor.el @@ -1,6 +1,10 @@ ;; -*- lexical-binding: t; no-byte-compile: t; -*- ;;; lang/cc/doctor.el +(assert! (or (not (featurep! +lsp)) + (featurep! :tools lsp)) + "This module requires (:tools lsp)") + (when (require 'rtags nil t) ;; rtags (let ((bins (cl-remove-if #'executable-find `(,rtags-rdm-binary-name ,rtags-rc-binary-name)))) diff --git a/modules/lang/go/doctor.el b/modules/lang/go/doctor.el index 512780ba6..562dce962 100644 --- a/modules/lang/go/doctor.el +++ b/modules/lang/go/doctor.el @@ -1,6 +1,10 @@ ;; -*- lexical-binding: t; no-byte-compile: t; -*- ;;; lang/go/doctor.el +(assert! (or (not (featurep! +lsp)) + (featurep! :tools lsp)) + "This module requires (:tools lsp)") + (unless (executable-find "guru") (warn! "Couldn't find guru. Refactoring commands (go-guru-*) won't work")) diff --git a/modules/lang/haskell/doctor.el b/modules/lang/haskell/doctor.el index fe571bc14..9dcb7fc7d 100644 --- a/modules/lang/haskell/doctor.el +++ b/modules/lang/haskell/doctor.el @@ -1,6 +1,10 @@ ;; -*- lexical-binding: t; no-byte-compile: t; -*- ;;; lang/haskell/doctor.el +(assert! (or (not (featurep! +lsp)) + (featurep! :tools lsp)) + "This module requires (:tools lsp)") + (when (featurep! +dante) (unless (executable-find "cabal") (warn! "Couldn't find cabal, haskell-mode may have issues"))) diff --git a/modules/lang/java/doctor.el b/modules/lang/java/doctor.el new file mode 100644 index 000000000..b57601c22 --- /dev/null +++ b/modules/lang/java/doctor.el @@ -0,0 +1,9 @@ +;; -*- lexical-binding: t; no-byte-compile: t; -*- +;;; lang/java/doctor.el + +(assert! (or (not (featurep! +lsp)) + (featurep! :tools lsp)) + "This module requires (:tools lsp)") + +(unless (executable-find "javac") + (warn! "Couldn't find the javac executable, are you sure the JDK is installed?")) diff --git a/modules/lang/javascript/doctor.el b/modules/lang/javascript/doctor.el new file mode 100644 index 000000000..e4c3dea63 --- /dev/null +++ b/modules/lang/javascript/doctor.el @@ -0,0 +1,6 @@ +;; -*- lexical-binding: t; no-byte-compile: t; -*- +;;; lang/javascript/doctor.el + +(assert! (or (not (featurep! +lsp)) + (featurep! :tools lsp)) + "This module requires (:tools lsp)") diff --git a/modules/lang/javascript/packages.el b/modules/lang/javascript/packages.el index 5a0c00b4b..02343440e 100644 --- a/modules/lang/javascript/packages.el +++ b/modules/lang/javascript/packages.el @@ -1,21 +1,23 @@ ;; -*- no-byte-compile: t; -*- ;;; lang/javascript/packages.el -;; major modes +;; Major modes (package! coffee-mode) (package! js2-mode) (package! rjsx-mode) (package! typescript-mode) -;; tools +;; Tools (package! eslintd-fix) (package! js2-refactor) -(package! nodejs-repl) (package! npm-mode) + +;; Eval +(package! nodejs-repl) (package! skewer-mode) -(when (featurep! :tools lookup) - (package! xref-js2)) - +;; Programming environment (unless (featurep! +lsp) (package! tide)) +(when (featurep! :tools lookup) + (package! xref-js2)) diff --git a/modules/lang/ocaml/doctor.el b/modules/lang/ocaml/doctor.el index 7ae390f98..4e5445de5 100644 --- a/modules/lang/ocaml/doctor.el +++ b/modules/lang/ocaml/doctor.el @@ -1,6 +1,10 @@ ;; -*- lexical-binding: t; no-byte-compile: t; -*- ;;; lang/ocaml/doctor.el +(assert! (or (not (featurep! +lsp)) + (featurep! :tools lsp)) + "This module requires (:tools lsp)") + (unless (executable-find "ocamlmerlin") (warn! "Couldn't find ocamlmerlin. Lookup, completion and syntax checking won't work")) diff --git a/modules/lang/php/doctor.el b/modules/lang/php/doctor.el new file mode 100644 index 000000000..4e2ed45fc --- /dev/null +++ b/modules/lang/php/doctor.el @@ -0,0 +1,6 @@ +;; -*- lexical-binding: t; no-byte-compile: t; -*- +;;; lang/php/doctor.el + +(assert! (or (not (featurep! +lsp)) + (featurep! :tools lsp)) + "This module requires (:tools lsp)") diff --git a/modules/lang/python/doctor.el b/modules/lang/python/doctor.el index 9dc7c4e12..2fcb5d7fb 100644 --- a/modules/lang/python/doctor.el +++ b/modules/lang/python/doctor.el @@ -1,7 +1,14 @@ ;;; lang/python/doctor.el -*- lexical-binding: t; -*- -(unless (executable-find "python") - (warn! "Python isn't installed.")) +(assert! (or (not (featurep! +lsp)) + (featurep! :tools lsp)) + "This module requires (:tools lsp)") + +(if (not (executable-find "python")) + (warn! "Python isn't installed.") + (unless (featurep! +lsp) + (unless (zerop (shell-command "python -c 'import setuptools'")) + (warn! "setuptools wasn't detected, which anaconda-mode requires")))) (when (featurep! +pyenv) (if (not (executable-find "pyenv")) diff --git a/modules/lang/python/packages.el b/modules/lang/python/packages.el index 193f5d4bd..3ffc2308c 100644 --- a/modules/lang/python/packages.el +++ b/modules/lang/python/packages.el @@ -1,13 +1,15 @@ ;; -*- no-byte-compile: t; -*- ;;; lang/python/packages.el -;; requires: python setuptools - -(package! nose) -(package! python-pytest) +;; Major modes (package! pip-requirements) -;; Environmet management +;; Programming environment +(package! anaconda-mode) +(when (featurep! :completion company) + (package! company-anaconda)) + +;; Environment management (package! pipenv) (package! pyvenv) (when (featurep! +pyenv) @@ -15,8 +17,6 @@ (when (featurep! +conda) (package! conda)) -;; Programming environment -(unless (featurep! +lsp) - (package! anaconda-mode) - (when (featurep! :completion company) - (package! company-anaconda))) +;; Testing frameworks +(package! nose) +(package! python-pytest) diff --git a/modules/lang/ruby/doctor.el b/modules/lang/ruby/doctor.el index 7050b4f28..fa495022e 100644 --- a/modules/lang/ruby/doctor.el +++ b/modules/lang/ruby/doctor.el @@ -1,5 +1,9 @@ ;;; lang/ruby/doctor.el -*- lexical-binding: t; -*- +(assert! (or (not (featurep! +lsp)) + (featurep! :tools lsp)) + "This module requires (:tools lsp)") + (unless (executable-find "ruby") (warn! "Ruby isn't installed.")) diff --git a/modules/lang/ruby/packages.el b/modules/lang/ruby/packages.el index 3c010a6e6..90f1c33d2 100644 --- a/modules/lang/ruby/packages.el +++ b/modules/lang/ruby/packages.el @@ -1,23 +1,25 @@ ;; -*- no-byte-compile: t; -*- ;;; lang/ruby/packages.el -;; requires ruby ruby-lint - +;; Major modes (package! enh-ruby-mode) (package! yard-mode) -(package! inf-ruby) -(unless (featurep! +lsp) - (package! robe)) +;; REPL +(package! inf-ruby) (when (featurep! :completion company) (package! company-inf-ruby)) +;; Programming environment +(package! rubocop) +(unless (featurep! +lsp) + (package! robe)) + ;; Project tools (package! bundler) (package! rake) -(package! rubocop) -;; Version management +;; Environment management (when (featurep! +rbenv) (package! rbenv)) (when (featurep! +rvm) diff --git a/modules/lang/rust/doctor.el b/modules/lang/rust/doctor.el index 79ef3dadb..a102042da 100644 --- a/modules/lang/rust/doctor.el +++ b/modules/lang/rust/doctor.el @@ -1,6 +1,16 @@ ;; -*- lexical-binding: t; no-byte-compile: t; -*- ;;; lang/rust/doctor.el +(assert! (or (not (featurep! +lsp)) + (featurep! :tools lsp)) + "This module requires (:tools lsp)") + +(unless (executable-find "rust") + (warn! "Couldn't find rust binary")) + +(unless (executable-find "cargo") + (warn! "Couldn't find cargo binary")) + (when (require 'racer nil t) ;; racer (unless (file-exists-p racer-cmd) diff --git a/modules/lang/rust/packages.el b/modules/lang/rust/packages.el index 96421d159..3f5efb252 100644 --- a/modules/lang/rust/packages.el +++ b/modules/lang/rust/packages.el @@ -1,8 +1,6 @@ ;; -*- no-byte-compile: t; -*- ;;; lang/rust/packages.el -;; requires rust cargo racer - (package! rust-mode) (when (featurep! :tools flycheck) diff --git a/modules/lang/web/doctor.el b/modules/lang/web/doctor.el index c351f0c73..833bf3429 100644 --- a/modules/lang/web/doctor.el +++ b/modules/lang/web/doctor.el @@ -1,5 +1,9 @@ ;;; lang/web/doctor.el -*- lexical-binding: t; -*- +(assert! (or (not (featurep! +lsp)) + (featurep! :tools lsp)) + "This module requires (:tools lsp)") + (unless (executable-find "js-beautify") (warn! "Couldn't find js-beautify. Code formatting in JS/CSS/HTML modes will not work."))