Releases: sass/libsass
Delorean
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 👋 🙇
- Ensure we keep around memory for parser source (@mgreter, #1884)
- Avoid wrong error due to misused map object in At_Rule (@mgreter, #1881)
- Implement css linefeed
\a
handling better (@mgreter, #1880) - Improve parsing for complex number units (@mgreter, #1879)
- Fix potential issue with wrong std container usage (@mgreter, #1878)
- Improve parsing for complex number units (@mgreter, #1877)
- Improve operating on numbers with complex units (@mgreter, #1876)
- Make generating source excerpt on error unicode aware (@mgreter, #1875)
- Improve error handling API (always return formatted json) (@mgreter, #1874)
- Improve identifier schema to include variables (@mgreter, #1872)
- Disable error check for extend placement check (@mgreter, #1870)
- Improve pseudo selector parsing (@mgreter, #1864)
- Fix
each
iteration over selector lists (@mgreter, #1863) - Use
to_sass
for@debug
,@warn
and@error
message (@mgreter, #1862) - Improve lower/upper boundary check error in
for
loop (@mgreter, #1861) - Implement incompatible unit test for interpolation in eval (@mgreter, #1860)
- Implement correct empty list
to_sass
output (@mgreter, #1859) - Remove
To_String
by usingAST->to_string
andinspect
(@mgreter, #1858) - Update license year range to 2016 (@pra85, #1857)
- Incorrect 'Invalid UTF-8' error with a specific input length (@mgreter, #1856)
- Adds include headers to VS meta files on windows (@am11, #1850)
- Implement missing error checks (@mgreter, #1848)
- Fix SmartOS compilation once and for all (@mgreter, #1847)
- Relative imports fail when outside working directory (@mgreter, #1846)
- Disable error for empty source string on context (@mgreter, #1845)
- Fix expression parsing with comment between factors (@mgreter, #1844)
- Refactor/milestone 3.4 (@mgreter, #1841)
@custom-media
throws error (@mgreter, #1839)- Fix iterating over parent selector list with
@each
(@mgreter, #1837) - Include unconditionally (@saper, #1835)
- No file information for empty source string (@mgreter, #1834)
- Improve parsing of media queries with comments (@mgreter, #1833)
- Prevent segfault with nested properties edge case (@mgreter, #1832)
- Implement
extend
for wrapped selectors (@mgreter, #1831) - Only parse interpolations in kept block comments (@mgreter, #1830)
- Implement import recursion check (@mgreter, #1829)
- Error on invalid parent selector placements (@mgreter, #1828)
- Fix look-ahead of parent selector with trailing BEM separator (@mgreter, #1827)
- Fix
join_paths
when left path is not canonical (@mgreter, #1826) - Error incorrectly thrown for
&__
selector (@mgreter, #1825) - Update .editorconfig (@numeraltwo, #1824)
- Ampersand glued to the selector should be rejected (@mgreter, #1822)
- Selector-unify should return null instead of an empty list (@xzyfer, #1819, #1820)
- Fix interpolations returning quoted string in selectors (@xzyfer, #1818)
- Adds CRLF awareness to Util::quote() (@am11, #1817)
- Fix multiple issues with function parameter binding (@xzyfer, #1815)
- While loops should release their local env when exiting early (@xzyfer, #1814)
- Regression in variable scoping causing segfault (@xzyfer, #1813)
- Incorrect output for unknown at-rules (@mgreter, #1812)
- Emit DLL which exports symbols on windows VS (@am11, #1811)
- Add exit code for explicit test (@am11, #1810)
- Support multiline url declarations (@xzyfer, #1809)
- Incompatible units error in interpolations (@mgreter, #1804)
- Segfault on missing semicolon (@mgreter, #1803)
- Infinite import loop results in a stack overflow (@mgreter, #1801)
- Segmentation fault for interpolations in certain comments (@mgreter, #1798)
- Placeholder selector inside :not() (@mgreter, #1797)
- Append function doesn't appear to append correctly inside loops (@mgreter, #1796)
- Media queries fail to parse when comment is present (@mgreter, #1794)
- Incompatible units error for expressions in media queries (@mgreter, #1793)
- Incorrectly building dynamic library on Windows (@mgreter, #1790)
- Fix libsass build for SmartOS (@mgreter, #1782)
- Fix-up some docs on importers (undefined variables) (@asottile, #1780)
- Using 'calc' shoes an Error: Incompatible units: 'px' and '%' (@mgreter, #1776)
- Converts wchar_t* to UTF-8 std::string on windows (@am11, #1774)
- String Interpolation incorrectly quotes parent selectors (@xzyfer, #1770)
@debug
on an empty list should produce () (@mgreter, #1768)- Removing duplicated content from c api example (@rodneyrehm, #1767)
- Comments between binary operands prevents evaluation (@mgreter, #1765)
- Add crutch to help browsers interpreting source-maps (@mgreter, #1759)
- bug with & (parent-selector) and
@each
directive in 3.3.2 (@mgreter, #1757) - Fix possible segfault in
Each
expansion (@mgreter, #1756) - Remove
sixtuplet
flag on Colors and fix edge case (@mgreter, #1755) - Refactor to remove
Context
dependency fromTo_String
(@mgreter, #1754) - Segmentation fault
@each
with argslist node-sass 3.4.2 (@mgreter, #1752) - Wrong line reported in invalid operands for multiplication (@mgreter, #1751)
- Implement variable shadow scoping (@mgreter, #1748)
- Nested styles refer to top-level parent in source-map line number (@mgreter, #1747)
- Variables in control flow should not be accessible in outer scopes (@mgreter, #1746)
- Fix #1742 - same expression on both sides of && (@saper, #1744)
- Don't allocate std::random_device statically (@ksmadsen, #1743)
- Ampersands in :not selector (@mgreter, #1741)
- Improve binary expressions to preserve white-space at operands (@mgreter, #1739)
- Defer creation of hash maps into eval stage (@mgreter, #1736)
- Fix edge-case for extend with
Wrapped_Selector
(@mgreter, #1735) - Interpolated, double-quoted vars can produce an empty output (@mgreter, #1734)
- Fix error messages for
min
andmax
(@xzyfer, #1731) - Multiple nth-child selector with @extend compiles wrong (@mgreter, #1729)
- Fix Binary operators adjacent to interpolations (@mgreter, #1728)
- Allow multiple unparenthesized expressions for operators (@mgreter, #1727)
- Error: Import may not be used within controls or mixins. [$100](@mgreter, #1724)
- Different results with
@each
and@for
loop (@mgreter, #1723) - Extra white-space after "#{}" interpolation (@mgreter, #1722)
- Fixes for Windows version (@Taritsyn, #1721)
@each
on nested lists assigns the wrong value. (@mgreter, #1709)- Avoid some clang compiler warnings (@mgreter, #1707)
- Implement rounding precision (@mgreter, #1704)
- No error for
@extend %an-undefined-placeholder
(@mgreter, #1670) - Error on
@debug
,@warn
or@error
in properties (@mgreter, #1653) - Improve selector look-ahead for "negative" binomials (@mgreter, #1652)
@extend
inside@at-root
doesn't work (@mgreter, #1651)- Space in argument for
:nth-of-type(2n - 1)
results in error (@mgreter, #1650) - All interpolation is unquoted (@xzyfer, #1647)
- Arglist as single arg for varargs improperly gets destructed (@xzyfer, #1645)
- Use the correct parsing semantics for @import url() (@xzyfer, #1597)
- Single comma separated must be surrounded by
()
on inspect. (@mgreter, #1583) - Error message mismatch for empty interpolation as an argument (@mgreter, #1564)
- Error message mismatch for min (@xzyfer, #1559)
- Disallow functions to be defined in control directives or mixins (@mgreter, #1550)
- Minor issue parsing number units after double dash (@mgreter, #1526)
- Fixes some clang warnings (@mgreter, #1523)
- Better support for @-moz-document (@mgreter, #1401)
- Quoted colors in maps produces 'Duplicate key "transparent" in map' (@mgreter, #1169)
- Permit multiline in URL (@xzyfer, #1096)
- No...
Eleanor
Changelog
Features
- Improve rounding (@mgreter, #1688)
- Improve error reporting for duplicate keys in maps (@mgreter, #1561)
- Improve internals of
@import
(@mgreter, #1626) - Improve Makefile compatibility for cygwin compilation (@mgreter, #1662)
- Improve to how we run tests in CI (@mgreter, #1643 #1686)
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
forNULL
(@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
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
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
- Fix incorrectly parsing escape sequences (@mgreter, #1492)
- Fix incorrectly escaping apostrophes in Strings with interpolants (@mgreter, #1295)
- Fix incorrectly escaping in Strings with interpolants (@mgreter, #1115, #1231, #1271)
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 &
- Fix
&
not always being a list (@mgreter, #1590) - Fix
&
outputting incorrect selectors when used in a mixin (@mgreter, #1584) - Fix crashing with
&
without a parent (@mgreter, #1569) - Fix crashing with
& {}
(@mgreter, #1524) - Fix crashing when using
&
with@extend
(@mgreter, #1519) - Fix outputting incorrect selectors when using
&
with@extend
(@mgreter, #1482) - Fix second selector omitted when using
& + &
(@mgreter, #1441) - Fix duplicating parts of selectors when using
&
as a List (@ekskimn, #1304) - Fix incorrectly erring with
&
being used as an argument (@mgreter, #1260) - Fix incorrectly erring with
&
selector in@at-root
(@mgreter, #1043, #1210) - Fix incorrectly erring with
&
being used as string (@mgreter, #1170)
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
@extend
ing multiple attribute selectors (@xzyfer, #1574) - Fix selector specificity with deep
@extend
s (@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 ofsource_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...
3.3.0-beta3
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
@extend
ing 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
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
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
- Fix incorrectly parsing escape sequences (@mgreter, #1492)
- Fix incorrectly escaping apostrophes in Strings with interpolants (@mgreter, #1295)
- Fix incorrectly escaping in Strings with interpolants (@mgreter, #1115, #1231, #1271)
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 &
- Fix crashing with
& {}
(@mgreter, #1524) - Fix crashing when using
&
with@extend
(@mgreter, #1519) - Fix outputting incorrect selectors when using
&
with@extend
(@mgreter, #1482) - Fix second selector omitted when using
& + &
(@mgreter, #1441) - Fix duplicating parts of selectors when using
&
as a List (@ekskimn, #1304) - Fix incorrectly erring with
&
being used as an argument (@mgreter, #1260) - Fix incorrectly erring with
&
selector in@at-root
(@mgreter, #1043, #1210) - Fix incorrectly erring with
&
being used as string (@mgreter, #1170)
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
@extend
s (@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 ofsource_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
- Fix floating point rounding (@mgreter, #1514)
- Fix sourcemap path resolution on Windows (@mgreter, #1500)
- Fix Arglist sometimes having the wrong type (@mgreter, #1488)
- Fix compilations warnings on OSX with Clang (@xzyfer, #1461)
- Fix outputting unicode ranges sometimes removes the
+
(@mgreter, #1459) - Fix media queries with only CSS comment as content not being outputted (@mgreter, #1437)
- Fix falsey Map keys being silently dropped (@mgreter, #1416)
- Fix incorrectly outputting consecutive Strings, quoted Strings and interpolants (@mgreter, #1413 #1396)
- Fix difference when outputting quoted Strings in binary operations (@mgreter, #1399)
- Fix difference when outputting interpolated function calls (@mgreter, #1397)
- Fix whitespace being lost when joining escaped literals (@mgreter, #1394)
- Fix
Null
values in Lists not removed when converted to Strings (@mgreter, #1376) - Fix possible stack overflow by recursive call (@mgreter, #1361)
- Fix handling of percentage values in
rgb()
andrgba()
(@mgreter, #1332) - Fix @debug incorrectly outputting Maps with
null
keys (@xzyfer, #1331) - Fix sometimes outputting
\a
between selectors (@mgreter, #1328) - Fix compilation errors with SmartOS/Solaris (@djensen47, #1308)
- Fix dropping parts of selectors when using
@at-root
with interpolants (@mgreter, #1297) - Fix ignoring
@at-root
inside loops (@mgreter, #1285) - Fix clashing Map keys when using Lists (@mgreter, #1283)
- Fix treating named Colors as Strings (@mgreter, #1281)
- Fix quoting some strings (@mgreter, #1207 #1258 #1279)
- Fix processing
@import
s breadth-first (@mgreter, #1262) - Fix producing duplicate selectors
@at-root
sometimes (@mgreter, #1236)
Holiday Patch
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
andmax
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
- Add missing importer list methods to the C API (@tristanlins, #1225)
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
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
- Fix
is_superselector
function (@mgreter, #1202, #823, #1063, #1091) - Fix interpolation edge case in value parsing (@mgreter, #1198, #442)
- Improve parsing for nth-child binomials (@mgreter, #1197, #593)
- Improve url (string) parsing (@mgreter, #1196, #1096)
- Fix duplicate key handling for maps (@mgreter, #1195, #1187)
- Fix IE specific parsing (@mgreter, #1194, #931, #1102, #1107, #1188)
- Fix keyword handling in arglists (@mgreter, #1192, #1193)
- Replace bad usage of std::to_string in code (@saper, #1191)
Reassurance Elbow Suite
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
- Normalize numbers after operations (@mgreter, #1163, #1164)
- Force evaluation of binary expression in interpolation (@mgreter, #1162, #1165)
- Fix precision output format for numbers (@mgreter, #1153, #1166)
- Implement missing unit groups conversions (@mgreter, #1167, #1172)
- Fix append function when handling argument lists (@mgreter, #1171, #1173)
- Fix interpolation escape sequence edge case (@mgreter, #1168, #1174)
- Fix edge case with parent selector evaluation (@mgreter, #1170, #1176)
- Implement correct String Schema parsing (@mgreter, #1158, #1177)
- Fix a few list output edge cases (@mgreter, #1178, #1179)
- Add error message for empty interpolations (@mgreter, #1093, #1180)
- Fix white-space error with nested output style (@mgreter, #1092, #1181)
- Fix some compiler warnings (@mgreter, #1117, #1182)
- Fix parent selector interpolation in attribute selector (@mgreter, #1016, #1183)
- Fix
String_Schema
andBinary_Expression
parsing (@mgreter, #948, #1177)