From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: Vincenzo Pupillo Newsgroups: gmane.emacs.bugs Subject: bug#73779: 30.0.91; [PATCH] php-ts-mode: Better indentation and font locking, support for the latest grammar version. Date: Sat, 12 Oct 2024 22:12:30 +0200 Message-ID: <2520493.XAFRqVoOGU@fedora> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="nextPart3583319.dWV9SEqChM" Content-Transfer-Encoding: 7Bit Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="6637"; mail-complaints-to="usenet@ciao.gmane.io" To: 73779@debbugs.gnu.org Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Sat Oct 12 23:03:00 2024 Return-path: Envelope-to: geb-bug-gnu-emacs@m.gmane-mx.org Original-Received: from lists.gnu.org ([209.51.188.17]) by ciao.gmane.io with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1szjGO-0001TL-5y for geb-bug-gnu-emacs@m.gmane-mx.org; Sat, 12 Oct 2024 23:03:00 +0200 Original-Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1szjGF-0001ln-Sg; Sat, 12 Oct 2024 17:02:51 -0400 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1szjGE-0001lY-IK for bug-gnu-emacs@gnu.org; Sat, 12 Oct 2024 17:02:50 -0400 Original-Received: from debbugs.gnu.org ([2001:470:142:5::43]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1szjGB-0006GZ-Hp for bug-gnu-emacs@gnu.org; Sat, 12 Oct 2024 17:02:50 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=debbugs.gnu.org; s=debbugs-gnu-org; h=MIME-Version:Date:From:To:Subject; bh=QggiQl4Pipe9t/xiPjhAau4ONTQ4J+rECBbL/Zn2AaU=; b=DyprR6M1mdi09dWBGSLHtSEoP8PLF41+kdN6ZOtv2Z797g4ZXjz13nJmH6DplOc9xF+kF3cs6aJlLsZwD0B4Dn+JosFDzRPVnRfYiI8AM3x/82Z0YY1rRd1xM3DaHJa8AfJD4H8dks6gu7lRSp0LwzVPwf6p4wKPYhmQjelTXGFL6TjaPiKoh8GT+JqaVytzAvttbid3NknKI0pPptsdm0xxdHt7oUs4YJrgiSWdO19aW9CvDRqWw566WvWlBuWzlHuK/Hy6K9QY7HMO94hXCFitYtYM15YAve7x9rFkWIE3nriD9pE2KXT1n00bDKfK9KOUfY/hXK88sr1uCoLHzA==; Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1szjGQ-0003Vk-1d for bug-gnu-emacs@gnu.org; Sat, 12 Oct 2024 17:03:02 -0400 X-Loop: help-debbugs@gnu.org Resent-From: Vincenzo Pupillo Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Sat, 12 Oct 2024 21:03:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: report 73779 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: patch X-Debbugs-Original-To: bug-gnu-emacs@gnu.org Original-Received: via spool by submit@debbugs.gnu.org id=B.172876692513343 (code B ref -1); Sat, 12 Oct 2024 21:03:01 +0000 Original-Received: (at submit) by debbugs.gnu.org; 12 Oct 2024 21:02:05 +0000 Original-Received: from localhost ([127.0.0.1]:35313 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1szjFT-0003T4-M7 for submit@debbugs.gnu.org; Sat, 12 Oct 2024 17:02:04 -0400 Original-Received: from lists.gnu.org ([209.51.188.17]:34296) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1szjFQ-0003SC-O7 for submit@debbugs.gnu.org; Sat, 12 Oct 2024 17:02:01 -0400 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1sziTd-0003pZ-Fx for bug-gnu-emacs@gnu.org; Sat, 12 Oct 2024 16:12:37 -0400 Original-Received: from mail-ej1-x632.google.com ([2a00:1450:4864:20::632]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1sziTa-0000s4-Vs for bug-gnu-emacs@gnu.org; Sat, 12 Oct 2024 16:12:37 -0400 Original-Received: by mail-ej1-x632.google.com with SMTP id a640c23a62f3a-a99cc265e0aso203192866b.3 for ; Sat, 12 Oct 2024 13:12:34 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1728763952; x=1729368752; darn=gnu.org; h=content-transfer-encoding:mime-version:message-id:date:subject:to :from:from:to:cc:subject:date:message-id:reply-to; bh=QggiQl4Pipe9t/xiPjhAau4ONTQ4J+rECBbL/Zn2AaU=; b=L0gfMaeGtgpxkOk5PctqjcXgL7/YseBX3nrdacq1+kMOxd0fzf8AMgNx0jvMytivAt 1GLp+E8JVgcd0CV235Dlekf/dHzsI0roPWl3zbsd+JDHDaX+J7Pu7tVNAfFEWEghs0H0 Mgq0KpZhkM/1ypMktSdQ4cWNXZuwPTvDxQb7aPVTftuYyIc2wBFvz11yFdyW1tu91hPZ n5+wJO2ZE+7Ptg2XGzlx7WSNG5EwflQNmFknP/H51PpmKbKehvTP5OtFuCHKFACWKOmo wPSrdejAGB/fRHAZdSC3vCxc7dKqIYrs/YhPHXGC55jfxSR7xkrxXm/79VcH9Es9/meW 0T2A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1728763952; x=1729368752; h=content-transfer-encoding:mime-version:message-id:date:subject:to :from:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=QggiQl4Pipe9t/xiPjhAau4ONTQ4J+rECBbL/Zn2AaU=; b=iroOCM9jrcERxM5l8KEAvrqMY8WjEyE/bDKM3dKh9HBxess2xLxBkSvQXNZfnkFfxi H8zOtsq8dG1kZkqyUcO/YqEbVy5T8Es27NqqdHhouZIPL1nyZBhrjc+BD8woOCFhUijf OKx6013ZeZV7ginsRECO5aSKNaB5mhmQG/OZn8TRcZXnqgzGncMA8ePJK9PMaAri81o9 dz/MDiqZm5a0QYl9XDlkoGYeFsuuEn+Yw1ValGMzySbp1xfSu0CKr58BIfW0o5K3C5j4 3X4vje+yQFtF2BOsIyKOLz25ZCs4r45tkHJd3UJ8AVY4LBB+fzb3KT/sbQX1fAe53UiT FAyw== X-Gm-Message-State: AOJu0Yx6b9EdMfQiB89jmk0CysPnm4EY1mptgyOV7enqh3O9wA/0QA71 hXMtT/QdeWQ6hdDHf1gmy0x9o3OckydHx0Ka0Klx5V7ljm7RImnC4pXD1Q== X-Google-Smtp-Source: AGHT+IGMsG8Y3GA8LUAgmIigMuA29ykQWDTPnTfXZhoyhqgRHnztoaHa7Fmv0kdwPZX00cFTeD5vJQ== X-Received: by 2002:a17:907:5015:b0:a99:f496:794c with SMTP id a640c23a62f3a-a99f496a354mr118843766b.52.1728763951587; Sat, 12 Oct 2024 13:12:31 -0700 (PDT) Original-Received: from fedora.localnet (2-230-139-124.ip202.fastwebnet.it. [2.230.139.124]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-a99a7ec4d14sm357324166b.38.2024.10.12.13.12.30 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 12 Oct 2024 13:12:31 -0700 (PDT) Received-SPF: pass client-ip=2a00:1450:4864:20::632; envelope-from=v.pupillo@gmail.com; helo=mail-ej1-x632.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list X-BeenThere: bug-gnu-emacs@gnu.org List-Id: "Bug reports for GNU Emacs, the Swiss army knife of text editors" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Original-Sender: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Xref: news.gmane.io gmane.emacs.bugs:293481 Archived-At: This is a multi-part message in MIME format. --nextPart3583319.dWV9SEqChM Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Ciao, this patch corrects the indentation of the control structure without closin= g=20 brackets (or without the end keyword... in the case of the alternative=20 syntax). It supports font locking of the =E2=80=9Casymmetric property visib= ility =E2=80=9D=20 introduced with grammar v0.23.3 and so-called magic methods. And others sma= ll=20 fix. And others small bug I discovered while writing the tests.. Thank you. Vincenzo --nextPart3583319.dWV9SEqChM Content-Disposition: attachment; filename="0001-Fix-php-ts-mode-better-indentation-and-font-locking.patch" Content-Transfer-Encoding: 7Bit Content-Type: text/x-patch; charset="UTF-8"; name="0001-Fix-php-ts-mode-better-indentation-and-font-locking.patch" >From 5164e387c395d64b49a851b179ed92847a1cfd93 Mon Sep 17 00:00:00 2001 From: Vincenzo Pupillo Date: Thu, 10 Oct 2024 16:06:37 +0200 Subject: [PATCH] Fix php-ts-mode better indentation and font locking. Incomplete compound_statement or colon_block (statement-group without a closing brace or closing keyword) that are not inside a function or method are not recognized as such by tree-sitter-php. A new function 'php-ts-mode--open-statement-group-heuristic' handles this case. Font locking of magic methods and better support for alternative control structure syntax. Support for latest grammar version. * lisp/progmodes/php-ts-mode.el (php-ts-mode--language-source-alist): Updated grammar version. (php-ts-mode--possibly-braceless-keyword-re): Regular expression for braceles keyword. (php-ts-mode--open-statement-group-heuristic): New function. (php-ts-mode--parent-html-bol): Use the new function and doc fix. (php-ts-mode--parent-html-heuristic): Use the new function and doc fix. (php-ts-mode--indent-styles): Use the new function and add 'colon_block' support. (php-ts-mode--class-magic-methods): New predefined magic methods list. (php-ts-mode--test-namespace-name-as-prefix-p): Doc fix. (php-ts-mode--test-namespace-aliasing-clause-p): Fix the test and doc. (php-ts-mode--test-namespace-use-group-clause-p): Doc fix. (php-ts-mode--test-visibility-modifier-operation-clause-p): New function for the new asymmetric property visibility feature of PHP 8.4. (php-ts-mode--font-lock-settings): Font lock for class magic methods and alternative syntax. Better font lock for 'instanceof'. Use 'font-lock-function-call-face' for scoped and member call expression. --- lisp/progmodes/php-ts-mode.el | 164 +++++++++++++++++++++++----------- 1 file changed, 110 insertions(+), 54 deletions(-) diff --git a/lisp/progmodes/php-ts-mode.el b/lisp/progmodes/php-ts-mode.el index d2559e5a45f..f1c33750f47 100644 --- a/lisp/progmodes/php-ts-mode.el +++ b/lisp/progmodes/php-ts-mode.el @@ -84,7 +84,7 @@ ;;; Install treesitter language parsers (defvar php-ts-mode--language-source-alist - '((php . ("https://github.com/tree-sitter/tree-sitter-php" "v0.23.0" "php/src")) + '((php . ("https://github.com/tree-sitter/tree-sitter-php" "v0.23.4" "php/src")) (phpdoc . ("https://github.com/claytonrcarter/tree-sitter-phpdoc")) (html . ("https://github.com/tree-sitter/tree-sitter-html" "v0.23.0")) (javascript . ("https://github.com/tree-sitter/tree-sitter-javascript" "v0.23.0")) @@ -428,6 +428,27 @@ php-ts-mode--syntax-table ;;; Indent +(defconst php-ts-mode--possibly-braceless-keyword-re + (concat "\\_<" (regexp-opt '("if" "for" "foreach" "while" "do") t) "\\_>") + "Regexp matching keywords optionally followed by an opening brace.") + +(defun php-ts-mode--open-statement-group-heuristic (node parent bol &rest _) + "Heuristic matcher for statement-group without closing bracket. + +Return `php-ts-mode-indent-offset' plus 1 when BOL is after +`php-ts-mode--possibly-braceless-keyword-re', otherwise return 0. It's +usefull for matching incomplete compound_statement or colon_block. +PARENT is NODE's parent, BOL is the beginning of non-whitespace +characters of the current line." + (and (null node) + (save-excursion + (forward-line -1) + (if (re-search-forward + php-ts-mode--possibly-braceless-keyword-re + bol t) + (+ 1 php-ts-mode-indent-offset) + 0)))) + ;; taken from c-ts-mode (defun php-ts-mode--else-heuristic (node parent bol &rest _) "Heuristic matcher for when \"else\" is followed by a closing bracket. @@ -478,40 +499,47 @@ php-ts-mode--parent-eol (defun php-ts-mode--parent-html-bol (node parent _bol &rest _) "Find the first non-space characters of the HTML tags before NODE. +When NODE is nil call `php-ts-mode--open-statement-group-heuristic'. PARENT is NODE's parent, BOL is the beginning of non-whitespace characters of the current line." - (save-excursion - (let ((html-node (treesit-search-forward node "text" t))) - (if html-node - (let ((end-html (treesit-node-end html-node))) - (goto-char end-html) - (backward-word) - (back-to-indentation) - (point)) - (treesit-node-start parent))))) + (if (null node) + ;; If NODE is nil it could be an open statement-group. + (php-ts-mode--open-statement-group-heuristic node parent _bol) + (save-excursion + (let ((html-node (treesit-search-forward node "text" t))) + (if html-node + (let ((end-html (treesit-node-end html-node))) + (goto-char end-html) + (backward-word) + (back-to-indentation) + (point)) + (treesit-node-start parent)))))) (defun php-ts-mode--parent-html-heuristic (node parent _bol &rest _) "Return position based on html indentation. Returns 0 if the NODE is after the , otherwise returns the -indentation point of the last word before the NODE, plus the -indentation offset. If there is no HTML tag, it returns the beginning -of the parent. +indentation point of the last word before the NODE, plus the indentation +offset. If there is no HTML tag, it returns the beginning of the +parent. When NODE is nil call `php-ts-mode--open-statement-group-heuristic'. It can be used when you want to indent PHP code relative to the HTML. PARENT is NODE's parent, BOL is the beginning of non-whitespace characters of the current line." - (let ((html-node (treesit-search-forward node "text" t))) - (if html-node - (let ((end-html (treesit-node-end html-node))) - (save-excursion - (goto-char end-html) - (backward-word) - (back-to-indentation) - (if (search-forward "" end-html t 1) - 0 - (+ (point) php-ts-mode-indent-offset)))) - ;; Maybe it's better to use bol? - (treesit-node-start parent)))) + (if (null node) + ;; If NODE is nil it could be an open statement-group. + (php-ts-mode--open-statement-group-heuristic node parent _bol) + (let ((html-node (treesit-search-forward node "text" t))) + (if html-node + (let ((end-html (treesit-node-end html-node))) + (save-excursion + (goto-char end-html) + (backward-word) + (back-to-indentation) + (if (search-forward "" end-html t 1) + 0 + (+ (point) php-ts-mode-indent-offset)))) + ;; Maybe it's better to use bol? + (treesit-node-start parent))))) (defun php-ts-mode--array-element-heuristic (_node parent _bol &rest _) "Return of the position of the first element of the array. @@ -648,16 +676,22 @@ php-ts-mode--indent-styles ((parent-is "initializer_list") parent-bol php-ts-mode-indent-offset) ;; Statement in {} blocks. - ((or (and (parent-is "compound_statement") + ((or (and (or (parent-is "compound_statement") + (parent-is "colon_block")) ;; If the previous sibling(s) are not on their ;; own line, indent as if this node is the first ;; sibling php-ts-mode--first-sibling) - (match null "compound_statement")) + (or (match null "compound_statement") + (match null "colon_block"))) standalone-parent php-ts-mode-indent-offset) - ((parent-is "compound_statement") parent-bol php-ts-mode-indent-offset) + ((or (parent-is "compound_statement") + (parent-is "colon_block")) + parent-bol php-ts-mode-indent-offset) ;; Opening bracket. - ((node-is "compound_statement") standalone-parent php-ts-mode-indent-offset) + ((or (node-is "compound_statement") + (node-is "colon_block")) + standalone-parent php-ts-mode-indent-offset) ((parent-is "match_block") parent-bol php-ts-mode-indent-offset) ((parent-is "switch_block") parent-bol 0) @@ -667,6 +701,7 @@ php-ts-mode--indent-styles ;; rule for PHP alternative syntax ((or (node-is "else_if_clause") (node-is "endif") + (node-is "endfor") (node-is "endforeach") (node-is "endwhile")) parent-bol 0) @@ -679,9 +714,13 @@ php-ts-mode--indent-styles (parent-is "switch_statement") (parent-is "case_statement") (parent-is "empty_statement")) - parent-bol php-ts-mode-indent-offset)))) + parent-bol php-ts-mode-indent-offset) + + ;; Workaround: handle "for" open statement group. Currently + ;; the grammar handles it differently than other control structures. + (no-node php-ts-mode--open-statement-group-heuristic 0)))) `((psr2 - ((parent-is "program") parent-bol 0) + ((parent-is "program") php-ts-mode--open-statement-group-heuristic 0) ((parent-is "text_interpolation") column-0 0) ((parent-is "function_call_expression") parent-bol php-ts-mode-indent-offset) ,@common) @@ -774,21 +813,32 @@ php-ts-mode--predefined-constant "__FUNCTION__" "__LINE__" "__METHOD__" "__NAMESPACE__" "__TRAIT__") "PHP predefined constant.") -(defun php-ts-mode--test-namespace-name-as-prefix-p () - "Return t if namespace_name_as_prefix keyword is a named node, nil otherwise." +(defconst php-ts-mode--class-magic-methods + '("__construct" "__destruct" "__call" "__callStatic" "__get" "__set" + "__isset" "__unset" "__sleep" "__wakeup" "__serialize" "__unserialize" + "__toString" "__invoke" "__set_state" "__clone" "__debugInfo") + "PHP predefined magic methods.") + +(defun php-ts-mode--test-namespace-name-as-prefix-p () + "Return t if namespace_name_as_prefix is a named node, nil otherwise." (ignore-errors (progn (treesit-query-compile 'php "(namespace_name_as_prefix)" t) t))) -(defun php-ts-mode--test-namespace-aliasing-clause-p () - "Return t if namespace_name_as_prefix keyword is named node, nil otherwise." +(defun php-ts-mode--test-namespace-aliasing-clause-p () + "Return t if namespace_aliasing_clause is a named node, nil otherwise." (ignore-errors - (progn (treesit-query-compile 'php "(namespace_name_as_prefix)" t) t))) + (progn (treesit-query-compile 'php "(namespace_aliasing_clause)" t) t))) (defun php-ts-mode--test-namespace-use-group-clause-p () - "Return t if namespace_use_group_clause keyword is named node, nil otherwise." + "Return t if namespace_use_group_clause is a named node, nil otherwise." (ignore-errors (progn (treesit-query-compile 'php "(namespace_use_group_clause)" t) t))) +(defun php-ts-mode--test-visibility-modifier-operation-clause-p () + "Return t if (visibility_modifier (operation)) is defined, nil otherwise." + (ignore-errors + (progn (treesit-query-compile 'php "(visibility_modifier (operation))" t) t))) + (defun php-ts-mode--font-lock-settings () "Tree-sitter font-lock settings." (treesit-font-lock-rules @@ -796,7 +846,10 @@ php-ts-mode--font-lock-settings :language 'php :feature 'keyword :override t - `([,@php-ts-mode--keywords] @font-lock-keyword-face) + `([,@php-ts-mode--keywords] @font-lock-keyword-face + ,@(when (php-ts-mode--test-visibility-modifier-operation-clause-p) + '((visibility_modifier (operation) @font-lock-builtin-face))) + (var_modifier) @font-lock-builtin-face) :language 'php :feature 'comment @@ -826,7 +879,6 @@ php-ts-mode--font-lock-settings (named_label_statement (name) @font-lock-constant-face)) :language 'php - ;;:override t :feature 'delimiter `((["," ":" ";" "\\"]) @font-lock-delimiter-face) @@ -850,7 +902,6 @@ php-ts-mode--font-lock-settings :language 'php :feature 'string - ;;:override t `(("\"") @font-lock-string-face (encapsed_string) @font-lock-string-face (string_content) @font-lock-string-face @@ -892,32 +943,37 @@ php-ts-mode--font-lock-settings name: (_) @font-lock-type-face) (trait_declaration name: (_) @font-lock-type-face) - (property_declaration - (visibility_modifier) @font-lock-keyword-face) - (property_declaration - (var_modifier) @font-lock-keyword-face) (enum_declaration name: (_) @font-lock-type-face) (function_definition name: (_) @font-lock-function-name-face) (method_declaration name: (_) @font-lock-function-name-face) + (method_declaration + name: (name) @font-lock-builtin-face + (:match ,(rx-to-string + `(: bos (or ,@php-ts-mode--class-magic-methods) eos)) + @font-lock-builtin-face)) ("=>") @font-lock-keyword-face (object_creation_expression (name) @font-lock-type-face) ,@(when (php-ts-mode--test-namespace-name-as-prefix-p) - '((namespace_name_as_prefix "\\" @font-lock-delimiter-face) - (namespace_name_as_prefix - (namespace_name (name)) @font-lock-type-face))) + '((namespace_name_as_prefix "\\" @font-lock-delimiter-face) + (namespace_name_as_prefix + (namespace_name (name)) @font-lock-type-face))) ,@(if (php-ts-mode--test-namespace-aliasing-clause-p) - '((namespace_aliasing_clause (name) @font-lock-type-face)) - '((namespace_use_clause alias: (name) @font-lock-type-face))) + '((namespace_aliasing_clause (name) @font-lock-type-face)) + '((namespace_use_clause alias: (name) @font-lock-type-face))) ,@(when (not (php-ts-mode--test-namespace-use-group-clause-p)) - '((namespace_use_group - (namespace_use_clause (name) @font-lock-type-face)))) + '((namespace_use_group + (namespace_use_clause (name) @font-lock-type-face)))) (namespace_name "\\" @font-lock-delimiter-face) (namespace_name (name) @font-lock-type-face) - (use_declaration (name) @font-lock-property-use-face)) + (use_declaration (name) @font-lock-property-use-face) + (use_instead_of_clause (name) @font-lock-type-face) + (binary_expression + operator: "instanceof" + right: (name) @font-lock-type-face)) :language 'php :feature 'function-scope @@ -932,9 +988,9 @@ php-ts-mode--font-lock-settings '((function_call_expression function: (name) @font-lock-function-call-face) (scoped_call_expression - name: (_) @font-lock-function-name-face) + name: (_) @font-lock-function-call-face) (member_call_expression - name: (_) @font-lock-function-name-face) + name: (_) @font-lock-function-call-face) (nullsafe_member_call_expression name: (_) @font-lock-constant-face)) -- 2.47.0 --nextPart3583319.dWV9SEqChM--