From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: john muhl via "Bug reports for GNU Emacs, the Swiss army knife of text editors" Newsgroups: gmane.emacs.bugs Subject: bug#67554: Acknowledgement ([PATCH] Improve font-lock in lua-ts-mode) Date: Thu, 30 Nov 2023 18:34:59 -0600 Message-ID: <877clylpx4.fsf@pub.pink> References: <87h6l2lrbj.fsf@pub.pink> Reply-To: john muhl Mime-Version: 1.0 Content-Type: text/x-patch Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="17811"; mail-complaints-to="usenet@ciao.gmane.io" To: 67554@debbugs.gnu.org Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Fri Dec 01 01:37:11 2023 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 1r8rWo-0004P2-PL for geb-bug-gnu-emacs@m.gmane-mx.org; Fri, 01 Dec 2023 01:37:11 +0100 Original-Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1r8rWa-0005vX-Db; Thu, 30 Nov 2023 19:36:56 -0500 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 1r8rWY-0005vF-2W for bug-gnu-emacs@gnu.org; Thu, 30 Nov 2023 19:36:54 -0500 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 1r8rWX-0000vH-I1 for bug-gnu-emacs@gnu.org; Thu, 30 Nov 2023 19:36:53 -0500 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1r8rWf-0008Ct-OH for bug-gnu-emacs@gnu.org; Thu, 30 Nov 2023 19:37:01 -0500 X-Loop: help-debbugs@gnu.org Resent-From: john muhl Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Fri, 01 Dec 2023 00:37:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 67554 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: patch Original-Received: via spool by 67554-submit@debbugs.gnu.org id=B67554.170139100031521 (code B ref 67554); Fri, 01 Dec 2023 00:37:01 +0000 Original-Received: (at 67554) by debbugs.gnu.org; 1 Dec 2023 00:36:40 +0000 Original-Received: from localhost ([127.0.0.1]:54753 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1r8rWJ-0008CL-E2 for submit@debbugs.gnu.org; Thu, 30 Nov 2023 19:36:40 -0500 Original-Received: from out-179.mta1.migadu.com ([2001:41d0:203:375::b3]:52449) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1r8rWH-0008CA-6r for 67554@debbugs.gnu.org; Thu, 30 Nov 2023 19:36:38 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=pub.pink; s=key1; t=1701390986; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=3+jLP4WiJeNFfmZY0risOFoKm1u4X30c+Zvj7Rzwf5A=; b=nhQPhd6EnI/QYVMppyyUwQyox54jLkhJrIrabN0uQtbTyvpUAKJQ8AOp+zLyL8vcCzQR52 fjKW++Y/uVFOoZygOHJX0RaYFlff1bpwgw60QVP9Ilz6xYY3dacsowyK4W3FPkTHsm3EiW wgiMjC1FmybUGyovCOsSiI3cuEWJG30= X-Report-Abuse: Please report any abuse attempt to abuse@migadu.com and include these headers. In-reply-to: Content-Disposition: attachment; filename=0001-Improve-font-locking-in-lua-ts-mode-bug-67554.patch X-Migadu-Flow: FLOW_OUT 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:275301 Archived-At: >From 5a87b7b231a384c7035e75105bc173fc05f38336 Mon Sep 17 00:00:00 2001 From: john muhl Date: Tue, 14 Nov 2023 16:25:43 -0600 Subject: [PATCH] Improve font-locking in lua-ts-mode (bug#67554) * lisp/progmodes/lua-ts-mode.el (lua-ts-mode): Move property highlighting to level 4. (lua-ts--keywords): Remove `true', `false' and `nil' from keywords. (lua-ts--font-lock-settings): Highlight assignments, functions and labels in more places. Distinguish comment delimiters. (lua-ts--comment-font-lock): New function. --- lisp/progmodes/lua-ts-mode.el | 151 ++++++++++++++++++---------------- 1 file changed, 79 insertions(+), 72 deletions(-) diff --git a/lisp/progmodes/lua-ts-mode.el b/lisp/progmodes/lua-ts-mode.el index a910d759c83..7dd05b2757f 100644 --- a/lisp/progmodes/lua-ts-mode.el +++ b/lisp/progmodes/lua-ts-mode.el @@ -133,135 +133,141 @@ lua-ts--builtins "Lua built-in functions for tree-sitter font-locking.") (defvar lua-ts--keywords - '("and" "do" "else" "elseif" "end" "for" "function" - "goto" "if" "in" "local" "not" "or" "repeat" - "return" "then" "until" "while") + '("and" "do" "else" "elseif" "end" "for" "function" "goto" "if" + "in" "local" "not" "or" "repeat" "return" "then" "until" "while") "Lua keywords for tree-sitter font-locking and navigation.") +(defun lua-ts--comment-font-lock (node override start end &rest _) + "Apply font lock to comment NODE within START and END. +Applies `font-lock-comment-delimiter-face' and +`font-lock-comment-face' See `treesit-fontify-with-override' for +values of OVERRIDE." + (let* ((node-start (treesit-node-start node)) + (node-end (treesit-node-end node)) + (node-text (treesit-node-text node t)) + (delimiter-end (+ 2 node-start))) + (when (and (>= node-start start) + (<= delimiter-end end) + (string-match "\\`--" node-text)) + (treesit-fontify-with-override node-start + delimiter-end + font-lock-comment-delimiter-face + override)) + (treesit-fontify-with-override (max delimiter-end start) + (min node-end end) + font-lock-comment-face + override))) + (defvar lua-ts--font-lock-settings (treesit-font-lock-rules - :language 'lua + :default-language 'lua :feature 'bracket '(["(" ")" "[" "]" "{" "}"] @font-lock-bracket-face) - :language 'lua :feature 'delimiter '(["," ";"] @font-lock-delimiter-face) - :language 'lua :feature 'constant - '((variable_list - attribute: (attribute (["<" ">"] (identifier)))) - @font-lock-constant-face - (goto_statement (identifier) @font-lock-constant-face) - (label_statement) @font-lock-constant-face) + '([(variable_list + attribute: (attribute (["<" ">"] (identifier)))) + (label_statement) + (true) (false) (nil)] + @font-lock-constant-face) - :language 'lua :feature 'operator - '(["and" "not" "or" "+" "-" "*" "/" "%" "^" - "#" "==" "~=" "<=" ">=" "<" ">" "=" "&" - "~" "|" "<<" ">>" "//" ".."] - @font-lock-operator-face - (vararg_expression) @font-lock-operator-face) + '(["+" "-" "*" "/" "%" "^" "#" "==" "~=" "<=" ">=" + "<" ">" "=" "&" "~" "|" "<<" ">>" "//" ".." + (vararg_expression)] + @font-lock-operator-face) - :language 'lua :feature 'builtin `(((identifier) @font-lock-builtin-face (:match ,(regexp-opt lua-ts--builtins 'symbols) @font-lock-builtin-face))) - :language 'lua :feature 'function '((function_call name: (identifier) @font-lock-function-call-face) (function_call - name: (method_index_expression - method: (identifier) @font-lock-function-call-face)) + (method_index_expression + method: (identifier) @font-lock-function-call-face)) (function_call - name: (dot_index_expression (identifier) @font-lock-function-call-face))) + (dot_index_expression + field: (identifier) @font-lock-function-call-face))) - :language 'lua :feature 'punctuation '(["." ":"] @font-lock-punctuation-face) - :language 'lua :feature 'variable '((function_call - arguments: (arguments (identifier)) - @font-lock-variable-use-face) + (arguments (identifier) @font-lock-variable-use-face)) (function_call - name: (method_index_expression - table: (identifier) @font-lock-variable-use-face))) + (arguments + (binary_expression (identifier) @font-lock-variable-use-face))) + (function_call + (arguments + (bracket_index_expression (identifier) @font-lock-variable-use-face))) + (function_declaration + (parameters name: (identifier) @font-lock-variable-name-face))) - :language 'lua :feature 'number '((number) @font-lock-number-face) - :language 'lua :feature 'keyword - `((break_statement) @font-lock-keyword-face - (true) @font-lock-constant-face - (false) @font-lock-constant-face - (nil) @font-lock-constant-face - ,(vconcat lua-ts--keywords) - @font-lock-keyword-face) - - :language 'lua + `([(break_statement) + ,(vconcat lua-ts--keywords)] + @font-lock-keyword-face + (goto_statement ((identifier) @font-lock-constant-face))) + :feature 'string '((string) @font-lock-string-face) - :language 'lua :feature 'escape :override t '((escape_sequence) @font-lock-escape-face) - :language 'lua :feature 'comment - '((comment) @font-lock-comment-face + '((comment) @lua-ts--comment-font-lock (hash_bang_line) @font-lock-comment-face) - :language 'lua :feature 'definition '((function_declaration - name: (identifier) @font-lock-function-name-face) - (assignment_statement - (variable_list name: [(identifier)]) @font-lock-function-name-face - (expression_list value: (function_definition))) - (table_constructor - (field - name: (identifier) @font-lock-function-name-face - value: (function_definition))) - (function_declaration - name: (dot_index_expression (identifier) @font-lock-function-name-face)) + (identifier) @font-lock-function-name-face) (function_declaration - name: (method_index_expression (identifier) @font-lock-function-name-face)) + (dot_index_expression + field: (identifier) @font-lock-function-name-face)) (function_declaration (method_index_expression + method: (identifier) @font-lock-function-name-face)) + (assignment_statement + (variable_list + (identifier) @font-lock-function-name-face) + (expression_list value: (function_definition))) + (field + name: (identifier) @font-lock-function-name-face + value: (function_definition)) + (assignment_statement + (variable_list (dot_index_expression - table: (identifier) @font-lock-function-name-face - field: (identifier) @font-lock-property-name-face - ))) - (parameters - name: (identifier) @font-lock-variable-name-face) + field: (identifier) @font-lock-function-name-face)) + (expression_list + value: + (function_definition)))) + + :feature 'assignment + '((variable_list (identifier) @font-lock-variable-name-face) + (variable_list + (bracket_index_expression + field: (identifier) @font-lock-variable-name-face)) + (variable_list + (dot_index_expression + field: (identifier) @font-lock-variable-name-face)) (for_numeric_clause name: (identifier) @font-lock-variable-name-face)) - :language 'lua :feature 'property '((field name: (identifier) @font-lock-property-name-face) (dot_index_expression field: (identifier) @font-lock-property-use-face)) - :language 'lua - :feature 'assignment - '((variable_list - [(identifier) - (bracket_index_expression)] - @font-lock-variable-name-face) - (variable_list - (dot_index_expression - table: (identifier)) - @font-lock-variable-name-face)) - - :language 'lua :feature 'error :override t '((ERROR) @font-lock-warning-face)) @@ -665,13 +671,14 @@ lua-ts-mode (setq-local treesit-font-lock-settings lua-ts--font-lock-settings) (setq-local treesit-font-lock-feature-list '((comment definition) - (keyword property string) + (keyword string) (assignment builtin constant number) (bracket delimiter escape function operator + property punctuation variable))) -- 2.41.0