branch: scratch/rust-mode commit 01df37d52386b89fad3bebcc93d87d755ae92fa0 Author: Stefan Monnier <monn...@iro.umontreal.ca> Commit: Stefan Monnier <monn...@iro.umontreal.ca>
Add email to `Maintainer:`; various cosmetic changes --- .gitignore | 1 + rust-cargo.el | 2 +- rust-compile.el | 2 +- rust-mode-tests.el | 51 ++++++++++++++++++++++-------------- rust-mode.el | 77 +++++++++++++++++++++++------------------------------- rust-rustfmt.el | 10 +++---- 6 files changed, 71 insertions(+), 72 deletions(-) diff --git a/.gitignore b/.gitignore index 2835be648c..8663ddfd6b 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,6 @@ *.elc *-autoloads.el +/rust-mode-pkg.el .eask /dist diff --git a/rust-cargo.el b/rust-cargo.el index 090945a16d..0c35ddb150 100644 --- a/rust-cargo.el +++ b/rust-cargo.el @@ -64,7 +64,7 @@ (when rust-always-locate-project-on-open (rust-update-buffer-project))) -(add-hook 'rust-mode-hook 'rust-maybe-initialize-buffer-project) +(add-hook 'rust-mode-hook #'rust-maybe-initialize-buffer-project) ;;; Internal diff --git a/rust-compile.el b/rust-compile.el index 78a53cf1d6..1bb31030ee 100644 --- a/rust-compile.el +++ b/rust-compile.el @@ -76,7 +76,7 @@ the compilation window until the top of the error is visible." (add-to-list 'compilation-error-regexp-alist-alist (cons 'cargo cargo-compilation-regexps)) (add-to-list 'compilation-error-regexp-alist 'cargo) - (add-hook 'next-error-hook 'rustc-scroll-down-after-next-error))) + (add-hook 'next-error-hook #'rustc-scroll-down-after-next-error))) ;;; _ (provide 'rust-compile) diff --git a/rust-mode-tests.el b/rust-mode-tests.el index 8e3ee45f2b..011663c449 100644 --- a/rust-mode-tests.el +++ b/rust-mode-tests.el @@ -7,16 +7,19 @@ (require 'imenu) (defconst rust-test-fill-column 32) +;; FIXME: Loading a file shouldn't cause such changes. (setq-default indent-tabs-mode nil) +;; FIXME: This macro doesn't obey the `rust-' namespace. (defmacro test-silence (messages &rest body) - `(cl-letf* (((symbol-function 'm) - (symbol-function #'message)) - ((symbol-function #'message) - (lambda (format-string &rest args) - (unless (member format-string ,messages) - (apply 'm format-string args))))) - ,@body)) + `(let ((f (lambda (orig-fun format-string &rest args) + (unless (member format-string ,messages) + (apply orig-fun format-string args))))) + (unwind-protect + (progn + (advice-add 'message :around f) + ,@body) + (advice-remove 'message f)))) (defun rust-compare-code-after-manip (_original _point-pos _manip-func expected got) (equal expected got)) @@ -53,6 +56,7 @@ (should (rust-compare-code-after-manip original point-pos manip-func expected (buffer-string))))) +;; FIXME: This function doesn't obey the `rust-' namespace. (defun test-fill-paragraph (unfilled expected &optional start-pos end-pos) "We're going to run through many scenarios here--the point should be able to be anywhere from the start-pos (defaults to 1) through end-pos (defaults to the length of what was passed in) and (fill-paragraph) should return the same result. It should also work with fill-region from start-pos to end-pos. @@ -253,6 +257,7 @@ fn bar() { }" /// even more. fn bar() { }" 14 85)) +;; FIXME: This function doesn't obey the `rust-' namespace. (defun test-auto-fill (initial position inserted expected) (rust-test-manip-code initial @@ -312,6 +317,7 @@ very very very long string */" )) +;; FIXME: This function doesn't obey the `rust-' namespace. (defun test-indent (indented &optional deindented) (let ((deindented (or deindented (replace-regexp-in-string "^[[:blank:]]*" " " indented)))) (rust-test-manip-code @@ -392,11 +398,11 @@ not_a_string(); " - (apply 'append (mapcar (lambda (s) (list s 'font-lock-string-face)) - '("r\"foo\\\"" "\"bar\"" "r\"bar\"" - "r\"foo\\.\"" "\"bar\"" "r\"bar\"" - "r\"foo\\..\"" "\"bar\"" "r\"foo\\..\\bar\"" - "r\"\\\"" "\"foo\"" "r\"\\foo\""))) + (apply #'append (mapcar (lambda (s) (list s 'font-lock-string-face)) + '("r\"foo\\\"" "\"bar\"" "r\"bar\"" + "r\"foo\\.\"" "\"bar\"" "r\"bar\"" + "r\"foo\\..\"" "\"bar\"" "r\"foo\\..\\bar\"" + "r\"\\\"" "\"foo\"" "r\"\\foo\""))) )) (ert-deftest font-lock-raw-string-after-normal-string-ending-in-r () @@ -3305,7 +3311,10 @@ type Foo<T> where T: Copy = Box<T>; (ert-deftest redo-syntax-after-change-far-from-point () (let* ((tmp-file-name (make-temp-file "rust-mdoe-test-issue104")) - (base-contents (apply 'concat (append '("fn foo() {\n\n}\n") (make-list 500 "// More stuff...\n") '("fn bar() {\n\n}\n"))))) + (base-contents (apply #'concat + (append '("fn foo() {\n\n}\n") + (make-list 500 "// More stuff...\n") + '("fn bar() {\n\n}\n"))))) ;; Create the temp file... (with-temp-file tmp-file-name (insert base-contents)) @@ -3325,6 +3334,7 @@ type Foo<T> where T: Copy = Box<T>; ) ) +;; FIXME: This function doesn't obey the `rust-' namespace. (defun test-imenu (code expected-items) (with-temp-buffer (rust-mode) @@ -3480,12 +3490,12 @@ impl Two<'a> { #'rust-dbg-wrap-or-unwrap "let x = dbg!(\"foo, bar\")")) -(when (executable-find rust-cargo-bin) - (ert-deftest rust-test-project-located () - (let* ((test-dir (expand-file-name "test-project/" default-directory)) - (manifest-file (expand-file-name "Cargo.toml" test-dir))) - (let ((default-directory test-dir)) - (should (equal (expand-file-name (rust-buffer-project)) manifest-file)))))) +(ert-deftest rust-test-project-located () + (skip-unless (executable-find rust-cargo-bin)) + (let* ((test-dir (expand-file-name "test-project/" default-directory)) + (manifest-file (expand-file-name "Cargo.toml" test-dir))) + (let ((default-directory test-dir)) + (should (equal (expand-file-name (rust-buffer-project)) manifest-file))))) (defun rust-collect-matches (spec) (let ((matches nil)) @@ -3631,5 +3641,6 @@ impl Two<'a> { `(should (or (string-match "Prefix Command" ,match) - (string-match "^C-c C" ,match))))) + (string-match "^C-c C" ,match))) + t)) (should (< 0 match-count))))) diff --git a/rust-mode.el b/rust-mode.el index dda79942e2..53c595c13d 100644 --- a/rust-mode.el +++ b/rust-mode.el @@ -2,6 +2,7 @@ ;; Version: 1.0.5 ;; Author: Mozilla +;; Maintainer: brotzeit <brotzeitmac...@gmail.com> ;; Url: https://github.com/rust-lang/rust-mode ;; Keywords: languages ;; Package-Requires: ((emacs "25.1")) @@ -57,33 +58,28 @@ This variable might soon be remove again.") (defcustom rust-indent-offset 4 "Indent Rust code by this number of spaces." :type 'integer - :group 'rust-mode :safe #'integerp) (defcustom rust-indent-method-chain nil "Indent Rust method chains, aligned by the `.' operators." :type 'boolean - :group 'rust-mode :safe #'booleanp) (defcustom rust-indent-where-clause nil "Indent lines starting with the `where' keyword following a function or trait. When nil, `where' will be aligned with `fn' or `trait'." :type 'boolean - :group 'rust-mode :safe #'booleanp) (defcustom rust-match-angle-brackets t "Whether to enable angle bracket (`<' and `>') matching where appropriate." :type 'boolean - :safe #'booleanp - :group 'rust-mode) + :safe #'booleanp) (defcustom rust-indent-return-type-to-arguments t "Indent a line starting with the `->' (RArrow) following a function, aligning to the function arguments. When nil, `->' will be indented one level." :type 'boolean - :group 'rust-mode :safe #'booleanp) ;;; Faces @@ -99,28 +95,23 @@ to the function arguments. When nil, `->' will be indented one level." (defface rust-unsafe '((t :inherit font-lock-warning-face)) - "Face for the `unsafe' keyword." - :group 'rust-mode) + "Face for the `unsafe' keyword.") (defface rust-question-mark '((t :weight bold :inherit font-lock-builtin-face)) - "Face for the question mark operator." - :group 'rust-mode) + "Face for the question mark operator.") (defface rust-ampersand-face '((t :inherit default)) - "Face for the ampersand reference mark." - :group 'rust-mode) + "Face for the ampersand reference mark.") (defface rust-builtin-formatting-macro '((t :inherit font-lock-builtin-face)) - "Face for builtin formatting macros (print! &c.)." - :group 'rust-mode) + "Face for builtin formatting macros (print! &c.).") (defface rust-string-interpolation '((t :slant italic :inherit font-lock-string-face)) - "Face for interpolating braces in builtin formatting macro strings." - :group 'rust-mode) + "Face for interpolating braces in builtin formatting macro strings.") ;;; Syntax @@ -236,15 +227,15 @@ See `prettify-symbols-compose-predicate'." (defvar rust-mode-map (let ((map (make-sparse-keymap))) - (define-key map (kbd "C-c C-d") 'rust-dbg-wrap-or-unwrap) + (define-key map (kbd "C-c C-d") #'rust-dbg-wrap-or-unwrap) (when rust-load-optional-libraries - (define-key map (kbd "C-c C-c C-u") 'rust-compile) - (define-key map (kbd "C-c C-c C-k") 'rust-check) - (define-key map (kbd "C-c C-c C-t") 'rust-test) - (define-key map (kbd "C-c C-c C-r") 'rust-run) - (define-key map (kbd "C-c C-c C-l") 'rust-run-clippy) - (define-key map (kbd "C-c C-f") 'rust-format-buffer) - (define-key map (kbd "C-c C-n") 'rust-goto-format-problem)) + (define-key map (kbd "C-c C-c C-u") #'rust-compile) + (define-key map (kbd "C-c C-c C-k") #'rust-check) + (define-key map (kbd "C-c C-c C-t") #'rust-test) + (define-key map (kbd "C-c C-c C-r") #'rust-run) + (define-key map (kbd "C-c C-c C-l") #'rust-run-clippy) + (define-key map (kbd "C-c C-f") #'rust-format-buffer) + (define-key map (kbd "C-c C-n") #'rust-goto-format-problem)) map) "Keymap for Rust major mode.") @@ -253,14 +244,12 @@ See `prettify-symbols-compose-predicate'." "Major mode for Rust code. \\{rust-mode-map}" - :group 'rust-mode - :syntax-table rust-mode-syntax-table ;; Syntax (setq-local syntax-propertize-function #'rust-syntax-propertize) ;; Indentation - (setq-local indent-line-function 'rust-mode-indent-line) + (setq-local indent-line-function #'rust-mode-indent-line) ;; Fonts (setq-local font-lock-defaults @@ -286,21 +275,22 @@ See `prettify-symbols-compose-predicate'." comment-start-skip "\\|\\*/?[[:space:]]*\\|\\)$")) (setq-local paragraph-separate paragraph-start) - (setq-local normal-auto-fill-function 'rust-do-auto-fill) - (setq-local fill-paragraph-function 'rust-fill-paragraph) - (setq-local fill-forward-paragraph-function 'rust-fill-forward-paragraph) - (setq-local adaptive-fill-function 'rust-find-fill-prefix) + (setq-local normal-auto-fill-function #'rust-do-auto-fill) + (setq-local fill-paragraph-function #'rust-fill-paragraph) + (setq-local fill-forward-paragraph-function #'rust-fill-forward-paragraph) + (setq-local adaptive-fill-function #'rust-find-fill-prefix) (setq-local adaptive-fill-first-line-regexp "") (setq-local comment-multi-line t) - (setq-local comment-line-break-function 'rust-comment-indent-new-line) + (setq-local comment-line-break-function #'rust-comment-indent-new-line) (setq-local imenu-generic-expression rust-imenu-generic-expression) (setq-local imenu-syntax-alist '((?! . "w"))) ; For macro_rules! - (setq-local beginning-of-defun-function 'rust-beginning-of-defun) - (setq-local end-of-defun-function 'rust-end-of-defun) + (setq-local beginning-of-defun-function #'rust-beginning-of-defun) + (setq-local end-of-defun-function #'rust-end-of-defun) (setq-local parse-sexp-lookup-properties t) (setq-local electric-pair-inhibit-predicate - 'rust-electric-pair-inhibit-predicate-wrap) - (setq-local electric-pair-skip-self 'rust-electric-pair-skip-self-wrap) + #'rust-electric-pair-inhibit-predicate-wrap) + (add-function :before-until (local 'electric-pair-skip-self) + #'rust-electric-pair-skip-self) ;; Configure prettify (setq prettify-symbols-alist rust-prettify-symbols-alist) (setq prettify-symbols-compose-predicate #'rust--prettify-symbols-compose-p) @@ -1317,13 +1307,10 @@ This wraps the default defined by `electric-pair-inhibit-predicate'." (rust-is-lt-char-operator))) (funcall (default-value 'electric-pair-inhibit-predicate) char))) -(defun rust-electric-pair-skip-self-wrap (char) +(defun rust-electric-pair-skip-self (char) "Skip CHAR instead of inserting a second closing character. -This wraps the default defined by `electric-pair-skip-self'." - (or - (= ?> char) - (let ((skip-self (default-value 'electric-pair-skip-self))) - (and skip-self (funcall skip-self char))))) +This is added to the default skips defined by `electric-pair-skip-self'." + (= ?> char)) (defun rust-ordinary-lt-gt-p () "Test whether the `<' or `>' at point is an ordinary operator of some kind. @@ -1543,10 +1530,10 @@ This handles multi-line comments with a * prefix on each line." (lambda () (let ((fill-paragraph-function - (if (not (eq fill-paragraph-function 'rust-fill-paragraph)) + (if (not (eq fill-paragraph-function #'rust-fill-paragraph)) fill-paragraph-function)) (fill-paragraph-handle-comment t)) - (apply 'fill-paragraph args) + (apply #'fill-paragraph args) t)))))) (defun rust-do-auto-fill (&rest args) @@ -1554,7 +1541,7 @@ This handles multi-line comments with a * prefix on each line." This handles multi-line comments with a * prefix on each line." (rust-with-comment-fill-prefix (lambda () - (apply 'do-auto-fill args) + (apply #'do-auto-fill args) t))) (defun rust-fill-forward-paragraph (arg) diff --git a/rust-rustfmt.el b/rust-rustfmt.el index 025ec32a8f..bb8864728c 100644 --- a/rust-rustfmt.el +++ b/rust-rustfmt.el @@ -47,7 +47,7 @@ (erase-buffer) (insert-buffer-substring buf) (let* ((tmpf (make-temp-file "rustfmt")) - (ret (apply 'call-process-region + (ret (apply #'call-process-region (point-min) (point-max) rust-rustfmt-bin @@ -152,7 +152,7 @@ rustfmt complain in the echo area." (defconst rust--format-word "\ \\b\\(else\\|enum\\|fn\\|for\\|if\\|let\\|loop\\|\ match\\|struct\\|union\\|unsafe\\|while\\)\\b") -(defconst rust--format-line "\\([\n]\\)") +(defconst rust--format-line "\\(\n\\)") ;; Counts number of matches of regex beginning up to max-beginning, ;; leaving the point at the beginning of the last match. @@ -239,7 +239,7 @@ match\\|struct\\|union\\|unsafe\\|while\\)\\b") Return the created process." (interactive) (unless (executable-find rust-rustfmt-bin) - (error "Could not locate executable \%s\"" rust-rustfmt-bin)) + (error "Could not locate executable %S" rust-rustfmt-bin)) (let* ((buffer (with-current-buffer (get-buffer-create "*rustfmt-diff*") @@ -247,14 +247,14 @@ Return the created process." (erase-buffer)) (current-buffer))) (proc - (apply 'start-process + (apply #'start-process "rustfmt-diff" buffer rust-rustfmt-bin "--check" (cons (buffer-file-name) rust-rustfmt-switches)))) - (set-process-sentinel proc 'rust-format-diff-buffer-sentinel) + (set-process-sentinel proc #'rust-format-diff-buffer-sentinel) proc)) (defun rust-format-diff-buffer-sentinel (process _e)