branch: elpa/nix-mode
commit 78c3832e48862f8eb748007707e3eea5e31335dc
Author: Matthew Bauer <[email protected]>
Commit: Matthew Bauer <[email protected]>
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 "# ")