Description
In a project where there are shell scripts with a shebang line and no suffix, editorconfig for configuration doesn't work cleanly.
If I run shfmt -w scripts/some-script scripts/other-script.sh
(where some-script
is actually a bash script), the editorconfig section isn't loaded for that file and different formatting is used between the two.
Ideally I would be able to run without flags and get behavior driven by *.sh
in editorconfig as the "default" config.
I've looked at #577 (I can't use -filename PLACEHOLDER.sh
because the file isn't coming from stdin) and #393 as relevant.
I'm also looking at editorconfig/editorconfig#404 which seems to have gone off the rails and stalled out. It's a shame because I already have pre-commit
and it's identify
tool solving the detection problem for me, so an editorconfig section for [[shell]]
would be perfect. I'm not sure at this stage if a comment on that editorconfig issue would be productive, so I'm staying away.
In case it's handy and anyone reading this wants to try shfmt via pre-commit, here's a snippet of pre-commit config for running shfmt
- repo: local
hooks:
- id: shfmt
name: "Format shell scripts (shfmt)"
entry: shfmt
language: system
types: [shell]
# we need to use explicit options, not rely on editorconfig, because
# pre-commit will run this on detected shell scripts without the *.sh
# suffix
args: ["-w", "-i", "2", "-ci", "-sr"]
I think it would be viable to use a special editorconfig section for shfmt
behavior when the filename, matched against editorconfig, does not produce a configuration section. Something like [*.{sh,bash,SHFMT_DEFAULT)]
.
That's obviously a huge hack, and much worse on the surface than [[shell]]
, but it would probably work okay.
I very much appreciate shfmt
's decision not to litter my filesystem with more itty-bitty files, but in this case it's a frustration. I'm not able to configure shfmt
behavior in a directory in a direct way, only through a layer of indirection (editorconfig) which does not support my project's structure.
Activity