Source Tree uses the LineParserJS to parse CSS and SCSS. This is the refactoring I made to improve SASS support.
p = new LineParserJS(self.lang,
['@name,'],
['name {'],
'[\\-*#.a-zA-Z_]' +
'[ =\\"\\]\\[\\)\\(\\->:,*#.a-zA-Z0-9_]*',
null);
I replaced it to:
p = new LineParserJS(
self.lang,
[
'<spaces>((#\\{([^\\{]+)))\\{\\s',
'<spaces>([\\.#$&a-zA-Z](.(?!\\s\\{))+.(?=\\s*\\{))\\s'
],
[
'<spaces>(@each\\s+(\\$[a-zA-Z0-9\\-_,\\$ ]+))\\s+in\\s+.*?\\{',
'<spaces>(@media\\s+(.(?!\\s\\{))+.(?=\\s*\\{))'
],
'[a-zA-Z0-9_\\-]+',
null
);
Test cases:
.jose-bold {
.class:hover {
.class-long[type="text"]{
#id {
input {
input[type="jose"] {
input[type~="jose"]{
#{&}.jose {
#{&} .jose {
& .jose {
& .class, &.classb {
&.jose {
&:hover {
#{$item-alias}
&.#{$color-name}:not(.is-disabled):active {
.root > .hello {
.root &.class {
.root &.class.#{$var} {
@each $color-name, $size, $colors in $colors-themes {
@media screen and (min-width: 900px) {
Regex test available at: https://regex101.com/r/76wXZ3/1