sqlfluff / vscode-sqlfluff

An extension to use the sqlfluff linter in vscode.
https://marketplace.visualstudio.com/items?itemName=dorzey.vscode-sqlfluff
MIT License
149 stars 33 forks source link

`Format Document` or `SQLFluff: Fix` overwrites file contents with sqlfluff logs #132

Open MiConnell opened 6 months ago

MiConnell commented 6 months ago

when running the extension from the command palette the contents of the file get overwritten with logs and no formatting is applied. this does not happen when running from the command line and in the below example no fixable violations are found.

installed sqlfluff version is 3.0.3

➜ sqlfluff --version                                                
sqlfluff, version 3.0.3

installed extension version is 3.0.0

sqlfluff
v3.0.0

https://github.com/sqlfluff/vscode-sqlfluff/assets/14168559/8c27a050-9516-4a18-9695-ff813d52a173

keraion commented 6 months ago

It looks like you are using the dbt templater here. Have you enabled the executeInTerminal option in the settings?

"sqlfluff.experimental.format.executeInTerminal": true,

Take note of the formatOnSave warning:

Determines if the sqlfluff fix command overwrites the file contents instead of this extension. You should not change the file contents while formatting is occurring if this is enabled. May lead to problems if editor.formatOnSave = true. This allows formatting to work when the templater is set to dbt. This can help solve Mojibake issues.

MiConnell commented 6 months ago

Regardless of settings a code formatter should never overwrite the contents of a file with log output right? This looks similar to #126

keraion commented 6 months ago

Ideally yes, however, the current implementation of this extension's default mode is to take the output from stdout and replace the content with that output. When using the dbt templater, dbt prints additional information to stdout which may be picked up from the formatter's output. The executeInTerminal option runs fix on the file directly and reloads the content from the fixed file.

MiConnell commented 6 months ago

ok makes sense, thanks. that did fix the issue. should this just default to true for dbt templates? is that even possible?