mirror of
https://github.com/Dolibarr/dolibarr.git
synced 2026-01-24 17:53:17 +01:00
# Qual: Add some more instructions to the 'codespell' ignore script. As codespell will likely be run from pre-commit where codespell is installed in a venv for the user, running addCodespellIgnores.sh from the CLI requires installation of codespell for the developer's environment. This add some information inside the script about that.
61 lines
1.8 KiB
Bash
Executable File
61 lines
1.8 KiB
Bash
Executable File
#!/bin/bash
|
|
#
|
|
# Script to add codespell exceptions to the ignores lines file.
|
|
#
|
|
# The file is named '...-lines-ignore' to make TAB expansion on the cli easier.
|
|
#
|
|
# The line in the ignore file must match the line in the source
|
|
# exactly.
|
|
#
|
|
# To clean up or create the ignored lines file, just do
|
|
# ```shell
|
|
# echo > dev/tools/codespell/codespell-lines-ignore.txt
|
|
# ```
|
|
# and then execute this script.
|
|
#
|
|
# author: https://github.com/mdeweerd
|
|
|
|
#
|
|
# :warning:
|
|
#
|
|
# This script only works properly if codespell is install for your CLI.
|
|
# As the configuration is in pyproject.toml, you also need tomli.
|
|
#
|
|
# ```shell
|
|
# python -m pip install codespell tomli
|
|
# # or
|
|
# pip install codespell tomli
|
|
# ```
|
|
|
|
codespell_ignore_file=dev/tools/codespell/codespell-lines-ignore.txt
|
|
if [ -z "${0##*.sh}" ] ; then
|
|
# Suppose running from inside script
|
|
# Get real path
|
|
script=$(realpath "$(test -L "$0" && readlink "$0" || echo "$0")")
|
|
PROJECT_ROOT=$(realpath "${script}")
|
|
|
|
while [ "${PROJECT_ROOT}" != "/" ] ; do
|
|
[ -r "${PROJECT_ROOT}/${codespell_ignore_file}" ] && break
|
|
PROJECT_ROOT=$(dirname "${PROJECT_ROOT}")
|
|
done
|
|
if [ "${PROJECT_ROOT}" == "/" ] ; then
|
|
echo "Project root not found from '${script}'"
|
|
exit 1
|
|
fi
|
|
codespell_ignore_file=${PROJECT_ROOT}/${codespell_ignore_file}
|
|
fi
|
|
|
|
|
|
# Make sure we are at the root of the project
|
|
[ -r "${codespell_ignore_file}" ] || { echo "${codespell_ignore_file} not found" ; exit 1 ; }
|
|
# Then:
|
|
# - Run codespell;
|
|
# - For each line, create a grep command to find the lines;
|
|
# - Execute that command by evaluation
|
|
codespell . | sed -n -E 's@^([^:]+):[[:digit:]]+:[[:space:]](\S+)[[:space:]].*@grep -P '\''\\b\2\\b'\'' "\1" >> '"${codespell_ignore_file}"'@p' | \
|
|
while read -r line ; do eval "$line" ; done
|
|
|
|
# Finally, sort and remove duplicates to make merges easier.
|
|
sort -u -o "${codespell_ignore_file}"{,}
|
|
|