emacs-elpa-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[nongnu] elpa/nix-mode 78c3832e48 333/500: Make smie-setup optional


From: ELPA Syncer
Subject: [nongnu] elpa/nix-mode 78c3832e48 333/500: Make smie-setup optional
Date: Sat, 29 Jan 2022 08:27:18 -0500 (EST)

branch: elpa/nix-mode
commit 78c3832e48862f8eb748007707e3eea5e31335dc
Author: Matthew Bauer <mjbauer95@gmail.com>
Commit: Matthew Bauer <mjbauer95@gmail.com>

    Make smie-setup optional
    
    Some really large files can take a little bit to load. You can smie by
    setting nix-mode-use-smie to nil. It is still enabled by default.
---
 CHANGELOG.md |  8 ++++++++
 nix-mode.el  | 32 +++++++++++++++++++++-----------
 2 files changed, 29 insertions(+), 11 deletions(-)

diff --git a/CHANGELOG.md b/CHANGELOG.md
index e438be6dc2..98fa64df99 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,13 @@
 # Changelog
 
+## 1.4.1
+
+### Changes
+
+* Made smie-setup optional. Some really large files can take a little
+  bit to load. You can smie by setting nix-mode-use-smie to nil. It is
+  still enabled by default.
+
 ## 1.4.0
 
 ### Changes
diff --git a/nix-mode.el b/nix-mode.el
index edc154c18b..4fddae5862 100644
--- a/nix-mode.el
+++ b/nix-mode.el
@@ -34,11 +34,18 @@
 Valid functions for this are:
 
 - ‘indent-relative’
-- nix-indent-line (buggy)
-- smie-indent-line"
+- ‘nix-indent-line' (buggy)
+- `smie-indent-line' (‘nix-mode-use-smie’ must be enabled)"
   :group 'nix-mode
   :type 'function)
 
+(defcustom nix-mode-use-smie t
+  "Whether to use SMIE when editing Nix files.
+This is enabled by default, but can take a while to load with
+very large Nix files (all-packages.nix)."
+  :group 'nix-mode
+  :type 'boolean)
+
 (defgroup nix-faces nil
   "Nix faces."
   :group 'nix-mode
@@ -919,16 +926,19 @@ The hook `nix-mode-hook' is run when Nix mode is started.
   ;; Look at text properties when parsing
   (setq-local parse-sexp-lookup-properties t)
 
+  ;; Setup SMIE integration
+  (when nix-mode-use-smie
+    (smie-setup nix-smie-grammar 'nix-smie-rules
+               :forward-token 'nix-smie--forward-token
+               :backward-token 'nix-smie--backward-token)
+    (setq-local smie-indent-basic 2)
+    (fset (make-local-variable 'smie-indent-exps)
+         (symbol-function 'nix-smie--indent-exps))
+    (fset (make-local-variable 'smie-indent-close)
+         (symbol-function 'nix-smie--indent-close)))
+
   ;; Automatic indentation [C-j]
-  (smie-setup nix-smie-grammar 'nix-smie-rules
-              :forward-token 'nix-smie--forward-token
-              :backward-token 'nix-smie--backward-token)
-  (setq-local smie-indent-basic 2)
-  (setq-local indent-line-function nix-indent-function)
-  (fset (make-local-variable 'smie-indent-exps)
-        (symbol-function 'nix-smie--indent-exps))
-  (fset (make-local-variable 'smie-indent-close)
-        (symbol-function 'nix-smie--indent-close))
+  (setq-local indent-line-function (lambda () (funcall nix-indent-function)))
 
   ;; Indenting of comments
   (setq-local comment-start "# ")



reply via email to

[Prev in Thread] Current Thread [Next in Thread]