highlightjs/highlight.js

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

Open

#3 676 ouverte le 12 déc. 2022

Voir sur GitHub
 (3 commentaires) (0 réactions) (1 assigné)JavaScript (3 497 forks)batch import
buggood first issuehelp welcomelanguage

Métriques du dépôt

Stars
 (22 960 stars)
Métriques de merge PR
 (Aucune PR mergée en 30 j)

Description

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

Guide contributeur