#!/bin/bash
#
#  Copyright (c) 2019, The OpenThread Authors.
#  All rights reserved.
#
#  Redistribution and use in source and binary forms, with or without
#  modification, are permitted provided that the following conditions are met:
#  1. Redistributions of source code must retain the above copyright
#     notice, this list of conditions and the following disclaimer.
#  2. Redistributions in binary form must reproduce the above copyright
#     notice, this list of conditions and the following disclaimer in the
#     documentation and/or other materials provided with the distribution.
#  3. Neither the name of the copyright holder nor the
#     names of its contributors may be used to endorse or promote products
#     derived from this software without specific prior written permission.
#
#  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
#  AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
#  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
#  ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
#  LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
#  CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
#  SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
#  INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
#  CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
#  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
#  POSSIBILITY OF SUCH DAMAGE.
#

#
# The script to check or format source code of OpenThread.
#
# Format c/c++, markdown, python, and shell:
#
#     script/make-pretty
#
# Format c/c++ only:
#
#     script/make-pretty clang
#     script/make-pretty clang-format
#     script/make-pretty clang-tidy
#
# Format markdown only:
#
#     script/make-pretty markdown
#
# Format python only:
#
#     script/make-pretty python
#
# Format shell only:
#
#     script/make-pretty shell
#
# Check only:
#
#     script/make-pretty check clang
#     script/make-pretty check clang-format
#     script/make-pretty check clang-tidy
#     script/make-pretty check markdown
#     script/make-pretty check python
#     script/make-pretty check shell
#

set -euo pipefail

OT_BUILD_JOBS=$(getconf _NPROCESSORS_ONLN)
readonly OT_BUILD_JOBS

OT_EXCLUDE_DIRS=(third_party doc/site)
readonly OT_EXCLUDE_DIRS

OT_CLANG_SOURCES=('*.c' '*.cc' '*.cpp' '*.h' '*.hpp')
readonly OT_CLANG_SOURCES

OT_MARKDOWN_SOURCES=('*.md')
readonly OT_MARKDOWN_SOURCES

OT_PYTHON_SOURCES=('*.py')
readonly OT_PYTHON_SOURCES

OT_CLANG_TIDY_FIX_DIRS=('examples' 'include' 'src' 'tests')
readonly OT_CLANG_TIDY_FIX_DIRS

OT_CLANG_TIDY_BUILD_OPTS=(
    '-DCMAKE_EXPORT_COMPILE_COMMANDS=ON'
    '-DOT_ANYCAST_LOCATOR=ON'
    '-DOT_APP_RCP=OFF'
    '-DOT_MTD=OFF'
    '-DOT_RCP=OFF'
    '-DOT_PLATFORM=simulation'
    '-DOT_BACKBONE_ROUTER=ON'
    '-DOT_BORDER_AGENT=ON'
    '-DOT_BORDER_ROUTER=ON'
    '-DOT_BORDER_ROUTING=ON'
    '-DOT_BORDER_ROUTING_DHCP6_PD=ON'
    '-DOT_CHANNEL_MANAGER=ON'
    '-DOT_CHANNEL_MONITOR=ON'
    '-DOT_COAP=ON'
    '-DOT_COAP_BLOCK=ON'
    '-DOT_COAP_OBSERVE=ON'
    '-DOT_COAPS=ON'
    '-DOT_COMMISSIONER=ON'
    '-DOT_CSL_RECEIVER=ON'
    '-DOT_DATASET_UPDATER=ON'
    '-DOT_DHCP6_CLIENT=ON'
    '-DOT_DHCP6_SERVER=ON'
    '-DOT_DIAGNOSTIC=ON'
    '-DOT_DNS_CLIENT=ON'
    '-DOT_DNS_DSO=ON'
    '-DOT_DNS_UPSTREAM_QUERY=ON'
    '-DOT_DNSSD_SERVER=ON'
    '-DOT_DUA=ON'
    '-DOT_MLR=ON'
    '-DOT_ECDSA=ON'
    '-DOT_HISTORY_TRACKER=ON'
    '-DOT_IP6_FRAGM=ON'
    '-DOT_JAM_DETECTION=ON'
    '-DOT_JOINER=ON'
    '-DOT_LINK_RAW=ON'
    '-DOT_LINK_METRICS_INITIATOR=ON'
    '-DOT_LINK_METRICS_SUBJECT=ON'
    '-DOT_MAC_FILTER=ON'
    '-DOT_MESH_DIAG=ON'
    '-DOT_NAT64_BORDER_ROUTING=ON'
    '-DOT_NAT64_TRANSLATOR=ON'
    '-DOT_NETDATA_PUBLISHER=ON'
    '-DOT_NETDIAG_CLIENT=ON'
    '-DOT_PING_SENDER=ON'
    '-DOT_REFERENCE_DEVICE=ON'
    '-DOT_SERVICE=ON'
    '-DOT_SLAAC=ON'
    '-DOT_SNTP_CLIENT=ON'
    '-DOT_SRP_CLIENT=ON'
    '-DOT_SRP_SERVER=ON'
    '-DOT_THREAD_VERSION=1.3'
    '-DOT_TREL=ON'
    '-DOT_COVERAGE=ON'
    '-DOT_LOG_LEVEL_DYNAMIC=ON'
    '-DOT_COMPILE_WARNING_AS_ERROR=ON'
    '-DOT_UPTIME=ON'
)
readonly OT_CLANG_TIDY_BUILD_OPTS

