Skip to content

Releases: sass/libsass

Delorean

20 Jan 03:38
Compare
Choose a tag to compare

Here we go with the latest and most awesome LibSass release ever (so far). First release in 2016 and version 3.3.3 brings us even closer to ruby sass, which is currently at version 3.4.21, and we should be on par as far as our spec tests go. Lots of improvements were done under the hood and will only be visible on the surface with certain edges cases, while a few others will have a more profound impact. If you find differences or other problems, please always check our open issues on github first before opening a new ticket 🔍 📖 🐛 🚑

Parser and rendering refactorings

LibSass is now able to use stringification functions for its internal AST objects whenever its needed. Previously this was only possible when we had access to a context instance, which sometimes made it impossible to invoke the right code path. This tight coupling has been factored out and we can now use these more freely to get our output even closer to ruby sass. Parser now supports multiple operations without parentheses (a > b == c) correctly and an extensive generated test suite for this feature was added to sass-spec. 👟 😄

Full support for variable arguments

Since the introduction variable arguments in Sass 3.3 LibSass has been playing whack-a-mole with bug fixes. As of this release we should have argument handling compatible with the latest stable Ruby Sass. Thanks to @davidkpiano for his many detailed bug reports and his fantastic sassdash library whose extensive test suite helped make this possible.

Lots of bug-fixes

There were two weeks of ongoing bug slaughtering by @mgreter after new-years eve, which resulted in over 80 closed issues (there are 117 closed github issues in total for this release). @xzyfer also had a good streak with 14 closed issues. Special thanks to @ksmadsen for his c++11 random_device fix. Also a big thanks for our continuing contributors @am11 and @saper for their inputs, feedback and pull requests 👋 🙇

Read more

Eleanor

11 Nov 08:41
Compare
Choose a tag to compare

Changelog

Features

