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