-
Notifications
You must be signed in to change notification settings - Fork 3.7k
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
highlight.js/src/languages/ruby.js
Lines 132 to 139 in 9c49a42
| { | |
| begin: /'/, | |
| end: /'/ | |
| }, | |
| { | |
| begin: /"/, | |
| end: /"/ | |
| }, |
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,#@@fooand#$fooas a shorthand for, respectively,#{ @foo },#{ @@foo }and#{ $foo }.

