branch: externals/matlab-mode
commit 8aad06e7311db138ad5fee4cddb5d73a56f1071b
Author: John Ciolfi <[email protected]>
Commit: John Ciolfi <[email protected]>

    matlab-ts-mode: add matlab-ts-mode-variable-override-builtin-face
---
 matlab-ts-mode.el                                  | 32 +++++++++++++++-
 .../font_lock_builtins.m                           |  1 -
 .../font_lock_builtins_expected.txt                |  3 +-
 ...ont_lock_fcn_name_value_properties_expected.txt |  2 +-
 .../font_lock_keywords_expected.txt                |  6 +--
 .../font_lock_operators_expected.txt               |  2 +-
 .../font_lock_variable.m                           | 43 ++++++++++++++++++++--
 .../font_lock_variable_expected.txt                | 43 ++++++++++++++++++++--
 tests/test-matlab-ts-mode-font-lock.el             |  1 +
 9 files changed, 118 insertions(+), 15 deletions(-)

diff --git a/matlab-ts-mode.el b/matlab-ts-mode.el
index c9c0fb8921..4ffe2f7eec 100644
--- a/matlab-ts-mode.el
+++ b/matlab-ts-mode.el
@@ -123,6 +123,14 @@ Guidelines:
        :slant italic))
   "*Face used for classdef abstract method function signature declarations.")
 
+(defface matlab-ts-mode-variable-override-builtin-face
+  '((t :inherit font-lock-variable-name-face
+       :underline t))
+  "*Face used for variable overriding a builtin.
+For example, it is valid to override the disp command:
+  disp = 1:10;
+and then trying to use disp to display results will not work.")
+
 (defcustom matlab-ts-mode-font-lock-level 3
   "*Level of font lock for MATLAB code.
 The \"Standard\" level plus either MLint flycheck or the MATLAB Language
@@ -639,6 +647,13 @@ than the FILED-EXPRESSION-NODE start-point and end-point."
   (let ((command (treesit-node-text command-node)))
     (gethash command matlab-ts-mode--builtins-ht)))
 
+(defun matlab-ts-mode--is-variable-overriding-builtin (variable-node)
+  "Is VARIABLE-NODE overriding a builtin?
+Example, disp variable is overriding the disp builtin functin:
+   disp = 1:10;"
+  (let ((variable (treesit-node-text variable-node)))
+    (gethash variable matlab-ts-mode--builtins-ht)))
+
 (defvar matlab-ts-mode--font-lock-settings
   (treesit-font-lock-rules
 
@@ -761,10 +776,25 @@ than the FILED-EXPRESSION-NODE start-point and end-point."
    ;; See: tests/test-matlab-ts-mode-font-lock-files/font_lock_variable.m
    :language 'matlab
    :feature 'variable
-   '((assignment left: (identifier) @font-lock-variable-name-face)
+   '(((assignment left: (identifier) 
@matlab-ts-mode-variable-override-builtin-face
+                  (:pred matlab-ts-mode--is-variable-overriding-builtin
+                         @matlab-ts-mode-variable-override-builtin-face)))
+     (assignment left: (identifier) @font-lock-variable-name-face)
+     (multioutput_variable (identifier) 
@matlab-ts-mode-variable-override-builtin-face
+                  (:pred matlab-ts-mode--is-variable-overriding-builtin
+                         @matlab-ts-mode-variable-override-builtin-face))
      (multioutput_variable (identifier) @font-lock-variable-name-face)
+     (global_operator (identifier) 
@matlab-ts-mode-variable-override-builtin-face
+                  (:pred matlab-ts-mode--is-variable-overriding-builtin
+                         @matlab-ts-mode-variable-override-builtin-face))
      (global_operator (identifier) @font-lock-variable-name-face)
