about summary refs log tree commit diff
path: root/configs/shared/emacs/.emacs.d/elpa/cider-20180908.1925/cider-tracing.el
diff options
context:
space:
mode:
Diffstat (limited to 'configs/shared/emacs/.emacs.d/elpa/cider-20180908.1925/cider-tracing.el')
-rw-r--r--configs/shared/emacs/.emacs.d/elpa/cider-20180908.1925/cider-tracing.el90
1 files changed, 90 insertions, 0 deletions
diff --git a/configs/shared/emacs/.emacs.d/elpa/cider-20180908.1925/cider-tracing.el b/configs/shared/emacs/.emacs.d/elpa/cider-20180908.1925/cider-tracing.el
new file mode 100644
index 000000000000..c00e7b7f9877
--- /dev/null
+++ b/configs/shared/emacs/.emacs.d/elpa/cider-20180908.1925/cider-tracing.el
@@ -0,0 +1,90 @@
+;;; cider-tracing.el --- Executing tracing functionality -*- lexical-binding: t -*-
+
+;; Copyright © 2013-2018 Bozhidar Batsov, Artur Malabarba and CIDER contributors
+;;
+;; Author: Bozhidar Batsov <bozhidar@batsov.com>
+;;         Artur Malabarba <bruce.connor.am@gmail.com>
+
+;; This program is free software: you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation, either version 3 of the License, or
+;; (at your option) any later version.
+
+;; This program is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;; GNU General Public License for more details.
+
+;; You should have received a copy of the GNU General Public License
+;; along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+;; This file is not part of GNU Emacs.
+
+;;; Commentary:
+
+;; A couple of commands for tracing the execution of functions.
+
+;;; Code:
+
+(require 'cider-client)
+(require 'cider-common) ; for `cider-prompt-for-symbol-function'
+(require 'cider-util) ; for `cider-propertize'
+(require 'cider-connection) ; for `cider-map-repls'
+(require 'nrepl-dict)
+
+(defun cider-sync-request:toggle-trace-var (symbol)
+  "Toggle var tracing for SYMBOL."
+  (thread-first `("op" "toggle-trace-var"
+                  "ns" ,(cider-current-ns)
+                  "sym" ,symbol)
+    (cider-nrepl-send-sync-request)))
+
+(defun cider--toggle-trace-var (sym)
+  "Toggle var tracing for SYM."
+  (let* ((trace-response (cider-sync-request:toggle-trace-var sym))
+         (var-name (nrepl-dict-get trace-response "var-name"))
+         (var-status (nrepl-dict-get trace-response "var-status")))
+    (pcase var-status
+      ("not-found" (error "Var %s not found" (cider-propertize sym 'fn)))
+      ("not-traceable" (error "Var %s can't be traced because it's not bound to a function" (cider-propertize var-name 'fn)))
+      (_ (message "Var %s %s" (cider-propertize var-name 'fn) var-status)))))
+
+;;;###autoload
+(defun cider-toggle-trace-var (arg)
+  "Toggle var tracing.
+Prompts for the symbol to use, or uses the symbol at point, depending on
+the value of `cider-prompt-for-symbol'.  With prefix arg ARG, does the
+opposite of what that option dictates."
+  (interactive "P")
+  (cider-ensure-op-supported "toggle-trace-var")
+  (funcall (cider-prompt-for-symbol-function arg)
+           "Toggle trace for var"
+           #'cider--toggle-trace-var))
+
+(defun cider-sync-request:toggle-trace-ns (ns)
+  "Toggle namespace tracing for NS."
+  (thread-first `("op" "toggle-trace-ns"
+                  "ns" ,ns)
+    (cider-nrepl-send-sync-request)))
+
+;;;###autoload
+(defun cider-toggle-trace-ns (query)
+  "Toggle ns tracing.
+Defaults to the current ns.  With prefix arg QUERY, prompts for a ns."
+  (interactive "P")
+  (cider-map-repls :clj-strict
+    (lambda (conn)
+      (with-current-buffer conn
+        (cider-ensure-op-supported "toggle-trace-ns")
+        (let ((ns (if query
+                      (completing-read "Toggle trace for ns: "
+                                       (cider-sync-request:ns-list))
+                    (cider-current-ns))))
+          (let* ((trace-response (cider-sync-request:toggle-trace-ns ns))
+                 (ns-status (nrepl-dict-get trace-response "ns-status")))
+            (pcase ns-status
+              ("not-found" (error "Namespace %s not found" (cider-propertize ns 'ns)))
+              (_ (message "Namespace %s %s" (cider-propertize ns 'ns) ns-status)))))))))
+
+(provide 'cider-tracing)
+;;; cider-tracing.el ends here