Releases: sass/libsass
Toronto
Bern
Maintenance release
Probably the last 3.6.x release until LibSass 4.0 gets out. Estimates to when that version will come out and when it will reach your favorite implementation is still unknown, but will certainly happen at some point in the future. This release improves once more the previously crippled complex selector extend functionality, and I hope this addresses all remaining issues without breaking any compatibility to latest Sass specs. Additionally it fixes an issue with the initialization of our random number generator on newer AMD CPUs and some improvements with source-maps and unicode characters, plus a few other bug-fixes here and there.
Changelog
- Fix extend edge case going endlessly (@mgreter #3081)
- Fix source-maps and how we count unicode characters (@mgreter #3096)
- Fix seed generator if std::random_device fails (@benbucksch #3151)
- Fix url() containing exclamation mark causing an error (#2880)
- Fix Offset initialization when end was not given (@ihsinme #3131)
- Fix obvious backporting error in pseudo extend (@mgreter #3136)
- Fix obvious identical subexpressions in op_color_number (@ariccio #3148)
- Fix edge case regarding unit-less number equality as object keys (@mgreter #3095)
- Revert compound re-ordering for non extended selectors (@mgreter #3100)
- Prevent compiler warning about unnecessary copy (@acocuzzo #3129)
- Replace Travis CI with GitHub Actions (@mgreter #3150)
Berlin
Maintenance release
This release fixes regressions introduced due to dart-sass code back-ports. Additionally a lot
of edge-case crashes have been addressed and we now ensure that compound selectors are
always printed in the correct order to form valid css selectors. Some improvements from the
ongoing LibSass refactoring have been back-ported and new optimized memory allocator
has been added, although for the time being it is disabled by default (compile time option).
Finally loaded sources are now handled by reference counted objects, so we can more easily
guarantee the lifetime of this information for error reporting purposes without making copies.
Moving toward dart-sass
First I hope this version finally fixes all regressions I introduced previously and I apologize for the
disturbance it may have brought to anybody. The compound selector extend changes may still
make your build very slow. The emitted warning should be correct now and if you get one,
chances are high that LibSass will output "unnecessary" big selectors. I will look into a solution for
next maintenance release to at least be able to detect this situation to avoid "endless" compilations.
New deprecation warning
This version will emit a warning if you declare a global variable for the first time inside a nested
scope via the !global
option, e.g. the variable doesn't yet exist on the global scope. Sass will
enforce you to declare your global variables explicitly on the global scope first in the future.
C-API change
We added back the definition and implementation related to getting information about the
plugin_paths
, since we already had those mentioned and documented in the wiki.
Changelog
- Fix parenthesization for selector schema and real parents (@mgreter) #3047
- Add deprecation warning for global variable creation (@mgreter) #2913
- Ensure correct output order of compound selectors (@mgreter) #3086
- Handle loaded source code as shared objects (@mgreter) #3041
- New custom memory allocator - disabled for now (@mgreter) #3038
- Add back C-API getters for plugin paths (@mgreter) #3087
- Fix abspath handling on windows without directory (@mgreter) #3089
- Fix various edge case crashes (@mgreter) #3032
- Fix segfault on directive ruleset (@xzyfer) #3050
- Fix heap-buffer-overflow in lexer (@xzyfer) #3057
- Fix stack-overflow in parser (@xzyfer) #3058
- Fix memory leak in parser (@xzyfer) #3059
- Fix memory leak in evaluation (@xzyfer) #3060
- Fix memory handling edge case (@mgreter) #3088
- Fix some null pointer access crashes (@mgreter) #3090
- Preparations for ongoing refactoring (@mgreter) #3025
Outlook for LibSass 4.0
I'm already working on a refactoring since close to one year. Certain parts are already in this version
and have been the reason for certain regressions (the extend and parenthesizing part). The work in
progress already has back-ported the parser bits from dart-sass, meaning we can get rid of sass2scss
and have full support for css parsing as dart-sass has. Cssize step was also incorporated fully into the
evaluation phase. AST tree is improved to differentiate between nodes before and after evaluation
(sass nodes evaluate to css nodes). Overall the code uses a lot more C++11 features, but I haven't yet
decided what the minimum requirements will be. I already optimized most cases for move semantics
whenever possible. Overall it seems one can expect at least a 10 fold performance improvement.
The C-API will also change quite substantially, although the basic approach to have functions for
everything will stay the same. But instead of marshaling different structs internally it will use the
C++ object directly. I hope to have this ready for a beta released by end of this year, but it will
not yet contain the new @use
import feature from sass though. Maybe somebody wants to
sponsor this feature to be added to LibSass sooner than later? 😃
Manchester
Maintenance release
This release fixes issues introduced with 3.6.2 and the extend backport.
Also fixes an issue with memory lifespan of error_src
on the C-API.
Additionally some edge case crashes have also been addressed.
Changelog
- Fix compound extend warning (@mgreter) #2990,
- Fix extend being stuck in endless loop (@mgreter) #3007
- Fix various edge-case segfault crashes (@mgreter) #3027
- Extend
error_src
lifetime on c-api context (@Taritsyn) #3022 - Fix memory leak in permutation function (@mgreter) #3015
- Preserve indentation in nested mode (@mgreter) #3021
London
Dart-Sass extend backport
Although a minor release, it's a big step forward for the LibSass internals. As it turns out, porting code from dart to c++ is much simpler than porting ruby code to c++. It took me about 200h to backport the complete extend logic from dart-sass to LibSass (around 8k lines of code). This marks a big milestone in the development of LibSass, as we now again have an implementation that is easy to patch as dart-sass gets improved. The old extend code-path in LibSass took a very ugly route where the internal stuctures were converted back and forth in order to match a very old ruby sass implementation. LibSass now also extends selectors during the main evaluation phase as dart-sass does; before it was a specific phase on its own, similar to ruby sass; which gives us around 20% better overall performance, depending on how extend heavy your code base is.
Given the nature of such a big and fundamental change, I do expect some regressions, but I hope that we have covered most (if not all) cases in our spec tests, so it will hopefully be a seamingless experience for all users. Therefore we did not increment the major version as it should behave the same as before (and fix most previously failing cases).
For further reading see #2908
Changelog
- Improve pseudo selector handling (@jquense) #2990,
- Code improvements (@glebm) #2911, #2912, #2929, #2930, #2933, #2935,
- Fix various functions arguments (@nschonni) #2945, #2946, #2949, #2951,
- Fix "call" for $function (@nschonni) #2948
- Check weight argument on invert call (@nschonni) #2950
- Improve makefile to use
dylib
extension on MacOS (@mgreter) #2953 - Fix bug in
scale-color
with positive saturation (@zwass) #2954 - Minor API documentation improvements (@mgreter) 4e89f57, e340781, #2968
- Fix selector
isInvisible
logic (@mgreter) #2995 - Fix evaluation of unary expressions in loops (@mgreter) #2996
- Fix attribute selector equality with modifiers (@mgreter) #2997
Credits
Special shout-out 🎙 goes to @jquense 👏 and @zwass 👏 for their first time contributions 🚀, thanks ! Also to our reoccurring contributors @nschonni and @glebm 👍. I hope you enjoy this release and fingers crossed I didn't mess up anything too serious 🐛 🏥 . Sincerely your maintainers, @mgreter and @xzyfer
Amendments
This version of libsass will emit a warning for future deprecated compound extends. Unfortunately I poorly ported the regarding code back to libsass and therefore the actual warning is not very useful for now. This will be fixed in next version. Sorry for the confusion this might produce.
Monaco
Minor internal fixes, and build and portability improvements.
Changelog
[0d08be9] travis: add gcc-8 to CI (#2889) (@ahorek)
[21d2d16] [build] enable concurrent compilation (#2888) (@ahorek)
[04f59a5] Remove the link to ast_factory.hpp
from Visual C++ project files (@Taritsyn)
[5ebc5d5] [build] add support of Visual Studio 2017 and 2019 to the Visual C++ project file (#2891) (@Taritsyn)
[1edc51c] Makefile: Fix STATIC_LIBSTDCPP support (@glebm)
[a46a281] Remove abspath from native Makefile (@mgreter)
[0328de2] Read files using for better portability (@glebm)
[dfe23ac] Add comparison operators for SharedImpl, fix bugs (@glebm)
[0bab610] VS2013 noexcept workaround (@glebm)
Luxembourg
A new minor version bump, a release new naming scheme, and new core contributor. Welcome @glebm and thank you for all your invaluable contributions to this huge release!
Changelog
[0dad856] Add functions utility compile unit (@mgreter)
[d828027] Move macros and helpers to fn_utils (@mgreter)
[c07f4a3] Protect some header defines from redefining (@mgreter)
[8b74ede] Move number functions to own compile unit (@mgreter)
[83f641c] Move selector functions to own compile unit (@mgreter)
[37cfb4c] Move color functions to own compile unit (@mgreter)
[ac4e48b] Move string functions to own compile unit (@mgreter)
[4d1e036] Move list functions to own compile unit (@mgreter)
[47354ad] Move map functions to own compile unit (@mgreter)
[c1b3676] Move misc functions to own compile unit (@mgreter)
[7cb696a] Rename stacks to use shorter typedefs (@mgreter)
[aa7386f] Cleanup CRTP implementation (@mgreter)
[efc0331] Rename ast2c and move c2ast to own compile unit (@mgreter)
[064d6de] Move AST memory macros to macro header (@mgreter)
[10c25da] Make Value inherit from PreValue (@mgreter)
[0599b2e] Remove obsolete parameters (@mgreter)
[205dc65] Remove Function_Call_Schema class (@mgreter)
[4c34d16] Remove obsolete in_selector
flag (@mgreter)
[bbfcf49] Add distinct Parent_Reference
class for values (@mgreter)
[72e9a04] Fix parsing of colors (remove dynamic cast on eval) (@mgreter)
[025dc4e] Pass traces instead of full context to bind (@mgreter)
[0c5e27c] Clean up get_arg_m
in fn_utils
(@mgreter)
[37e15bb] Change String_Schema
to only hold PreValue
objects (@mgreter)
[d0b6338] Clean up function macros and force to return PreValues (@mgreter)
[e0321a0] Enhance stacktrace to report column numbers (@mgreter)
[6e79ff7] Add display name for color to debugger (@mgreter)
[090bab3] Add get method for environment class (@mgreter)
[8f0bdc7] Remove obsolete function constructor arguments (@mgreter)
[09b36b0] Add EnvStack typedef (@mgreter)
[5564ab3] Replace direct references with methods (@mgreter)
[91dd504] Adjust output/error for modulo zero operation (@mgreter)
[e5421e6] Adjust output/error for modulo zero operation (@mgreter)
[f67b9c3] Fix automake build if sassc is missing (@mgreter)
[0dee7ad] Upgrade sass2scss to version 1.1.2 (@mgreter)
[1198007] Allow colors in @at
directives (@mgreter)
[5120bdb] Fix edge case converting achromatic colors to HSL (@mgreter)
[5f94d71] Delay interpolated expression as in regular CSS (@mgreter)
[69a0dfa] Fix automake build if sassc is missing (@mgreter)
[ca89d73] Upgrade sass2scss to version 1.1.2 (@mgreter)
[b0077d6] Allow colors in @at
directives (@mgreter)
[2807587] Fix edge case converting achromatic colors to HSL (@mgreter)
[046b32a] Delay interpolated expression as in regular CSS (@mgreter)
[07222d6] Fix parsing of colors (remove dynamic cast on eval) (@mgreter)
[c0a5a21] Allow "!" in custom property values (@xzyfer)
[77f1323] Allow "!" in custom property values (@xzyfer)
[facbab8] Include Haskell bindings in implementations list (@jakubfijalkowski)
[03c99f5] Fix ordering in implementations list (@jakubfijalkowski)
[b866ad5] Fix link to node-sass implementation (@xzyfer)
[b9662fc] Separate out deprecated import file extensions (@xzyfer)
[fd989f6] Add a deprecation warning for @import's that resolved .css files (@xzyfer)
[3af837c] Add support for index imports (@xzyfer)
[e690924] Add configuration for supporting additional extensions as .scss (@xzyfer)
[1da6264] Remove raw css imports (@xzyfer)
[f315c93] Inline out_of_memory macro (@thatguystone)
[5539920] Inline out_of_memory macro (@thatguystone)
[17a83f6] Emit transparent colors as rgba(0, 0, 0, 0) (@xzyfer)
[e28ebaf] Fix merging of nested media queries with not (@xzyfer)
[0e6d8a6] Fix merging of nested media queries with not (@xzyfer)
[62effe1] Fix regression in parsing selector with trailing escaped colon (@xzyfer)
[5ff5859] Fix regression in parsing selector with trailing escaped colon (@xzyfer)
[c287f31] Emit transparent colors as rgba(0, 0, 0, 0) (@xzyfer)
[6fe62e9] Add configuration for supporting additional extensions as .scss (@xzyfer)
[27d5026] Remove raw css imports (@xzyfer)
[137a4dd] Mentioned SharpScss and LibSassHost in implementations.md (@tompazourek)
[9266d26] Update compatibility section of the read me (@xzyfer)
[0bc35e3] Fix segfault on empty custom properties (@xzyfer)
[e351212] Fix segfault on empty custom properties (@xzyfer)
[d91b4bf] Include Haskell bindings in implementations list (@jakubfijalkowski)
[f5b854f] Fix ordering in implementations list (@jakubfijalkowski)
[6036d5d] Fix link to node-sass implementation (@xzyfer)
[8a6ba8f] Mentioned SharpScss and LibSassHost in implementations.md (@tompazourek)
[1e52b74] Revert "Upgrade sass2scss to version 1.1.2" (@xzyfer)
[95011cd] Add deprecation messages for color arithmetic (@xzyfer)
[d18fd47] Add deprecation messages for color arithmetic (@xzyfer)
[4254054] Fix explosion of parent selectors in selector-nest (@mgreter)
[3a81850] Include in operation.hpp (@yboulkaid)
[5ca21ca] Adds another Nim implementation (@dom96)
[45f5087] Update Readme.md (@mhussa)
[df8152d] Remove legacy workaround for parsing modulo operator (@xzyfer)
[b3374e3] Fix handling of unclosed interpolant in url (@xzyfer)
[15bdef9] Create CODE_OF_CONDUCT.md (@nschonni)
[33718b0] Revert "Remove raw css imports" (@xzyfer)
[55abf76] Revert "Add configuration for supporting additional extensions as .scss" (@xzyfer)
[9a211eb] Revert "Add a deprecation warning for @import's that resolved .css files" (@xzyfer)
[19fd2bf] Revert "Separate out deprecated import file extensions" (@xzyfer)
[79c16c9] Revert "Remove raw css imports" (@xzyfer)
[ea0e397] Revert "Add configuration for supporting additional extensions as .scss" (@xzyfer)
[210fdff] Remove legacy workaround for parsing modulo operator (@xzyfer)
[c0a6cf3] Fix handling of unclosed interpolant in url (@xzyfer)
[38f4c36] Fix possible bug with handling empty reference combinators (@xzyfer)
[0fa69a5] Fix -Wmissing-declarations for gcc < 7 (@xzyfer)
[fbdcc37] Support hex colors with alpha channels (@xzyfer)
[edd29a2] Make plugin tests run with a precision of 5 (@xzyfer)
[ad30194] Update make CC and CXX defaults for wider compat (@glebm)
[0331b61] Update link to perl-libsass implementation (@mgreter)
[924cb48] Fix -Wmissing-declarations for gcc < 7 (@xzyfer)
[7459d19] Support hex colors with alpha channels (@xzyfer)
[9ce7a7f] Fix possible bug with handling empty reference combinators (@xzyfer)
[39e3087] Update plugin test script to use precision 5 (@xzyfer)
[3066614] Makefile: Use order-only deps for directories (#2728) (@glebm)
[5d46c6f] Use precision 10 by default (#2730) (@glebm)
[e04f200] Set default precision to 10 in Sass_Output_Options (@glebm)
[5baf0fa] Docs: Profiling (@glebm)
[2ebf465] SharedPtr: Remove explicit detached
bool (@glebm)
[a8273fc] Remove -undefined error, --no-undefined LDFLAGS (@alyssais)
[392ffe1] SharedPtr: More cleanup (@glebm)
[f477cd6] Makefile cleanup (@glebm)
[ab03dc0] Disable failing coverage check (@xzyfer)
[d225a09] Fix ignored :not(multiple, selectors) (@glebm)
[d09d09d] Actually fix coveralls failures (@xzyfer)
[c87a63e] Use -std=c++11 (@glebm)
[ec249e4] AST: Add final
specifier to final classes (@glebm)
[3364372] Fix selector unification ordering (@glebm)
[3e60b12] Add and use a unification_order
method (@glebm)
[f442421] Fix memory leak introduced in March (@glebm)
[430315a] Fix memory leak in resolve_parent_refs (@glebm)
[fdff442] Revert "SharedPtr: More cleanup" (@glebm)
[fa93c5a] Revert "SharedPtr: Remove explicit detached
bool" (@glebm)
[5e58c35] AST: Fix clang warnings, add const, remove virtual (@glebm)
[6c8285b] .travis.yml: sudo: required
for ptrace support (@glebm)
[514c9c7] Fix 2 more memory leaks (@glebm)
[546f8e9] Selector unification: use == for comparison (@glebm)
[9df83e1] Do not use 0
for initializing SharedImpl (@glebm)
[0df09e6] Add /plugins/ to .gitignore (@glebm)
[4589d07] Fix a memory leak in rgba_2
(@glebm)
[754b338] Travis ASan: Use default Travis clang (v5.0) (@glebm)
[122d9f3] Clean up Selector_List::operator==
(@glebm)
[930857c] Fix heap-use-after-free in Parser error handling (@glebm)
[8f40dc0] Optimize line_begin/end search in handle_error
(@glebm)
[534065c] MSVC warning and fix #2627 (@glebm)
[84eaca2] Add a copy constructor to InvalidSass exception (@glebm)
[2494f0e] Minor fix: Reserve lists with correct sizes (@glebm)
[a8bc4d6] SharedPtr improvements (@glebm)
[5c2501e] Run C++ unit tests on CI (Makefile-only) (@glebm)
[c93f058] Disallow parent selectors in selector-append
(#2760) (@glebm)
[eb15533] Fix memory leak in parse_ie_keyword_arg
(@glebm)
[c04f5d7] Implement passing arguments to @content (@xzyfer)
[2a4935c] Clean up Compound_Selector::operator==
(@glebm)
[280ffd8] Fix crash in selector-append('.x~~', 'a')
(@glebm)
[b09e813] Refactor: Add starts/ends_with
functions (@glebm)
[2cabd11] Update utfcpp to v2.3.6 (@glebm)
[7634b1c] Remove debugger from fn_miscs (@mgreter)
[bfece18] Move AST selectors into own compile units (@mgreter)
[c1990ed] Move AST values into own compile units (@mgreter)
[bfb02ef] Fix clang warnings (@mgreter)
[7a29ca8] Cleanup and fix selector compare operators (@mgreter)
[80fd573] Rename element to type selector and type enums (@mgreter)
[41e0775] Replace to_string
compare with ==
object compare (@mgreter)
[058e763] Split AST declarations and definitions (@mgreter)
[98aede5] Move AST supports into own compile units (@mgreter)
[93c62e8] Split AST declarations and definitions (@mgreter)
[5d50c96] Cleanup AST values compare operators (@mgreter)
[be88fdc] Fix clang warnings (@mgreter)
[49d2e92] Refactor loops i...
Vroom vroom
Breaking
Revert changes to raw CSS @imports
Due to unintended disruption this change has been reverted in favour of a language level revision to CSS imports to be implemented at a future date.
Note to implementors: this removes the sass_option_push_import_extension
API added in 3.5.4. Apologies for the disruption.
Deprecations
Features
- Support hex colors with alpha channels (@xzyfer, #2674)
- Add a
sass_option_push_import_extension
C-API (@xzyfer, #1964)
Fixes
Maloo
Ace
Breaking
This breaking change was unintentionally released early. However since this is the desired behaviour moving forward we're going to roll-forward with it.
Raw CSS @imports
This is a non-standard, and confusion feature. Implementors can now
opt into supporting @import
ing additional file extensions with
sass_option_push_import_extension
.
An @import
that resolves to a .css
file will produce a deprecation
warning. This deprecation messaage will be removed in the upcoming 3.6
release.
DEPRECATION WARNING on line 1, column 8 of /libsass/test.scss:
Including .css files with @import is non-standard behaviour which will be removed in future versions of LibSass.
Use a custom importer to maintain this behaviour. Check your implementations documentation on how to create a custom importer.
Community
- Add nim-sass to implementations list (@zacharycarter, #2592)
- Add Haskell bindings to implementations list (@jakubfijalkowski, #2612)
- Add SharpScss and LibSassHost bindings to implementations list (@tompazourek, #2623)
- Update node-sass link in implementations list (@xzyfer, b866ad5)
- Update Unicode doc after forcing UTF8/plain ASCII (@mgreter, #2596)
- Update compatibility section of the read me (@xzyfer, 9266d26)
Features
- Update
sass2scss@v1.1.2
(@mgreter, #2602) - Emit
transparent
colours asrgba(0, 0, 0, 0)
(@xzyfer, #2298) - Add a
sass_option_push_import_extension
C-API (@xzyfer, #1964)
Fixes
- Fix output/error for modulo zero operation (@mgreter, #2593)
- Fix automake build if sassc is missing (@mgreter, #2601)
- Fix handling of colours in
@at
directives (@mgreter, #2360) - Fix edge case converting achromatic colors to HSL (@mgreter, #2604)
- Fix evaluation of arithmetic inside interpolation (@mgreter, #2203)
- Fix handling of
@important
in custom properties (@xzyfer, #2590) - Fix duplicate definition of
out_of_memory
macro (@thatguystone, #2619) - Fix merging of nested media queries with negation (@xzyfer, #2425)
- Fix regression in parsing selector with trailing escaped colon (@xzyfer, #2625)
- Fix segfault on empty custom properties (@xzyfer, sass/sassc#225)