do_clang_format()
{
    echo -e '========================================'
    echo -e '     format c/c++ (clang-format)'
    echo -e '========================================'

    git ls-files "${OT_CLANG_SOURCES[@]}" | grep -v -E "^($(echo "${OT_EXCLUDE_DIRS[@]}" | tr ' ' '|'))" \
        | xargs -n3 -P"$OT_BUILD_JOBS" script/clang-format -style=file -i -verbose
}

do_clang_format_check()
{
    echo -e '========================================'
    echo -e '     check c/c++ (clang-format)'
    echo -e '========================================'

    git ls-files "${OT_CLANG_SOURCES[@]}" | grep -v -E "^($(echo "${OT_EXCLUDE_DIRS[@]}" | tr ' ' '|'))" \
        | xargs -n3 -P"$OT_BUILD_JOBS" script/clang-format-check
}

do_clang_tidy_fix()
{
    echo -e '========================================'
    echo -e '     format c/c++ (clang-tidy)'
    echo -e '========================================'

    (mkdir -p ./build/cmake-tidy \
        && cd ./build/cmake-tidy \
        && THREAD_VERSION=1.3 cmake "${OT_CLANG_TIDY_BUILD_OPTS[@]}" ../.. \
        && ../../script/clang-tidy -j"$OT_BUILD_JOBS" "${OT_CLANG_TIDY_FIX_DIRS[@]}" -fix)
}

do_clang_tidy_check()
{
    echo -e '========================================'
    echo -e '     check c/c++ (clang-tidy)'
    echo -e '========================================'

    (mkdir -p ./build/cmake-tidy \
        && cd ./build/cmake-tidy \
        && THREAD_VERSION=1.3 cmake "${OT_CLANG_TIDY_BUILD_OPTS[@]}" ../.. \
        && ../../script/clang-tidy -j"$OT_BUILD_JOBS" "${OT_CLANG_TIDY_FIX_DIRS[@]}")
}

do_markdown_format()
{
    echo -e '========================================'
    echo -e '     format markdown'
    echo -e '========================================'

    git ls-files "${OT_MARKDOWN_SOURCES[@]}" | grep -v -E "^($(echo "${OT_EXCLUDE_DIRS[@]}" | tr ' ' '|'))" \
        | xargs -n10 -P"$OT_BUILD_JOBS" npx prettier@2.0.4 --write
}

