branch: externals/matlab-mode
commit a06ed0f93745c940808fb07d242812f8a13ff3f8
Author: John Ciolfi <john.ciolfi...@gmail.com>
Commit: John Ciolfi <john.ciolfi...@gmail.com>

    matlab-ts-mode: improve font for keywords used in non-keyword context
---
 matlab-ts-mode.el                                  | 50 ++++++++++++++--------
 .../font_lock_events_non_keyword_expected.txt      |  4 +-
 .../font_lock_keywords_as_others_expected.txt      | 50 +++++++++++-----------
 .../font_lock_struct_function_issue71_expected.txt |  2 +-
 4 files changed, 59 insertions(+), 47 deletions(-)

diff --git a/matlab-ts-mode.el b/matlab-ts-mode.el
index 87b4ce43b9..ea0536d3f1 100644
--- a/matlab-ts-mode.el
+++ b/matlab-ts-mode.el
@@ -649,10 +649,14 @@ than the FILED-EXPRESSION-NODE start-point and end-point."
 
 (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:
+Example, disp variable is overriding the disp builtin function:
    disp = 1:10;"
   (let ((variable (treesit-node-text variable-node)))
-    (gethash variable matlab-ts-mode--builtins-ht)))
+    (or (gethash variable matlab-ts-mode--builtins-ht)
+        ;; Initially arguments, etc. capabilities didn't exist in MATLAB. When 
they were added,
+        ;; compatibility was kept when these were used as variables. So, they 
are "semi-keywords".
+        (string-match-p (rx bos (or "arguments" "enumeration" "events" 
"methods" "properties") eos)
+                        (treesit-node-text variable-node)))))
 
 (defvar matlab-ts-mode--font-lock-settings
   (treesit-font-lock-rules
@@ -696,7 +700,7 @@ Example, disp variable is overriding the disp builtin 
functin:
    ;; We could use this for items like true, false, pi, etc. See some of these 
numbers in:
    ;; 
https://www.mathworks.com/content/dam/mathworks/fact-sheet/matlab-basic-functions-reference.pdf
    ;; however, they do show up as builtins, which to me seems more accurate.
-   ;; This rule needs to come before the "F-Rule: keyworks: if, else, end, 
etc." because
+   ;; This rule needs to come before the "F-Rule: keywords: if, else, end, 
etc." because
    ;; we want the end_keyword when used as a number index into a cell/matrix 
to be a number font.
    ;; See: tests/test-matlab-ts-mode-font-lock-files/font_lock_numbers.m
    :language 'matlab
@@ -704,14 +708,6 @@ Example, disp variable is overriding the disp builtin 
functin:
    '(((number) @matlab-ts-mode-number-face)
      ((end_keyword) @matlab-ts-mode-end-number-face))
 
-   ;; F-Rule: keywords: if, else, end, etc.
-   ;; See: tests/test-matlab-ts-mode-font-lock-files/font_lock_keywords.m
-   ;; See: tests/test-matlab-ts-mode-font-lock-files/font_lock_class_methods.m
-   ;; See: tests/test-matlab-ts-mode-font-lock-files/font_lock_keyword_spmd.m
-   :language 'matlab
-   :feature 'keyword
-   `([,@matlab-ts-mode--keywords] @font-lock-keyword-face)
-
    ;; F-Rule: variable
    ;; Could add font-lock-variable-name-face to variable uses.  Consider
    ;;     i1 = [1, 2];
@@ -760,7 +756,18 @@ Example, disp variable is overriding the disp builtin 
functin:
      (enum (identifier) @matlab-ts-mode-property-face)
      ;; Events block in classdef
      ;; See: tests/test-matlab-ts-mode-font-lock-files/font_lock_class_events.m
-     (events (identifier) @matlab-ts-mode-property-face))
+     (events (identifier) @matlab-ts-mode-property-face)
+     ;; Namespaces, structs, classdef methods/property access. Note any 
keyword is allowed,
+     ;; e.g. foo.methods.function = 1;
+     (field_expression (identifier) @default))
+
+   ;; F-Rule: keywords: if, else, end, etc.
+   ;; See: tests/test-matlab-ts-mode-font-lock-files/font_lock_keywords.m
+   ;; See: tests/test-matlab-ts-mode-font-lock-files/font_lock_class_methods.m
+   ;; See: tests/test-matlab-ts-mode-font-lock-files/font_lock_keyword_spmd.m
+   :language 'matlab
+   :feature 'keyword
+   `([,@matlab-ts-mode--keywords] @font-lock-keyword-face)
 
    ;; F-Rule: Types, e.g. int32()
    :language 'matlab
@@ -774,7 +781,6 @@ Example, disp variable is overriding the disp builtin 
functin:
                             @font-lock-type-face))
      (property name: (identifier) (identifier) @font-lock-type-face :?)
      (property name: (property_name (identifier)) (identifier) 
@font-lock-type-face :?))
-     
 
    ;; F-Rule: factory items that come with MATLAB, Simulink, or add-on products
    ;; See: tests/test-matlab-ts-mode-font-lock-files/font_lock_builtins.m
