25
1
mirror of https://github.com/processone/ejabberd.git synced 2024-12-24 17:29:28 +01:00

Add Makefile targets to format and indent source code

This commit is contained in:
Badlop 2024-06-02 13:36:37 +02:00
parent 701d2ce0f6
commit 3bda858225
4 changed files with 78 additions and 2 deletions

View File

@ -261,6 +261,16 @@ _build/edoc/docs.md: edoc_compile
_build/edoc/logo.png: edoc_compile
wget https://docs.ejabberd.im/assets/img/footer_logo_e.png -O _build/edoc/logo.png
#.
#' format / indent
#
format:
tools/rebar3-format.sh $(REBAR)
indent:
tools/emacs-indent.sh
#.
#' copy-files
#
@ -650,7 +660,7 @@ test:
.PHONY: src edoc dialyzer Makefile TAGS clean clean-rel distclean prod rel \
install uninstall uninstall-binary uninstall-all translations deps test \
all dev doap help install-rel relive scripts uninstall-rel update \
erlang_plt deps_plt ejabberd_plt xref hooks options
erlang_plt deps_plt ejabberd_plt xref hooks options format indent
#.
#' help
@ -682,6 +692,9 @@ help:
@echo " translations Extract translation files"
@echo " TAGS Generate tags file for text editors"
@echo ""
@echo " format Format source code using rebar3_format [rebar3]"
@echo " indent Indent source code using erlang-mode [emacs]"
@echo ""
@echo " dialyzer Run Dialyzer static analyzer"
@echo " hooks Run hooks validator"
@echo " test Run Common Tests suite [rebar3]"

View File

@ -152,7 +152,9 @@
{git, "https://github.com/bsanyi/rebar_mix.git",
{branch, "consolidation_fix"}}}
}]}}.
{if_rebar3, {project_plugins, [configure_deps]}}.
{if_rebar3, {project_plugins, [configure_deps,
{if_var_true, tools, rebar3_format}
]}}.
{if_not_rebar3, {plugins, [
deps_erl_opts, override_deps_versions2, override_opts, configure_deps
]}}.

27
tools/emacs-indent.sh Executable file
View File

@ -0,0 +1,27 @@
#!/bin/bash
# To indent and remove tabs, surround the piece of code with:
# %% @indent-begin
# %% @indent-end
#
# Then run:
# make indent
#
# Please note this script only indents the first occurrence.
FILES=$(git grep --name-only @indent-begin src/)
for FILENAME in $FILES; do
echo "==> Indenting $FILENAME..."
emacs -batch $FILENAME \
-f "erlang-mode" \
--eval "(goto-char (point-min))" \
--eval "(re-search-forward \"@indent-begin\" nil t)" \
--eval "(setq begin (line-beginning-position))" \
--eval "(re-search-forward \"@indent-end\" nil t)" \
--eval "(setq end (line-beginning-position))" \
--eval "(erlang-indent-region begin end)" \
--eval "(untabify begin end)" \
-f "delete-trailing-whitespace" \
-f "save-buffer"
done

34
tools/rebar3-format.sh Executable file
View File

@ -0,0 +1,34 @@
#!/bin/bash
# To start formatting a file, add a line that contains:
# @format-begin
# Formatting in that file can later be disabled adding another line with:
# @format-end
#
# It can be reenabled again later in the file.
#
# Finally, call: make format
REBAR=$1
ERLS=$(git grep --name-only @format-begin src/)
for ERL in $ERLS; do
csplit --quiet --prefix=$ERL-format- $ERL /@format-/ "{*}"
done
EFMTS=$(find src/*-format-* -type f -exec grep --files-with-matches "@format-begin" '{}' ';')
EFMTS2=""
for EFMT in $EFMTS; do
EFMTS2="$EFMTS2 --files $EFMT"
done
$REBAR format $EFMTS2
for ERL in $ERLS; do
SPLITS=$(find $ERL-format-* -type f)
rm $ERL
for SPLIT in $SPLITS; do
cat $SPLIT >> $ERL
rm $SPLIT
done
done