highlightjs/highlight.js

(Ruby) #{} substitution shouldn't be highlighted in single quotes

Open

#3676 aperta il 12 dic 2022

Vedi su GitHub
 (3 commenti) (0 reazioni) (1 assegnatario)JavaScript (3497 fork)batch import
buggood first issuehelp welcomelanguage

Metriche repository

Star
 (22.960 star)
Metriche merge PR
 (Nessuna PR mergiata in 30 g)

Descrizione

Describe the issue In Ruby, single quote and double quote strings work differently:

In addition to disabling interpolation [(#{} syntax)], single-quoted strings also disable all escape sequences except for the single-quote (\') and backslash (\\).

https://docs.ruby-lang.org/en/3.1/syntax/literals_rdoc.html#label-Strings

But in ruby.js, they are implemented identically

https://github.com/highlightjs/highlight.js/blob/9c49a4298a981e960b6d112c746d998d51e1d1e8/src/languages/ruby.js#L132-L139

which leads it to incorrectly highlight #{} substitutions in single quoted strings which actually have no effect, they are just literal #{} characters (in the "github" theme):

instead of highlighting it as a string, like it does if we remove the #:

Which language seems to have the issue? Ruby

Are you using highlight or highlightAuto? N/A

Expected behavior Single and double quoted strings should have separate highlighting rules for Ruby.

Additional context https://docs.ruby-lang.org/en/3.1/syntax/literals_rdoc.html#label-Strings

Unrelated, but for double quoted strings, that page also lists a couple interpolation syntax shorthands that are not implemented in the highlight.js grammar:

You can also use #@foo, #@@foo and #$foo as a shorthand for, respectively, #{ @foo }, #{ @@foo } and #{ $foo }.

Guida contributor