Add the "Rust programming" section

This commit is contained in:
Gerard Vermeulen 2025-02-06 12:59:37 +01:00
parent 072b0056b3
commit cb0d90a10a

View File

@ -883,7 +883,16 @@ minibuffer completion]] for more information.
;; https://www.masteringemacs.org/article/understanding-minibuffer-completion ;; https://www.masteringemacs.org/article/understanding-minibuffer-completion
(setopt (setopt
completion-category-overrides '((file (styles basic substring))) completion-category-overrides '((file (styles basic substring)))
completion-styles '(basic flex partial-completion substring))) completion-styles '(basic flex partial-completion substring))
(defun read-natnum (prompt &optional natnum default hist)
"Read NATNUM until it is a natural number and return its value.
See the function `read-number' for PROMPT (after tweaking), DEFAULT, and HIST."
(while (not (natnump natnum))
(setq natnum (read-number
(format "%s (`%S'): " prompt natnum) default hist)))
natnum))
(when (ensure-package-installation 'marginalia) (when (ensure-package-installation 'marginalia)
(marginalia-mode +1)) (marginalia-mode +1))
@ -5022,6 +5031,100 @@ if __name__ == "__main__":
# PDB: The series of "s" says only here "Uncaught exception". # PDB: The series of "s" says only here "Uncaught exception".
#+end_src #+end_src
** [[https://www.rust-lang.org/][Rust programming]]
:PROPERTIES:
:CUSTOM_ID: sec:rust-programming
:END:
The link [[https://www.rust-lang.org/tools/install][Install Rust]] shows also how to update the tool chain and the link
[[https://rust-lang.github.io/rustup/concepts/components.html][Components]] shows how to add other components to the tool chain. Listing
[[lst:read-rust-book]] shows how to read locally [[https://doc.rust-lang.org/book/][The Rust Programming Language]] in
the default browser and listing [[lst:rustup-component-list]] lists only the
installed components in the Rust tool chain with the results in listing
[[lst:rustup-component-list-result]].
#+caption[Read "The Rust Programming Language" in the default browser]:
#+caption: Read "The Rust Programming Language" in the default browser .
#+name: lst:read-rust-book
#+begin_src shell :eval never-export :results none
rustup doc --book
#+end_src
#+caption[List only the installed components in the tool chain]:
#+caption: List only the installed components in the tool chain.
#+name: lst:rustup-component-list
#+header: :wrap "src org -n :eval no"
#+begin_src shell :eval never-export :exports both :results output
rustup component list --installed
#+end_src
#+caption[The result of listing only the installed components]:
#+caption: The result of listing only the installed components.
#+name: lst:rustup-component-list-result
#+RESULTS:
#+begin_src org -n :eval no
cargo-x86_64-apple-darwin
clippy-x86_64-apple-darwin
rust-analyzer-x86_64-apple-darwin
rust-docs-x86_64-apple-darwin
rust-src
rust-std-x86_64-apple-darwin
rustc-x86_64-apple-darwin
rustfmt-x86_64-apple-darwin
#+end_src
The code formatting in ~rust-ts-mode~ does not support all features of the code
formatting of [[https://github.com/rust-lang/rustfmt][rustfmt]] or [[https://doc.rust-lang.org/cargo/commands/cargo-fmt.html][cargo-fmt]] using the default configuration. The
installed [[https://github.com/lassik/emacs-format-all-the-code][format-all for Emacs]] library supports both Rust code formatting tools.
#+caption[Try to work around =rust-ts-mode= indentation quirks]:
#+caption: Try to work around =rust-ts-mode= indentation quirks.
#+name: lst:go-ts-mode-fix
#+begin_src emacs-lisp -n :results silent
(when (featurep 'treesit)
(defun rsmxspaces (&optional m)
"Indent line with M times `rust-ts-mode-indent-offset' spaces."
(interactive)
(if (not (eq major-mode 'rust-ts-mode))
(message "`%s' is not `rust-ts-mode'" major-mode)
(read-natnum "indent offset natnum multiplier" m)
(move-beginning-of-line nil)
(let ((n (* m rust-ts-mode-indent-offset)))
(when (re-search-forward "^ *" nil 'noerror 1)
(unless (= n (length (match-string 0)))
(replace-match (make-string (* n) ? )))))))
(defun rs0xspaces ()
"Indent line with 0 times `rust-ts-mode-indent-offset' spaces."
(interactive)
(rsmxspaces 0))
(defun rs1xspaces ()
"Indent line with 1 times `rust-ts-mode-indent-offset' spaces."
(interactive)
(rsmxspaces 1))
(defun rs2xspaces ()
"Indent line with 2 times `rust-ts-mode-indent-offset' spaces."
(interactive)
(rsmxspaces 2))
(defun rs3xspaces ()
"Indent line with 3 times `rust-ts-mode-indent-offset' spaces."
(interactive)
(rsmxspaces 3))
(defun rs4xspaces ()
"Indent line with 4 times `rust-ts-mode-indent-offset' spaces."
(interactive)
(rsmxspaces 4))
(defun rs5xspaces ()
"Indent line with 5 times `rust-ts-mode-indent-offset' spaces."
(interactive)
(rsmxspaces 5)))
#+end_src
* [[https://github.com/emacs-tw/awesome-emacs#library][Libraries]] * [[https://github.com/emacs-tw/awesome-emacs#library][Libraries]]
:PROPERTIES: :PROPERTIES:
:CUSTOM_ID: sec:libraries :CUSTOM_ID: sec:libraries