diff --git a/modules/lang/javascript/autoload.el b/modules/lang/javascript/autoload.el index 23603c6dd..4eb00194c 100644 --- a/modules/lang/javascript/autoload.el +++ b/modules/lang/javascript/autoload.el @@ -14,6 +14,18 @@ ignore the cache." (json-read-file package-file))) (puthash project-root json +javascript-npm-conf)))))) +;;;###autoload +(defun +javascript-npm-dep-p (packages &optional project-root refresh-p) + (when-let (data (and (bound-and-true-p +javascript-npm-mode) + (+javascript-npm-conf))) + (let ((deps (append (cdr (assq 'dependencies data)) + (cdr (assq 'devDependencies data))))) + (funcall (if (eq (car packages) 'and) + 'cl-every + 'cl-some) + (lambda (pkg) (assq pkg deps)) + (if (listp packages) packages (list packages)))))) + ;;;###autoload (defun +javascript/repl () "Open a Javascript REPL. Meaning either `skewer-repl', if any of the diff --git a/modules/lang/javascript/config.el b/modules/lang/javascript/config.el index 341cc7e51..e08d5fdba 100644 --- a/modules/lang/javascript/config.el +++ b/modules/lang/javascript/config.el @@ -164,21 +164,6 @@ :modes (html-mode css-mode web-mode js2-mode markdown-mode) :files "package.json") -(def-project-mode! +javascript-phaser-mode - :modes (+javascript-npm-mode) - :when - (let* ((project-root (doom-project-root)) - (bower (and (bound-and-true-p +web-bower-mode) - (+web-bower-conf project-root))) - (npm (and (bound-and-true-p +javascript-npm-mode) - (+javascript-npm-conf project-root))) - (deps (append (cdr (assq 'dependencies bower)) - (cdr (assq 'dependencies npm)) - (cdr (assq 'devDependencies bower)) - (cdr (assq 'devDependencies npm))))) - (or (assq 'phaser deps) - (assq 'phaser-ce deps)))) - (def-project-mode! +javascript-lb6-mode :modes (web-mode js2-mode nxml-mode markdown-mode) :match "\\.lb\\(action\\|ext\\)/" diff --git a/modules/lang/web/autoload/web.el b/modules/lang/web/autoload/web.el index 99284b164..075270b03 100644 --- a/modules/lang/web/autoload/web.el +++ b/modules/lang/web/autoload/web.el @@ -1,15 +1,2 @@ ;;; lang/web/autoload/web.el -(defvar +web-bower-conf (make-hash-table :test 'equal)) - -;;;###autoload -(defun +web-bower-conf (&optional project-root refresh-p) - "Retrieves an alist of this project's 'bower.json'. If REFRESH-P is non-nil -ignore the cache." - (let ((project-root (or project-root (doom-project-root)))) - (or (and (not refresh-p) - (gethash project-root +web-bower-conf)) - (let ((package-file (expand-file-name "bower.json" project-root))) - (when-let (json (and (file-exists-p package-file) - (json-read-file package-file))) - (puthash project-root json +web-bower-conf)))))) diff --git a/modules/lang/web/config.el b/modules/lang/web/config.el index adecd9673..19dff3674 100644 --- a/modules/lang/web/config.el +++ b/modules/lang/web/config.el @@ -31,21 +31,9 @@ ;; Frameworks ;; -(def-project-mode! +web-bower-mode - :files "bower.json") - (def-project-mode! +web-angularjs-mode - :modes (+javascript-npm-mode +web-bower-mode) - :when - (let* ((project-root (doom-project-root)) - (bower (and (bound-and-true-p +web-bower-mode) - (+web-bower-conf project-root))) - (npm (and (bound-and-true-p +javascript-npm-mode) - (+javascript-npm-conf project-root)))) - (assq 'angular (append (cdr (assq 'dependencies bower)) - (cdr (assq 'dependencies npm)) - (cdr (assq 'devDependencies bower)) - (cdr (assq 'devDependencies npm)))))) + :modes (+javascript-npm-mode) + :when (+javascript-npm-dep-p 'angular)) (def-project-mode! +web-jekyll-mode :modes (web-mode js-mode coffee-mode css-mode haml-mode pug-mode) @@ -61,7 +49,8 @@ (def-project-mode! +web-react-mode :modes (+javascript-npm-mode) - :when - (when-let (npm (+javascript-npm-conf)) - (assq 'react (append (cdr (assq 'dependencies npm)) - (cdr (assq 'devDependencies npm)))))) + :when (+javascript-npm-dep-p 'react)) + +(def-project-mode! +web-phaser-mode + :modes (+javascript-npm-mode) + :when (+javascript-npm-dep-p '(or phaser phaser-ce)))