summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSimen Heggestøyl <simenheg@gmail.com>2017-08-15 12:39:42 +0200
committerSimen Heggestøyl <simenheg@gmail.com>2017-08-15 14:38:15 +0200
commit141cc78aa4552e99bf14c13d9e64357ccafe171b (patch)
treea2fcad61285d000fbf5ab0e70c45ef42d20f3ded
parent85a9f42b6ca7711c64cbd3e4e261fae308eab9d3 (diff)
downloademacs-141cc78aa4552e99bf14c13d9e64357ccafe171b.tar.gz
Support indentation of detached Less CSS rulesets
* lisp/textmodes/css-mode.el (css-smie-rules): Provide better support for indentation of detached rulesets passed to Less mixins. * test/manual/indent/less-css-mode.less: New file.
-rw-r--r--lisp/textmodes/css-mode.el9
-rw-r--r--test/manual/indent/less-css-mode.less29
2 files changed, 35 insertions, 3 deletions
diff --git a/lisp/textmodes/css-mode.el b/lisp/textmodes/css-mode.el
index 19cb7b4fea8..1e49ca81fcc 100644
--- a/lisp/textmodes/css-mode.el
+++ b/lisp/textmodes/css-mode.el
@@ -1205,9 +1205,12 @@ for determining whether point is within a selector."
(`(:before . "{")
(when (or (smie-rule-hanging-p) (smie-rule-bolp))
(smie-backward-sexp ";")
- (smie-indent-virtual)))
- (`(:before . ,(or "{" "("))
- (if (smie-rule-hanging-p) (smie-rule-parent 0)))
+ (unless (eq (char-after) ?\{)
+ (smie-indent-virtual))))
+ (`(:before . "(")
+ (cond
+ ((smie-rule-hanging-p) (smie-rule-parent 0))
+ ((not (smie-rule-bolp)) 0)))
(`(:after . ":-property")
(when (smie-rule-hanging-p)
css-indent-offset))))
diff --git a/test/manual/indent/less-css-mode.less b/test/manual/indent/less-css-mode.less
new file mode 100644
index 00000000000..36c037450cc
--- /dev/null
+++ b/test/manual/indent/less-css-mode.less
@@ -0,0 +1,29 @@
+.desktop-and-old-ie(@rules) {
+ @media screen and (min-width: 1200) { @rules(); }
+ html.lt-ie9 & { @rules(); }
+}
+
+header {
+ background-color: blue;
+
+ .desktop-and-old-ie({
+ background-color: red;
+ });
+}
+
+.e(@name, @rules) {
+ &__@{name} { @rules(); }
+}
+
+.m(@name, @rules) {
+ &--@{name} { @rules(); }
+}
+
+.btn {
+ .e(span, { // .btn__span
+ display: inline-block;
+ });
+ .m(primary, { // .btn--primary
+ background: blue;
+ });
+}