Skip to content

invalid/non stable ast for combinator with comment #189

Description

@alexander-akait

Input:

h2 /*test*/ h4 { } /* Here we don't have `comment` node in ast (store comment in `raws`) */
h2/*test*/h4 { } /* Comment in ast */

It is do impossible analyzes comments, also adopt new version to stylelint and prettier. For me it is bug, but fixing this change ast.

Activity

  1. alexander-akait commented on Mar 15, 2019

    @alexander-akait
    CollaboratorAuthor

    /cc @ai what do you think about this

  2. ai commented on Mar 15, 2019

    @ai
    Member

    Why it will change AST?

  3. alexander-akait commented on Mar 16, 2019

    @alexander-akait
    CollaboratorAuthor

    @ai new comment node appears in ast(before it was in raws), just want to clarify should we release this as patch or major?

  4. ai commented on Mar 16, 2019

    @ai
    Member

    Technically it should be major

  5. alexander-akait commented on Mar 19, 2019

    @alexander-akait
    CollaboratorAuthor

    Same problem for [ /*t*/ title /*t*/ = /*t*/ "Something" /*t*/ ], comments should be part of ast not raw

  6. alexander-akait commented on Mar 19, 2019

    @alexander-akait
    CollaboratorAuthor

    /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.

  7. ai commented on Mar 19, 2019

    @ai
    Member

    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.

  8. alexander-akait commented on Mar 19, 2019

    @alexander-akait
    CollaboratorAuthor

    @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:

    • First spaces should be stored in raws.before or raws.attribute.before?
    • Second space should be stored in raws.attribute.before or raws.operatore.before?
    • Third space should be stored in raws.operator.after or raws.value.before
    • Four space should be stored in raws.value.after or raws.insensitive.before (insensitive will be renamed in flag in next major)
    • Five space should be stored in raws.insensitive.after or raws.after (insensitive will be renamed in flag in next major)
  9. ai commented on Mar 19, 2019

    @ai
    Member

    Why do we need a raws for whitespaces when we have space token?

  10. alexander-akait commented on Mar 19, 2019

    @alexander-akait
    CollaboratorAuthor

    @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

  11. ai commented on Mar 19, 2019

    @ai
    Member

    a b > { type: "word", value: "a" }, { type: "space", value: " " }, { type: "word", value: "b" }

  12. alexander-akait commented on Mar 19, 2019

    @alexander-akait
    CollaboratorAuthor

    @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

  13. ai commented on Mar 19, 2019

    @ai
    Member

    I am not sure that we should omit them from AST.

  14. alexander-akait commented on Mar 19, 2019

    @alexander-akait
    CollaboratorAuthor

    @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

  15. ai commented on Mar 19, 2019

    @ai
    Member

    Yeap. This discussion is on you. Sorry, that I can't help right now.

  16. alexander-akait commented on Mar 20, 2019

    @alexander-akait
    CollaboratorAuthor

    @ai Maybe not related to issue, but what is blocker integrate selector parser in postcss? Non standard syntax? Or nobody send a PR?

  17. ai commented on Mar 20, 2019

    @ai
    Member

    @evilebottnawi I am afraid that we will freeze API which will not be the best.

  18. alexander-akait commented on Mar 21, 2019

    @alexander-akait
    CollaboratorAuthor

    @ai we can afraid this forever 😄 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 😞

  19. alexander-akait commented on Mar 21, 2019

    @alexander-akait
    CollaboratorAuthor

    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

  20. ai commented on Mar 21, 2019

    @ai
    Member

    RIght now our main focus is visitor API postcss/postcss#1245

  21. alexander-akait commented on Mar 21, 2019

    @alexander-akait
    CollaboratorAuthor

    Great feature 👍 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.

  22. ai commented on Mar 21, 2019

    @ai
    Member

    @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

  23. alexander-akait commented on Mar 21, 2019

    @alexander-akait
    CollaboratorAuthor

    @ai okay 👍 i will ping you before release or when i have some questions

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions