prettier-plugin-embed icon indicating copy to clipboard operation
prettier-plugin-embed copied to clipboard

SQL: Indentation of interpolated expression missing an indent level

Open karlhorky opened this issue 1 year ago • 2 comments

Hi @Sec-ant 👋 Hope you're good!

I encountered a problem with prettier-plugin-sql (using sql-formatter) indentation with interpolation in a condition of a WHERE condition line:

Expected:

sql`
  SELECT
    *
  FROM
    longer_table_name_with_many_characters
  WHERE
    longer_table_name_with_many_characters.id IN ${sql(
      longerTableNameWithManyCharactersIds,
    )}
`

Actual:

(the 2 lines after sql( are missing 1 indent level)

sql`
  SELECT
    *
  FROM
    longer_table_name_with_many_characters
  WHERE
    longer_table_name_with_many_characters.id IN ${sql(
    longerTableNameWithManyCharactersIds,
  )}
`

This problem also extends to any other indented areas, eg. this FROM clause:

sql`
  SELECT
    *
  FROM
    ${sql(
    evenLongerTableNameWithManyCharactersKeepsGoingEvenLongerAndLongerAndLonger,
  )}
`

The sql-formatter demo seems to indent correctly, with a parenthesized expression spanning multiple lines (no ability to interpolate here, since it's only SQL, no JS template strings):

SELECT
  *
FROM
  longer_table_name_with_many_characters
WHERE
  longer_table_name_with_many_characters.id IN (
    111,
    222,
    333
  );

karlhorky avatar Apr 10 '24 17:04 karlhorky

Workaround

Wrapping the interpolation in parentheses works around the problem:

sql`
  SELECT
    *
  FROM
    longer_table_name_with_many_characters
  WHERE
    longer_table_name_with_many_characters.id IN (
      ${sql(longerTableNameWithManyCharactersIds)}
    )
`

But this workaround fails with a similar problem if the JS expression is too long and Prettier wraps it:

sql`
  SELECT
    *
  FROM
    longer_table_name_with_many_characters
  WHERE
    longer_table_name_with_many_characters.id IN (
      ${sql(
    evenLongerTableNameWithManyCharactersKeepsGoingEvenLongerAndLongerAndLongerIds,
  )}
    )
`;

karlhorky avatar Apr 10 '24 17:04 karlhorky

I'll need some help on this one. If anyone can offer a general solution, I'd be happy to merge.

Sec-ant avatar Apr 11 '24 01:04 Sec-ant