@@ -813,10 +819,6 @@ Example, disp variable is overriding the disp builtin 
functin:
      ;; See: 
tests/test-matlab-ts-mode-font-lock-files/font_lock_class_MultiplePropBlocks.m
      ;; See: 
tests/test-matlab-ts-mode-font-lock-files/font_lock_class_prop_access.m
      (property (validation_functions (identifier) 
@font-lock-function-call-face))
-     (property (validation_functions (field_expression (identifier) 
@font-lock-function-call-face)))
-     (property (validation_functions ((field_expression
-                                       (function_call name: (identifier)
-                                                      
@font-lock-function-call-face)))))
      (property name: (identifier) @matlab-ts-mode-property-face)
      (property name: (property_name (identifier) 
@matlab-ts-mode-property-face))
      ;; Attributes of properties, methods
@@ -824,6 +826,16 @@ Example, disp variable is overriding the disp builtin 
functin:
      (attribute (identifier) @font-lock-type-face "=" (identifier) 
@font-lock-builtin-face)
      (attribute (identifier) @font-lock-type-face))
 
+   ;; F-Rule: validation functions from namespace
+   ;; See: 
tests/test-matlab-ts-mode-font-lock-files/font_lock_fcn_arguments2_issue57.m
+   :language 'matlab
+   :feature 'definition
+   :override t
+   '((property (validation_functions (field_expression (identifier) 
@font-lock-function-call-face)))
+     (property (validation_functions ((field_expression
+                                       (function_call name: (identifier)
+                                                      
@font-lock-function-call-face))))))
+
    ;; F-Rule: Function Name = Value arguments
    ;; See: 
tests/test-matlab-ts-mode-font-lock-files/font_lock_fcn_name_value_properties.m
    :language 'matlab
