Skip to content

Wrong syntax highlighting for <%== erb syntax #2909

Open
@Earlopain

Description

@Earlopain

Description

Ruby LSP Information

Details

VS Code Version

1.95.1

Ruby LSP Extension Version

0.8.14

Ruby LSP Server Version

0.22.1

Ruby LSP Addons

  • Ruby LSP Rails

Ruby Version

3.3.6

Ruby Version Manager

rbenv

Installed Extensions

Click to expand
  • asciidoctor-vscode (3.4.2)
  • gitlens (16.0.4)
  • go (0.42.1)
  • material-icon-theme (5.14.1)
  • remote-containers (0.388.0)
  • ruby-lsp (0.8.14)
  • sorbet-vscode-extension (0.3.37)
  • vscode-github-actions (0.27.0)
  • vscode-rdbg (0.2.2)
  • vscode-wakatime (24.9.1)
  • vscode-yaml (1.15.0)

Ruby LSP Settings

Click to expand
Workspace
{}
User
{
  "enabledFeatures": {
    "codeActions": true,
    "diagnostics": true,
    "documentHighlights": true,
    "documentLink": true,
    "documentSymbols": true,
    "foldingRanges": true,
    "formatting": true,
    "hover": true,
    "inlayHint": true,
    "onTypeFormatting": true,
    "selectionRanges": true,
    "semanticHighlighting": true,
    "completion": true,
    "codeLens": true,
    "definition": true,
    "workspaceSymbol": true,
    "signatureHelp": true,
    "typeHierarchy": true
  },
  "featuresConfiguration": {},
  "addonSettings": {},
  "rubyVersionManager": {
    "identifier": "auto"
  },
  "customRubyCommand": "",
  "formatter": "none",
  "linters": null,
  "bundleGemfile": "",
  "testTimeout": 30,
  "branch": "",
  "pullDiagnosticsOn": "both",
  "useBundlerCompose": false,
  "bypassTypechecker": false,
  "rubyExecutablePath": "",
  "indexing": {},
  "erbSupport": true,
  "useLauncher": false,
  "featureFlags": {}
}

Reproduction steps

A lesser used but valid syntax of erb is <%== which will mark the passed string as html safe. Rails documents it at the bottom of https://guides.rubyonrails.org/active_support_core_extensions.html#safe-strings, although I'm not sure if this is rails specific or not. Could very well be erubi only.

ruby-lsp fails to consider the second equal sign, showing the code like this:

Image

A fix seems rather straightforward but erb highlighting has no tests and I don't really understand these gramar files so I'm not very confident in my change. I can open a PR if it looks reasonable and no tests are fine.

Patch

diff --git a/vscode/grammars/erb.cson.json b/vscode/grammars/erb.cson.json
index 475a9454..fe88bb21 100644
--- a/vscode/grammars/erb.cson.json
+++ b/vscode/grammars/erb.cson.json
@@ -80,7 +80,7 @@
     "tags": {
       "patterns": [
         {
-          "begin": "<%+(?!>)[-=]?(?![^%]*%>)",
+          "begin": "<%+(?!>)[-=]?=?(?![^%]*%>)",
           "beginCaptures": {
             "0": {
               "name": "punctuation.section.embedded.begin.erb"
@@ -113,7 +113,7 @@
           ]
         },
         {
-          "begin": "<%+(?!>)[-=]?",
+          "begin": "<%+(?!>)[-=]?=?",
           "beginCaptures": {
             "0": {
               "name": "punctuation.section.embedded.begin.erb"
diff --git a/vscode/languages/erb.json b/vscode/languages/erb.json
index ae1564fb..f8373735 100644
--- a/vscode/languages/erb.json
+++ b/vscode/languages/erb.json
@@ -5,6 +5,7 @@
   "brackets": [
     ["<%", "%>"],
     ["<%=", "%>"],
+    ["<%==", "%>"],
     ["<%#", "%>"]
   ],
   "autoClosingPairs": [
@@ -35,6 +36,7 @@
   "surroundingPairs": [
     ["<%", "%>"],
     ["<%=", "%>"],
+    ["<%==", "%>"],
     ["<%#", "%>"],
     ["{", "}"],
     ["[", "]"],

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't workinghelp-wantedExtra attention is neededpinnedThis issue or pull request is pinned and won't be marked as stalevscodeThis pull request should be included in the VS Code extension's release notes

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions