FUEL: Automatic insertion of scaffolding in docs and test upon file creation.
							parent
							
								
									44cbe417b9
								
							
						
					
					
						commit
						a381d12b6d
					
				|  | @ -36,13 +36,6 @@ When set to false, you'll be asked only once." | ||||||
|   :type 'boolean |   :type 'boolean | ||||||
|   :group 'factor-mode) |   :group 'factor-mode) | ||||||
| 
 | 
 | ||||||
| (defcustom factor-mode-cycle-insert-docs-p 'ask |  | ||||||
|   "Whether to insert documentation templates upon creation of doc |  | ||||||
| file during cycling." |  | ||||||
|   :type '(choice (const :tag "Never" nil) |  | ||||||
|                  (const :tag "Always" 'always) |  | ||||||
|                  (const :tag "Ask me" 'ask))) |  | ||||||
| 
 |  | ||||||
| (defcustom factor-mode-use-fuel t | (defcustom factor-mode-use-fuel t | ||||||
|   "Whether to use the full FUEL facilities in factor mode. |   "Whether to use the full FUEL facilities in factor mode. | ||||||
| 
 | 
 | ||||||
|  | @ -233,23 +226,18 @@ code in the buffer." | ||||||
| (defsubst factor-mode--cycling-setup () | (defsubst factor-mode--cycling-setup () | ||||||
|   (setq factor-mode--cycling-no-ask nil)) |   (setq factor-mode--cycling-no-ask nil)) | ||||||
| 
 | 
 | ||||||
| (defun factor-mode--other-file-doc-p (file) | (defun factor-mode--code-file (kind &optional file) | ||||||
|   (let ((bn (file-name-nondirectory file))) |   (let* ((file (or file (buffer-file-name))) | ||||||
|     (and (string-match "\\(.+\\)-docs.factor" bn) |          (bn (file-name-nondirectory file))) | ||||||
|  |     (and (string-match (format "\\(.+\\)-%s\\.factor$" kind) bn) | ||||||
|          (expand-file-name (concat (match-string 1 bn) ".factor") |          (expand-file-name (concat (match-string 1 bn) ".factor") | ||||||
|                            (file-name-directory file))))) |                            (file-name-directory file))))) | ||||||
| 
 | 
 | ||||||
| (defun factor-mode--other-file-check-docs (file) | (defsubst factor-mode--in-docs (&optional file) | ||||||
|   (when (and factor-mode-cycle-insert-docs-p |   (factor-mode--code-file "docs")) | ||||||
|              (boundp 'fuel-mode) | 
 | ||||||
|              fuel-mode) | (defsubst factor-mode--in-tests (&optional file) | ||||||
|     (let ((code-file (factor-mode--other-file-doc-p file))) |   (factor-mode--code-file "tests")) | ||||||
|       (when (and code-file |  | ||||||
|                  (or (eq factor-mode-cycle-insert-docs-p 'always) |  | ||||||
|                      (y-or-n-p "Insert doc templates? "))) |  | ||||||
|         (save-excursion |  | ||||||
|           (set-buffer (find-file-noselect code-file)) |  | ||||||
|           (fuel-scaffold-help)))))) |  | ||||||
| 
 | 
 | ||||||
| (defun factor-mode-visit-other-file (&optional skip) | (defun factor-mode-visit-other-file (&optional skip) | ||||||
|   "Cycle between code, tests and docs factor files. |   "Cycle between code, tests and docs factor files. | ||||||
|  | @ -257,8 +245,6 @@ With prefix, non-existing files will be skipped." | ||||||
|   (interactive "P") |   (interactive "P") | ||||||
|   (let ((file (factor-mode--cycle-next (buffer-file-name) skip))) |   (let ((file (factor-mode--cycle-next (buffer-file-name) skip))) | ||||||
|     (unless file (error "No other file found")) |     (unless file (error "No other file found")) | ||||||
|     (unless (file-exists-p file) |  | ||||||
|       (factor-mode--other-file-check-docs file)) |  | ||||||
|     (find-file file) |     (find-file file) | ||||||
|     (unless (file-exists-p file) |     (unless (file-exists-p file) | ||||||
|       (set-buffer-modified-p t) |       (set-buffer-modified-p t) | ||||||
|  |  | ||||||
|  | @ -172,7 +172,10 @@ interacting with a factor listener is at your disposal. | ||||||
|   (when fuel-mode-autodoc-p (fuel-autodoc-mode fuel-mode)) |   (when fuel-mode-autodoc-p (fuel-autodoc-mode fuel-mode)) | ||||||
| 
 | 
 | ||||||
|   (setq fuel-stack-mode-string "/S") |   (setq fuel-stack-mode-string "/S") | ||||||
|   (when fuel-mode-stack-p (fuel-stack-mode fuel-mode))) |   (when fuel-mode-stack-p (fuel-stack-mode fuel-mode)) | ||||||
|  | 
 | ||||||
|  |   (when (and fuel-mode (not (file-exists-p (buffer-file-name)))) | ||||||
|  |     (fuel-scaffold--maybe-insert))) | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
| ;;; Keys: | ;;; Keys: | ||||||
|  |  | ||||||
|  | @ -39,6 +39,64 @@ | ||||||
|   (let ((cmd '(:fuel* (vocab-roots get :get) "fuel"))) |   (let ((cmd '(:fuel* (vocab-roots get :get) "fuel"))) | ||||||
|     (fuel-eval--retort-result (fuel-eval--send/wait cmd)))) |     (fuel-eval--retort-result (fuel-eval--send/wait cmd)))) | ||||||
| 
 | 
 | ||||||
|  | (defun fuel-scaffold--dev-name () | ||||||
|  |   (or fuel-scaffold-developer-name | ||||||
|  |       (let ((cmd '(:fuel* (developer-name get :get) "fuel"))) | ||||||
|  |         (fuel-eval--retort-result (fuel-eval--send/wait cmd))) | ||||||
|  |       "Your name")) | ||||||
|  | 
 | ||||||
|  | (defun fuel-scaffold--first-vocab () | ||||||
|  |   (goto-char (point-min)) | ||||||
|  |   (re-search-forward fuel-syntax--current-vocab-regex nil t)) | ||||||
|  | 
 | ||||||
|  | (defsubst fuel-scaffold--vocab (file) | ||||||
|  |   (save-excursion | ||||||
|  |     (set-buffer (find-file-noselect file)) | ||||||
|  |     (fuel-scaffold--first-vocab) | ||||||
|  |     (fuel-syntax--current-vocab))) | ||||||
|  | 
 | ||||||
|  | (defconst fuel-scaffold--tests-header-format | ||||||
|  |   "! Copyright (C) %s %s | ||||||
|  | ! See http://factorcode.org/license.txt for BSD license. | ||||||
|  | USING: %s tools.test ; | ||||||
|  | IN: %s | ||||||
|  | ") | ||||||
|  | 
 | ||||||
|  | (defsubst fuel-scaffold--check-auto (var) | ||||||
|  |   (and var (or (eq var 'always) (y-or-n-p "Insert template? ")))) | ||||||
|  | 
 | ||||||
|  | (defun fuel-scaffold--tests (parent) | ||||||
|  |   (when (and parent (fuel-scaffold--check-auto fuel-scaffold-test-autoinsert-p)) | ||||||
|  |     (let ((year (format-time-string "%Y")) | ||||||
|  |           (name (fuel-scaffold--dev-name)) | ||||||
|  |           (vocab (fuel-scaffold--vocab parent))) | ||||||
|  |       (insert (format fuel-scaffold--tests-header-format | ||||||
|  |                       year name vocab vocab)) | ||||||
|  |       t))) | ||||||
|  | 
 | ||||||
|  | (defsubst fuel-scaffold--create-docs (vocab) | ||||||
|  |   (let ((cmd `(:fuel* (,vocab ,fuel-scaffold-developer-name fuel-scaffold-help) | ||||||
|  |                       "fuel"))) | ||||||
|  |     (fuel-eval--send/wait cmd))) | ||||||
|  | 
 | ||||||
|  | (defun fuel-scaffold--help (parent) | ||||||
|  |   (when (and parent (fuel-scaffold--check-auto fuel-scaffold-help-autoinsert-p)) | ||||||
|  |     (let* ((ret (fuel-scaffold--create-docs (fuel-scaffold--vocab parent))) | ||||||
|  |            (file (fuel-eval--retort-result ret))) | ||||||
|  |       (when file | ||||||
|  |         (revert-buffer t t t) | ||||||
|  |         (when (and fuel-scaffold-help-header-only-p | ||||||
|  |                    (fuel-scaffold--first-vocab)) | ||||||
|  |           (delete-region (1+ (point)) (point-max)) | ||||||
|  |           (save-buffer)) | ||||||
|  |         (message "Inserting template ... done.")) | ||||||
|  |       (goto-char (point-min))))) | ||||||
|  | 
 | ||||||
|  | (defun fuel-scaffold--maybe-insert () | ||||||
|  |   (ignore-errors | ||||||
|  |     (or (fuel-scaffold--tests (factor-mode--in-tests)) | ||||||
|  |         (fuel-scaffold--help (factor-mode--in-docs))))) | ||||||
|  | 
 | ||||||
|  |  | ||||||
| ;;; User interface: | ;;; User interface: | ||||||
| 
 | 
 | ||||||
|  | @ -73,9 +131,7 @@ You can configure `fuel-scaffold-developer-name' (set by default to | ||||||
|   (interactive "P") |   (interactive "P") | ||||||
|   (let* ((vocab (or (and (not arg) (fuel-syntax--current-vocab)) |   (let* ((vocab (or (and (not arg) (fuel-syntax--current-vocab)) | ||||||
|                     (fuel-completion--read-vocab nil))) |                     (fuel-completion--read-vocab nil))) | ||||||
|          (cmd `(:fuel* (,vocab ,fuel-scaffold-developer-name fuel-scaffold-help) |          (ret (fuel-scaffold--create-docs vocab)) | ||||||
|                        "fuel")) |  | ||||||
|          (ret (fuel-eval--send/wait cmd)) |  | ||||||
|          (file (fuel-eval--retort-result ret))) |          (file (fuel-eval--retort-result ret))) | ||||||
|         (unless file |         (unless file | ||||||
|           (error "Error creating help file" (car (fuel-eval--retort-error ret)))) |           (error "Error creating help file" (car (fuel-eval--retort-error ret)))) | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue