Open alexander-akait opened 5 years ago
/cc @ai what do you think about this
Why it will change AST?
@ai new comment
node appears in ast(before it was in raws
), just want to clarify should we release this as patch or major?
Technically it should be major
Same problem for [ /*t*/ title /*t*/ = /*t*/ "Something" /*t*/ ]
, comments should be part of ast not raw
/cc @ai i ahve some questions about spaces too Example:
[ href = "test" i ] { }
^ ^ ^ ^ ^
What node(s) should store spaces in this case (inside raws
?)? Because now logic in parser is very misleading and I can't understand whether we do it right or not. We have attribute
, value
, insensitive
values.
To be honest, I am not sure that I know the best answer.
But I think in selector parser we should work with spaces in a different way, compare to PostCSS core. In main CSS syntax, whitespaces don’t mean anything. In selector, whitespace can have a lot of meanings.
So, I think it could be better to have a special token for spaces.
@ai yep, we already have special token for space
, my questions about where we should store meta information about space (raws
). Let's see on example above:
raws.before
or raws.attribute.before
?raws.attribute.before
or raws.operatore.before
?raws.operator.after
or raws.value.before
raws.value.after
or raws.insensitive.before
(insensitive
will be renamed in flag
in next major)raws.insensitive.after
or raws.after
(insensitive
will be renamed in flag
in next major)Why do we need a raws
for whitespaces when we have space
token?
@ai hm can you provide example/PoC of ast with space
token (based on example above)? We need this spaces for linting/printing in stylelint
and prettier
a b
> { type: "word", value: "a" }, { type: "space", value: " " }, { type: "word", value: "b" }
@ai in example above space
is descendant selector
, we already provide combinator
as separate node, but in my example spaces mean nothing so we omit them from ast
I am not sure that we should omit them from AST.
@ai I do not see their meaning as they really do not carry here any semantic load, also we do this right now, we can plan this on next major, but will be great solve problems with spaces using raws
for next release
Yeap. This discussion is on you. Sorry, that I can't help right now.
@ai Maybe not related to issue, but what is blocker integrate selector parser in postcss? Non standard syntax? Or nobody send a PR?
@evilebottnawi I am afraid that we will freeze API which will not be the best.
@ai we can afraid this forever :smile: To be honestly ast of postcss
is not enough for prettier/stylelint nowadays (prettier breaks code in many cases and i recommended don't use this for css/scss/less/etc). I think we should start integration selector
/value
/media
parsers otherwise we will need do fork postcss and continue development :disappointed:
Also we can release this under flag/option and as experimental (adding information to readme about non stable)
We have big tests code base in stylelint and prettier and webpack so i think we catch all problems very fast
RIght now our main focus is visitor API https://github.com/postcss/postcss/pull/1245
Great feature :+1: Already look on this.
@ai Is there any sense send a PR or better fork postcss and starting own development for prettier? Because i don't want to waste my time on something what will be never merged.
@evilebottnawi I have a better plan. Let’s release new AST in postcss-selector-parser
and if nobody will complain about it, we can move it to PostCSS
@ai okay :+1: i will ping you before release or when i have some questions
Input:
It is do impossible analyzes comments, also adopt new version to
stylelint
andprettier
. For me it is bug, but fixing this change ast.