]> git.eshelyaron.com Git - emacs.git/commitdiff
;cperl-mode.el: Avoid false positives when parsing new Perl syntax
authorHarald Jörg <haj@posteo.de>
Thu, 13 Jun 2024 12:34:16 +0000 (14:34 +0200)
committerEshel Yaron <me@eshelyaron.com>
Sat, 15 Jun 2024 17:21:11 +0000 (19:21 +0200)
* lisp/progmodes/cperl-mode.el (cperl--package-for-imenu-rx)
(cperl--class-for-imenu-rx): avoid false positives when collecting
imenu entries
* lisp/progmodes/cperl-mode.el (cperl-init-faces): avoid false
positives when detecting package names

* test/lisp/progmodes/cperl-mode-tests.el
(cperl-test-imenu-index): Add test verifying that $class_false is
not shown as a class _false

* test/lisp/progmodes/cperl-mode-resources/grammar.pl: Add a line
containing a false positive "$class_false"

(cherry picked from commit 39e3c30b514c21854f7fcc87c3a461bd9e81cbdb)

lisp/progmodes/cperl-mode.el
test/lisp/progmodes/cperl-mode-resources/grammar.pl
test/lisp/progmodes/cperl-mode-tests.el

index 1544dcd8a1969e01e909b0eca0ca98a7c207886f..68ad7eda9a73f1b39ad85f0391a1cbc182a3d057 100644 (file)
@@ -1392,7 +1392,7 @@ Contains three groups for the initial keyword \"package\" or
   (defconst cperl--package-for-imenu-rx
     `(sequence symbol-start
                (group-n 1 "package")
-               ,cperl--ws*-rx
+               ,cperl--ws+-rx
                (group-n 2 ,cperl--normal-identifier-rx)
                (optional (sequence ,cperl--ws+-rx
                                    (regexp ,cperl--version-regexp)))
@@ -1408,9 +1408,9 @@ name, and one for the discovery of a following BLOCK.")
   ;; (e.g. ":isa(Parent)") while packages don't.  We skip over it, but
   ;; like for "package" we capture the following ";" or "{".
   (defconst cperl--class-for-imenu-rx
-    `(sequence symbol-start
+    `(sequence (or space line-start)
                (group-n 1 "class")
-               ,cperl--ws*-rx
+               ,cperl--ws+-rx
                (group-n 2 ,cperl--normal-identifier-rx)
                (optional (sequence ,cperl--ws+-rx
                                    (regexp ,cperl--version-regexp)))
@@ -6395,7 +6395,7 @@ functions (which they are not).  Inherits from `default'.")
             ;; -------- various stuff calling for a package name
             ;; (matcher (subexp facespec) (subexp facespec))
             `(,(rx (sequence
-                    (or (sequence symbol-start
+                    (or (sequence (or line-start space "{" )
                                   (or "package" "require" "use" "import"
                                       "no" "bootstrap" "class")
                                   (eval cperl--ws+-rx))
index 14da28b0fd8016be50ff547e33e89c4f4f3c955b..b4d2d7c68e353011c99e26d85eed938ea51ff1c7 100644 (file)
@@ -192,6 +192,9 @@ class Class::Class 0.01 {
     method init_again (@with_parameters) {
        ...;
     }
+
+    # A false positive
+    my $class_false;
 }
 
 =head1 Perl 5.40 brings new stuff
index 7c8cc3931bcbcdb93ee8a0bb3d1b0c1754699b8f..c91253cbebaf971aab28294b04575131b0aacfba 100644 (file)
@@ -977,7 +977,8 @@ created by CPerl mode, so skip it for Perl mode."
                         "With::Readers::auto_reader"
                         "With::Readers::named")))
         (dolist (sub expected)
-          (should (assoc-string sub index)))))))
+          (should (assoc-string sub index))))
+      (should-not (assoc-string "_false" index)))))
 
 ;;; Tests for issues reported in the Bug Tracker