prettier-plugin-embed
prettier-plugin-embed copied to clipboard
SQL: Indentation of interpolated expression missing an indent level
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
);
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,
)}
)
`;
I'll need some help on this one. If anyone can offer a general solution, I'd be happy to merge.