title: Italicize JavaScript's reserved keywords in VS Code
body: <p>I'm attempting to create custom syntax styling with <a href="https://code.visualstudio.com/docs/getstarted/themes#_customizing-a-color-theme" rel="noreferrer">Visual Studio Code's theme settings</a> via <a href="https://manual.macromates.com/en/language_grammars" rel="noreferrer">TextMate language grammars</a>.</p>
  
  <p>Specifically, I'm wanting to italicize all of JavaScript's reserved keywords. I've managed to get 98% of the way there with the settings below (comments included for what's left).</p>
  
  <p>Unfortunately, there are a few rules I wasn't able to find:</p>
  
  <ol>
  <li><code>storage</code> includes the fat arrow symbol, which I do <strong>not</strong> want to include. I tried to be more specific, as seen in the settings below, but was unable to find more specific settings for <code>constructor</code> and <code>const</code>. Additionally, <code>"storage.type.function"</code> was the most explicit setting I could find for functions (needed for the function keyword, but it includes the fat arrow).</li>
  <li><code>keyword</code> includes characters such as logical operators, etc., which again, I do <strong>not</strong> want to include. <code>keyword.operator</code> is necessary for the textual operators (e.g. <code>in</code>, <code>instanceof</code>), but includes the character operators.</li>
  <li>I wasn't able to find rules for <code>eval</code> (disallowed in strict) or <code>package</code> (unused future keyword).</li>
  </ol>
  
  <p>Any ideas?</p>
  
  <pre><code>const settings = {
    "editor.tokenColorCustomizations": {
      "textMateRules": [
        {
          "scope": [
            // TODO: missing keywords: package, eval
  
        // all comment types
        "comment",
  
        // true, false, null
        "constant.language",
  
        // import, from, export, default, return, if, for, break, continue, try, catch, finally,
        // throw, default, yield, await
        "keyword.control",
  
        // TODO: remove operator symbols
        // in, void, delete, instanceof
        "keyword.operator",
  
        // debugger
        "keyword.other",
  
        // new
        "keyword.operator.new",
  
        // enum
        "storage.type.enum",
  
        // super, this, arguments
        "variable.language",
  
        // attributes in html, jsx, etc.
        "entity.other.attribute-name",
  
        // TODO: remove storage.type after finding explicit for constructor, const, let, var
        "storage.type",
  
        // static, extends, async, private, public, implements
        "storage.modifier",
  
        // TODO: exclude fat arrow
        // function
        "storage.type.function",
  
        // class
        "storage.type.class",
  
        // interface
        "storage.type.interface",
      ],
      "settings": {
        "fontStyle": "italic"
      }
    },
  ]
    },
  };
  </code></pre>