mirror of
https://github.com/vale981/apheleia
synced 2025-03-04 17:11:40 -05:00

* Fix brittany installation, needed the `--reorder-goals` argument to be added so that a version that was not the latest version could be installed so that it was compatible with the base lib version shipped with Ubuntu 20.04. We'll upgrade to 22.04 eventually (before it falls out of LTS). Ref: https://github.com/radian-software/apheleia/pull/221 * Add a `make fmt-build-common` target which allows tagging a docker image containing just the base software and not any formatters, to make it easy to debug formatter installation manually. * Update `apheleia-ft` to also run formatter tests when any files affecting a formatter are changed, which includes the installation script, the sample input/output, and also any scripts (e.g. `apheleia-phpcs`) that it uses. We don't have any logic that will run all formatter tests at once, because that is unwieldy. That can be done manually if making a big change. * Update to actions/checkout@v4 from v2 because the older one was listed as deprecated. * Print full stacktraces when `apheleia-ft` fails with an Elisp error.
103 lines
3.2 KiB
Makefile
103 lines
3.2 KiB
Makefile
SHELL := bash
|
|
|
|
VERSION ?=
|
|
CMD ?=
|
|
|
|
EMACS ?= emacs
|
|
|
|
TAG ?= latest
|
|
|
|
# The order is important for compilation.
|
|
for_compile := apheleia-utils.el apheleia.el apheleia-core.el
|
|
for_checkdoc := *.el
|
|
for_checkindent := *.el
|
|
|
|
.PHONY: help
|
|
help: ## Show this message
|
|
@echo "usage:" >&2
|
|
@grep -h "[#]# " $(MAKEFILE_LIST) | \
|
|
sed 's/^/ make /' | \
|
|
sed 's/:[^#]*[#]# /|/' | \
|
|
sed 's/%/LANG/' | \
|
|
column -t -s'|' >&2
|
|
|
|
.PHONY: lint
|
|
lint: compile checkdoc longlines checkindent fmt-lint ## Run all fast linters
|
|
|
|
.PHONY: compile
|
|
compile: ## Check for byte-compiler errors
|
|
@for file in $(for_compile); do \
|
|
echo "[compile] $$file" ;\
|
|
rm -f "$${file}c" ;\
|
|
$(EMACS) -Q --batch -L . -f batch-byte-compile $$file 2>&1 \
|
|
| grep -v "^Wrote" \
|
|
| grep . && exit 1 || true ;\
|
|
done
|
|
|
|
.PHONY: checkdoc
|
|
checkdoc: ## Check for missing or poorly formatted docstrings
|
|
@for file in $(for_checkdoc); do \
|
|
echo "[checkdoc] $$file" ;\
|
|
$(EMACS) -Q --batch \
|
|
--eval "(or (fboundp 'checkdoc-file) (kill-emacs))" \
|
|
--eval "(setq sentence-end-double-space nil)" \
|
|
--eval "(checkdoc-file \"$$file\")" 2>&1 \
|
|
| grep . && exit 1 || true ;\
|
|
done
|
|
|
|
.PHONY: checkindent
|
|
checkindent: ## Ensure that indentation is correct
|
|
@tmpdir="$$(mktemp -d)"; for file in $(for_checkindent); do \
|
|
echo "[checkindent] $$file" >&2; \
|
|
emacs -Q --batch \
|
|
-l scripts/apheleia-indent.el \
|
|
--eval "(setq inhibit-message t)" \
|
|
--eval "(setq load-path \
|
|
(append (list default-directory) load-path))" \
|
|
--eval "(load (expand-file-name \"apheleia.el\") nil t)" \
|
|
--eval "(find-file \"$$file\")" \
|
|
--eval "(indent-region (point-min) (point-max))" \
|
|
--eval "(write-file \"$$tmpdir/$$file\")"; \
|
|
(diff <(cat "$$file" | nl -v1 -ba | \
|
|
sed "s/\t/: /" | sed "s/^ */$$file:/") \
|
|
<(cat "$$tmpdir/$$file" | nl -v1 -ba | \
|
|
sed "s/\t/: /" | sed "s/^ */$$file:/") ) \
|
|
| grep -F ">" | grep -o "[a-z].*" | grep . && exit 1 || true; \
|
|
done
|
|
|
|
.PHONY: longlines
|
|
longlines: ## Check for long lines
|
|
@scripts/check-line-length.bash
|
|
|
|
.PHONY: clean
|
|
clean: ## Remove build artifacts
|
|
@echo "[clean]" *.elc
|
|
@rm -f *.elc
|
|
|
|
.PHONY: docker
|
|
docker: ## Start a Docker shell; e.g. make docker VERSION=25.3
|
|
@scripts/docker.bash "$(VERSION)" "$(CMD)"
|
|
|
|
.PHONY: fmt-build # env vars: FORMATTERS, TAG
|
|
fmt-build: ## Build a Docker image with formatters installed
|
|
@COMMON=0 test/formatters/build-image.bash
|
|
|
|
.PHONY: fmt-build-common # env var: TAG
|
|
fmt-build-common: ## Build a Docker image with just the common base
|
|
@COMMON=1 test/formatters/build-image.bash
|
|
|
|
.PHONY: fmt-docker # env var: TAG
|
|
fmt-docker: ## Start a Docker shell for testing formatters
|
|
@scripts/docker-run.bash -e FORMATTERS "apheleia-formatters:$(TAG)" "$(CMD)"
|
|
|
|
.PHONY: fmt-lint
|
|
fmt-lint: ## Do basic linting for formatter configuration
|
|
@test/formatters/run-func.bash apheleia-ft-lint
|
|
|
|
.PHONY: fmt-check
|
|
fmt-changed: ## Get list of changed formatters on this PR
|
|
@test/formatters/run-func.bash apheleia-ft-changed
|
|
|
|
.PHONY: fmt-test # env var: FORMATTERS
|
|
fmt-test: ## Actually run formatter tests
|
|
@test/formatters/run-func.bash apheleia-ft-test
|