unofficial mirror of bug-gnu-emacs@gnu.org 
 help / color / mirror / code / Atom feed
* bug#49906: perl-mode: variables that conflict with keywords aren't fontified properly
@ 2021-08-06  3:25 Tomasz Konojacki
  2021-08-06  6:37 ` Tomasz Konojacki
  0 siblings, 1 reply; 12+ messages in thread
From: Tomasz Konojacki @ 2021-08-06  3:25 UTC (permalink / raw)
  To: 49906

For example, "$package" is fontified like a keyword.







^ permalink raw reply	[flat|nested] 12+ messages in thread

* bug#49906: perl-mode: variables that conflict with keywords aren't fontified properly
  2021-08-06  3:25 bug#49906: perl-mode: variables that conflict with keywords aren't fontified properly Tomasz Konojacki
@ 2021-08-06  6:37 ` Tomasz Konojacki
  2021-08-06 11:00   ` Lars Ingebrigtsen
  0 siblings, 1 reply; 12+ messages in thread
From: Tomasz Konojacki @ 2021-08-06  6:37 UTC (permalink / raw)
  To: 49906

[-- Attachment #1: Type: text/plain, Size: 166 bytes --]

On Fri, 06 Aug 2021 05:25:30 +0200
Tomasz Konojacki <me@xenu.pl> wrote:

> For example, "$package" is fontified like a keyword.

The attached patch fixes the problem.

[-- Attachment #2: 0001-perl-mode-fix-variable-fontification.patch --]
[-- Type: application/octet-stream, Size: 2440 bytes --]

From 429f002c619b3d7efd2928dba14cd23e0f381955 Mon Sep 17 00:00:00 2001
From: Tomasz Konojacki <me@xenu.pl>
Date: Fri, 6 Aug 2021 08:34:09 +0200
Subject: [PATCH] perl-mode: fix variable fontification

* lisp/progmodes/perl-mode.el: handle variables first to avoid
conflicting with keywords. This fixes cases like "$package".
cl-lib has to be required at runtime, because cl-concatenate isn't a
macro. (bug#49906)
---
 lisp/progmodes/perl-mode.el | 22 +++++++++++-----------
 1 file changed, 11 insertions(+), 11 deletions(-)

diff --git a/lisp/progmodes/perl-mode.el b/lisp/progmodes/perl-mode.el
index f49ee4cb2b..281f106776 100644
--- a/lisp/progmodes/perl-mode.el
+++ b/lisp/progmodes/perl-mode.el
@@ -87,7 +87,7 @@
 
 ;;; Code:
 
-(eval-when-compile (require 'cl-lib))
+(require 'cl-lib)
 
 (defgroup perl nil
   "Major mode for editing Perl code."
@@ -177,7 +177,16 @@
   "Subdued level highlighting for Perl mode.")
 
 (defconst perl-font-lock-keywords-2
-  (append
+  (cl-concatenate
+   'list
+   '(;; Fontify function, variable and file name references. They have to be
+     ;; handled first because they might conflict with keywords.
+     ("&\\(\\sw+\\(::\\sw+\\)*\\)" 1 font-lock-function-name-face)
+     ;; Additionally fontify non-scalar variables.  `perl-non-scalar-variable'
+     ;; will underline them by default.
+     ("[$*]{?\\(\\sw+\\(::\\sw+\\)*\\)" 1 font-lock-variable-name-face)
+     ("\\([@%]\\|\\$#\\)\\(\\sw+\\(::\\sw+\\)*\\)"
+      (2 'perl-non-scalar-variable)))
    perl-font-lock-keywords-1
    `( ;; Fontify keywords, except those fontified otherwise.
      ,(concat "\\<"
@@ -188,15 +197,6 @@
      ;;
      ;; Fontify declarators and prefixes as types.
      ("\\<\\(has\\|local\\|my\\|our\\|state\\)\\>" . font-lock-keyword-face) ; declarators
-          ;;
-     ;; Fontify function, variable and file name references.
-     ("&\\(\\sw+\\(::\\sw+\\)*\\)" 1 font-lock-function-name-face)
-     ;; Additionally fontify non-scalar variables.  `perl-non-scalar-variable'
-     ;; will underline them by default.
-     ;;'("[$@%*][#{]?\\(\\sw+\\)" 1 font-lock-variable-name-face)
-     ("[$*]{?\\(\\sw+\\(::\\sw+\\)*\\)" 1 font-lock-variable-name-face)
-     ("\\([@%]\\|\\$#\\)\\(\\sw+\\(::\\sw+\\)*\\)"
-      (2 'perl-non-scalar-variable))
      ("<\\(\\sw+\\)>" 1 font-lock-constant-face)
      ;;
      ;; Fontify keywords with/and labels as we do in `c++-font-lock-keywords'.
-- 
2.27.0.windows.1


^ permalink raw reply related	[flat|nested] 12+ messages in thread

* bug#49906: perl-mode: variables that conflict with keywords aren't fontified properly
  2021-08-06  6:37 ` Tomasz Konojacki
@ 2021-08-06 11:00   ` Lars Ingebrigtsen
  2021-08-06 12:06     ` Tomasz Konojacki
  0 siblings, 1 reply; 12+ messages in thread
From: Lars Ingebrigtsen @ 2021-08-06 11:00 UTC (permalink / raw)
  To: Tomasz Konojacki; +Cc: 49906

Tomasz Konojacki <me@xenu.pl> writes:

>> For example, "$package" is fontified like a keyword.

In what context, and in which Emacs version?

$package = foo;

is fontified like a variable in Emacs 28.

>  (defconst perl-font-lock-keywords-2
> -  (append
> +  (cl-concatenate
> +   'list

Any particular reason to change from append to cl-concatenate here?

-- 
(domestic pets only, the antidote for overdose, milk.)
   bloggy blog: http://lars.ingebrigtsen.no





^ permalink raw reply	[flat|nested] 12+ messages in thread

* bug#49906: perl-mode: variables that conflict with keywords aren't fontified properly
  2021-08-06 11:00   ` Lars Ingebrigtsen
@ 2021-08-06 12:06     ` Tomasz Konojacki
  2021-08-06 12:10       ` Tomasz Konojacki
  2021-08-07  9:10       ` Lars Ingebrigtsen
  0 siblings, 2 replies; 12+ messages in thread
From: Tomasz Konojacki @ 2021-08-06 12:06 UTC (permalink / raw)
  To: 49906

[-- Attachment #1: Type: text/plain, Size: 575 bytes --]

On Fri, 06 Aug 2021 13:00:30 +0200
Lars Ingebrigtsen <larsi@gnus.org> wrote:

> Tomasz Konojacki <me@xenu.pl> writes:
> 
> >> For example, "$package" is fontified like a keyword.
> 
> In what context, and in which Emacs version?
> 
> $package = foo;
> 
> is fontified like a variable in Emacs 28.

See the attached screenshot. Are you sure you aren't using cperl-mode?

> >  (defconst perl-font-lock-keywords-2
> > -  (append
> > +  (cl-concatenate
> > +   'list
> 
> Any particular reason to change from append to cl-concatenate here?

Because I'm concatenating three lists.

[-- Attachment #2: screenshot.png --]
[-- Type: image/png, Size: 43053 bytes --]

^ permalink raw reply	[flat|nested] 12+ messages in thread

* bug#49906: perl-mode: variables that conflict with keywords aren't fontified properly
  2021-08-06 12:06     ` Tomasz Konojacki
@ 2021-08-06 12:10       ` Tomasz Konojacki
  2021-08-07  9:10       ` Lars Ingebrigtsen
  1 sibling, 0 replies; 12+ messages in thread
From: Tomasz Konojacki @ 2021-08-06 12:10 UTC (permalink / raw)
  To: 49906

[-- Attachment #1: Type: text/plain, Size: 201 bytes --]

On Fri, 06 Aug 2021 14:06:33 +0200
Tomasz Konojacki <me@xenu.pl> wrote:

> See the attached screenshot. Are you sure you aren't using cperl-mode?

Oops, a corrected screenshot is attached to this post.

[-- Attachment #2: screenshot2.png --]
[-- Type: image/png, Size: 44536 bytes --]

^ permalink raw reply	[flat|nested] 12+ messages in thread

* bug#49906: perl-mode: variables that conflict with keywords aren't fontified properly
  2021-08-06 12:06     ` Tomasz Konojacki
  2021-08-06 12:10       ` Tomasz Konojacki
@ 2021-08-07  9:10       ` Lars Ingebrigtsen
  2021-08-07  9:13         ` Lars Ingebrigtsen
  2021-08-07  9:33         ` Tomasz Konojacki
  1 sibling, 2 replies; 12+ messages in thread
From: Lars Ingebrigtsen @ 2021-08-07  9:10 UTC (permalink / raw)
  To: Tomasz Konojacki; +Cc: 49906

[-- Attachment #1: Type: text/plain, Size: 119 bytes --]

Tomasz Konojacki <me@xenu.pl> writes:

> See the attached screenshot. Are you sure you aren't using cperl-mode?

Yup:


[-- Attachment #2: Type: image/png, Size: 55182 bytes --]

[-- Attachment #3: Type: text/plain, Size: 356 bytes --]


What Emacs version are you using?

>> Any particular reason to change from append to cl-concatenate here?
>
> Because I'm concatenating three lists.

You can concatenate any number of lists with append, so I don't quite
understand what you mean here.

-- 
(domestic pets only, the antidote for overdose, milk.)
   bloggy blog: http://lars.ingebrigtsen.no

^ permalink raw reply	[flat|nested] 12+ messages in thread

* bug#49906: perl-mode: variables that conflict with keywords aren't fontified properly
  2021-08-07  9:10       ` Lars Ingebrigtsen
@ 2021-08-07  9:13         ` Lars Ingebrigtsen
  2021-08-07  9:33         ` Tomasz Konojacki
  1 sibling, 0 replies; 12+ messages in thread
From: Lars Ingebrigtsen @ 2021-08-07  9:13 UTC (permalink / raw)
  To: Tomasz Konojacki; +Cc: 49906

Lars Ingebrigtsen <larsi@gnus.org> writes:

>> See the attached screenshot. Are you sure you aren't using cperl-mode?
>
> Yup:

Oops.  That sure wasn't cperl-mode -- it was python mode instead.  :-/

Yes, with perl-mode I'm able to reproduce the problem.

-- 
(domestic pets only, the antidote for overdose, milk.)
   bloggy blog: http://lars.ingebrigtsen.no





^ permalink raw reply	[flat|nested] 12+ messages in thread

* bug#49906: perl-mode: variables that conflict with keywords aren't fontified properly
  2021-08-07  9:10       ` Lars Ingebrigtsen
  2021-08-07  9:13         ` Lars Ingebrigtsen
@ 2021-08-07  9:33         ` Tomasz Konojacki
  2021-08-07 10:37           ` Lars Ingebrigtsen
  1 sibling, 1 reply; 12+ messages in thread
From: Tomasz Konojacki @ 2021-08-07  9:33 UTC (permalink / raw)
  To: 49906

[-- Attachment #1: Type: text/plain, Size: 572 bytes --]

On Sat, 07 Aug 2021 11:10:43 +0200
Lars Ingebrigtsen <larsi@gnus.org> wrote:

> You can concatenate any number of lists with append, so I don't quite
> understand what you mean here.

You're right, I was confused. I was under the wrong impression that
append takes only two arguments. It was probably caused by the combination
of reading a tutorial[1] instead of the real documentation and
struggling with unrelated syntax errors. Obviously, I'm an elisp
beginner.

A revised patch is attached.

[1] - https://www.gnu.org/software/emacs/manual/html_node/eintr/append.html

[-- Attachment #2: 0001-perl-mode-fix-variable-fontification.patch --]
[-- Type: application/octet-stream, Size: 2128 bytes --]

From 79e3adb5d2958fbe76a5f03e6fd8fa9e78cb8a42 Mon Sep 17 00:00:00 2001
From: Tomasz Konojacki <me@xenu.pl>
Date: Sat, 7 Aug 2021 11:23:37 +0200
Subject: [PATCH] perl-mode: fix variable fontification

* lisp/progmodes/perl-mode.el: handle variables first to avoid
conflicting with keywords. This fixes cases like "$package".
(bug#49906)
---
 lisp/progmodes/perl-mode.el | 17 ++++++++---------
 1 file changed, 8 insertions(+), 9 deletions(-)

diff --git a/lisp/progmodes/perl-mode.el b/lisp/progmodes/perl-mode.el
index f49ee4cb2b..4e14c30bc5 100644
--- a/lisp/progmodes/perl-mode.el
+++ b/lisp/progmodes/perl-mode.el
@@ -178,6 +178,14 @@
 
 (defconst perl-font-lock-keywords-2
   (append
+   '(;; Fontify function, variable and file name references. They have to be
+     ;; handled first because they might conflict with keywords.
+     ("&\\(\\sw+\\(::\\sw+\\)*\\)" 1 font-lock-function-name-face)
+     ;; Additionally fontify non-scalar variables.  `perl-non-scalar-variable'
+     ;; will underline them by default.
+     ("[$*]{?\\(\\sw+\\(::\\sw+\\)*\\)" 1 font-lock-variable-name-face)
+     ("\\([@%]\\|\\$#\\)\\(\\sw+\\(::\\sw+\\)*\\)"
+      (2 'perl-non-scalar-variable)))
    perl-font-lock-keywords-1
    `( ;; Fontify keywords, except those fontified otherwise.
      ,(concat "\\<"
@@ -188,15 +196,6 @@
      ;;
      ;; Fontify declarators and prefixes as types.
      ("\\<\\(has\\|local\\|my\\|our\\|state\\)\\>" . font-lock-keyword-face) ; declarators
-          ;;
-     ;; Fontify function, variable and file name references.
-     ("&\\(\\sw+\\(::\\sw+\\)*\\)" 1 font-lock-function-name-face)
-     ;; Additionally fontify non-scalar variables.  `perl-non-scalar-variable'
-     ;; will underline them by default.
-     ;;'("[$@%*][#{]?\\(\\sw+\\)" 1 font-lock-variable-name-face)
-     ("[$*]{?\\(\\sw+\\(::\\sw+\\)*\\)" 1 font-lock-variable-name-face)
-     ("\\([@%]\\|\\$#\\)\\(\\sw+\\(::\\sw+\\)*\\)"
-      (2 'perl-non-scalar-variable))
      ("<\\(\\sw+\\)>" 1 font-lock-constant-face)
      ;;
      ;; Fontify keywords with/and labels as we do in `c++-font-lock-keywords'.
-- 
2.27.0.windows.1


^ permalink raw reply related	[flat|nested] 12+ messages in thread

* bug#49906: perl-mode: variables that conflict with keywords aren't fontified properly
  2021-08-07  9:33         ` Tomasz Konojacki
@ 2021-08-07 10:37           ` Lars Ingebrigtsen
  2021-08-07 11:09             ` Tomasz Konojacki
  0 siblings, 1 reply; 12+ messages in thread
From: Lars Ingebrigtsen @ 2021-08-07 10:37 UTC (permalink / raw)
  To: Tomasz Konojacki; +Cc: 49906

Tomasz Konojacki <me@xenu.pl> writes:

> A revised patch is attached.

Thanks; looks good to me (and the test cases seem to work fine), so I've
pushed it to Emacs 28.

This change was small enough to apply without assigning copyright to the
FSF, but for future patches you want to submit, it might make sense to
get the paperwork started now, so that subsequent patches can be applied
speedily. Would you be willing to sign such paperwork?

-- 
(domestic pets only, the antidote for overdose, milk.)
   bloggy blog: http://lars.ingebrigtsen.no





^ permalink raw reply	[flat|nested] 12+ messages in thread

* bug#49906: perl-mode: variables that conflict with keywords aren't fontified properly
  2021-08-07 10:37           ` Lars Ingebrigtsen
@ 2021-08-07 11:09             ` Tomasz Konojacki
  2021-08-07 11:16               ` Lars Ingebrigtsen
  0 siblings, 1 reply; 12+ messages in thread
From: Tomasz Konojacki @ 2021-08-07 11:09 UTC (permalink / raw)
  To: 49906

On Sat, 07 Aug 2021 12:37:00 +0200
Lars Ingebrigtsen <larsi@gnus.org> wrote:

> This change was small enough to apply without assigning copyright to the
> FSF, but for future patches you want to submit, it might make sense to
> get the paperwork started now, so that subsequent patches can be applied
> speedily. Would you be willing to sign such paperwork?

Sure, I'd appreciate it if you could send me the forms.






^ permalink raw reply	[flat|nested] 12+ messages in thread

* bug#49906: perl-mode: variables that conflict with keywords aren't fontified properly
  2021-08-07 11:09             ` Tomasz Konojacki
@ 2021-08-07 11:16               ` Lars Ingebrigtsen
  2021-08-07 11:33                 ` Tomasz Konojacki
  0 siblings, 1 reply; 12+ messages in thread
From: Lars Ingebrigtsen @ 2021-08-07 11:16 UTC (permalink / raw)
  To: Tomasz Konojacki; +Cc: 49906

Tomasz Konojacki <me@xenu.pl> writes:

> Sure, I'd appreciate it if you could send me the forms.

Great; here's the form to get started:

Please email the following information to assign@gnu.org, and we
will send you the assignment form for your past and future changes.

Please use your full legal name (in ASCII characters) as the subject
line of the message.
----------------------------------------------------------------------
REQUEST: SEND FORM FOR PAST AND FUTURE CHANGES

[What is the name of the program or package you're contributing to?]
Emacs

[Did you copy any files or text written by someone else in these changes?
Even if that material is free software, we need to know about it.]

[Do you have an employer who might have a basis to claim to own
your changes?  Do you attend a school which might make such a claim?]

[For the copyright registration, what country are you a citizen of?]

[What year were you born?]

[Please write your email address here.]

[Please write your postal address here.]

[Which files have you changed so far, and which new files have you written
so far?]





^ permalink raw reply	[flat|nested] 12+ messages in thread

* bug#49906: perl-mode: variables that conflict with keywords aren't fontified properly
  2021-08-07 11:16               ` Lars Ingebrigtsen
@ 2021-08-07 11:33                 ` Tomasz Konojacki
  0 siblings, 0 replies; 12+ messages in thread
From: Tomasz Konojacki @ 2021-08-07 11:33 UTC (permalink / raw)
  To: 49906

On Sat, 07 Aug 2021 13:16:09 +0200
Lars Ingebrigtsen <larsi@gnus.org> wrote:

> Great; here's the form to get started:
> 
> Please email the following information to assign@gnu.org, and we
> will send you the assignment form for your past and future changes.

Done, thank you!





^ permalink raw reply	[flat|nested] 12+ messages in thread

end of thread, other threads:[~2021-08-07 11:33 UTC | newest]

Thread overview: 12+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-08-06  3:25 bug#49906: perl-mode: variables that conflict with keywords aren't fontified properly Tomasz Konojacki
2021-08-06  6:37 ` Tomasz Konojacki
2021-08-06 11:00   ` Lars Ingebrigtsen
2021-08-06 12:06     ` Tomasz Konojacki
2021-08-06 12:10       ` Tomasz Konojacki
2021-08-07  9:10       ` Lars Ingebrigtsen
2021-08-07  9:13         ` Lars Ingebrigtsen
2021-08-07  9:33         ` Tomasz Konojacki
2021-08-07 10:37           ` Lars Ingebrigtsen
2021-08-07 11:09             ` Tomasz Konojacki
2021-08-07 11:16               ` Lars Ingebrigtsen
2021-08-07 11:33                 ` Tomasz Konojacki

Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).