+     (persistent_operator (identifier) 
@matlab-ts-mode-variable-override-builtin-face
+                  (:pred matlab-ts-mode--is-variable-overriding-builtin
+                         @matlab-ts-mode-variable-override-builtin-face))
      (persistent_operator (identifier) @font-lock-variable-name-face)
+     (for_statement (iterator (identifier) 
@matlab-ts-mode-variable-override-builtin-face
+                              (:pred 
matlab-ts-mode--is-variable-overriding-builtin
+                                     
@matlab-ts-mode-variable-override-builtin-face)))
      (for_statement (iterator (identifier) @font-lock-variable-name-face)))
 
    ;; F-Rule: command dual arguments
diff --git a/tests/test-matlab-ts-mode-font-lock-files/font_lock_builtins.m 
b/tests/test-matlab-ts-mode-font-lock-files/font_lock_builtins.m
index 73048c9175..2acbf18570 100644
--- a/tests/test-matlab-ts-mode-font-lock-files/font_lock_builtins.m
+++ b/tests/test-matlab-ts-mode-font-lock-files/font_lock_builtins.m
@@ -4,4 +4,3 @@ function varargout = font_lock_builtins(vararin)
     disp(nargin)
     varargout = varargin
 end
-
diff --git 
a/tests/test-matlab-ts-mode-font-lock-files/font_lock_builtins_expected.txt 
b/tests/test-matlab-ts-mode-font-lock-files/font_lock_builtins_expected.txt
index d1bb83793c..67baf31062 100644
--- a/tests/test-matlab-ts-mode-font-lock-files/font_lock_builtins_expected.txt
+++ b/tests/test-matlab-ts-mode-font-lock-files/font_lock_builtins_expected.txt
@@ -2,6 +2,5 @@ c ccc ccccccccc ccc
 kkkkkkkk vvvvvvvvv o ffffffffffffffffffbvvvvvvvb
     BBBBBB
     BBBBbBBBBBBb
-    vvvvvvvvv o BBBBBBBB
+    VVVVVVVVV o BBBBBBBB
 kkk
-
diff --git 
a/tests/test-matlab-ts-mode-font-lock-files/font_lock_fcn_name_value_properties_expected.txt
 
b/tests/test-matlab-ts-mode-font-lock-files/font_lock_fcn_name_value_properties_expected.txt
index b01f55ba94..43e6abf947 100644
--- 
a/tests/test-matlab-ts-mode-font-lock-files/font_lock_fcn_name_value_properties_expected.txt
+++ 
b/tests/test-matlab-ts-mode-font-lock-files/font_lock_fcn_name_value_properties_expected.txt
@@ -1,6 +1,6 @@
 c ccc ccccccccc ccc
 
 vvvvvvv o SsssssssSD
-vvvvv o bSsssssEESD SsssssEESbD
+VVVVV o bSsssssEESD SsssssEESbD
 
 BBBBBBBBBBbBBBBBD dddddddD PPPPPPPPPP o SEESbD
diff --git 
a/tests/test-matlab-ts-mode-font-lock-files/font_lock_keywords_expected.txt 
b/tests/test-matlab-ts-mode-font-lock-files/font_lock_keywords_expected.txt
index 3929cb1411..4580b24d6c 100644
--- a/tests/test-matlab-ts-mode-font-lock-files/font_lock_keywords_expected.txt
+++ b/tests/test-matlab-ts-mode-font-lock-files/font_lock_keywords_expected.txt
@@ -23,14 +23,14 @@ kkkkkkkk ffffffffffffffffff o ffffff
                BBBBBBBbddb
            kkk
 
-           v o nD
+           V o nD
            kkk v o nDdd
                kk BBBbdD nb
                    kkkkkkkk
                 kkkkkk BBBbdD nb
                    kkkkkkkk
                kkkk
-                   v o B o nD
+                   V o B o nD
                 kkk
                 BBBBbbSsssssssss ss s ss s s S BBBBBBBbdbbb
             kkk
