From ac2a4f61bdd0dc3a71a544d25de7cb36d37f44f9 Mon Sep 17 00:00:00 2001 From: Noah Peart Date: Fri, 19 Apr 2024 10:27:10 -0700 Subject: [PATCH] Add rust-ts-mode font-locking tests (bug#70464) * test/lisp/progmodes/rust-ts-mode-tests.el: New file for rust-ts-mode tests. * test/lisp/progmodes/rust-ts-mode-resources/font-lock.rs: New file with rust-ts-mode font-locking tests. New tests added for macro font-locking (bug#70464) and function signatures (bug#70465). --- .../rust-ts-mode-resources/font-lock.rs | 25 ++++++++++++++ test/lisp/progmodes/rust-ts-mode-tests.el | 34 +++++++++++++++++++ 2 files changed, 59 insertions(+) create mode 100644 test/lisp/progmodes/rust-ts-mode-resources/font-lock.rs create mode 100644 test/lisp/progmodes/rust-ts-mode-tests.el diff --git a/test/lisp/progmodes/rust-ts-mode-resources/font-lock.rs b/test/lisp/progmodes/rust-ts-mode-resources/font-lock.rs new file mode 100644 index 00000000000..377cda0e3b9 --- /dev/null +++ b/test/lisp/progmodes/rust-ts-mode-resources/font-lock.rs @@ -0,0 +1,25 @@ +// -*- rust-ts-mode-indent-offset: 0 -*- +// Trait with function signature +trait Foo { + fn foo(); +// ^ font-lock-function-name-face +} + +// Macros +macro_rules! unsafe_foo { + ($env:expr, $name:ident $(, $args:expr)*) => { +// ^ font-lock-variable-name-face +// ^ font-lock-type-face +// ^ font-lock-variable-name-face +// ^ font-lock-type-face +// ^ font-lock-operator-face +// ^ font-lock-variable-name-face +// ^ font-lock-type-face +// ^ font-lock-operator-face + { + foo!($env, $name $(, $args)*); +// ^ font-lock-variable-use-face +// ^ font-lock-operator-face +// ^ font-lock-operator-face + } + }; diff --git a/test/lisp/progmodes/rust-ts-mode-tests.el b/test/lisp/progmodes/rust-ts-mode-tests.el new file mode 100644 index 00000000000..f718a57fc9e --- /dev/null +++ b/test/lisp/progmodes/rust-ts-mode-tests.el @@ -0,0 +1,34 @@ +;;; rust-ts-mode-tests.el --- Tests for rust-ts-mode -*- lexical-binding: t; -*- + +;; Copyright (C) 2023-2024 Free Software Foundation, Inc. + +;; This file is part of GNU Emacs. + +;; GNU Emacs is free software: you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; GNU Emacs is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with GNU Emacs. If not, see . + +;;; Code: + +(require 'ert) +(require 'ert-font-lock) +(require 'ert-x) +(require 'treesit) + +(ert-deftest rust-ts-test-font-lock () + (skip-unless (treesit-ready-p 'rust)) + (let ((treesit-font-lock-level 4)) + (ert-font-lock-test-file (ert-resource-file "font-lock.rs") 'rust-ts-mode))) + +(provide 'rust-ts-mode-tests) + +;;; rust-ts-mode-tests.el ends here