diff --git a/modules/lang/data/config.el b/modules/lang/data/config.el index e6674ede7..4c91e1232 100644 --- a/modules/lang/data/config.el +++ b/modules/lang/data/config.el @@ -43,10 +43,10 @@ ;; Frameworks ;; -;; (def-project! ansible-mode "ans" -;; :modes (yaml-mode) -;; :files ("roles/")) +(def-project-mode! +data-ansible-mode + :modes (yaml-mode) + :files "roles/") -;; (def-project! vagrant "vagrant" -;; :files ("Vagrantfile")) +(def-project-mode! +data-vagrant-mode + :files "Vagrantfile") diff --git a/modules/lang/javascript/+screeps.el b/modules/lang/javascript/+screeps.el index bb6ffd145..291c35691 100644 --- a/modules/lang/javascript/+screeps.el +++ b/modules/lang/javascript/+screeps.el @@ -165,13 +165,12 @@ "REACTIONS" "BODYPARTS_ALL" "RESOURCES_ALL" "COLORS_ALL")) -;; TODO -;; (def-project! screeps "screeps" -;; :match "/screeps/.+$" -;; :modes (nodejs-project-mode)) +(def-project-mode! +javascript-screeps-mode + :match "/screeps/.+$" + :modes (+javascript-npm-mode)) -;; (add-hook! screeps-project-mode -;; (when (eq major-mode 'js2-mode) -;; (add-to-list 'flycheck-disabled-checkers 'javascript-jshint) -;; (setq js2-additional-externs (append '("_") screeps-objects screeps-constants)))) +(add-hook! '+javascript-screeps-mode-hook + (when (eq major-mode 'js2-mode) + (push 'javascript-jshint flycheck-disabled-checkers) + (setq js2-additional-externs (append '("_") screeps-objects screeps-constants)))) diff --git a/modules/lang/javascript/autoload.el b/modules/lang/javascript/autoload.el index 0bb068bc2..dadf2c2b2 100644 --- a/modules/lang/javascript/autoload.el +++ b/modules/lang/javascript/autoload.el @@ -19,3 +19,17 @@ (unless (executable-find "tern") (sh "npm -g install tern"))) +(defvar +javascript-npm-conf (make-hash-table :test 'equal)) + +;;;###autoload +(defun +javascript-npm-conf (&optional project-root refresh-p) + "Retrieves an alist of this project's 'package.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 +javascript-npm-conf)) + (let ((package-file (expand-file-name "package.json" project-root))) + (when-let (json (and (file-exists-p package-file) + (json-read-file package-file))) + (puthash project-root json +javascript-npm-conf)))))) + diff --git a/modules/lang/javascript/config.el b/modules/lang/javascript/config.el index 4b315b69d..103d7290e 100644 --- a/modules/lang/javascript/config.el +++ b/modules/lang/javascript/config.el @@ -1,6 +1,6 @@ ;; lang/javascript/config.el -;; TODO (load! +screeps) +(load! +screeps) (def-package! js2-mode :mode "\\.js$" @@ -88,15 +88,19 @@ ;; Projects ;; -;; (project! npm -;; :modes (web-mode js2-mode) -;; :files ("package.json") -;; :config -;; (let* ((project-path (doom-project-root)) -;; (hash (gethash project-path npm-conf)) -;; (package-file (expand-file-name "package.json" project-path)) -;; deps) -;; (when-let (json (and (not hash) (file-exists-p package-file) -;; (ignore-errors (json-read-file package-file)))) -;; (puthash project-path json npm-conf)))) +(def-project-mode! +javascript-npm-mode + :modes (web-mode js-mode markdown-mode) + :files "package.json") + +(def-project-mode! +javascript-lb6-mode + :modes (web-mode js-mode nxml-mode markdown-mode) + :match "\\.lb\\(action\\|ext\\)/" + :init + ;; TODO + ;; (when IS-MAC + ;; (set! :build 'launchbar-action '+javascript-lb6-mode + ;; (lambda () + ;; (when-let (dir (f-traverse-upwards (lambda (f) (f-ext? f "lbaction")))) + ;; (shell-command (format "open '%s'" dir)))))) + ) diff --git a/modules/lang/lua/config.el b/modules/lang/lua/config.el index fb0eb7cb7..181ccea59 100644 --- a/modules/lang/lua/config.el +++ b/modules/lang/lua/config.el @@ -25,16 +25,14 @@ ;; -;; TODO Frameworks +;; Frameworks ;; -;; (def-project-type! love "♥" -;; :modes (lua-mode markdown-mode json-mode) -;; :files ("main.lua" "conf.lua") -;; :build ("open -a love.app '%s'" "main.lua")) - -;; (def-project-type! hammerspoon "hammer" -;; :modes (lua-mode markdown-mode) -;; :match "/\\.?hammerspoon/.+\\.lua$" -;; :build "open hammerspoon://reload") +(def-project-mode! +lua-love-mode + :modes (lua-mode markdown-mode json-mode) + :files (and "main.lua" "conf.lua") + :init + (set! :build 'love2D '+lua-love-mode + (lambda () + (async-shell-command (format "open -a love.app '%s'" (doom-project-root)))))) diff --git a/modules/lang/php/autoload.el b/modules/lang/php/autoload.el new file mode 100644 index 000000000..dc98ceae6 --- /dev/null +++ b/modules/lang/php/autoload.el @@ -0,0 +1,14 @@ +;;; lang/php/autoload.el + +(defvar +php-composer-conf (make-hash-table :test 'equal)) + +;;;###autoload +(defun +php-composer-conf (&optional project-root refresh-p) + "Retrieve the contents of composer.json as an alist. 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 +php-composer-conf)) + (let ((package-file (expand-file-name "composer.json" project-root))) + (when-let (data (and (file-exists-p package-file) + (json-read-file package-file))) + (puthash project-root data +php-composer-conf)))))) diff --git a/modules/lang/php/config.el b/modules/lang/php/config.el index 0ddcd3d51..7bb25c08f 100644 --- a/modules/lang/php/config.el +++ b/modules/lang/php/config.el @@ -81,22 +81,11 @@ ;; Projects ;; -;; (def-project! laravel "laravel" -;; :modes (php-mode yaml-mode web-mode nxml-mode js2-mode scss-mode) -;; :files ("artisan" "server.php")) +(def-project-mode! +php-laravel-mode + :modes (php-mode yaml-mode web-mode nxml-mode js2-mode scss-mode) + :files (and "artisan" "server.php")) -;; (defvar php-composer-conf (make-hash-table :test 'equal)) -;; (def-project! composer "composer" -;; :modes (web-mode php-mode) -;; :files ("composer.json") -;; :when -;; (lambda (&rest _) -;; (let* ((project-path (doom/project-root)) -;; (hash (gethash project-path php-composer-conf)) -;; (package-file (expand-file-name "composer.json" project-path)) -;; deps) -;; (awhen (and (not hash) (file-exists-p package-file) -;; (json-read-file package-file)) -;; (puthash project-path it php-composer-conf))) -;; t)) +(def-project-mode! +php-composer-mode + :modes (web-mode php-mode) + :files "composer.json") diff --git a/modules/lang/ruby/config.el b/modules/lang/ruby/config.el index 5c984a1fe..bc1bc75b2 100644 --- a/modules/lang/ruby/config.el +++ b/modules/lang/ruby/config.el @@ -72,10 +72,10 @@ (def-package! company-inf-ruby :after inf-ruby) + ;; ;; TODO Frameworks ;; -;; (def-project! rake "rake" -;; :files ("Rakefile")) - +;; (def-project-mode! +ruby-rake-mode +;; :files "Rakefile") diff --git a/modules/lang/web/autoload/web.el b/modules/lang/web/autoload/web.el new file mode 100644 index 000000000..99284b164 --- /dev/null +++ b/modules/lang/web/autoload/web.el @@ -0,0 +1,15 @@ +;;; 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 8233c0e8d..6f1d5111a 100644 --- a/modules/lang/web/config.el +++ b/modules/lang/web/config.el @@ -5,46 +5,33 @@ ;; -;; TODO Frameworks +;; Frameworks ;; -;; (defvar bower-conf (make-hash-table :test 'equal)) -;; (def-project! bower "bower" -;; :modes (web-mode js-mode coffee-mode css-mode sass-mode pug-mode) -;; :files ("bower.json") -;; :when -;; (lambda (&rest _) -;; (let* ((project-path (doom-project-root)) -;; (hash (gethash project-path bower-conf)) -;; (package-file (expand-file-name "bower.json" project-path)) -;; deps) -;; (awhen (and (not hash) (file-exists-p package-file) -;; (ignore-errors (json-read-file package-file))) -;; (puthash project-path it bower-conf))) -;; t)) +(def-project-mode! +web-bower-mode + :files "bower.json") -;; (def-project! angularjs "angular" -;; :modes (nodejs-project-mode bower-project-mode) -;; :when -;; (lambda (&rest _) -;; (let* ((project (doom-project-root)) -;; (bower (gethash project bower-conf)) -;; (npm (gethash project npm-conf)) -;; (deps (append (cdr-safe (assq 'dependencies bower)) -;; (cdr-safe (assq 'dependencies npm)) -;; (cdr-safe (assq 'devDependencies bower)) -;; (cdr-safe (assq 'devDependencies npm))))) -;; (assq 'angular deps)))) +(def-project-mode! +web-angularjs-mode + :modes (+javascript-npm-mode +web-bower-mode) + :when + (and (or (bound-and-true-p +web-bower-mode) + (bound-and-true-p +javascript-npm-mode)) + (let* ((project-root (doom-project-root)) + (bower (and +web-bower-mode (+web-bower-conf project-root))) + (npm (and +javascript-npm-mode (+javascript-npm-conf project-root)))) + (assq 'angular (append (cdr-safe (assq 'dependencies bower)) + (cdr-safe (assq 'dependencies npm)) + (cdr-safe (assq 'devDependencies bower)) + (cdr-safe (assq 'devDependencies npm))))))) -;; (def-project! jekyll ":{" -;; :modes (web-mode js-mode coffee-mode css-mode haml-mode pug-mode) -;; :match "/\\(\\(css\\|_\\(layouts\\|posts\\|sass\\)\\)/.+\\|.+.html\\)$" -;; :files ("config.yml" "_layouts/") -;; (add-hook! mode -;; (when (eq major-mode 'web-mode) -;; (web-mode-set-engine "django")))) +(def-project-mode! +web-jekyll-mode + :modes (web-mode js-mode coffee-mode css-mode haml-mode pug-mode) + :files (and "config.yml" (or "_layouts/" "_posts/")) + :init + (add-hook! '+web-jekyll-mode-hook + (when (eq major-mode 'web-mode) + (web-mode-set-engine "django")))) -;; (def-project! wordpress "wp" -;; :modes (php-mode web-mode css-mode haml-mode pug-mode) -;; :match "/wp-\\(\\(content\\|admin\\|includes\\)/\\)?.+$" -;; :files ("wp-config.php" "wp-content/")) +(def-project-mode! +web-wordpress-mode + :modes (php-mode web-mode css-mode haml-mode pug-mode) + :files (or "wp-config.php" "wp-config-sample.php"))