mirror of
https://git.savannah.gnu.org/git/emacs.git
synced 2025-01-23 18:47:57 +00:00
cperl-mode: Highlight '{$a++ / $b}' correctly
* lisp/progmodes/cperl-mode.el (cperl-find-pods-heres): Recognize {$a++ / $b} correctly as division. (Bug#42168) * test/lisp/progmodes/cperl-mode-tests.el: New file with test verifying the fix.
This commit is contained in:
parent
32cb84974f
commit
f3ff51288f
@ -3979,6 +3979,9 @@ the sections using `cperl-pod-head-face', `cperl-pod-face',
|
||||
(and (eq (preceding-char) ?.)
|
||||
(eq (char-after (- (point) 2)) ?.))
|
||||
(bobp))
|
||||
;; { $a++ / $b } doesn't start a regex, nor does $a--
|
||||
(not (and (memq (preceding-char) '(?+ ?-))
|
||||
(eq (preceding-char) (char-before (1- (point))))))
|
||||
;; m|blah| ? foo : bar;
|
||||
(not
|
||||
(and (eq c ?\?)
|
||||
|
50
test/lisp/progmodes/cperl-mode-tests.el
Normal file
50
test/lisp/progmodes/cperl-mode-tests.el
Normal file
@ -0,0 +1,50 @@
|
||||
;;; cperl-mode-tests --- Test for cperl-mode -*- lexical-binding: t -*-
|
||||
|
||||
;; Copyright (C) 2020 Free Software Foundation, Inc.
|
||||
|
||||
;; Author: Harald Jörg <haj@posteo.de>
|
||||
;; Maintainer: Harald Jörg
|
||||
;; Keywords: internal
|
||||
;; Homepage: https://github.com/HaraldJoerg/cperl-mode
|
||||
|
||||
;;; Commentary:
|
||||
|
||||
;; This is a collection of tests for the fontification of CPerl-mode.
|
||||
|
||||
;; Run these tests interactively:
|
||||
;; (ert-run-tests-interactively '(tag :fontification))
|
||||
|
||||
;;; Code:
|
||||
|
||||
(defun cperl-test-face (text regexp)
|
||||
"Returns the face of the first character matched by REGEXP in TEXT."
|
||||
(interactive)
|
||||
(with-temp-buffer
|
||||
(insert text)
|
||||
(cperl-mode)
|
||||
(font-lock-ensure (point-min) (point-max))
|
||||
(goto-char (point-min))
|
||||
(re-search-forward regexp)
|
||||
(get-text-property (match-beginning 0) 'face)))
|
||||
|
||||
(ert-deftest cperl-mode-test-bug-42168 ()
|
||||
"Verify that '/' is a division after ++ or --, not a regexp.
|
||||
Reported in https://github.com/jrockway/cperl-mode/issues/45.
|
||||
If seen as regular expression, then the slash is displayed using
|
||||
font-lock-constant-face. If seen as a division, then it doesn't
|
||||
have a face property."
|
||||
:tags '(:fontification)
|
||||
;; The next two Perl expressions have divisions. Perl "punctuation"
|
||||
;; operators don't get a face.
|
||||
(let ((code "{ $a++ / $b }"))
|
||||
(should (equal (cperl-test-face code "/" ) nil)))
|
||||
(let ((code "{ $a-- / $b }"))
|
||||
(should (equal (cperl-test-face code "/" ) nil)))
|
||||
;; The next two Perl expressions have regular expressions. The
|
||||
;; delimiter of a RE is fontified with font-lock-constant-face.
|
||||
(let ((code "{ $a+ / $b } # /"))
|
||||
(should (equal (cperl-test-face code "/" ) font-lock-constant-face)))
|
||||
(let ((code "{ $a- / $b } # /"))
|
||||
(should (equal (cperl-test-face code "/" ) font-lock-constant-face))))
|
||||
|
||||
;;; cperl-mode-tests.el ends here
|
Loading…
Reference in New Issue
Block a user