Skip to content

Commit

Permalink
Fix dependencies between rust-mode implementations
Browse files Browse the repository at this point in the history
"rust-prog-mode.el" and "rust-mode-treesitter.el" provide competing
implementations of `rust-mode'.  Both implementations depend on code
in "rust-mode.el", and thus must require that.

Doing that is complicated by the fact that "rust-mode.el" loads one
of these libraries, depending on `rust-mode-treesitter-derive's value.

Address this conflict by:

1. Requiring feature `rust-mode' in the two libraries that implement the
   `rust-mode' major-mode and that use things defined in "rust-mode.el".

2. Moving the require forms for these two libraries in "rust-mode.el",
   below the `provide' form for `rust-mode'.
  • Loading branch information
tarsius committed Mar 27, 2024
1 parent 1ce4f8e commit 7c5de03
Show file tree
Hide file tree
Showing 3 changed files with 12 additions and 8 deletions.
7 changes: 4 additions & 3 deletions rust-mode-treesitter.el
Expand Up @@ -5,12 +5,13 @@

;;; Code:

(require 'rust-mode)

;; Do not compile or load on Emacs releases that don't support
;; this. See https://github.com/rust-lang/rust-mode/issues/520.
(when (version<= "29.1" emacs-version)
;; We have the when macro because of
;; https://github.com/rust-lang/rust-mode/issues/520
(require 'treesit)
(require 'rust-ts-mode)
(require 'rust-common)

(define-derived-mode rust-mode rust-ts-mode "Rust"
"Major mode for Rust code.
Expand Down
10 changes: 6 additions & 4 deletions rust-mode.el
Expand Up @@ -71,17 +71,19 @@ instead of `prog-mode'. This option requires emacs29+."
map)
"Keymap for Rust major mode.")

(if (and (version<= "29.1" emacs-version) rust-mode-treesitter-derive)
(require 'rust-mode-treesitter)
(require 'rust-prog-mode))

;;;###autoload
(autoload 'rust-mode "rust-mode" "Major mode for Rust code." t)

;;;###autoload
(add-to-list 'auto-mode-alist '("\\.rs\\'" . rust-mode))

(provide 'rust-mode)

(if (and rust-mode-treesitter-derive
(version<= "29.1" emacs-version))
(require 'rust-mode-treesitter)
(require 'rust-prog-mode))

(require 'rust-utils)

;;; rust-mode.el ends here
3 changes: 2 additions & 1 deletion rust-prog-mode.el
Expand Up @@ -4,7 +4,8 @@
;; rust-mode code deriving from prog-mode instead of rust-ts-mode

;;; Code:
(require 'rust-common)

(require 'rust-mode)

(defvar electric-pair-inhibit-predicate)
(defvar electric-pair-skip-self)
Expand Down

0 comments on commit 7c5de03

Please sign in to comment.