PHPのmethodの先頭にreturn文を挿入するBashのシェルスクリプト

ソースコード

#!/usr/bin/env bash

set -u

# 検索対象のファイルパス
declare -r FILE_PATH='sample.php'
# 検索対象のメソッド名
declare -r NEEDLE='function main'

#######################################
# 
# Globals:
#   ${FILE_PATH}
# Arguments:
#   $1 : ${method_defined_line_number}
# Returns:
#   line number
#######################################
function get_target_braket_line_number () {
    local appearance_line=$(tail -n +$1 "${FILE_PATH}" | grep -n -m 1 '{' | sed -e 's/:.*//g')
    if [ -z "${appearance_line}" ]; then
        exit 1
    fi

    local braket_line_number=0
    if [ ${appearance_line} -eq 1 ]; then
        braket_line_number=${defined_line}
    elif [ ${appearance_line} -gt 1 ]; then
        braket_line_number=$(expr $1 + ${appearance_line} - 1)
    fi

    echo ${braket_line_number}
    exit 0
}

# 対象のメソッドが定義されている行番号
declare method_defined_line_number=$(grep -n "${NEEDLE}" "${FILE_PATH}" | sed -e 's/:.*//g')
if [ -z "${method_defined_line_number}" ]; then
    echo -e "\"${NEEDLE}\" does not exist [filePath=${FILE_PATH}]."
    exit 1
fi

# 対象のメソッドの開始を表す波括弧が定義されている行番号を特定する
declare braket_line_number=$(get_target_braket_line_number ${method_defined_line_number})
if [ $? -ne 0 ]; then
    echo -e "\"{\" does not exist in \"${NEEDLE}\" method [filePath=${FILE_PATH}]."
    exit 1
fi

# 対象の波括弧の直後にreturnを追加
sed -e "${braket_line_number} s/{/{ return;/" "${FILE_PATH}"