Mercurial > hg
annotate contrib/hg-test-mode.el @ 51740:7226f2626fb1
httppeer: avoid another bad reference before assignment warning
This wasn't a problem, because `b''` from the `AttributeError` handler is in
`bundle2.bundletypes`, so the following loop and conditional always run at least
once. But PyCharm can't figure that out on its own, and it took a little
exploring to figure out it wasn't a problem. The usage in `bundle2.writebundle`
is to look it up in the map of bundle types, so it will break in a more obvious
way in the unlikely event that the empty string is removed from the map in the
future.
author | Matt Harbison <matt_harbison@yahoo.com> |
---|---|
date | Mon, 29 Jul 2024 12:10:08 -0400 |
parents | d4ba4d51f85f |
children |
rev | line source |
---|---|
22081
ed426b011612
contrib: add emacs mode for *.t files
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
1 ;; hg-test-mode.el - Major mode for editing Mercurial tests |
ed426b011612
contrib: add emacs mode for *.t files
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
2 ;; |
46819
d4ba4d51f85f
contributor: change mentions of mpm to olivia
Raphaël Gomès <rgomes@octobus.net>
parents:
41788
diff
changeset
|
3 ;; Copyright 2014 Olivia Mackall <olivia@selenic.com> |
22081
ed426b011612
contrib: add emacs mode for *.t files
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
4 ;; "I have no idea what I'm doing" |
ed426b011612
contrib: add emacs mode for *.t files
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
5 ;; |
ed426b011612
contrib: add emacs mode for *.t files
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
6 ;; This software may be used and distributed according to the terms of the |
ed426b011612
contrib: add emacs mode for *.t files
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
7 ;; GNU General Public License version 2 or any later version. |
ed426b011612
contrib: add emacs mode for *.t files
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
8 ;; |
ed426b011612
contrib: add emacs mode for *.t files
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
9 ;; To enable, add something like the following to your .emacs: |
ed426b011612
contrib: add emacs mode for *.t files
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
10 ;; |
ed426b011612
contrib: add emacs mode for *.t files
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
11 ;; (if (file-exists-p "~/hg/contrib/hg-test-mode.el") |
ed426b011612
contrib: add emacs mode for *.t files
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
12 ;; (load "~/hg/contrib/hg-test-mode.el")) |
ed426b011612
contrib: add emacs mode for *.t files
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
13 |
ed426b011612
contrib: add emacs mode for *.t files
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
14 (defvar hg-test-mode-hook nil) |
ed426b011612
contrib: add emacs mode for *.t files
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
15 |
ed426b011612
contrib: add emacs mode for *.t files
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
16 (defvar hg-test-mode-map |
ed426b011612
contrib: add emacs mode for *.t files
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
17 (let ((map (make-keymap))) |
ed426b011612
contrib: add emacs mode for *.t files
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
18 (define-key map "\C-j" 'newline-and-indent) |
ed426b011612
contrib: add emacs mode for *.t files
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
19 map) |
ed426b011612
contrib: add emacs mode for *.t files
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
20 "Keymap for hg test major mode") |
ed426b011612
contrib: add emacs mode for *.t files
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
21 |
ed426b011612
contrib: add emacs mode for *.t files
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
22 (add-to-list 'auto-mode-alist '("\\.t\\'" . hg-test-mode)) |
ed426b011612
contrib: add emacs mode for *.t files
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
23 |
ed426b011612
contrib: add emacs mode for *.t files
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
24 (defconst hg-test-font-lock-keywords-1 |
ed426b011612
contrib: add emacs mode for *.t files
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
25 (list |
ed426b011612
contrib: add emacs mode for *.t files
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
26 '("^ \\(\\$\\|>>>\\) " 1 font-lock-builtin-face) |
ed426b011612
contrib: add emacs mode for *.t files
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
27 '("^ \\(>\\|\\.\\.\\.\\) " 1 font-lock-constant-face) |
22125
7fce964be27d
hg-test-mode: make exit code highlight work again
Matt Mackall <mpm@selenic.com>
parents:
22109
diff
changeset
|
28 '("^ \\([[][0-9]+[]]\\)$" 1 font-lock-warning-face) |
22109
feab93a24e81
hg-test-mode: don't highlight variables in output
Matt Mackall <mpm@selenic.com>
parents:
22092
diff
changeset
|
29 '("^ \\(.*?\\)\\(\\( [(][-a-z]+[)]\\)*\\)$" 1 font-lock-string-face) |
22092
6e5ff8e26af6
hg-test-mode: colorize HGFOO and TESTFOO environment variables
Matt Mackall <mpm@selenic.com>
parents:
22081
diff
changeset
|
30 '("\\$?\\(HG\\|TEST\\)\\w+=?" . font-lock-variable-name-face) |
22081
ed426b011612
contrib: add emacs mode for *.t files
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
31 '("^ \\(.*?\\)\\(\\( [(][-a-z]+[)]\\)+\\)$" 2 font-lock-type-face) |
ed426b011612
contrib: add emacs mode for *.t files
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
32 '("^#.*" . font-lock-preprocessor-face) |
ed426b011612
contrib: add emacs mode for *.t files
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
33 '("^\\([^ ].*\\)$" 1 font-lock-comment-face) |
ed426b011612
contrib: add emacs mode for *.t files
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
34 ) |
ed426b011612
contrib: add emacs mode for *.t files
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
35 "Minimal highlighting expressions for hg-test mode") |
ed426b011612
contrib: add emacs mode for *.t files
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
36 |
ed426b011612
contrib: add emacs mode for *.t files
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
37 (defvar hg-test-font-lock-keywords hg-test-font-lock-keywords-1 |
ed426b011612
contrib: add emacs mode for *.t files
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
38 "Default highlighting expressions for hg-test mode") |
ed426b011612
contrib: add emacs mode for *.t files
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
39 |
ed426b011612
contrib: add emacs mode for *.t files
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
40 (defvar hg-test-mode-syntax-table |
ed426b011612
contrib: add emacs mode for *.t files
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
41 (let ((st (make-syntax-table))) |
ed426b011612
contrib: add emacs mode for *.t files
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
42 (modify-syntax-entry ?\" "w" st) ;; disable standard quoting |
ed426b011612
contrib: add emacs mode for *.t files
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
43 st) |
ed426b011612
contrib: add emacs mode for *.t files
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
44 "Syntax table for hg-test mode") |
ed426b011612
contrib: add emacs mode for *.t files
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
45 |
ed426b011612
contrib: add emacs mode for *.t files
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
46 (defun hg-test-mode () |
ed426b011612
contrib: add emacs mode for *.t files
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
47 (interactive) |
ed426b011612
contrib: add emacs mode for *.t files
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
48 (kill-all-local-variables) |
ed426b011612
contrib: add emacs mode for *.t files
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
49 (use-local-map hg-test-mode-map) |
ed426b011612
contrib: add emacs mode for *.t files
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
50 (set-syntax-table hg-test-mode-syntax-table) |
ed426b011612
contrib: add emacs mode for *.t files
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
51 (set (make-local-variable 'font-lock-defaults) '(hg-test-font-lock-keywords)) |
ed426b011612
contrib: add emacs mode for *.t files
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
52 (setq major-mode 'hg-test-mode) |
ed426b011612
contrib: add emacs mode for *.t files
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
53 (setq mode-name "hg-test") |
ed426b011612
contrib: add emacs mode for *.t files
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
54 (run-hooks 'hg-test-mode-hook)) |
ed426b011612
contrib: add emacs mode for *.t files
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
55 |
41785
b6a757de2fff
contrib: add compilation-mode linking for our test output
Augie Fackler <augie@google.com>
parents:
22125
diff
changeset
|
56 (with-eval-after-load "compile" |
41786
b6c062bb4be3
contrib: also linkify tracebacks in compilation output when using hg-test-mode
Augie Fackler <augie@google.com>
parents:
41785
diff
changeset
|
57 ;; Link to Python sources in tracebacks in .t failures. |
b6c062bb4be3
contrib: also linkify tracebacks in compilation output when using hg-test-mode
Augie Fackler <augie@google.com>
parents:
41785
diff
changeset
|
58 (add-to-list 'compilation-error-regexp-alist-alist |
b6c062bb4be3
contrib: also linkify tracebacks in compilation output when using hg-test-mode
Augie Fackler <augie@google.com>
parents:
41785
diff
changeset
|
59 '(hg-test-output-python-tb |
b6c062bb4be3
contrib: also linkify tracebacks in compilation output when using hg-test-mode
Augie Fackler <augie@google.com>
parents:
41785
diff
changeset
|
60 "^\\+ +File ['\"]\\([^'\"]+\\)['\"], line \\([0-9]+\\)," 1 2)) |
b6c062bb4be3
contrib: also linkify tracebacks in compilation output when using hg-test-mode
Augie Fackler <augie@google.com>
parents:
41785
diff
changeset
|
61 (add-to-list 'compilation-error-regexp-alist 'hg-test-output-python-tb) |
41785
b6a757de2fff
contrib: add compilation-mode linking for our test output
Augie Fackler <augie@google.com>
parents:
22125
diff
changeset
|
62 ;; Link to source files in test-check-code.t violations. |
b6a757de2fff
contrib: add compilation-mode linking for our test output
Augie Fackler <augie@google.com>
parents:
22125
diff
changeset
|
63 (add-to-list 'compilation-error-regexp-alist-alist |
b6a757de2fff
contrib: add compilation-mode linking for our test output
Augie Fackler <augie@google.com>
parents:
22125
diff
changeset
|
64 '(hg-test-check-code-output |
b6a757de2fff
contrib: add compilation-mode linking for our test output
Augie Fackler <augie@google.com>
parents:
22125
diff
changeset
|
65 "\\+ \\([^:\n]+\\):\\([0-9]+\\):$" 1 2)) |
b6a757de2fff
contrib: add compilation-mode linking for our test output
Augie Fackler <augie@google.com>
parents:
22125
diff
changeset
|
66 (add-to-list 'compilation-error-regexp-alist 'hg-test-check-code-output)) |
b6a757de2fff
contrib: add compilation-mode linking for our test output
Augie Fackler <augie@google.com>
parents:
22125
diff
changeset
|
67 |
41788
19979b8b87e2
tests: add test for hg-test-mode emacs code
Augie Fackler <augie@google.com>
parents:
41786
diff
changeset
|
68 (defun hg-test-mode--test-one-error-line-regexp (test) |
19979b8b87e2
tests: add test for hg-test-mode emacs code
Augie Fackler <augie@google.com>
parents:
41786
diff
changeset
|
69 (erase-buffer) |
19979b8b87e2
tests: add test for hg-test-mode emacs code
Augie Fackler <augie@google.com>
parents:
41786
diff
changeset
|
70 (setq compilation-locs (make-hash-table)) |
19979b8b87e2
tests: add test for hg-test-mode emacs code
Augie Fackler <augie@google.com>
parents:
41786
diff
changeset
|
71 (insert (car test)) |
19979b8b87e2
tests: add test for hg-test-mode emacs code
Augie Fackler <augie@google.com>
parents:
41786
diff
changeset
|
72 (compilation-parse-errors (point-min) (point-max)) |
19979b8b87e2
tests: add test for hg-test-mode emacs code
Augie Fackler <augie@google.com>
parents:
41786
diff
changeset
|
73 (let ((msg (get-text-property 1 'compilation-message))) |
19979b8b87e2
tests: add test for hg-test-mode emacs code
Augie Fackler <augie@google.com>
parents:
41786
diff
changeset
|
74 (should msg) |
19979b8b87e2
tests: add test for hg-test-mode emacs code
Augie Fackler <augie@google.com>
parents:
41786
diff
changeset
|
75 (let ((loc (compilation--message->loc msg)) |
19979b8b87e2
tests: add test for hg-test-mode emacs code
Augie Fackler <augie@google.com>
parents:
41786
diff
changeset
|
76 (line (nth 1 test)) |
19979b8b87e2
tests: add test for hg-test-mode emacs code
Augie Fackler <augie@google.com>
parents:
41786
diff
changeset
|
77 (file (nth 2 test))) |
19979b8b87e2
tests: add test for hg-test-mode emacs code
Augie Fackler <augie@google.com>
parents:
41786
diff
changeset
|
78 (should (equal (compilation--loc->line loc) line)) |
19979b8b87e2
tests: add test for hg-test-mode emacs code
Augie Fackler <augie@google.com>
parents:
41786
diff
changeset
|
79 (should (equal (caar (compilation--loc->file-struct loc)) file))) |
19979b8b87e2
tests: add test for hg-test-mode emacs code
Augie Fackler <augie@google.com>
parents:
41786
diff
changeset
|
80 msg)) |
19979b8b87e2
tests: add test for hg-test-mode emacs code
Augie Fackler <augie@google.com>
parents:
41786
diff
changeset
|
81 |
19979b8b87e2
tests: add test for hg-test-mode emacs code
Augie Fackler <augie@google.com>
parents:
41786
diff
changeset
|
82 (require 'ert) |
19979b8b87e2
tests: add test for hg-test-mode emacs code
Augie Fackler <augie@google.com>
parents:
41786
diff
changeset
|
83 (ert-deftest hg-test-mode--compilation-mode-support () |
19979b8b87e2
tests: add test for hg-test-mode emacs code
Augie Fackler <augie@google.com>
parents:
41786
diff
changeset
|
84 "Test hg-specific compilation-mode regular expressions" |
19979b8b87e2
tests: add test for hg-test-mode emacs code
Augie Fackler <augie@google.com>
parents:
41786
diff
changeset
|
85 (require 'compile) |
19979b8b87e2
tests: add test for hg-test-mode emacs code
Augie Fackler <augie@google.com>
parents:
41786
diff
changeset
|
86 (with-temp-buffer |
19979b8b87e2
tests: add test for hg-test-mode emacs code
Augie Fackler <augie@google.com>
parents:
41786
diff
changeset
|
87 (font-lock-mode -1) |
19979b8b87e2
tests: add test for hg-test-mode emacs code
Augie Fackler <augie@google.com>
parents:
41786
diff
changeset
|
88 (mapc 'hg-test-mode--test-one-error-line-regexp |
19979b8b87e2
tests: add test for hg-test-mode emacs code
Augie Fackler <augie@google.com>
parents:
41786
diff
changeset
|
89 '( |
19979b8b87e2
tests: add test for hg-test-mode emacs code
Augie Fackler <augie@google.com>
parents:
41786
diff
changeset
|
90 ("+ contrib/debugshell.py:37:" 37 "contrib/debugshell.py") |
19979b8b87e2
tests: add test for hg-test-mode emacs code
Augie Fackler <augie@google.com>
parents:
41786
diff
changeset
|
91 ("+ File \"/tmp/hg/mercurial/commands.py\", line 3115, in help_" |
19979b8b87e2
tests: add test for hg-test-mode emacs code
Augie Fackler <augie@google.com>
parents:
41786
diff
changeset
|
92 3115 "/tmp/hg/mercurial/commands.py") |
19979b8b87e2
tests: add test for hg-test-mode emacs code
Augie Fackler <augie@google.com>
parents:
41786
diff
changeset
|
93 ("+ File \"mercurial/dispatch.py\", line 225, in dispatch" |
19979b8b87e2
tests: add test for hg-test-mode emacs code
Augie Fackler <augie@google.com>
parents:
41786
diff
changeset
|
94 225 "mercurial/dispatch.py"))))) |
19979b8b87e2
tests: add test for hg-test-mode emacs code
Augie Fackler <augie@google.com>
parents:
41786
diff
changeset
|
95 |
19979b8b87e2
tests: add test for hg-test-mode emacs code
Augie Fackler <augie@google.com>
parents:
41786
diff
changeset
|
96 |
22081
ed426b011612
contrib: add emacs mode for *.t files
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
97 (provide 'hg-test-mode) |