diff --git a/nix-mode.el b/nix-mode.el index 96d3401..ebb4b6e 100644 --- a/nix-mode.el +++ b/nix-mode.el @@ -418,7 +418,7 @@ STRING-TYPE type of string based off of Emacs syntax table types" (right " -bseqskip- ") (left " -fseqskip- ")))))) -(defconst nix-smie--symbol-chars ":->|&=!|&=!" "||" "&&" "==" "!=" "<" "<=" ">" ">=" @@ -573,8 +573,8 @@ STRING-TYPE type of string based off of Emacs syntax table types" (point) (progn (or (/= 0 (skip-syntax-forward "'w_")) - (/= 0 (skip-chars-forward nix-smie--symbol-chars)) - (skip-syntax-forward ".'")) + (when (looking-at nix-smie--symbol-chars) (forward-char) t) + (skip-syntax-forward "'")) (point))))) (defun nix-smie--forward-token () @@ -595,8 +595,8 @@ STRING-TYPE type of string based off of Emacs syntax table types" (point) (progn (or (/= 0 (skip-syntax-backward "'w_")) - (/= 0 (skip-chars-backward nix-smie--symbol-chars)) - (skip-syntax-backward ".'")) + (when (looking-back nix-smie--symbol-chars) (backward-char) t) + (skip-syntax-backward "'")) (point))))) (defun nix-smie--backward-token () diff --git a/tests/nix-mode-tests.el b/tests/nix-mode-tests.el index 9bbeff7..6f41199 100644 --- a/tests/nix-mode-tests.el +++ b/tests/nix-mode-tests.el @@ -227,6 +227,12 @@ Related issue: https://github.com/NixOS/nix-mode/issues/72" "Proper indentation of strings in a multi-line string." (with-nix-mode-test ("issue-78.nix" :indent 'smie-indent-line))) +(ert-deftest nix-mode-test-indent-issue-94 () + "Proper indentation of attrsets inside of lists inside of attrsets. + +Related issue: https://github.com/NixOS/nix-mode/issues/94" + (with-nix-mode-test ("issue-60.1.nix" :indent 'smie-indent-line))) + (ert-deftest nix-mode-test-indent-lambdas-smie () "Proper indentation of function bodies." (with-nix-mode-test ("smie-lambdas.nix" :indent 'smie-indent-line))) diff --git a/tests/testcases/issue-94.nix b/tests/testcases/issue-94.nix new file mode 100644 index 0000000..4f77f31 --- /dev/null +++ b/tests/testcases/issue-94.nix @@ -0,0 +1,6 @@ +let + nixpkgs = ; + wrongIndentedLine = true; +in { + a = "b"; +}