GNU bug report logs - #49733
27.2; Syntax Highlighting (Bash) Issue

Previous Next

Package: emacs;

Reported by: "[" <mwkazban <at> gmail.com>

Date: Sun, 25 Jul 2021 15:36:01 UTC

Severity: minor

Found in version 27.2

To reply to this bug, email your comments to 49733 AT debbugs.gnu.org.

Toggle the display of automated, internal messages from the tracker.

View this report as an mbox folder, status mbox, maintainer mbox


Report forwarded to bug-gnu-emacs <at> gnu.org:
bug#49733; Package emacs. (Sun, 25 Jul 2021 15:36:01 GMT) Full text and rfc822 format available.

Acknowledgement sent to "[" <mwkazban <at> gmail.com>:
New bug report received and forwarded. Copy sent to bug-gnu-emacs <at> gnu.org. (Sun, 25 Jul 2021 15:36:02 GMT) Full text and rfc822 format available.

Message #5 received at submit <at> debbugs.gnu.org (full text, mbox):

From: "[" <mwkazban <at> gmail.com>
To: bug-gnu-emacs <at> gnu.org
Subject: 27.2; Syntax Highlighting (Bash) Issue
Date: Sun, 25 Jul 2021 09:02:22 -0400
[Message part 1 (text/plain, inline)]
I could not find any report of this issue in the GNU Bug Tracker or the
PROBLEMS file, but I apologize if maybe syntax highlighting errors do not
count as bugs.

That said, emacs on my machine at least seems to have an issue with
string literals in Bash. I have attached an image of the text below so
that the color can be represented. However, an example of faulty
highlighting in text is:

#!/bin/bash
partiallyquotedword=$'hello\''
echo "$partiallyquotedword"
partialword=$'hello\''
echo "$partialword"
echo sample text
echo hi\'
echo highlighting finished

The above will, from the escaped single quote in the second line,
be highlighted as a string until
the next single quote. That is, the final line of the provided example text
is correctly not treated as part of a string.

To be more concise, (my version of)
emacs does not seem to treat an
escaped single quote in a string literal as actually being escaped,
though this works in Bash.

(Build and system information below)

In GNU Emacs 27.2 (build 1, x86_64-pc-linux-gnu, GTK+ Version 3.24.27,
cairo version 1.17.4)
 of 2021-03-26 built on orion
System Description: Artix Linux

Recent messages:
For information about GNU Emacs and the GNU system, type C-h C-a.

Configured using:
 'configure --prefix=/usr --sysconfdir=/etc --libexecdir=/usr/lib
 --localstatedir=/var --with-x-toolkit=gtk3 --with-xft --with-wide-int
 --with-modules --with-cairo --with-harfbuzz 'CFLAGS=-march=x86-64
 -mtune=generic -O2 -pipe -fno-plt' CPPFLAGS=-D_FORTIFY_SOURCE=2
 LDFLAGS=-Wl,-O1,--sort-common,--as-needed,-z,relro,-z,now'

Configured features:
XPM JPEG TIFF GIF PNG RSVG CAIRO SOUND GPM DBUS GSETTINGS GLIB NOTIFY
INOTIFY ACL GNUTLS LIBXML2 FREETYPE HARFBUZZ M17N_FLT LIBOTF ZLIB
TOOLKIT_SCROLL_BARS GTK3 X11 XDBE XIM MODULES THREADS LIBSYSTEMD JSON
PDUMPER LCMS2 GMP

Important settings:
  value of $LC_MONETARY: en_US.UTF-8
  value of $LC_NUMERIC: en_US.UTF-8
  value of $LC_TIME: en_US.UTF-8
  value of $LANG: en_US.UTF-8
  value of $XMODIFIERS: @im=fcitx
  locale-coding-system: utf-8-unix

Major mode: Fundamental

Minor modes in effect:
  tooltip-mode: t
  global-eldoc-mode: t
  mouse-wheel-mode: t
  tool-bar-mode: t
  menu-bar-mode: t
  file-name-shadow-mode: t
  global-font-lock-mode: t
  auto-composition-mode: t
  auto-encryption-mode: t
  auto-compression-mode: t
  buffer-read-only: t
  line-number-mode: t
  transient-mark-mode: t

Load-path shadows:
None found.

Features:
(shadow sort mail-extr emacsbug message rmc puny dired dired-loaddefs
format-spec rfc822 mml easymenu mml-sec password-cache epa derived epg
epg-config gnus-util rmail rmail-loaddefs text-property-search time-date
subr-x seq mm-decode mm-bodies mm-encode mail-parse rfc2231 mailabbrev
gmm-utils mailheader cl-loaddefs cl-lib sendmail rfc2047 rfc2045
ietf-drums mm-util mail-prsvr mail-utils term/xterm xterm byte-opt gv
bytecomp byte-compile cconv tooltip eldoc electric uniquify ediff-hook
vc-hooks lisp-float-type mwheel term/x-win x-win term/common-win x-dnd
tool-bar dnd fontset image regexp-opt fringe tabulated-list replace
newcomment text-mode elisp-mode lisp-mode prog-mode register page
tab-bar menu-bar rfn-eshadow isearch timer select scroll-bar mouse
jit-lock font-lock syntax facemenu font-core term/tty-colors frame
minibuffer cl-generic cham georgian utf-8-lang misc-lang vietnamese
tibetan thai tai-viet lao korean japanese eucjp-ms cp51932 hebrew greek
romanian slovak czech european ethiopic indian cyrillic chinese
composite charscript charprop case-table epa-hook jka-cmpr-hook help
simple abbrev obarray cl-preloaded nadvice loaddefs button faces
cus-face macroexp files text-properties overlay sha1 md5 base64 format
env code-pages mule custom widget hashtable-print-readable backquote
threads dbusbind inotify lcms2 dynamic-setting system-font-setting
font-render-setting cairo move-toolbar gtk x-toolkit x multi-tty
make-network-process emacs)

