unofficial mirror of bug-gnu-emacs@gnu.org 
 help / color / mirror / code / Atom feed
* bug#52496: syntax highlighting problem on emacs shell-script mode
@ 2021-12-15  0:35 Yilkal Argaw
  2021-12-19 12:54 ` Lars Ingebrigtsen
  0 siblings, 1 reply; 11+ messages in thread
From: Yilkal Argaw @ 2021-12-15  0:35 UTC (permalink / raw)
  To: 52496

I don't know exactly how to explain it but emacs comments most of a
script if the script contains too many long strings. As an example
look at the syntax highlighting of the script at
https://gitlab.com/uppercat/tlbx/-/raw/master/tlbx and compare the
syntax highlighting for it in vim and emacs.





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

* bug#52496: syntax highlighting problem on emacs shell-script mode
  2021-12-15  0:35 bug#52496: syntax highlighting problem on emacs shell-script mode Yilkal Argaw
@ 2021-12-19 12:54 ` Lars Ingebrigtsen
  2021-12-19 13:30   ` Andreas Schwab
       [not found]   ` <CAJddU=rbKWaPHBmxAGz-bM4TsziYPOoC5tOJMKpybWOE-GJEPA@mail.gmail.com>
  0 siblings, 2 replies; 11+ messages in thread
From: Lars Ingebrigtsen @ 2021-12-19 12:54 UTC (permalink / raw)
  To: Yilkal Argaw; +Cc: 52496

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

Yilkal Argaw <yilkalargawworkneh@gmail.com> writes:

> I don't know exactly how to explain it but emacs comments most of a
> script if the script contains too many long strings. As an example
> look at the syntax highlighting of the script at
> https://gitlab.com/uppercat/tlbx/-/raw/master/tlbx and compare the
> syntax highlighting for it in vim and emacs.

You don't say what Emacs version this is with, or which parts you think
Emacs is displaying wrong.  Is it the heredoc thing that's wrong, or
something else in addition?


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

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


It seems like sh-mode isn't interpreting that "@" as the end of the
heredoc.

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

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

* bug#52496: syntax highlighting problem on emacs shell-script mode
  2021-12-19 12:54 ` Lars Ingebrigtsen
@ 2021-12-19 13:30   ` Andreas Schwab
  2021-12-19 13:33     ` Lars Ingebrigtsen
       [not found]   ` <CAJddU=rbKWaPHBmxAGz-bM4TsziYPOoC5tOJMKpybWOE-GJEPA@mail.gmail.com>
  1 sibling, 1 reply; 11+ messages in thread
From: Andreas Schwab @ 2021-12-19 13:30 UTC (permalink / raw)
  To: Lars Ingebrigtsen; +Cc: 52496, Yilkal Argaw

On Dez 19 2021, Lars Ingebrigtsen wrote:

> It seems like sh-mode isn't interpreting that "@" as the end of the
> heredoc.

ELISP> (let ((s " <<- @\n")) (string-match sh-here-doc-open-re s) (match-string 1 s))
"-"
ELISP> (let ((s " <<- EOF\n")) (string-match sh-here-doc-open-re s) (match-string 1 s))
"EOF"

-- 
Andreas Schwab, schwab@linux-m68k.org
GPG Key fingerprint = 7578 EB47 D4E5 4D69 2510  2552 DF73 E780 A9DA AEC1
"And now for something completely different."





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

* bug#52496: syntax highlighting problem on emacs shell-script mode
  2021-12-19 13:30   ` Andreas Schwab
@ 2021-12-19 13:33     ` Lars Ingebrigtsen
  2021-12-19 13:57       ` Andreas Schwab
  0 siblings, 1 reply; 11+ messages in thread
From: Lars Ingebrigtsen @ 2021-12-19 13:33 UTC (permalink / raw)
  To: Andreas Schwab; +Cc: 52496, Yilkal Argaw

Andreas Schwab <schwab@linux-m68k.org> writes:

>> It seems like sh-mode isn't interpreting that "@" as the end of the
>> heredoc.
>
> ELISP> (let ((s " <<- @\n")) (string-match sh-here-doc-open-re s)
> ELISP> (match-string 1 s))
> "-"
> ELISP> (let ((s " <<- EOF\n")) (string-match sh-here-doc-open-re s)
> ELISP> (match-string 1 s))
> "EOF"

Right.  I haven't real the shell documentation -- is "@" a valid heredoc
... separator?

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





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

* bug#52496: syntax highlighting problem on emacs shell-script mode
  2021-12-19 13:33     ` Lars Ingebrigtsen
@ 2021-12-19 13:57       ` Andreas Schwab
  2021-12-19 14:10         ` Lars Ingebrigtsen
  0 siblings, 1 reply; 11+ messages in thread
From: Andreas Schwab @ 2021-12-19 13:57 UTC (permalink / raw)
  To: Lars Ingebrigtsen; +Cc: 52496, Yilkal Argaw

On Dez 19 2021, Lars Ingebrigtsen wrote:

