prettier / prettier/prettier

styled components interpolated selectors dont generate newline

Open
#6,392 1 comment 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

area:multiparser lang:css/scss/less
Dominant language
JavaScript
Stars
52.3k
Forks
5k
Avg merge
19h 2m
Merged PRs (30d)
117

Description

If we have multiple styled components interpolated and separated by comma, the expected newline after the comma is missing.

Styled Components allow interpolation of nested styled components, see here for the syntax.

Prettier will put css selectors separated by , on new lines, introduced here: https://github.com/prettier/prettier/pull/2047. This works in styled components using regular css selectors, see second block in the playground link. It only fails when we try to use interpolated styled components.

Prettier 1.18.2
Playground link

--parser babel

Input:

const A = styled(_A)`
  ${B}, ${C} {
    style: value;
  }
`

const A = styled(_A)`
  .classA, .classB {
    style: value;
  }
`

Output:

const A = styled(_A)`
  ${B}, ${C} {
    style: value;
  }
`;

const A = styled(_A)`
  .classA,
  .classB {
    style: value;
  }
`;

Expected behavior:

const A = styled(_A)`
  ${B},
  ${C} {
    style: value;
  }
`;

const A = styled(_A)`
  .classA,
  .classB {
    style: value;
  }
`;

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start with the linked Playground reproduction using the babel parser and compare the styled-component interpolation case with the regular CSS selector case. Trace the formatter path for comma-separated selectors; done means the interpolated selectors receive the same newline formatting as regular selectors while preserving the shown output.

Written by the indexing model from the issue text.

Assessment

Tech stack
css, javascript
Domain
tooling
Issue type
Bug
Difficulty
3/5
Estimated time
1-2 days
Activity status
Stale
Clarity
Clearly specified
Newbie friendliness
45/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.