summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorxieyonn <qxieyongp@163.com>2025-09-21 15:50:06 +0800
committerJunegunn Choi <junegunn.c@gmail.com>2025-09-24 22:41:54 +0900
commitde0df2422ac26edcd083d801e93635deb0786589 (patch)
tree76e4fbe88acaaa2057cfdf60339bafbfb8532e15
parent148b0a94cdb88bc6e0ff36af1ab2b7bccd24e555 (diff)
downloadfzf-de0df2422ac26edcd083d801e93635deb0786589.tar.gz
feat: add make fmt for *.sh *.bash
1. add .editorconfig file, add rules for .sh .bash files. 2. add make fmt target, use: - gofmt *.go. - shfmt *.sh *.bash, shell/completion.bash, shell/key-bindings.bash need a left indent due to an outermost if block. 3. add shfmt check for bash scripts in make lint target. 4. install shfmt in actions.
-rw-r--r--.editorconfig20
-rw-r--r--.github/workflows/linux.yml2
-rw-r--r--.github/workflows/macos.yml2
-rw-r--r--Makefile24
4 files changed, 44 insertions, 4 deletions
diff --git a/.editorconfig b/.editorconfig
new file mode 100644
index 00000000..15230cdb
--- /dev/null
+++ b/.editorconfig
@@ -0,0 +1,20 @@
+root = true
+
+[*.{sh,bash}]
+indent_style = space
+indent_size = 2
+simplify = true
+binary_next_line = true
+switch_case_indent = true
+space_redirects = true
+function_next_line = false
+
+# also bash scripts.
+[{install,uninstall,bin/fzf-preview.sh,bin/fzf-tmux}]
+indent_style = space
+indent_size = 2
+simplify = true
+binary_next_line = true
+switch_case_indent = true
+space_redirects = true
+function_next_line = false
diff --git a/.github/workflows/linux.yml b/.github/workflows/linux.yml
index 2c5ee36d..454f56e9 100644
--- a/.github/workflows/linux.yml
+++ b/.github/workflows/linux.yml
@@ -33,7 +33,7 @@ jobs:
ruby-version: 3.4.1
- name: Install packages
- run: sudo apt-get install --yes zsh fish tmux
+ run: sudo apt-get install --yes zsh fish tmux shfmt
- name: Install Ruby gems
run: bundle install
diff --git a/.github/workflows/macos.yml b/.github/workflows/macos.yml
index 79596a1a..69e98e86 100644
--- a/.github/workflows/macos.yml
+++ b/.github/workflows/macos.yml
@@ -30,7 +30,7 @@ jobs:
ruby-version: 3.0.0
- name: Install packages
- run: HOMEBREW_NO_INSTALL_CLEANUP=1 brew install fish zsh tmux
+ run: HOMEBREW_NO_INSTALL_CLEANUP=1 brew install fish zsh tmux shfmt
- name: Install Ruby gems
run: gem install --no-document minitest:5.14.2 rubocop:1.0.0 rubocop-minitest:0.10.1 rubocop-performance:1.8.1
diff --git a/Makefile b/Makefile
index d66d2ef8..efd1aeb6 100644
--- a/Makefile
+++ b/Makefile
@@ -5,6 +5,15 @@ MAKEFILE := $(realpath $(lastword $(MAKEFILE_LIST)))
ROOT_DIR := $(shell dirname $(MAKEFILE))
SOURCES := $(wildcard *.go src/*.go src/*/*.go shell/*sh man/man1/*.1) $(MAKEFILE)
+BASH_SCRIPTS := $(ROOT_DIR)/bin/fzf-preview.sh \
+ $(ROOT_DIR)/bin/fzf-tmux \
+ $(ROOT_DIR)/install \
+ $(ROOT_DIR)/uninstall \
+ $(ROOT_DIR)/shell/common.sh \
+ $(ROOT_DIR)/shell/update-common.sh
+BASH_SCRIPTS_INDENT_LEFT := $(ROOT_DIR)/shell/completion.bash \
+ $(ROOT_DIR)/shell/key-bindings.bash
+
ifdef FZF_VERSION
VERSION := $(FZF_VERSION)
else
@@ -88,9 +97,20 @@ itest:
bench:
cd src && SHELL=/bin/sh GOOS= $(GO) test -v -tags "$(TAGS)" -run=Bench -bench=. -benchmem
-lint: $(SOURCES) test/*.rb test/lib/*.rb
+lint: $(SOURCES) test/*.rb test/lib/*.rb ${BASH_SCRIPTS}
[ -z "$$(gofmt -s -d src)" ] || (gofmt -s -d src; exit 1)
bundle exec rubocop -a --require rubocop-minitest --require rubocop-performance
+ [ -z "$$(shfmt -d $(BASH_SCRIPTS))" ] || (echo "format bash files by (make fmt)"; exit 1)
+
+fmt: $(SOURCES) $(BASH_SCRIPTS) $(BASH_SCRIPTS_INDENT_LEFT)
+ gofmt -s -w src
+ shfmt -w $(BASH_SCRIPTS)
+ # shift left because we have an outermost if block for historical reasons.
+ for f in $(BASH_SCRIPTS_INDENT_LEFT); do \
+ shfmt -w "$$f"; \
+ tmp=$$(mktemp); \
+ sed 's/^ //' "$$f" > "$$tmp" && mv "$$tmp" "$$f"; \
+ done
install: bin/fzf
@@ -189,4 +209,4 @@ update:
$(GO) get -u
$(GO) mod tidy
-.PHONY: all generate build release test itest bench lint install clean docker docker-test update
+.PHONY: all generate build release test itest bench lint install clean docker docker-test update fmt