]> git.eshelyaron.com Git - emacs.git/commitdiff
Fix errors in fontification of JavaScript import-statements (bug#61083)
authorJostein Kjønigsen <jostein@kjonigsen.net>
Thu, 26 Jan 2023 19:32:18 +0000 (20:32 +0100)
committerTheodor Thornhill <theo@thornhill.no>
Fri, 27 Jan 2023 12:50:13 +0000 (13:50 +0100)
Currently js-ts-mode handles imports with aliases incorrectly. To be
consistent with how we otherwise do things, we should only highlight
the variable which is new and/or introduced, in this case "someAlias".

Attached is a patch which fontifies import-declarations somewhat more
correctly.

The following cases have been tested and all fontify properly:

import gnu from "fsf";              // highlights gnu
import { gnu2 } from "fsf2";        // highlights gnu2
import { gnu as gnu3 } from "fsf3"; // highlights gnu3
import * as gnu4 from "fsf4";       // highlights gnu4

* lisp/progmodes/js.el (js--treesit-font-lock-settings): Add new
import_clause rules that adhere to the comment above.

lisp/progmodes/js.el

index b5c912b8b0ddb2c992236b32298b5e82cb13c4dd..05d69c314bb40933cf75cb78edb9e344b45696bf 100644 (file)
@@ -3546,9 +3546,18 @@ This function is intended for use in `after-change-functions'."
              (identifier)
              @font-lock-function-name-face)
       value: (array (number) (function)))
+     ;; full module imports
      (import_clause (identifier) @font-lock-variable-name-face)
-     (import_clause (named_imports (import_specifier (identifier))
-                                   @font-lock-variable-name-face)))
+     ;; named imports with aliasing
+     (import_clause (named_imports (import_specifier
+                                    alias: (identifier) @font-lock-variable-name-face)))
+     ;; named imports without aliasing
+     (import_clause (named_imports (import_specifier
+                                    !alias
+                                    name: (identifier) @font-lock-variable-name-face)))
+
+     ;; full namespace import (* as alias)
+     (import_clause (namespace_import (identifier) @font-lock-variable-name-face)))
 
    :language 'javascript
    :feature 'property