Sec-ant / prettier-plugin-embed

A configurable Prettier plugin to format embedded languages in JS/TS Files.
https://www.npmjs.com/package/prettier-plugin-embed/v/latest
MIT License
58 stars 2 forks source link

SQL: Indentation of interpolated expression missing an indent level #103

Open karlhorky opened 5 months ago

karlhorky commented 5 months ago

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 commented 5 months ago

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,
  )}
    )
`;
Sec-ant commented 5 months ago

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