File: racket-bug-report.el

package info (click to toggle)
racket-mode 20201227git0-3
  • links: PTS, VCS
  • area: main
  • in suites: bullseye
  • size: 1,040 kB
  • sloc: lisp: 9,808; makefile: 55
file content (88 lines) | stat: -rw-r--r-- 4,018 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
;;; racket-bug-report.el -*- lexical-binding: t; -*-

;; Copyright (c) 2013-2020 by Greg Hendershott.
;; Portions Copyright (C) 1985-1986, 1999-2013 Free Software Foundation, Inc.

;; Author: Greg Hendershott
;; URL: https://github.com/greghendershott/racket-mode

;; License:
;; This 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 2, or (at your option)
;; any later version. This 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. See
;; http://www.gnu.org/licenses/ for details.

(require 'cl-lib)
(require 'package)
(require 'racket-custom)

;;;###autoload
(defun racket-bug-report ()
  "Fill a buffer with data to make a Racket Mode bug report."
  (interactive)
  (let ((help-window-select t)
        (print-length nil) ;for `pp'
        (print-level nil)) ;for `pp'
    (with-help-window "*racket-mode bug report*"
      (princ "Please copy all of the following lines and paste them into your bug report\n")
      (princ "at <https://github.com/greghendershott/racket-mode/issues/>.\n\n")

      (princ "<details>\n")
      (princ "<pre>\n")
      (pp (cons '(alist-get 'racket-mode package-alist)
                (let ((v (assq 'racket-mode package-alist)))
                  (and v (cdr v)))))
      (cl-labels ((id-val (id) (list id
                                     (condition-case () (symbol-value id)
                                       (error 'UNDEFINED)))))
        (pp `(,@(mapcar #'id-val
                        `(emacs-version
                          system-type
                          x-gtk-use-system-tooltips
                          major-mode
                          racket--el-source-dir
                          racket--rkt-source-dir
                          racket-program
                          racket-command-timeout
                          racket-xp-after-change-refresh-delay
                          racket-xp-highlight-unused-regexp
                          racket-repl-buffer-name-function
                          racket-memory-limit
                          racket-error-context
                          racket-history-filter-regexp
                          racket-images-inline
                          racket-images-keep-last
                          racket-images-system-viewer
                          racket-images-system-viewer
                          racket-use-repl-submit-predicate
                          racket-pretty-print
                          racket-indent-curly-as-sequence
                          racket-indent-sequence-depth
                          racket-pretty-lambda
                          racket-smart-open-bracket-enable
                          racket-module-forms
                          racket-logger-config
                          racket-show-functions))))
        ;; Show lists of enabled and disabled minor modes, each sorted by name.
        (let* ((minor-modes (cl-remove-duplicates
                             (append minor-mode-list
                                     (mapcar #'car minor-mode-alist))))
               (modes/values (mapcar #'id-val minor-modes))
               (sorted (sort modes/values
                             (lambda (a b)
                               (string-lessp (format "%s" (car a))
                                             (format "%s" (car b)))))))
          (cl-labels ((f (x) (list (car x)))) ;car as a list so pp line-wraps
            (pp `(enabled-minor-modes  ,@(mapcar #'f (cl-remove-if-not #'cadr sorted))))
            (pp `(disabled-minor-modes ,@(mapcar #'f (cl-remove-if     #'cadr sorted)))))))
      (princ "</pre>\n")
      (princ "</details>\n"))
    (forward-line 2)))

(provide 'racket-bug-report)

;;; racket-bug-report.el ends here