@@ -45,7 +45,7 @@ kkkkkkkk ffffffffffffffffff o ffffff
             v o nnnD
             v o nnnD
             v o BBBBBbnDdbD
-            kkkkkk v o nDd
+            kkkkkk V o nDd
                 dbBb o BBBbBBBbBBBbBBBBbdbbbbD
             kkk
 
diff --git 
a/tests/test-matlab-ts-mode-font-lock-files/font_lock_operators_expected.txt 
b/tests/test-matlab-ts-mode-font-lock-files/font_lock_operators_expected.txt
index 7e76c7411b..9e80dc7e3d 100644
--- a/tests/test-matlab-ts-mode-font-lock-files/font_lock_operators_expected.txt
+++ b/tests/test-matlab-ts-mode-font-lock-files/font_lock_operators_expected.txt
@@ -16,7 +16,7 @@ v o bn nD n nb o n
 v o doo
 v o do
 
-v o n oo n
+V o n oo n
 
 v o n oo n
 
diff --git a/tests/test-matlab-ts-mode-font-lock-files/font_lock_variable.m 
b/tests/test-matlab-ts-mode-font-lock-files/font_lock_variable.m
index dfa22be18c..676fd99f43 100644
--- a/tests/test-matlab-ts-mode-font-lock-files/font_lock_variable.m
+++ b/tests/test-matlab-ts-mode-font-lock-files/font_lock_variable.m
@@ -1,17 +1,54 @@
 % -*- matlab-ts -*-
 function font_lock_variable
 
-    global bar bar2
-    persistent foo1;
+    % ((assignment left: (identifier) 
@matlab-ts-mode-variable-override-builtin-face
+    %              (:pred matlab-ts-mode--is-variable-overriding-builtin
+    %                     @matlab-ts-mode-variable-override-builtin-face)))
+    disp = 10;
 
+    % (assignment left: (identifier) @font-lock-variable-name-face)
     foo2 = 'a'
 
+    % (multioutput_variable (identifier) 
@matlab-ts-mode-variable-override-builtin-face
+    %              (:pred matlab-ts-mode--is-variable-overriding-builtin
+    %                     @matlab-ts-mode-variable-override-builtin-face))
+    [disp, plot] = fcn1();
+
+    % (multioutput_variable (identifier) @font-lock-variable-name-face)
+    [a, b] = fcn1();
+
+    % (global_operator (identifier) 
@matlab-ts-mode-variable-override-builtin-face
+    %               (:pred matlab-ts-mode--is-variable-overriding-builtin
+    %                      @matlab-ts-mode-variable-override-builtin-face))
+    global disp plot
+
+    % (global_operator (identifier) @font-lock-variable-name-face)
+    global bar1 bar2
+
+    % (persistent_operator (identifier) 
@matlab-ts-mode-variable-override-builtin-face
+    %              (:pred matlab-ts-mode--is-variable-overriding-builtin
+    %                     @matlab-ts-mode-variable-override-builtin-face))
+    persistent plot;
+
+    % (persistent_operator (identifier) @font-lock-variable-name-face)
+    persistent foo1;
+
     total = 0;
+
+    % (for_statement (iterator (identifier) 
@matlab-ts-mode-variable-override-builtin-face
+    %                          (:pred 
matlab-ts-mode--is-variable-overriding-builtin
+    %                                 
@matlab-ts-mode-variable-override-builtin-face)))
+    for plot = 1:10
+        total = total + plot;
+    end
+
+
+    % (for_statement (iterator (identifier) @font-lock-variable-name-face))
     for idx = 1:10
         total = total + idx;
     end
 
-    [a, b] = fcn1();
+
 end
 
 function [a, b] = fcn1
