highlightjs/highlight.js

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

開放

#3,676 建立於 2022年12月12日

 (3 則留言) (0 個反應) (1 位負責人)JavaScript (3,497 個分叉)batch import
buggood first issuehelp welcomelanguage

倉庫指標

星標
 (22,960 顆星)
PR 合併指標
 (平均合併 6分鐘) (30 天內合併 2 個 PR)

描述

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

貢獻者指南