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
- 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
dylibextension on MacOS (@mgreter) #2953
- Fix bug in
scale-colorwith positive saturation (@zwass) #2954
- Minor API documentation improvements (@mgreter) 4e89f57, e340781, #2968
- Fix selector
isInvisiblelogic (@mgreter) #2995
- Fix evaluation of unary expressions in loops (@mgreter) #2996
- Fix attribute selector equality with modifiers (@mgreter) #2997
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.