@@ -1595,7 +1607,7 @@ Sets `matlab-ts-mode--i-next-line-pair' to (ANCHOR-NODE . 
OFFSET)"
                 (if (or last-child-of-error-node
                         ;; Continuation:    arguments
                         ;;                     firstArgument ...
-                        ;;         TAB>            doube
+                        ;;         TAB>            double
                         (let ((prev-sibling (treesit-node-prev-sibling node)))
                           (and prev-sibling
                                (string= (treesit-node-type prev-sibling) 
"line_continuation"))))
@@ -3511,4 +3523,4 @@ so configuration variables of that mode, do not affect 
this mode.
 ;; LocalWords:  NPS BUF myfcn pcase xr repeat:nil docstring numberp imenu 
alist nondirectory mapc
 ;; LocalWords:  funcall mfile elec foo'bar mapcar lsp noerror alnum featurep 
grep'ing mapconcat wie
 ;; LocalWords:  Keymap keymap netshell gud ebstop mlgud ebclear ebstatus mlg 
mlgud's subjob reindent
-;; LocalWords:  DWIM dwim parens caar cdar utils fooenum mcode CRLF
+;; LocalWords:  DWIM dwim parens caar cdar utils fooenum mcode CRLF cmddual 
lang
diff --git 
a/tests/test-matlab-ts-mode-font-lock-files/font_lock_events_non_keyword_expected.txt
 
b/tests/test-matlab-ts-mode-font-lock-files/font_lock_events_non_keyword_expected.txt
index 4d6b1ca8c5..478aa72451 100644
--- 
a/tests/test-matlab-ts-mode-font-lock-files/font_lock_events_non_keyword_expected.txt
+++ 
b/tests/test-matlab-ts-mode-font-lock-files/font_lock_events_non_keyword_expected.txt
@@ -2,6 +2,6 @@ c ccc ccccccccc ccc
 
 c cccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
 
-kkkkkk o n
-dDkkkkkk o n
+VVVVVV o n
+dDdddddd o n
 dddddddDddddddDd
diff --git 
a/tests/test-matlab-ts-mode-font-lock-files/font_lock_keywords_as_others_expected.txt
 
b/tests/test-matlab-ts-mode-font-lock-files/font_lock_keywords_as_others_expected.txt
index 1cc3b0c00d..8627c7a6a0 100644
--- 
a/tests/test-matlab-ts-mode-font-lock-files/font_lock_keywords_as_others_expected.txt
+++ 
b/tests/test-matlab-ts-mode-font-lock-files/font_lock_keywords_as_others_expected.txt
@@ -2,7 +2,7 @@ c ccc ccccccccc ccc
 
 c ccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
 
-kkkkkkkkk o n
+VVVVVVVVV o n
 c ccccc c c
 c cccc c c
 c ccccc c c
@@ -11,13 +11,13 @@ c cccccccc c c
 c cccc c c
 c cccccc c c
 c ccc c c
-kkkkkkkkkkk o n
-kkkkkk o n
+VVVVVVVVVVV o n
+VVVVVV o n
 c ccc c c
 c cccccccc c c
 c cccccc c c
 c cc c c
-kkkkkkk o n
+VVVVVVV o n
 c ccccccccc c c
 c cccccc c c
 c cccccccccc c c
@@ -37,30 +37,30 @@ c     ccc
 c   ccccc
 c      c c cccccccccccccccccccccc
 
-dDkkkkkkkkk o n
+dDddddddddd o n
 dDddddd o n
-dDkkkk o n
-dDkkkkk o n
-dDkkkkkkkk o n
+dDdddd o n
+dDddddd o n
+dDdddddddd o n
+dDdddddddd o n
+dDdddd o n
+dDdddddd o n
+dDddd o n
+dDddddddddddd o n
+dDdddddd o n
+dDddd o n
 dDdddddddd o n
-dDkkkk o n
-dDkkkkkk o n
-dDkkk o n
-dDkkkkkkkkkkk o n
-dDkkkkkk o n
-dDkkk o n
-dDkkkkkkkk o n
-dDkkkkkk o n
-dDkk o n
-dDkkkkkkk o n
-dDkkkkkkkkk o n
-dDkkkkkk o n
-dDkkkkkkkkkk o n
+dDdddddd o n
+dDdd o n
+dDddddddd o n
+dDddddddddd o n
+dDdddddd o n
+dDdddddddddd o n
 dDdddddddddd o n
 dDdddddd o n
-dDkkkk o n
-dDkkkkkk o n
-dDkkk o n
-dDkkkkk o n
+dDdddd o n
+dDdddddd o n
+dDddd o n
+dDddddd o n
 
 
diff --git 
a/tests/test-matlab-ts-mode-font-lock-files/font_lock_struct_function_issue71_expected.txt
 
b/tests/test-matlab-ts-mode-font-lock-files/font_lock_struct_function_issue71_expected.txt
index 02f439a0b2..acea5e0693 100644
--- 
a/tests/test-matlab-ts-mode-font-lock-files/font_lock_struct_function_issue71_expected.txt
+++ 
b/tests/test-matlab-ts-mode-font-lock-files/font_lock_struct_function_issue71_expected.txt
@@ -5,5 +5,5 @@ c cccc 
cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
 v o nD
 vv o obdbdoonodD
 v o BBBBBBBBBbddb
-dDkkkkkkkk
+dDdddddddd
 

Reply via email to