Memory information:
((conses 16 49841 8635)
 (symbols 48 6117 1)
 (strings 32 15752 1794)
 (string-bytes 1 506502)
 (vectors 16 8128)
 (vector-slots 8 83328 7170)
 (floats 8 22 271)
 (intervals 56 191 0)
 (buffers 1000 12))
[Message part 2 (text/html, inline)]
[Screenshot_20210725_085230.png (image/png, attachment)]

Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#49733; Package emacs. (Mon, 26 Jul 2021 18:33:01 GMT) Full text and rfc822 format available.

Message #8 received at 49733 <at> debbugs.gnu.org (full text, mbox):

From: Lars Ingebrigtsen <larsi <at> gnus.org>
To: "[" <mwkazban <at> gmail.com>
Cc: 49733 <at> debbugs.gnu.org
Subject: Re: bug#49733: 27.2; Syntax Highlighting (Bash) Issue
Date: Mon, 26 Jul 2021 20:32:38 +0200
"[" <mwkazban <at> gmail.com> writes:

> To be more concise, (my version of) 
> emacs does not seem to treat an
> escaped single quote in a string literal as actually being escaped,
> though this works in Bash.

I think it looks like the mode doesn't know about the $'foo' construct,
which allows quoting single quotes (while the normal 'foo' doesn't)?

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




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#49733; Package emacs. (Sat, 18 Sep 2021 20:56:02 GMT) Full text and rfc822 format available.

Message #11 received at 49733 <at> debbugs.gnu.org (full text, mbox):

From: Daniel Fleischer <danflscr <at> gmail.com>
To: Lars Ingebrigtsen <larsi <at> gnus.org>
Cc: "\[" <mwkazban <at> gmail.com>, 49733 <at> debbugs.gnu.org
Subject: Re: bug#49733: 27.2; Syntax Highlighting (Bash) Issue
Date: Sat, 18 Sep 2021 23:55:22 +0300
Lars Ingebrigtsen [2021-07-26 Mon 20:32] wrote:

> "[" <mwkazban <at> gmail.com> writes:
>
>> To be more concise, (my version of) 
>> emacs does not seem to treat an
>> escaped single quote in a string literal as actually being escaped,
>> though this works in Bash.
>
> I think it looks like the mode doesn't know about the $'foo' construct,
> which allows quoting single quotes (while the normal 'foo' doesn't)?

There is special font-locking treatment for '...' strings that assumes
they don't have escaped characters. It's correct however there are the
$'...' constructs which allow escaped-characters expansion which is not
implemented as seen by OP.

Instead of dealing with these two types how about we just fontify '...'
always by removing the restriction:

diff --git a/lisp/progmodes/sh-script.el b/lisp/progmodes/sh-script.el
index cccd70f06c..e5f8a3755f 100644
--- a/lisp/progmodes/sh-script.el
+++ b/lisp/progmodes/sh-script.el
@@ -1070,8 +1070,6 @@ sh-syntax-propertize-function
     ;; (e.g. `foo(#q/)' and `(#b)foo' in zsh)
     ("[^|&;<>(`\\\"' \t\n](\\(#+\\)" (1 "_"))
     ("(\\(#\\)[^)]+?)[^|&;<>)`\\\"' \t\n]" (1 "_"))
-    ;; In a '...' the backslash is not escaping.
-    ("\\(\\\\\\)'" (1 (sh-font-lock-backslash-quote)))
     ;; Make sure $@ and $? are correctly recognized as sexps.
     ("\\$\\([?@]\\)" (1 "_"))
     ;; Distinguish the special close-paren in `case'.

-- 

Daniel Fleischer




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#49733; Package emacs. (Sun, 19 Sep 2021 15:09:01 GMT) Full text and rfc822 format available.

Message #14 received at 49733 <at> debbugs.gnu.org (full text, mbox):

From: Lars Ingebrigtsen <larsi <at> gnus.org>
To: Daniel Fleischer <danflscr <at> gmail.com>
Cc: "\[" <mwkazban <at> gmail.com>, 49733 <at> debbugs.gnu.org
Subject: Re: bug#49733: 27.2; Syntax Highlighting (Bash) Issue
Date: Sun, 19 Sep 2021 17:08:00 +0200
[Message part 1 (text/plain, inline)]
Daniel Fleischer <danflscr <at> gmail.com> writes:

> Instead of dealing with these two types how about we just fontify '...'
> always by removing the restriction:

But that makes this fontify

echo 'foo\'bar'

[Message part 2 (image/png, inline)]
[Message part 3 (text/plain, inline)]
i.e., as if it's one string, which is what that code is trying to fix. 

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

This bug report was last modified 2 years and 228 days ago.

Previous Next


GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson.