elixir/phoenix 个项目的 lint-staged
lint-staged for elixir/phoenix projects
如何使用 mix credo
、mix format
等提交一个 lint 文件而不是项目中的所有文件?
在 JavaScript 生态系统中,这是通过 lint-staged
和 husky
实现的。 Elixir 有它的 husky 包版本,叫做 git_hooks
,但我还没有发现任何类似于 lint-staged 的东西。
是否存在 elixir 包来实现我提交 elixir 文件时仅 运行ning lint 命令的目标?
示例配置 I 运行 with git_hook in config/dev.ex.
config :git_hooks,
auto_install: true,
verbose: true,
mix_path: "docker exec --tty $(docker-compose ps -q web) mix",
hooks: [
pre_commit: [
tasks: [
{:mix_task, :format, ["--check-formatted"]},
{:mix_task, :credo, ["--strict"]}
]
]
]
我使用 git_hooks 包和以下内容进行了此操作:
config/dev.ex
config :git_hooks,
auto_install: true,
verbose: true,
mix_path: "docker exec --tty $(docker-compose ps -q web) mix",
hooks: [
pre_commit: [
tasks: [{:file, "./priv/githooks/pre_commit.sh"}]
]
]
priv/githooks/pre_commit.sh
#!/bin/ash
# notice the hash bang is for alpine linux's ash
# run mix format
git diff --name-only --cached | grep -E ".*\.(ex|exs)$" | xargs mix format --check-formatted
# run mix credo
git diff --name-only --cached | xargs mix credo --strict
使用文件任务类型,我使用 git diff 命令并将暂存文件通过管道传输到不同的 mix 命令以进行 linting。
如何使用 mix credo
、mix format
等提交一个 lint 文件而不是项目中的所有文件?
在 JavaScript 生态系统中,这是通过 lint-staged
和 husky
实现的。 Elixir 有它的 husky 包版本,叫做 git_hooks
,但我还没有发现任何类似于 lint-staged 的东西。
是否存在 elixir 包来实现我提交 elixir 文件时仅 运行ning lint 命令的目标?
示例配置 I 运行 with git_hook in config/dev.ex.
config :git_hooks,
auto_install: true,
verbose: true,
mix_path: "docker exec --tty $(docker-compose ps -q web) mix",
hooks: [
pre_commit: [
tasks: [
{:mix_task, :format, ["--check-formatted"]},
{:mix_task, :credo, ["--strict"]}
]
]
]
我使用 git_hooks 包和以下内容进行了此操作:
config/dev.ex
config :git_hooks,
auto_install: true,
verbose: true,
mix_path: "docker exec --tty $(docker-compose ps -q web) mix",
hooks: [
pre_commit: [
tasks: [{:file, "./priv/githooks/pre_commit.sh"}]
]
]
priv/githooks/pre_commit.sh
#!/bin/ash
# notice the hash bang is for alpine linux's ash
# run mix format
git diff --name-only --cached | grep -E ".*\.(ex|exs)$" | xargs mix format --check-formatted
# run mix credo
git diff --name-only --cached | xargs mix credo --strict
使用文件任务类型,我使用 git diff 命令并将暂存文件通过管道传输到不同的 mix 命令以进行 linting。