Mercurial > hg
annotate contrib/hg-test-mode.el @ 43069:e554cfd93975
hgweb: use importlib.reload() if available
reload() was nuked in Python 3. We need to use importlib.reload()
instead.
But pyflakes isn't smart enough to detect our conditional usage, so
we allow this error.
Differential Revision: https://phab.mercurial-scm.org/D6992
author | Gregory Szorc <gregory.szorc@gmail.com> |
---|---|
date | Sat, 05 Oct 2019 17:44:54 -0400 |
parents | 19979b8b87e2 |
children | d4ba4d51f85f |
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 ;; |
ed426b011612
contrib: add emacs mode for *.t files
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
3 ;; Copyright 2014 Matt Mackall <mpm@selenic.com> |
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) |