sayid-menu, a transient menu that sayid-setup-package now binds to the C-c s prefix: commands grouped by workflow, with live traced/recorded state in the header (backed by a new sayid-get-log-count op). All classic key sequences keep working - the menu uses the same keys - and sayid-use-menu set to nil restores the plain prefix keymap.C-c s w) and an empty traced-functions view (C-c s s) now render a short getting-started hint instead of signaling an error.sayid-trace-fn-at-point op reply changed accordingly (see doc/nrepl-api.md).g refreshes the workspace tree and traced-functions buffers.sayid-reset-workspace asks for confirmation, since it irreversibly drops all traces and the whole recording.sayid-trace-fn (C-c s t t), the just-trace-this command for newcomers - an outer trace of the function at point.sayid-trace-fn-outer, sayid-trace-fn-inner and sayid-trace-fn-remove (the old sayid-outer-trace-fn, sayid-inner-trace-fn and sayid-remove-trace-fn names remain as obsolete aliases).c d defs a captured value to $s/*, c p pretty-prints one, and c r copies an expression reproducing the call at point.sayid-query-form-at-point (C-c s f) now renders its results in the tree view, backed by the new sayid-query-form-at-point-data op, instead of the legacy text view.sayid-tree-inspect (c i in the tree view) and sayid-buf-inspect-at-point never opening the inspector: they passed an expression string to cider-inspect, an API that CIDER dropped years ago. They now go through cider-inspect-expr.ws-save!/ws-save-as!/ws-load!) storing a live reference instead of a snapshot: mutating the workspace after saving (e.g. clearing the log) corrupted the shelved copy, so a later load restored nothing. It now shelves a fully-dereferenced snapshot, like a recording does.rec-save-as! reporting id 'null' to slot 'null' - it read the recording atom instead of its value.sayid-tap-trace (C-c s d t) taps the workspace to your data tool, and sayid-capture-baseline (C-c s d b) / sayid-diff-traces (C-c s d d) drive the snapshot-then-compare flow. Backed by new sayid-tap-trace, sayid-capture-baseline and sayid-diff-traces nREPL ops.sayid.data, the programmatic data-first API: trace-data returns the recorded call tree as plain keyword-keyed Clojure data with live captured values (and timing/source), and tap-trace! tap>s it for exploring in Portal/Reveal/Morse.sayid.golden, a golden-trace testing helper: capture a run's recorded call tree as a normalized baseline and assert future runs still match it (gold/matches-golden?), with an update mode via SAYID_GOLDEN_UPDATE. With inner tracing the baseline covers intermediate expression values too. Also gold/diff-traces, which structurally diffs two captured traces and reports exactly which calls and values changed.tools.analyzer.jvm (sayid.inner-ast), working off the analyzed AST instead of re-reading source and rewriting raw forms. This replaces the legacy rewriter (the sayid.inner-trace namespace is gone), fixes inner-traced try/catch swallowing exceptions, and drops the per-macro special-casing that made the old instrumenter fragile.sayid.trace/*evict-old-calls* (default false), which switches the record limit from keeping the first N top-level calls to a keep-the-last-N ring, evicting the oldest.sayid.trace/*per-fn-limit* (default unbounded), which caps how many calls of any single function are recorded, so one hot function can't crowd out the rest of the recording.sayid.trace/*sample-rate* (default 1), which records one in every N top-level calls, for tracing a hot entry point without drowning the recording. Backed by a recording-suppression flag that also fixes a latent NPE when a skipped root called an inner-traced function.sayid.trace/*max-trace-depth* (default unbounded), which caps how deep the call nesting is recorded, so one deeply recursive call can't explode into an unbounded subtree.*print-length*/*print-level*, so a fat or infinite value can't hang the serializer or produce a runaway payload.sayid.trace/*record-limit* top-level calls (default 50k), so tracing a namespace under a test suite can't grow the workspace without bound. Calls past the cap run untraced and Sayid warns once.sayid-show-traced): e/d/r enable, disable and remove the trace at point, i/o switch a function to an inner or outer trace.sayid-show-traced as a namespaces to functions tree (cider-tree-view), and add a sayid-show-traced-data op returning the traced audit as data.form.sayid-tree-view-workspace, a client-rendered, foldable view of the recorded call tree built on CIDER's cider-tree-view and the new data ops. Fold and navigate the tree, jump to a call's source, inspect any captured value (return, throw, or a named argument) in CIDER's inspector, and focus by function or call id. It's the default workspace view (C-c s w); the old text-rendered view stays available via M-x sayid-get-workspace. Bumps the minimum CIDER to 1.23.com.billpiel domain prefix from all namespaces (com.billpiel.sayid.* -> sayid.*), including the injected middleware var (now sayid.nrepl-middleware/wrap-sayid). Breaking for code that requires the old namespaces directly; the bundled plugin and Emacs client are updated in lockstep. The Maven coordinates are unchanged.sayid-query-data, sayid-query-by-id-data, sayid-query-by-fn-data) that return matched calls as data instead of rendered text.sayid-get-workspace-data nREPL op, which returns the recorded call tree as data (see doc/nrepl-api.md) for editor-agnostic clients.! reload workflow; the re-enable/clear now runs on the reload's completion callback instead of fixed sleep-for delays.query-*-with-modifier commands into prefix-aware f/i in the sayid buffer (use a prefix arg to prompt for a modifier; the F/I keys are gone), and bind r to refresh the view.special-mode.% in a path.mx.cider/sayid coordinates. The old com.billpiel/sayid coordinates are deprecated but still receive the same releases for now, so existing dependencies keep working.action-parametrized ops (sayid-trace-fn, sayid-trace-fn-at-point, sayid-trace-ns, sayid-all-traces), trimming the middleware from 37 ops to 26. (Breaking for any third-party nREPL client; the bundled Emacs client is updated in lockstep.)sayid-buf-query-id-w-mod -> sayid-query-by-id, sayid-buf-query-fn-w-mod -> sayid-query-by-fn, sayid-buf-def-at-point -> sayid-def-value, sayid-buf-pprint-at-point -> sayid-pprint-value.wrong-type-argument error when pressing g (and similar commands) by no longer re-reading nREPL response values, which already arrive decoded on nREPL 1.0+.letfn.sayid-gen-instance-expr, bound to g).cider-jack-in time for non-Leiningen projects.tools.reader and tools.namespace dependencies.cider-current-connection.sayid plugin version from the version of the Emacs client (see sayid-injected-plugin-version).sayid-trace-ns-by-pattern accepts interactive argument.loop form with multi-form bodyrecur no longer triggers explosionq to quit windowCan you improve this documentation? These fine people already did:
Bozhidar Batsov & Bill PielEdit on GitHub
cljdoc builds & hosts documentation for Clojure/Script libraries
| Ctrl+k | Jump to recent docs |
| ← | Move to previous article |
| → | Move to next article |
| Ctrl+/ | Jump to the search field |