> Right.  I haven't real the shell documentation -- is "@" a valid heredoc
> ... separator?

Any word is.

-- 
Andreas Schwab, schwab@linux-m68k.org
GPG Key fingerprint = 7578 EB47 D4E5 4D69 2510  2552 DF73 E780 A9DA AEC1
"And now for something completely different."





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

* bug#52496: syntax highlighting problem on emacs shell-script mode
  2021-12-19 13:57       ` Andreas Schwab
@ 2021-12-19 14:10         ` Lars Ingebrigtsen
  2021-12-19 14:47           ` Andreas Schwab
  0 siblings, 1 reply; 11+ messages in thread
From: Lars Ingebrigtsen @ 2021-12-19 14:10 UTC (permalink / raw)
  To: Andreas Schwab; +Cc: 52496, Yilkal Argaw

Andreas Schwab <schwab@linux-m68k.org> writes:

> On Dez 19 2021, Lars Ingebrigtsen wrote:
>
>> Right.  I haven't real the shell documentation -- is "@" a valid heredoc
>> ... separator?
>
> Any word is.

But is @ word constituent?

It's not in sh-mode's word definition, anyway.  The following tweak
fixes this particular problem, but I have no idea whether it was what
what originally reported.

diff --git a/lisp/progmodes/sh-script.el b/lisp/progmodes/sh-script.el
index c6b6f83471..01bebe4a23 100644
--- a/lisp/progmodes/sh-script.el
+++ b/lisp/progmodes/sh-script.el
@@ -867,7 +867,7 @@ sh-here-doc-syntax
     "\\(?:\\(?:.*[^\\\n]\\)?\\(?:\\\\\\\\\\)*\\\\\n\\)*.*")
 
   (defconst sh-here-doc-open-re
-    (concat "[^<]<<-?\\s-*\\\\?\\(\\(?:['\"][^'\"]+['\"]\\|\\sw\\|[-/~._]\\)+\\)"
+    (concat "[^<]<<-?\\s-*\\\\?\\(\\(?:['\"][^'\"]+['\"]\\|\\sw\\|[-/~._@]\\)+\\)"
             sh-escaped-line-re "\\(\n\\)")))
 
 (defun sh--inside-noncommand-expression (pos)


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





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

* bug#52496: syntax highlighting problem on emacs shell-script mode
  2021-12-19 14:10         ` Lars Ingebrigtsen
@ 2021-12-19 14:47           ` Andreas Schwab
  2021-12-19 15:46             ` Kévin Le Gouguec
  0 siblings, 1 reply; 11+ messages in thread
From: Andreas Schwab @ 2021-12-19 14:47 UTC (permalink / raw)
  To: Lars Ingebrigtsen; +Cc: 52496, Yilkal Argaw

On Dez 19 2021, Lars Ingebrigtsen wrote:

> Andreas Schwab <schwab@linux-m68k.org> writes:
>
>> On Dez 19 2021, Lars Ingebrigtsen wrote:
>>
>>> Right.  I haven't real the shell documentation -- is "@" a valid heredoc
>>> ... separator?
>>
>> Any word is.
>
> But is @ word constituent?

A shell word can be almost anything.

-- 
Andreas Schwab, schwab@linux-m68k.org
GPG Key fingerprint = 7578 EB47 D4E5 4D69 2510  2552 DF73 E780 A9DA AEC1
"And now for something completely different."





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

* bug#52496: syntax highlighting problem on emacs shell-script mode
  2021-12-19 14:47           ` Andreas Schwab
@ 2021-12-19 15:46             ` Kévin Le Gouguec
  2021-12-20  9:46               ` Lars Ingebrigtsen
  0 siblings, 1 reply; 11+ messages in thread
From: Kévin Le Gouguec @ 2021-12-19 15:46 UTC (permalink / raw)
  To: Andreas Schwab; +Cc: 52496, Lars Ingebrigtsen, Yilkal Argaw

Andreas Schwab <schwab@linux-m68k.org> writes:

> On Dez 19 2021, Lars Ingebrigtsen wrote:
>
>> Andreas Schwab <schwab@linux-m68k.org> writes:
>>
>>> On Dez 19 2021, Lars Ingebrigtsen wrote:
>>>
>>>> Right.  I haven't real the shell documentation -- is "@" a valid heredoc
>>>> ... separator?
>>>
>>> Any word is.
>>
>> But is @ word constituent?
>
> A shell word can be almost anything.

Relevant part of (bash) Redirections:

>    The format of here-documents is:
>      [N]<<[-]WORD
>              HERE-DOCUMENT
>      DELIMITER
> 
>    No parameter and variable expansion, command substitution, arithmetic
> expansion, or filename expansion is performed on WORD.  If any part of
> WORD is quoted, the DELIMITER is the result of quote removal on WORD,

And (bash) Definitions:

> 'word'
>      A sequence of characters treated as a unit by the shell.  Words may
>      not include unquoted 'metacharacters'.

Preceded by:

> 'metacharacter'
>      A character that, when unquoted, separates words.  A metacharacter
>      is a 'space', 'tab', 'newline', or one of the following characters:
>      '|', '&', ';', '(', ')', '<', or '>'.

(AFAICT the same goes for POSIX sh[1])

So IIUC for here-documents anything is fair game except (1)
{single,double,back} quotes (2) metacharacters (3) backslashes and
comment openers (#); all of which can still be used if quoted or escaped
*on the opening line only*.


[1] https://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_07_04





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

* bug#52496: syntax highlighting problem on emacs shell-script mode
       [not found]   ` <CAJddU=rbKWaPHBmxAGz-bM4TsziYPOoC5tOJMKpybWOE-GJEPA@mail.gmail.com>
