postcss-selector-parser icon indicating copy to clipboard operation
postcss-selector-parser copied to clipboard

spaces on selectors (or containers in general) don't work

Open jquense opened this issue 6 years ago • 9 comments

parser
  .pseudo({
    value: ':not',
    nodes: [
      selectorParser.selector({
        nodes: [selectorParser.tag({ value: 'span' })],
        spaces: { before: ' ', after: ' ' },
      }),
      selectorParser.selector({
        nodes: [selectorParser.tag({ value: 'span' })],
        spaces: { before: ' ', after: ' ' },
      }),
    ],
  })
  .toString() // ':not(span,span)'

I think the idea is that the spaces go on the nodes, but that's a bit unwieldy of an API when walking through the or transforming selectors, since you drill down and find the first non-container thing to apply spacing too.

jquense avatar Feb 19 '19 14:02 jquense

@jquense thanks for issue, why don't use rawSpaceBefore and rawSpaceAfter?

alexander-akait avatar Feb 19 '19 14:02 alexander-akait

i don't know how too! :) I didn't see that in the documentation. The problem I'm running into here is the case where we replace a pseudo selector with it's children.

its a bit awkward to do: psuedo.first.first.spaces = psuedo.spaces

jquense avatar Feb 19 '19 14:02 jquense

@jquense hm, rawSpaceBefore and rawSpaceAfter don't work or it is inconvenient?

alexander-akait avatar Feb 19 '19 14:02 alexander-akait

they may work, i just don't know what they are. looking at the code tho, toString() for containers doesn't use them?

jquense avatar Feb 19 '19 14:02 jquense

@jquense here contains https://github.com/postcss/postcss-selector-parser/blob/master/src/selectors/node.js#L180

alexander-akait avatar Feb 19 '19 14:02 alexander-akait

gotcha, yeah that works for a node but selectors are containers and they don't call super() on toString() https://github.com/postcss/postcss-selector-parser/blob/master/src/selectors/container.js#L317

This may be intentional, it's hard to know if you what to do if you put spaces on both the first node and the selector itself. Overall its more inconvenient than anything, and makes the case where the inner node doesn't exist yet hard

jquense avatar Feb 19 '19 15:02 jquense

@jquense do you have ideas how we can improve this? You can send a PR and we can discussion in a PR

alexander-akait avatar Feb 19 '19 15:02 alexander-akait

/cc @jquense friendly ping

alexander-akait avatar Feb 25 '19 16:02 alexander-akait

I don't have a good suggestion right now unfortunately. I'd be nicer if the logic in postcss-local-by-default could be simplified but i'm not sure the right way to handle it given the way this package works

jquense avatar Feb 26 '19 15:02 jquense