diff --git 
a/tests/test-matlab-ts-mode-font-lock-files/font_lock_variable_expected.txt 
b/tests/test-matlab-ts-mode-font-lock-files/font_lock_variable_expected.txt
index f625bc1a39..4bf41c482d 100644
--- a/tests/test-matlab-ts-mode-font-lock-files/font_lock_variable_expected.txt
+++ b/tests/test-matlab-ts-mode-font-lock-files/font_lock_variable_expected.txt
@@ -1,17 +1,54 @@
 c ccc ccccccccc ccc
 kkkkkkkk ffffffffffffffffff
 
-    kkkkkk vvv vvvv
-    kkkkkkkkkk vvvvD
+    c cccccccccccc ccccc cccccccccccc 
cccccccccccccccccccccccccccccccccccccccccccccc
+    c              cccccc cccccccccccccccccccccccccccccccccccccccccccccc
+    c                     ccccccccccccccccccccccccccccccccccccccccccccccccc
+    VVVV o nnD
 
+    c ccccccccccc ccccc cccccccccccc cccccccccccccccccccccccccccccc
     vvvv o SsS
 
+    c ccccccccccccccccccccc cccccccccccc 
cccccccccccccccccccccccccccccccccccccccccccccc
+    c              cccccc cccccccccccccccccccccccccccccccccccccccccccccc
+    c                     cccccccccccccccccccccccccccccccccccccccccccccccc
+    bVVVVD VVVVb o ddddbbD
+
+    c ccccccccccccccccccccc cccccccccccc cccccccccccccccccccccccccccccc
+    bvD vb o ddddbbD
+
+    c cccccccccccccccc cccccccccccc 
cccccccccccccccccccccccccccccccccccccccccccccc
+    c               cccccc cccccccccccccccccccccccccccccccccccccccccccccc
+    c                      cccccccccccccccccccccccccccccccccccccccccccccccc
+    kkkkkk VVVV VVVV
+
+    c cccccccccccccccc cccccccccccc cccccccccccccccccccccccccccccc
+    kkkkkk vvvv vvvv
+
+    c cccccccccccccccccccc cccccccccccc 
cccccccccccccccccccccccccccccccccccccccccccccc
+    c              cccccc cccccccccccccccccccccccccccccccccccccccccccccc
+    c                     cccccccccccccccccccccccccccccccccccccccccccccccc
+    kkkkkkkkkk VVVVD
+
+    c cccccccccccccccccccc cccccccccccc cccccccccccccccccccccccccccccc
+    kkkkkkkkkk vvvvD
+
     vvvvv o nD
+
+    c cccccccccccccc ccccccccc cccccccccccc 
cccccccccccccccccccccccccccccccccccccccccccccc
+    c                          cccccc 
cccccccccccccccccccccccccccccccccccccccccccccc
+    c                                 
ccccccccccccccccccccccccccccccccccccccccccccccccc
+    kkk VVVV o nDnn
+        vvvvv o ddddd o BBBBD
+    kkk
+
+
+    c cccccccccccccc ccccccccc cccccccccccc ccccccccccccccccccccccccccccccc
     kkk vvv o nDnn
         vvvvv o ddddd o dddD
     kkk
 
-    bvD vb o ddddbbD
+
 kkk
 
 kkkkkkkk bvD vb o ffff
diff --git a/tests/test-matlab-ts-mode-font-lock.el 
b/tests/test-matlab-ts-mode-font-lock.el
index 143d4a8e53..08ded74ae6 100644
--- a/tests/test-matlab-ts-mode-font-lock.el
+++ b/tests/test-matlab-ts-mode-font-lock.el
@@ -87,6 +87,7 @@ after validating it, rename it to
                          ("S" . matlab-ts-mode-string-delimiter-face)
                          ("t" . font-lock-type-face)
                          ("v" . font-lock-variable-name-face)
+                         ("V" . matlab-ts-mode-variable-override-builtin-face)
                          ("w" . font-lock-warning-face)
                          ))
          (test-buf-setup (lambda () (matlab-sections-minor-mode -1))))

Reply via email to