Mercurial > hg
annotate contrib/hg-test-mode.el @ 45117:b1e51ef4e536
phases: sparsify phase lists
When the internal and archived phase was added, allphase became a large,
sparsely populated list. This dramatically increased the number of
lookup operations for public relations in `phasecache.phase`. As a first
step, define allphases and related lists explicitly to contain only the
actual phases. Make phasenames a dictionary and create corresponding
dictionaries for mapping phase names back to numbers. Adjust various
list to be sparse as well with the exception of phaseroots and phasesets
members of phasecache. Keep those as a separate step as it involves
changes to the C module.
Differential Revision: https://phab.mercurial-scm.org/D8697
author | Joerg Sonnenberger <joerg@bec.de> |
---|---|
date | Wed, 08 Jul 2020 00:15:15 +0200 |
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) |