LibSass started almost 4 years ago with the singular goal to be a drop in
replacment for Ruby Sass. Since then @hcatlin, @akhleung, @mgreter, and @xzyfer
have been chasing the lofty goal of Sass 3.4. compatibility.
This release marks the completion of that major milestone, and we couldn't be
more excited to release LibSass 3.4 today! 🎉
Sass 3.4
Over the last couple years we've worked very closely with the Ruby Sass team to
reach Sass 3.4 compatibility.
It's become clear that need to draw a line in sand with exactly how exactly
we can match Sass 3.4, especially in the face of changes in Sass 3.5.
With this release the LibSass team is marking the completion of active
development on Sass 3.4 compatibility. From today we'll focus our efforts on
Sass 3.5 compatibility, first prioritising CSS compatibility features like
support for CSS custom property and CSS grids.
Improves to @at-root
@at-root
has mostly worked since it's introduction to LibSass but there have
always been issue when it was combined with conditions (like @if
) or mixins.
These issues were due to a fundamental difference in the LibSass implementation.
The difference has been addressed, so @at-root
is now fully supported.
You can read more about the specifics of this issue in #2089
- Implement the Trace AST node (@xzyfer, #1585)
- Remove the selector stack from the CSSize visitor (@xzyfer, #2091)
- Workaround parent selector issues with at-root (@xzyfer, #2006 #2198)
Delayed Values
Knowing when to evaluate a string, function, do concatenation, or perform math
is a complicated problem with many edge cases. @mgreter has continued his work
on improving the accuracy of these decisions.
- Significant improvements to delayed values (@mgreter, #2042, #2034 #2057)
/
interpreted as division instead of separator (@mgreter, #2149)- Mishandling quotes (@mgreter, #2153 #2156)
Continued improvements to @extend
@extend
is hard. With every release we get better at it and this release is no
exception.
- Extending inner of :not can lead to invalid css (@mgreter, #2054)
- Segfault with
@extend
(@mgreter, #2051) - Extending a placeholder from a media query outputs nothing (@mgreter, #2150)
- Don't drop pseudo elements in wrapped selectors (@xzyfer, #2200)
Memory improvments
@mgreter has done some great work on improving our memory usage when dealing
with large maps, and lists. He's not done yet, keep your eyes peeled for further
improvments in upcomming releases.
Support list functions on maps
Implementing Sass maps was my first major contribution to LibSass. A couple
year later I can finally all the job complete with support for maps in list
functions.
Sourcemaps
@mgreter and @nschonni have made some significant improvements to our
sourcemaps. You can read more about the specifics in the bug links below.
- Bugfixes for source maps (@mgreter, #2216)
- Fixes parent selector mappings
- Fixes media block/query mappings
- Fixes range over binary expressions
- Don't include semicolon for statics
- Fixes variable assignment mappings
- Make paths in source comments relative to CWD (@mgreter, #2219)
- Implement source_map_file_urls option (@mgreter, #2220)
- Re-order the sourcemap writing to match spec (@nschonni, #2193)
Features
- Improve debugger coverage (@xzyfer, #2093)
- Add Sass lang version to
3.4
(@am11, #2077) - Automake compile on msys2 and mingw64 (@mgreter, #2063)
- Improve
Sass_Value
documentation (@mgreter, #2045) - Add initial CONTRIBUTING.md and ISSUE_TEMPLATE.md (@mgreter, #2044)
- Update sass2scss to latest version (@mgreter, #2177 #1990 #1781)
- Implement the check nesting visitor (@xzyfer, #2062)
Fixes
color-change()
with$hue
(@mgreter, #2113)@import
causing process to hang (@mgreter, #2106)- Broken link (@MoritzKn, #2105)
- Specificity for
Simple_Selectors
nodes (@xzyfer, #2099) @at-root
without arguments (@xzyfer, #2092)- Segfault with calc prefix and underscore vs hyphen (@mgreter, #2074)
- Error message for missing arguments (@mgreter, #2067)
- Warning under MSVC x86_64 (@asottile, #2047)
- MSVC x86_64 buffer overrun in error reporting (@mgreter, #2046)
- Handling "\a" in interpolations (@mgreter, #1786)
- Including a
@mixin
when outside of selector still outputs properties (@xzyfer, #1732) - Add error when comma lists are used as map keys (@mgreter, #1537)
- Evaluation of
&
in sass script (@mgreter, #2124 #2116) - Handle unicode chars in unquoted urls (@mgreter, #2120 @xzyfer, #2125)
hue()
for rgb colors when$saturation: 0
(@mgreter, #2135)- Invalid duplicate keys in maps (@mgreter, #2118)
str-slice()
with negative length (@mgreter, #2132)- Segfault parsing multiple operations in calc (@mgreter, #2151)
- Stackoverflow and segmentation failure on recrusive dependence mixins (@mgreter, #2144)
- Don't allow math on maps (@mgreter, #2147)
- Don't allow math on colors (@xzyfer, #2140)
- CSS comment inside of @supports incorrect CSS output (@mgreter, #2158)
- Check and error on empty variable assignments (@mgreter, #2143 #2146)
- Incorrect output when concatenating an empty string (@mgreter, #2169)
- Brew 1.0.0 release causing OSX CI failures (@xzyfer, #2183)
- Handling empty nested media queries (@xzyfer, #2154)
@at-root
for loop and logic statements (@mgreter, #2187)- Typo in docs (@asottile, @2201)
- Memory leak (@mgreter, #2211 #2213)
- Using
...
in an overloaded function causes fatal error (@mgreter, #2205) - Should error when attempting to output an empty list or map (@mgreter, #1452)
- Don't error when an @import is terminated by the end of the block (@xzyfer, #2233)
- Fix modulo operation (@mgreter, #2236)
Misc
- Rename some selector AST nodes to better match the reference (@xzyfer, #2101)
- Add php wrapper project link (@lesstif, #2121)
- Add Elixir wrapper project link (@scottdavis, #2141)
- Updated README (@am11, #2172)
- Enabling debug builds by setting env var DEBUG=1 (@delapuente, #2176)
- Remove
-ldl
flag from OpenBSD too (@parhs, #2210) - Remove superfluous dev error message (@mgreter, #2217)