do_markdown_check()
{
    echo -e '========================================'
    echo -e '     check markdown'
    echo -e '========================================'

    git ls-files "${OT_MARKDOWN_SOURCES[@]}" | grep -v -E "^($(echo "${OT_EXCLUDE_DIRS[@]}" | tr ' ' '|'))" \
        | xargs -n10 -P"$OT_BUILD_JOBS" npx prettier@2.0.4 --check
}

do_python_format()
{
    echo -e '========================================'
    echo -e '     format python'
    echo -e '========================================'

    git ls-files "${OT_PYTHON_SOURCES[@]}" | grep -v -E "^($(echo "${OT_EXCLUDE_DIRS[@]}" | tr ' ' '|'))" \
        | xargs -n10 -P"$OT_BUILD_JOBS" python3 -m yapf --verbose --style '{based_on_style: google, column_limit: 119}' -ipr
}

do_python_check()
{
    echo -e '========================================'
    echo -e '     check python'
    echo -e '========================================'

    git ls-files "${OT_PYTHON_SOURCES[@]}" | grep -v -E "^($(echo "${OT_EXCLUDE_DIRS[@]}" | tr ' ' '|'))" \
        | xargs -n10 -P"$OT_BUILD_JOBS" python3 -m yapf --verbose --style '{based_on_style: google, column_limit: 119}' -dpr
}

do_shell_format()
{
    echo -e '========================================'
    echo -e '     format shell'
    echo -e '========================================'

    git ls-files | xargs shfmt -f | grep -v -E "^($(echo "${OT_EXCLUDE_DIRS[@]}" | tr ' ' '|'))" \
        | xargs -n10 -P"$OT_BUILD_JOBS" shfmt -i 4 -bn -ci -fn -s -w
}

do_shell_check()
{
    echo -e '========================================'
    echo -e '     check shell'
    echo -e '========================================'

    git ls-files | xargs shfmt -f | grep -v -E "^($(echo "${OT_EXCLUDE_DIRS[@]}" | tr ' ' '|'))" \
        | xargs -n10 -P"$OT_BUILD_JOBS" shfmt -i 4 -bn -ci -fn -s -d

    git ls-files | xargs shfmt -f | grep -v -E "^($(echo "${OT_EXCLUDE_DIRS[@]}" | tr ' ' '|'))" \
        | xargs -n10 -P"$OT_BUILD_JOBS" shellcheck
}

do_check()
{
    if [ $# == 0 ]; then
        do_clang_format_check
        do_clang_tidy_check
        do_markdown_check
        do_python_check
        do_shell_check
    elif [ "$1" == 'clang' ]; then
        do_clang_format_check
        do_clang_tidy_check
    elif [ "$1" == 'clang-format' ]; then
        do_clang_format_check
    elif [ "$1" == 'clang-tidy' ]; then
        do_clang_tidy_check
    elif [ "$1" == 'markdown' ]; then
        do_markdown_check
    elif [ "$1" == 'python' ]; then
        do_python_check
    elif [ "$1" == 'shell' ]; then
        do_shell_check
    else
        echo >&2 "Unsupported check: $1. Supported: clang, markdown, python, shell"
        # 128 for Invalid arguments
        exit 128
    fi
}

main()
{
    if [ $# == 0 ]; then
        do_clang_tidy_fix
        do_clang_format
        do_markdown_format
        do_python_format
        do_shell_format
    elif [ "$1" == 'clang' ]; then
        do_clang_tidy_fix
        do_clang_format
    elif [ "$1" == 'clang-format' ]; then
        do_clang_format
    elif [ "$1" == 'clang-tidy' ]; then
        do_clang_tidy_fix
    elif [ "$1" == 'markdown' ]; then
        do_markdown_format
    elif [ "$1" == 'python' ]; then
        do_python_format
    elif [ "$1" == 'shell' ]; then
        do_shell_format
    elif [ "$1" == 'check' ]; then
        shift
        do_check "$@"
    else
        echo >&2 "Unsupported action: $1. Supported: clang, markdown, python, shell"
        # 128 for Invalid arguments
        exit 128
    fi

}

main "$@"
