Function: dtrt-indent-diagnosis
dtrt-indent-diagnosis is an autoloaded, interactive and natively
compiled function defined in dtrt-indent-diag.el.
Signature
(dtrt-indent-diagnosis)
Documentation
Guess indentation for the current buffer and output diagnostics.
Key Bindings
This command is not in any keymaps.
Source Code
;; Defined in /nix/store/xl774j723v677bsfsybzln3vi6w0fpm3-emacs-packages-deps/share/emacs/site-lisp/elpa/dtrt-indent-20260709.2011/dtrt-indent-diag.el
(defun dtrt-indent-diagnosis ()
"Guess indentation for the current buffer and output diagnostics."
(interactive)
(let ((language-and-variable
(cdr (dtrt-indent--search-hook-mapping major-mode))))
(with-output-to-temp-buffer "*dtrt-indent-debug*"
(if (null language-and-variable)
(princ (format "Major mode %s not supported by dtrt-indent" major-mode))
(let* ((language-and-variable
(cdr (dtrt-indent--search-hook-mapping major-mode)))
result
(time-for-analysis
(benchmark-elapse
(setq result
(dtrt-indent--analyze
(dtrt-indent--calc-histogram
(car language-and-variable))))))
(histogram
(cdr (assoc :histogram result)))
(total-lines
(cdr (assoc :total-lines result)))
(hard-tab-lines
(cdr (assoc :hard-tab-lines result)))
(hard-tab-percentage
(cdr (assoc :hard-tab-percentage result)))
(soft-tab-lines
(cdr (assoc :soft-tab-lines result)))
(soft-tab-percentage
(cdr (assoc :soft-tab-percentage result)))
(change-indent-tabs-mode
(cdr (assoc :change-indent-tabs-mode result)))
(indent-tabs-mode-setting
(cdr (assoc :indent-tabs-mode-setting result)))
(analysis
(cdr (assoc :analysis result)))
(best-guess
(cdr (assoc :best-guess result)))
(rejected
(cdr (assoc :rejected result)))
(confidence
(cdr (assoc :confidence result))))
(princ (format "\nGuessing offset for %s\n\n"
(or (buffer-file-name) (buffer-name))))
(princ (format "Elapsed time for analysis: %.3f seconds\n\n"
time-for-analysis))
(princ (format "Total relevant lines: %d out of %d (limit: %d)\n"
total-lines
(line-number-at-pos (point-max))
dtrt-indent-max-lines))
(if (< total-lines
dtrt-indent-min-relevant-lines)
(princ
(format "\
\n\
Analysis cancelled: not enough relevant lines (%d required) - not \
modifying offset or indent-tabs-mode\n\n"
dtrt-indent-min-relevant-lines))
(princ "\nHistogram:\n\n")
(princ
(eval
(append '(concat)
(mapcar (lambda (x)
(format " %4dx %3d spaces\n"
(nth 1 x)
(nth 0 x)))
(sort
histogram
(lambda (x y)
(or (not y)
(and x (< (car x) (car y))))))))))
(princ "\nAnalysis:\n\n")
(princ
(eval
(append '(concat)
(mapcar
(lambda (analysis-entry)
(format "\
offset %d works for %6.2f%% of relevant lines, matching %d \
distinct offsets - %s\n"
(nth 0 analysis-entry)
(* 100.0 (nth 1 analysis-entry))
(nth 2 analysis-entry)
(or (nth 3 analysis-entry) "CONSIDERED")))
analysis))))
(princ "\nSummary:\n\n")
(princ
(format "\
Best guess is offset %d with %.2f%% matching lines \(%.2f%% \
required)\n"
(nth 0 best-guess)
(* 100.0 (nth 1 best-guess))
dtrt-indent-min-quality))
(princ (format " Hard tab percentage: %.2f%% (%d lines), \
%.2f%% superior to soft tabs (threshold %.2f%%)\n"
(* 100.0 hard-tab-percentage)
hard-tab-lines
(- (* 100.0 (/ hard-tab-percentage
soft-tab-percentage))
100.0)
dtrt-indent-min-hard-tab-superiority
))
(princ (format " Soft tab percentage: %.2f%% (%d lines), \
%.2f%% superior to hard tabs (threshold %.2f%%)\n"
(* 100.0 soft-tab-percentage)
soft-tab-lines
(- (* 100.0 (/ soft-tab-percentage
hard-tab-percentage))
100.0)
dtrt-indent-min-soft-tab-superiority))
(princ "\nConclusion:\n\n")
(princ (format "\
Guessed offset %s with %.0f%% confidence.\n"
(nth 0 best-guess)
(* 100.0 confidence)))
(if rejected (princ (format " Rejected: %s\n" rejected)))
(princ (format " Change indent-tab-setting: %s\n"
(if change-indent-tabs-mode
(format "yes, to %s" indent-tabs-mode-setting)
"no")))))))))