branch: externals/phpinspect commit 94d5b75455e33ccdea41519989c394710a6bc86f Author: Hugo Thunnissen <de...@hugot.nl> Commit: Hugo Thunnissen <de...@hugot.nl>
Add `phpinspect-pipeline-pause-time' --- phpinspect-autoload.el | 21 +++++++++++---------- phpinspect-pipeline.el | 9 ++++++--- phpinspect-util.el | 14 ++++++++++++++ phpinspect-worker.el | 16 +--------------- 4 files changed, 32 insertions(+), 28 deletions(-) diff --git a/phpinspect-autoload.el b/phpinspect-autoload.el index 40526db6e4..55ff853490 100644 --- a/phpinspect-autoload.el +++ b/phpinspect-autoload.el @@ -61,7 +61,6 @@ :documentation "The directories that this autoloader finds code in.")) - (cl-defstruct (phpinspect-autoloader (:constructor phpinspect-make-autoloader)) (project nil @@ -167,9 +166,6 @@ bareword typenames.")) (push type-fqn bag) (puthash type-name bag (phpinspect-autoloader-type-name-fqn-bags al))))) - -(phpinspect-define-pipeline-step phpinspect-al-strategy-execute phpinspect-al-strategy-execute) - (cl-defmethod phpinspect-iterate-composer-jsons ((al phpinspect-autoloader) file) (let* ((fs (phpinspect-project-fs (phpinspect-autoloader-project al))) @@ -216,14 +212,18 @@ bareword typenames.")) autoload) (phpinspect-pipeline-emit-all batch)))) -(phpinspect-define-pipeline-step phpinspect-iterate-composer-jsons - phpinspect-iterate-composer-jsons) (cl-defmethod phpinspect-autoloader-resolve ((autoloader phpinspect-autoloader) typename-symbol) (or (gethash typename-symbol (phpinspect-autoloader-own-types autoloader)) (gethash typename-symbol (phpinspect-autoloader-types autoloader)))) +(phpinspect-define-pipeline-step phpinspect-iterate-composer-jsons + phpinspect-iterate-composer-jsons) + +(phpinspect-define-pipeline-step phpinspect-al-strategy-execute + phpinspect-al-strategy-execute) + (cl-defmethod phpinspect-autoloader-refresh ((autoloader phpinspect-autoloader) &optional async-callback) "Refresh autoload definitions by reading composer.json files from the project and vendor folders." @@ -242,10 +242,11 @@ bareword typenames.")) (lambda (_result error) (if error (message "Error during autoloader refresh: %s" error) - (message (concat "Refreshed project autoloader. Found %d types within project," - " %d types total.") - (hash-table-count (phpinspect-autoloader-own-types autoloader)) - (hash-table-count (phpinspect-autoloader-types autoloader)))))) + (message + (concat "Refreshed project autoloader. Found %d types within project," + " %d types total.") + (hash-table-count (phpinspect-autoloader-own-types autoloader)) + (hash-table-count (phpinspect-autoloader-types autoloader)))))) :into (phpinspect-iterate-composer-jsons :with-context autoloader) :into phpinspect-al-strategy-execute))) diff --git a/phpinspect-pipeline.el b/phpinspect-pipeline.el index 77cd704930..8ff789c2b5 100644 --- a/phpinspect-pipeline.el +++ b/phpinspect-pipeline.el @@ -28,6 +28,10 @@ (define-error 'phpinspect-pipeline-incoming "Signal for incoming pipeline data") (define-error 'phpinspect-pipeline-error "Signal for pipeline errors") +(defvar phpinspect-pipeline-pause-time 0.5 + "Number of seconds to pause a pipeline thread when emacs receives +user input.") + (cl-defstruct (phpinspect-pipeline-end (:constructor phpinspect-make-pipeline-end)) (value nil :type any) @@ -90,7 +94,6 @@ (when errors (signal 'phpinspect-pipeline-error errors)))) - (define-inline phpinspect-pipeline-emit (data) (inline-letevals (data) (inline-quote @@ -117,7 +120,8 @@ (inline-quote (if (input-pending-p) (let ((mx (make-mutex))) - (phpinspect-thread-pause 1 mx (make-condition-variable mx "phpinspect-pipeline-pause"))) + (phpinspect-thread-pause + phpinspect-pipeline-pause-time mx (make-condition-variable mx "phpinspect-pipeline-pause"))) (thread-yield)))) (defun phpinspect--chain-pipeline-steps (steps start-queue end-queue ctx) @@ -262,7 +266,6 @@ "phpinspect-pipeline-async") ,(append '(phpinspect--pipeline) (list seed-form) macro-params))))) - (define-inline phpinspect-pipeline-receive (queue) (inline-letevals (queue) (inline-quote diff --git a/phpinspect-util.el b/phpinspect-util.el index 5286bb6124..0eb73661b8 100644 --- a/phpinspect-util.el +++ b/phpinspect-util.el @@ -187,5 +187,19 @@ context for completion." (json-key-type 'string)) ,@body)) +(defun phpinspect-thread-pause (pause-time mx continue) + "Pause current thread using MX and CONTINUE for PAUSE-TIME idle seconds. + +PAUSE-TIME must be the idle time that the thread should pause for. +MX must be a mutex +CONTINUE must be a condition-variable" + (phpinspect--log "Thread '%s' is paused for %d seconds" (thread-name (current-thread)) pause-time) + (run-with-idle-timer + pause-time + nil + (lambda () (with-mutex mx (condition-notify continue)))) + (with-mutex mx (condition-wait continue)) + (phpinspect--log "Thread '%s' continuing execution" (thread-name (current-thread)))) + (provide 'phpinspect-util) ;;; phpinspect-util.el ends here diff --git a/phpinspect-worker.el b/phpinspect-worker.el index 8b5cd22f1f..453cacdd11 100644 --- a/phpinspect-worker.el +++ b/phpinspect-worker.el @@ -24,6 +24,7 @@ ;;; Code: (require 'cl-lib) +(require 'phpinspect-util) (require 'phpinspect-project) (require 'phpinspect-index) (require 'phpinspect-class) @@ -115,21 +116,6 @@ already present in the queue." (cl-defmethod phpinspect-worker-enqueue ((worker phpinspect-dynamic-worker) task) (phpinspect-worker-enqueue (phpinspect-resolve-dynamic-worker worker) task)) - -(defun phpinspect-thread-pause (pause-time mx continue) - "Pause current thread using MX and CONTINUE for PAUSE-TIME idle seconds. - -PAUSE-TIME must be the idle time that the thread should pause for. -MX must be a mutex -CONTINUE must be a condition-variable" - (phpinspect--log "Thread '%s' is paused for %d seconds" (thread-name (current-thread)) pause-time) - (run-with-idle-timer - pause-time - nil - (lambda () (with-mutex mx (condition-notify continue)))) - (with-mutex mx (condition-wait continue)) - (phpinspect--log "Index thread continuing")) - (cl-defgeneric phpinspect-worker-make-thread-function (worker) "Create a function that can be used to start WORKER's thread.")