Fixes

  • Fix segfault when too many arguments are passed to a functoin/mixin (@xzyfer, #1716)
  • Fix incorrectly using relative paths on the C API (@xzyfer, #1713)
  • Fix incorrectly parsing numbers with unit (@mgreter, #1705)
  • Fix not erring when functions are passed too many arguments (@xzyfer, #1682)
  • Fix inconsistencies with deprecation messages (@xzyfer, #1681)
  • Fix segfault on binary operations in interpolants (@mgreter, #1669)
  • Fix incorrectly outputting "" for @debug(null) (@xzyfer, #1679)
  • Fix incorrectly compressing lists in @debug in compressed mode (@xzyfer, #1679)
  • Fix to file paths in @debug (@xzyfer, #1679)
  • Fix documentation links and typos (@penman, #1674)
  • Fix incorrectly handling binary operations with interpolants (@xzyfer, #1671)
  • Fix map keys striping off units (@mgreter, #1667)
  • Fix ambigious usage of 0 for NULL (@saper, #1660)
  • Fix not erring on @else without an @if (@xzyfer, 1659)
  • Fix handling of nested placeholders for extend (@mgreter, #1654)
  • Fix incorrectly parsing @if and @else with comments (@mgreter, 1648)
  • Fix @content inside @else not being executed (@mgreter, #1640)
  • Fix implementation documentation for header file move (@mgreter, #1639)
  • Fix incorrect extension on markdown file (@drewwells, #1628)
  • Fix incorrectly parsing of #{} as function argument sometimes (@mgreter, #1606)
  • Fix incorrectly parsing of & sometimes (@mgreter, #1601)
  • Fix error sometimes being reported on the wrong line (@mgreter, #1577)
  • Fix incorrectly parsing upper case and/or in media queries (@mgreter, #1557)

Thanks

A big thanks to everyone who took the time report issues.
The LibSass team (@hcatlin, @mgreter, @saper, @xzyfer) couldn't do this without your help.

Too fast too furious

27 Oct 01:51
Compare
Choose a tag to compare

This is a follow up patch release for 3.3.1 addressing some regressions that have cropped up.

Changelog

Fixes

  • Fix regression with call() and empty list arguments (@mgreter, #1634)
  • Fix regression with static value parsing (@xzyfer, #1632)
  • Fix regression with / and string values (@xzyfer, #1629)
  • Fix regression with using interpolants in selectors (@xzyfer, #1624)
  • Fix regression with lists as varargs arguments to call() (@xzyfer, #1622)
  • Fix declaration properties without spaces in .sass not being treated as selectors (@mgreter, #1578)

Thanks

A big thanks to everyone who took the time report issues.
The LibSass team (@hcatlin, @mgreter, @saper, @xzyfer) couldn't do this without your help.

Grease lightning

24 Oct 02:40
Compare
Choose a tag to compare

Today we release the long awaited 3.3 stable, which once again tops our last major releases in terms of commits and fixed bugs. Good news for all implementors is that we only did some minor changes on the C Interface, and all of them only touch the still experimental features like custom importers and headers.

Main new features for this release are a completely refactored parent selector ('&') and we finally have all selector functions implemented. It also contains some big refactorings for the parser and for the evaluation phase. This fixes some major performance problems with tight loops and also adds some decent performance improvements in general (we would love to get some real world numbers from our users).

With this release we're rapidly reaching 100% feature parity yet. There will be a long tail of minor bugs between now and 3.4, but the base work for all main features is done. We now need all of you to help and open issues to find the missing details and to improve our test suite!

By the numbers!

368 commits
260 files changed
274 closed issues
13 contributors
604 new tests passing
62% less skipped tests

News

We're also happy to welcome @saper to the LibSass core team!
He's been an incredible asset and we couldn't have come this far so quickly without him.

Acknowledgements

As always we want to thank our beloved contributors who breathe life into this piece of code. ❤️
@am11, @djensen47, @drewwells, @ekskimn, @mgonzalez999, @tysongach, @driekus77, @una, @unmole and everyone who opened issues. Without your contributions we wouldn't be where we are today.
We (@mgreter, @xzyfer, @saper, @hcatlin) hope you all will enjoy this release 🚀

Changelog

Selector functions

We now implement all 3.4 selector functions. This massive effort was initially booted by @ekskimn, @mgonzalez999 and was finished and polished by @mgreter with a major refactoring in how selectors are parsed and evaluated, which was the ground work for the parent selector refactoring.

Shadow DOM support

We now correctly support /deep/ reference combinators thanks to @mgreter

Performance improvements

In order to fix some of the trickier long standing bugs, another major internal refactoring was required. This turned out to be very tricky, as pretty much all layers of LibSass were involved. @mgreter was up for the challenge and consequently closed a swath of outstanding issues. As a bonus the improved parser gave us an impressive speed boost. You should see the biggest gains with tight loops.

This branch also includes quite a few performance optimisations.
It brought my sass-spec test suite runtime from 27s down to 7s!

C-API breaking changes

This release includes the new function sass_value_op that implementers can use to access all internal value operations. This enables implementers to have the same operations in their bindings as LibSass .

There was another minor refactoring for custom importer. We renamed two API functions to be more close to their actual use (@mgreter, #1509):

  • sass_import_get_path -> sass_import_get_imp_path
  • sass_import_get_base -> sass_import_get_abs_path
  • Moved C-API library headers into the sass subfolder (@mgreter, #1360)
  • Pass Sass_Compiler* to custom function signature (@mgreter, #1617)

Improvements to url()

After many bug fixes @xzyfer has started overhauling the url() implementation to closer match the Ruby Sass implementation (#675).

Documentation

Thanks to the hard work of @drewwells and @una the wiki has been converted to markdown and added to the docs/ folder (#1234). This will help us, and our contributors, keep the docs up to date moving forward!

Fixes

Improvements to the parser

  • Fix incorrectly parsing declarations without semicolons (@xzyfer, #1610)
  • Fix incorrectly parsing named arguments after unnamed arguments (@xzyfer, #1579)
  • Fix incorrectly parsing font shorthand values (@xzyfer, #1570)
  • Fix incorrectly parsing media queries with comments (@xzyfer, @1567)
  • Fix incorrectly parsing comments in declarations (@mgeter, #1568)
  • Fix sass2scss sometimes producing incorrect output for @include (@xzyfer, #1547)
  • Fix incorrectly parsing - as a minus operation (@mgreter, #1486)
  • Fix incorrectly erring with interpolants in feature queries (@xzyfer, #1425)
  • Fix incorrectly erring with comment in declaration value (@xzyfer, #1422)
  • Fix incorrectly not ignoring the space following a CSS escape sequence (@mgreter, #1419)
  • Fix incorrectly parsing identifiers with units (@mgreter, #1405)
  • Fix multiple - in indentifiers sometimes being merged (@mgreter, #1404)
  • Fix interpolations in propset being ignored (@mgreter, #1393)
  • Fix functions calls followed by an interpolant being treated as String(@mgreter, #1333)
  • Fix incorrectly erring with @import with media queries (@mgreter, #1323)
  • Fix incorrectly erring with variables and interpolants in media queries (@mgreter, #1322)
  • Fix crashing with some number units (@mgreter, #1307)
  • Fix incorrectly erring with classnames with interpolants starting with - (@mgreter, #1301)
  • Fix incorrectly erring with multiplication with interpolants (@mgreter, #1291)
  • Fix incorrectly erring with interpolated values in Lists (@mgreter, #1277)
  • Fix incorrectly erring with unknown @at-rules (@mgreter, #1263)
  • Fix incorrectly erring with named arguments Varargs (@mgreter, #1259)
  • Fix incorrectly evaluating variables in @at-rules (@mgreter, #1253)
  • Fix incorrectly erring with parsing some @at-rules (@mgreter, #1214)
  • Fix incorrectly erring with division with interpolants (@mgreter, #948)
  • Fix incorrectly erring with comments inside selectors (@mgreter, #941)

Improvements to character escaping

Improvements to Varargs, Restargs and Arglists

  • Fix Varags that are lists sometimes being lost (@xzyfer, #1604)
  • Fix incorrect coercion of rest arguments (@xzyfer, 1566)
  • Fix difference when using Varargs with @each (@mgreter, #1440)
  • Fix incorrectly erring with empty Arglists as a required parameter (@mgreter, #1305)
  • Fix crash when using an Arglist as a List (@mgreter, #1269)
  • Fix crash when using an Arglist as the only argument (@mgreter, #1257)
  • Fix crash when using set-nth with Arglists (@mgreter, #1255)
  • Fix Varags that are lists sometimes being flattened (@mgreter, #1171)

Improvements to &

Improvements to url()

  • Fix incorrectly unquoting variables url() (@mgreter, #1480)
  • Fix variable not being evaluated in url() (@mgreter, #1370)
  • Fix incorrectly erring with protocol relative urls in a url() (@mgreter, #1298)
  • Fix incorrectly erring with interpolating a function in a url() (@mgreter, #1273, #1438)

Improvements to insignificant whitespace CSS output

  • Fix insignificant whitespace being outputted with binary operations in media queries (@mgreter, #1398)
  • Fix insignificant whitespace being outputted when curly braces are on new line (@mgreter, #1448)
  • Fix insignificant whitespace being outputted with multi-line property lists (@mgreter, #1230)
  • Fix insignificant new lines not being removed in nested output (@mgreter, #1061)

Improvements to @extend

  • Fix selectors sometimes being dropped when @extending multiple attribute selectors (@xzyfer, #1574)
  • Fix selector specificity with deep @extends (@mgreter, #1248)
  • Fix selectors sometimes being dropped when extending inside loops (@mgreter, #1029)

Improvements to erring messages

  • Fix poor error message formatting for long lines (@xzyfer, #1575)
  • Fix missing error with is-superselector("foo", null) (@saper, #1571)
  • Fix poor error message for simple-selector(null) (@saper, #1571)
  • Fix error message capitalization (@saper, #1558)
  • Fix poor error message for missing closing brace (@mgreter, #1506)
  • Fix erring messages sometimes showing weird characters (@mgreter, #1496)
  • Fix missing error with binary operations on Strings (@mgreter, #1451)
  • Fix missing error with calling a function with missing named arguments (@mgreter, #1418)
  • Fix missing error when passing a block into a mixin without @content (@mgreter, #1487)
  • Fix missing error with @return; (@mgreter, #1355)
  • Fix missing error when outputting a Map to CSS (@mgreter, #1246)
  • Fix missing error with #{} (@xzyfer, #1093)

Improvements to the C API

  • Fix path inconsistencies with get_included_files (@mgreter, #1040)
  • Made source_map_embed independent of source_map_file (@mgreter, #885)

Improvements to Visual Studio support

  • Fix extern "C" functions throwing exceptions in Visual Studio (@saper #1521)
  • Fix include guard condition for Visual Studio 2015 (@am11 #1495)
  • Remove now unnecessary NOMINMAX macros (@am11 #1454)
  • Fix crashing with invalid @warn input in Visual Studio (@mgreter, #1460)
  • Fix crashing with invalid input in with Visual Studio (@xzyfer, #1443)
  • Fix compiler warnings in Visual S...
Read more

3.3.0-beta3

14 Oct 10:02
Compare
Choose a tag to compare
3.3.0-beta3 Pre-release
Pre-release

This is the final 3.3.0 beta release! We've addressed a handful of regressions due to the major refactors.

Fixed

  • Potential SEGFAULT for call function (@xzyfer, #1588)
  • Incorrect parsing of named arguments after unnamed arguments (@xzyfer, #1579)
  • Error message formatting for long lines (@xzyfer, #1575)
  • Sometimes losing selectors when @extending multiple attribute selectors (@xzyfer, #1574)
  • Missing link to SassC in readme (@khchanel, #1573)
  • Error message accuracy with simple-selector(null) (@saper, #1571)
  • Throw error for is-superselector("foo", null) (@saper, #1571)
  • Incorrect parsing of font shorthand values (@xzyfer, #1570)
  • Incorrect parsing of media queries with comments (@xzyfer, @1567)
  • Incorrect coercion of rest arguments (@xzyfer, 1566)
  • Error message capitalization (@saper, #1558)
  • Named arguments to call() being lost (@xzyfer, #1418)
  • Throw error for #{} (@xzyfer, #1093)
  • Incorrect parsing of url() (@xzyfer, #675)

3.3.0-beta2

16 Sep 13:24
Compare
Choose a tag to compare
3.3.0-beta2 Pre-release
Pre-release

This is the second beta for the 3.3.0 release which addresses a memory alignment issue discovered by @rodneyrehm

Fixes

3.3.0-beta1

09 Sep 02:23
Compare
Choose a tag to compare
3.3.0-beta1 Pre-release
Pre-release

Today we release the long awaited 3.3 RC1, which once again tops our last major releases in terms of commits and fixed bugs. Good news for all implementors is that we only did some minor changes on the C Interface, and all of them only touch the still experimental features like custom importers and headers.

Main new features for this release are a completely refactored parent selector ('&') and we finally have all selector functions implemented. It also contains some big refactorings for the parser and for the evaluation phase. This fixes some major performance problems with tight loops and also adds some decent performance improvements in general (we would love to get some real world numbers from our users).

We do not have 100% feature parity yet. There will be a long tail of minor bugs between now and 3.4, but the base work for all main features is done. We now need all of you to help and open issues to find the missing details and to improve our test suite!

By the numbers!

305 commits
180 files changed
107 closed issues
9 contributors
544 new tests passing
62% less skipped tests

Acknowledgements

As always we want to thank our beloved contributors who breathe life into this piece of code. ❤️
@am11, @djensen47, @drewwells, @ekskimn, @mgonzalez999, @saper, @tysongach, @driekus77 and everyone who opened issues. Without your contributions we wouldn't be where we are today.
We (@mgreter, @xzyfer, @hcatlin) hope you all will enjoy this release 🚀

Changelog

Selector functions

We now implement all 3.4 selector functions. This massive effort was initially booted by @ekskimn, @mgonzalez999 and was finished and polished by @mgreter with a major refactoring in how selectors are parsed and evaluated, which was the ground work for the parent selector refactoring.

Shadow DOM support

We now correctly support /deep/ reference combinators thanks to @mgreter

Performance improvements

In order to fix some of the trickier long standing bugs, another major internal refactoring was required. This turned out to be very tricky, as pretty much all layers of LibSass were involved. @mgreter was up for the challenge and consequently closed a swath of outstanding issues. As a bonus the improved parser gave us an impressive speed boost. You should see the biggest gains with tight loops.

This branch also includes quite a few performance optimisations.
It brought my sass-spec test suite runtime from 27s down to 7s!

C-API breaking changes

This release includes the new function sass_value_op that implementers can use to access all internal value operations. This enables implementers to have the same operations in their bindings as LibSass .

There was another minor refactoring for custom importer. We renamed two API functions to be more close to their actual use (@mgreter, #1509):

  • sass_import_get_path -> sass_import_get_imp_path
  • sass_import_get_base -> sass_import_get_abs_path

We also moved C-API library headers into the sass subfolder (@mgreter, #1360)

Fixes

Improvements to the parser

  • Fix sass2scss sometimes producing incorrect output for @include (@xzyfer, #1547)
  • Fix incorrectly parsing - as a minus operation (@mgreter, #1486)
  • Fix incorrectly erring with interpolants in feature queries (@xzyfer, #1425)
  • Fix incorrectly erring with comment in declaration value (@xzyfer, #1422)
  • Fix incorrectly not ignoring the space following a CSS escape sequence (@mgreter, #1419)
  • Fix incorrectly parsing identifiers with units (@mgreter, #1405)
  • Fix multiple - in indentifiers sometimes being merged (@mgreter, #1404)
  • Fix interpolations in propset being ignored (@mgreter, #1393)
  • Fix functions calls followed by an interpolant being treated as String(@mgreter, #1333)
  • Fix incorrectly erring with @import with media queries (@mgreter, #1323)
  • Fix incorrectly erring with variables and interpolants in media queries (@mgreter, #1322)
  • Fix crashing with some number units (@mgreter, #1307)
  • Fix incorrectly erring with classnames with interpolants starting with - (@mgreter, #1301)
  • Fix incorrectly erring with multiplication with interpolants (@mgreter, #1291)
  • Fix incorrectly erring with interpolated values in Lists (@mgreter, #1277)
  • Fix incorrectly erring with unknown @at-rules (@mgreter, #1263)
  • Fix incorrectly erring with named arguments Varargs (@mgreter, #1259)
  • Fix incorrectly evaluating variables in @at-rules (@mgreter, #1253)
  • Fix incorrectly erring with parsing some @at-rules (@mgreter, #1214)
  • Fix incorrectly erring with division with interpolants (@mgreter, #948)
  • Fix incorrectly erring with comments inside selectors (@mgreter, #941)

Improvements to character escaping

Improvements to Varargs, Restargs and Arglists

  • Fix Varags that are lists sometimes being flattened (@mgreter, #1171)
  • Fix difference when using Varargs with @each (@mgreter, #1440)
  • Fix crash when using an Arglist as a List (@mgreter, #1269)
  • Fix crash when using an Arglist as the only argument (@mgreter, #1257)
  • Fix crash when using set-nth with Arglists (@mgreter, #1255)
  • Fix incorrectly erring with empty Arglists as a required parameter (@mgreter, #1305)

Improvements to &

Improvements to url()

  • Fix incorrectly unquoting variables url() (@mgreter, #1480)
  • Fix variable not being evaluated in url() (@mgreter, #1370)
  • Fix incorrectly erring with protocol relative urls in a url() (@mgreter, #1298)
  • Fix incorrectly erring with interpolating a function in a url() (@mgreter, #1273, #1438)

Improvements to insignificant whitespace CSS output

  • Fix insignificant whitespace being outputted with binary operations in media queries (@mgreter, #1398)
  • Fix insignificant whitespace being outputted when curly braces are on new line (@mgreter, #1448)
  • Fix insignificant whitespace being outputted with multi-line property lists (@mgreter, #1230)
  • Fix insignificant new lines not being removed in nested output (@mgreter, #1061)

Improvements to @extend

  • Fix selector specificity with deep @extends (@mgreter, #1248)
  • Fix selectors sometimes being dropped when extending inside loops (@mgreter, #1029)

Improvements to erring messages

  • Fix poor erring message for missing closing brace (@mgreter, #1506)
  • Fix erring messages sometimes showing weird characters (@mgreter, #1496)
  • Fix missing erring with binary operations on Strings (@mgreter, #1451)
  • Fix missing erring with calling a function with missing named arguments (@mgreter, #1418)
  • Fix missing erring when passing a block into a mixin without @content (@mgreter, #1487)
  • Fix missing erring with @return; (@mgreter, #1355)
  • Fix missing erring when outputting a Map to CSS (@mgreter, #1246)

Improvements to the C API

  • Fix path inconsistencies with get_included_files (@mgreter, #1040)
  • Made source_map_embed independent of source_map_file (@mgreter, #885)

Improvements to Visual Studio support

  • Fix extern "C" functions throwing exceptions in Visual Studio (@saper #1521)
  • Fix include guard condition for Visual Studio 2015 (@am11 #1495)
  • Remove now unnecessary NOMINMAX macros (@am11 #1454)
  • Fix crashing with invalid @warn input in Visual Studio (@mgreter, #1460)
  • Fix crashing with invalid input in with Visual Studio (@xzyfer, #1443)
  • Fix compiler warnings in Visual Studio (@driekus77, #1375)

Misc

Holiday Patch

09 Jun 22:01
Compare
Choose a tag to compare

I'm on holidays so progress has been slow. This releases lands some small bug fixes we've had on master for a while that I wanted to get live before I came home.

Fixes

  • Fix segmentation fault in min and max functions (@richo, #1266)
  • Fix erroneous duplicate key errors (@xzyfer, #1254)
  • Fix the shortest colour code not always being used in compressed more (@xzyfer, #1251)
  • Fix quoted strings incorrectly failing equality checks (@xzyfer, #1247)
  • Fix unmergable media queries being merged poorly (@xzyfer, #1224)
  • Fix incorrect error when parsing optional ; in top level directives (@xzyfer, #1243)
  • Fix colour rounding to match Ruby Sass 3.4.14 (@xzyfer, #1239)
  • Fix incorrect quoting in media query expressions (@xzyfer, #1218)
  • Fix a parsing regression with some @at-rules (@xzyfer, #1214)
  • Fix division operations sometimes being ignored in interpolants (@xzyfer, 1206)
  • Fix parsing error with comments (@xzyfer, #1208)

Features

Thanks

A big thanks to everyone who made this release possible. Honorable mentions to @AlbertoElias, @callumacrae, @cvrebert, @ericam, @mzgol, @tristanlins, @richo, and @xzyfer.

Patch Adams

13 May 01:32
Compare
Choose a tag to compare

The next patch level release, containing a lot of fixes and the first piece of the missing selector functions. We also fixed a lot of issues we originally scheduled for the upcoming 3.3 release.

Numbers

  • 13 closed issues and 8 PRs merged
  • 26 new uniquely passing spec tests
  • 98.53% Ruby Sass compatibility (+1.47%)

Features

With is_superselector, we have added the first of the missing selector functions. This is in preparation for the full support for all selector functions in the next upcoming major release (3.3). Big thanks to @onedayitwillmake, who already put a lot of effort into adding the missing functionality (#1064).

Bugfixes

Reassurance Elbow Suite

09 May 05:04
Compare
Choose a tag to compare

We have another patch level release ready that lets libsass rock even more 🎸
This release mainly fixes output issues related to lists, numbers and interpolations 🪲
Totally 17 issues fixed with 16 pull requests and 26 new unique passing spec tests 🍻

Bugfixes