#!/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}"