summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEevee (Alex Munroe) <eevee.git@veekun.com>2013-10-08 12:00:24 -0700
committerEevee (Alex Munroe) <eevee.git@veekun.com>2013-10-08 12:00:24 -0700
commit20cb364f146e6e53a2308aa09adc6ddfa235ea43 (patch)
tree50da74f92b04a7aec2a3a70416d65d8138adf053
parent5d7f56be690bcaf3b7b7dce6507aa06c067f31ec (diff)
downloadpyscss-20cb364f146e6e53a2308aa09adc6ddfa235ea43.tar.gz
Lists built from function calls are not "literal".
-rw-r--r--scss/expression.py14
-rw-r--r--scss/tests/files/general/null-values.css1
-rw-r--r--scss/tests/files/general/null-values.scss2
-rw-r--r--scss/types.py8
4 files changed, 22 insertions, 3 deletions
diff --git a/scss/expression.py b/scss/expression.py
index 8b42e7d..0c889b1 100644
--- a/scss/expression.py
+++ b/scss/expression.py
@@ -1,4 +1,5 @@
from __future__ import absolute_import
+from __future__ import print_function
from functools import partial
import logging
@@ -378,8 +379,17 @@ class ListLiteral(Expression):
def evaluate(self, calculator, divide=False):
items = [item.evaluate(calculator, divide=divide) for item in self.items]
- # TODO sort of overloading "divide" here... rename i think
- return List(items, use_comma=self.comma, is_literal=not divide)
+
+ # Whether this is a "plain" literal matters for null removal: nulls are
+ # left alone if this is a completely vanilla CSS property
+ is_literal = True
+ if divide:
+ # TODO sort of overloading "divide" here... rename i think
+ is_literal = False
+ elif not all(isinstance(item, Literal) for item in self.items):
+ is_literal = False
+
+ return List(items, use_comma=self.comma, is_literal=is_literal)
class MapLiteral(Expression):
diff --git a/scss/tests/files/general/null-values.css b/scss/tests/files/general/null-values.css
index 16deaae..b3e9775 100644
--- a/scss/tests/files/general/null-values.css
+++ b/scss/tests/files/general/null-values.css
@@ -2,4 +2,5 @@ div {
a: 1, 2, 3;
b: 1, null, 2, null, 3;
c: 1 2;
+ e: 1, 2, 3, ;
}
diff --git a/scss/tests/files/general/null-values.scss b/scss/tests/files/general/null-values.scss
index d657ab2..f64fecb 100644
--- a/scss/tests/files/general/null-values.scss
+++ b/scss/tests/files/general/null-values.scss
@@ -8,4 +8,6 @@ div {
c: 1 (null, null) 2;
// empty properties aren't printed
d: (null, null);
+ // and it applies recursively
+ e: (((null, 1, null), (null, 2), null), (3, null, (null, null)));
}
diff --git a/scss/types.py b/scss/types.py
index 4a027d7..aafbab4 100644
--- a/scss/types.py
+++ b/scss/types.py
@@ -685,7 +685,13 @@ class List(Value):
max_list, min_list = (self, other) if len(self) > len(other) else (other, self)
return List([item + max_list[i] for i, item in enumerate(min_list)], use_comma=self.use_comma)
- return List([item + other for item in self], use_comma=self.use_comma)
+ elif isinstance(other, String):
+ # UN-DEVIATION: adding a string should fall back to canonical
+ # behavior of string addition
+ return super(List, self).__add__(other)
+
+ else:
+ return List([item + other for item in self], use_comma=self.use_comma)
def __sub__(self, other):
if isinstance(other, List):