Skip to content

Nested pseudo-selector with parent symbol #4358

@woody-li

Description

@woody-li

To reproduce:

https://lesscss.org/less-preview/#eyJjb2RlIjoiLngge1xuICAgICY6aXMoJi5hKSB7XG4gICAgICAgIGNvbG9yOiAjZjAwO1xuICAgIH1cbiAgICAmOm5vdCgmLmIsICYuYykge1xuICAgICAgICBjb2xvcjogIzBmMDtcbiAgICB9XG5cbiAgICAmOmlzKCYtYSkge1xuICAgICAgICBjb2xvcjogI2YwMDtcbiAgICB9XG4gICAgJjpub3QoJi1iLCAmLWMpIHtcbiAgICAgICAgY29sb3I6ICMwZjA7XG4gICAgfVxufVxuIiwiYWN0aXZlVmVyc2lvbiI6IjQuNS4xIiwibWF0aCI6InBhcmVucy1kaXZpc2lvbiIsInN0cmljdFVuaXRzIjpmYWxzZX0=

.x {
    &:is(&.a) {
        color: #f00;
    }
    &:not(&.b, &.c) {
        color: #0f0;
    }

    &:is(&-a) {
        color: #f00;
    }
    &:not(&-b, &-c) {
        color: #0f0;
    }
}

Current behavior:

When the nested pseudo with single selector, it works well.
But when multiple, it doesn't parse the parent symbol(&).
Tested with :not(), :is(), :where(), and got the same result.

.x:is(.x.a) {
  color: #f00;
}
.x:not(&.b, &.c) {
  color: #0f0;
}
.x:is(.x-a) {
  color: #f00;
}
.x:not(&-b, &-c) {
  color: #0f0;
}

Expected behavior:

.x:is(.x.a) {
  color: #f00;
}
.x:not(.x.b, .x.c) {
  color: #0f0;
}
.x:is(.x-a) {
  color: #f00;
}
.x:not(.x-b, .x-c) {
  color: #0f0;
}

Environment information:

  • less version: 4.4.0

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions