Skip to content

Commit 0de149a

Browse files
authored
Merge pull request #190 from mrBliss/imenu-extern
Recognize "extern" imenu items
2 parents 8039d12 + b8126e4 commit 0de149a

File tree

2 files changed

+43
-0
lines changed

2 files changed

+43
-0
lines changed

rust-mode-tests.el

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
(require 'rust-mode)
44
(require 'ert)
55
(require 'cl)
6+
(require 'imenu)
67

78
(setq rust-test-fill-column 32)
89

@@ -2614,6 +2615,45 @@ Fontification needs to include this whole string or none of it.
26142615
(rust--after-revert-hook)
26152616
(should (equal initial-point (point))))))
26162617

2618+
(defun test-imenu (code expected-items)
2619+
(with-temp-buffer
2620+
(rust-mode)
2621+
(insert code)
2622+
(let ((actual-items
2623+
;; Replace ("item" . #<marker at ? in ?.rs) with "item"
2624+
(mapcar (lambda (class)
2625+
(cons (car class)
2626+
(mapcar #'car (cdr class))))
2627+
(imenu--generic-function rust-imenu-generic-expression))))
2628+
(should (equal expected-items actual-items)))))
2629+
2630+
(ert-deftest rust-test-imenu-extern-unsafe-fn ()
2631+
(test-imenu
2632+
"
2633+
fn one() {
2634+
}
2635+
2636+
unsafe fn two() {
2637+
}
2638+
2639+
extern \"C\" fn three() {
2640+
}
2641+
2642+
pub extern fn four() {
2643+
2644+
}
2645+
2646+
extern \"rust-intrinsic\" fn five() {
2647+
2648+
}
2649+
"
2650+
'(("Fn"
2651+
"one"
2652+
"two"
2653+
"three"
2654+
"four"
2655+
"five"))))
2656+
26172657
;; If electric-pair-mode is available, load it and run the tests that use it. If not,
26182658
;; no error--the tests will be skipped.
26192659
(require 'elec-pair nil t)

rust-mode.el

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@
3333
(defconst rust-re-uc-ident "[[:upper:]][[:word:][:multibyte:]_[:digit:]]*")
3434
(defconst rust-re-vis "pub")
3535
(defconst rust-re-unsafe "unsafe")
36+
(defconst rust-re-extern "extern")
3637

3738
(defconst rust-re-non-standard-string
3839
(rx
@@ -571,6 +572,8 @@ buffer."
571572
(concat "^[[:space:]]*"
572573
(rust-re-shy (concat (rust-re-word rust-re-vis) "[[:space:]]+")) "?"
573574
(rust-re-shy (concat (rust-re-word rust-re-unsafe) "[[:space:]]+")) "?"
575+
(rust-re-shy (concat (rust-re-word rust-re-extern) "[[:space:]]+"
576+
(rust-re-shy "\"[^\"]+\"[[:space:]]+") "?")) "?"
574577
(rust-re-item-def itype)))
575578

576579
(defconst rust-re-special-types (regexp-opt rust-special-types 'symbols))

0 commit comments

Comments
 (0)