@ 2021-12-19 19:42     ` Lars Ingebrigtsen
  0 siblings, 0 replies; 11+ messages in thread
From: Lars Ingebrigtsen @ 2021-12-19 19:42 UTC (permalink / raw)
  To: Yilkal Argaw; +Cc: 52496

Yilkal Argaw <yilkalargawworkneh@gmail.com> writes:

> Yes it is the heredoc part. I have tried emacs 27, 28 and 29(i.e. the
> master) and it all behaves the same.

Right.  So the question is whether we should just continue to add
characters to that regexp (safe solution) or whether to try to amend the
shell-script-mode concept of a "word", which I think is likely to break
stuff, but would be more correct...  probably...






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

* bug#52496: syntax highlighting problem on emacs shell-script mode
  2021-12-19 15:46             ` Kévin Le Gouguec
@ 2021-12-20  9:46               ` Lars Ingebrigtsen
  2021-12-21  4:20                 ` Yilkal Argaw
  0 siblings, 1 reply; 11+ messages in thread
From: Lars Ingebrigtsen @ 2021-12-20  9:46 UTC (permalink / raw)
  To: Kévin Le Gouguec; +Cc: 52496, Andreas Schwab, Yilkal Argaw

Kévin Le Gouguec <kevin.legouguec@gmail.com> writes:

> So IIUC for here-documents anything is fair game except (1)
> {single,double,back} quotes (2) metacharacters (3) backslashes and
> comment openers (#); all of which can still be used if quoted or escaped
> *on the opening line only*.

Thanks.

As far as I can see, sh-mode doesn't really try too hard to be correct
here -- it accepts word constituents, but then adds back -/~._ which it
has defined as punctuation in `sh-mode-syntax-table'.  So perhaps we
should just continue doing that and add @, too, even though that's not
very satisfactory.

So I've now done that in Emacs 29.

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





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

* bug#52496: syntax highlighting problem on emacs shell-script mode
  2021-12-20  9:46               ` Lars Ingebrigtsen
@ 2021-12-21  4:20                 ` Yilkal Argaw
  0 siblings, 0 replies; 11+ messages in thread
From: Yilkal Argaw @ 2021-12-21  4:20 UTC (permalink / raw)
  To: Lars Ingebrigtsen; +Cc: 52496, Andreas Schwab, Kévin Le Gouguec

Yes, I agree.  I think this is enough for now until a refactor becomes
necessary.

On Mon, Dec 20, 2021 at 12:46 PM Lars Ingebrigtsen <larsi@gnus.org> wrote:
>
> Kévin Le Gouguec <kevin.legouguec@gmail.com> writes:
>
> > So IIUC for here-documents anything is fair game except (1)
> > {single,double,back} quotes (2) metacharacters (3) backslashes and
> > comment openers (#); all of which can still be used if quoted or escaped
> > *on the opening line only*.
>
> Thanks.
>
> As far as I can see, sh-mode doesn't really try too hard to be correct
> here -- it accepts word constituents, but then adds back -/~._ which it
> has defined as punctuation in `sh-mode-syntax-table'.  So perhaps we
> should just continue doing that and add @, too, even though that's not
> very satisfactory.
>
> So I've now done that in Emacs 29.
>
> --
> (domestic pets only, the antidote for overdose, milk.)
>    bloggy blog: http://lars.ingebrigtsen.no





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

end of thread, other threads:[~2021-12-21  4:20 UTC | newest]

Thread overview: 11+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-12-15  0:35 bug#52496: syntax highlighting problem on emacs shell-script mode Yilkal Argaw
2021-12-19 12:54 ` Lars Ingebrigtsen
2021-12-19 13:30   ` Andreas Schwab
2021-12-19 13:33     ` Lars Ingebrigtsen
2021-12-19 13:57       ` Andreas Schwab
2021-12-19 14:10         ` Lars Ingebrigtsen
2021-12-19 14:47           ` Andreas Schwab
2021-12-19 15:46             ` Kévin Le Gouguec
2021-12-20  9:46               ` Lars Ingebrigtsen
2021-12-21  4:20                 ` Yilkal Argaw
     [not found]   ` <CAJddU=rbKWaPHBmxAGz-bM4TsziYPOoC5tOJMKpybWOE-GJEPA@mail.gmail.com>
2021-12-19 19:42     ` Lars Ingebrigtsen

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).