diff options
| author | riking <rikingcoding@gmail.com> | 2018-08-26 09:47:05 -0700 |
|---|---|---|
| committer | riking <rikingcoding@gmail.com> | 2018-08-26 19:18:31 -0700 |
| commit | c5ecb718ac9615ca2cb0ce331e8588f48cd83665 (patch) | |
| tree | 1a59186e8aa5575813ce7adec01f9dbcf34156e0 | |
| parent | 31b4461ff6cdedd3ef557b4bcc0874c21975fec4 (diff) | |
Add Android code style enforcement to lint.sh
This requires buildbot changes: the path to the Android Studio
installation must be supplied in an environment variable.
Modified files are copied out to a temporary directory, Android Studio
is asked to format the files, and a git diff is performed.
| -rw-r--r-- | Source/Android/code-style-java.xml | 204 | ||||
| -rwxr-xr-x | Tools/lint.sh | 41 |
2 files changed, 245 insertions, 0 deletions
diff --git a/Source/Android/code-style-java.xml b/Source/Android/code-style-java.xml new file mode 100644 index 0000000000..f51bcf3281 --- /dev/null +++ b/Source/Android/code-style-java.xml @@ -0,0 +1,204 @@ +<code_scheme name="Dolphin-Java"> + <option name="FIELD_NAME_PREFIX" value="m" /> + <option name="CLASS_COUNT_TO_USE_IMPORT_ON_DEMAND" value="99" /> + <option name="NAMES_COUNT_TO_USE_IMPORT_ON_DEMAND" value="99" /> + <option name="PACKAGES_TO_USE_IMPORT_ON_DEMAND"> + <value /> + </option> + <option name="IMPORT_LAYOUT_TABLE"> + <value> + <package name="android" withSubpackages="true" static="false" /> + <emptyLine /> + <package name="com" withSubpackages="true" static="false" /> + <emptyLine /> + <package name="junit" withSubpackages="true" static="false" /> + <emptyLine /> + <package name="net" withSubpackages="true" static="false" /> + <emptyLine /> + <package name="org" withSubpackages="true" static="false" /> + <emptyLine /> + <package name="java" withSubpackages="true" static="false" /> + <emptyLine /> + <package name="javax" withSubpackages="true" static="false" /> + <emptyLine /> + <package name="" withSubpackages="true" static="false" /> + <emptyLine /> + <package name="" withSubpackages="true" static="true" /> + <emptyLine /> + </value> + </option> + <option name="RIGHT_MARGIN" value="100" /> + <AndroidXmlCodeStyleSettings> + <option name="USE_CUSTOM_SETTINGS" value="true" /> + </AndroidXmlCodeStyleSettings> + <XML> + <option name="XML_LEGACY_SETTINGS_IMPORTED" value="true" /> + </XML> + <codeStyleSettings language="JAVA"> + <option name="BRACE_STYLE" value="2" /> + <option name="CLASS_BRACE_STYLE" value="2" /> + <option name="METHOD_BRACE_STYLE" value="2" /> + <option name="ELSE_ON_NEW_LINE" value="true" /> + <option name="CATCH_ON_NEW_LINE" value="true" /> + <indentOptions> + <option name="USE_TAB_CHARACTER" value="true" /> + </indentOptions> + </codeStyleSettings> + <codeStyleSettings language="XML"> + <option name="FORCE_REARRANGE_MODE" value="1" /> + <indentOptions> + <option name="CONTINUATION_INDENT_SIZE" value="4" /> + </indentOptions> + <arrangement> + <rules> + <section> + <rule> + <match> + <AND> + <NAME>xmlns:android</NAME> + <XML_NAMESPACE>Namespace:</XML_NAMESPACE> + </AND> + </match> + </rule> + </section> + <section> + <rule> + <match> + <AND> + <NAME>xmlns:.*</NAME> + <XML_NAMESPACE>Namespace:</XML_NAMESPACE> + </AND> + </match> + <order>BY_NAME</order> + </rule> + </section> + <section> + <rule> + <match> + <AND> + <NAME>.*:id</NAME> + <XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE> + </AND> + </match> + </rule> + </section> + <section> + <rule> + <match> + <AND> + <NAME>.*:name</NAME> + <XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE> + </AND> + </match> + </rule> + </section> + <section> + <rule> + <match> + <AND> + <NAME>name</NAME> + <XML_NAMESPACE>^$</XML_NAMESPACE> + </AND> + </match> + </rule> + </section> + <section> + <rule> + <match> + <AND> + <NAME>style</NAME> + <XML_NAMESPACE>^$</XML_NAMESPACE> + </AND> + </match> + </rule> + </section> + <section> + <rule> + <match> + <AND> + <NAME>.*</NAME> + <XML_NAMESPACE>^$</XML_NAMESPACE> + </AND> + </match> + <order>BY_NAME</order> + </rule> + </section> + <section> + <rule> + <match> + <AND> + <NAME>.*:layout_width</NAME> + <XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE> + </AND> + </match> + </rule> + </section> + <section> + <rule> + <match> + <AND> + <NAME>.*:layout_height</NAME> + <XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE> + </AND> + </match> + </rule> + </section> + <section> + <rule> + <match> + <AND> + <NAME>.*:layout_.*</NAME> + <XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE> + </AND> + </match> + <order>BY_NAME</order> + </rule> + </section> + <section> + <rule> + <match> + <AND> + <NAME>.*:width</NAME> + <XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE> + </AND> + </match> + <order>BY_NAME</order> + </rule> + </section> + <section> + <rule> + <match> + <AND> + <NAME>.*:height</NAME> + <XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE> + </AND> + </match> + <order>BY_NAME</order> + </rule> + </section> + <section> + <rule> + <match> + <AND> + <NAME>.*</NAME> + <XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE> + </AND> + </match> + <order>BY_NAME</order> + </rule> + </section> + <section> + <rule> + <match> + <AND> + <NAME>.*</NAME> + <XML_NAMESPACE>.*</XML_NAMESPACE> + </AND> + </match> + <order>BY_NAME</order> + </rule> + </section> + </rules> + </arrangement> + </codeStyleSettings> +</code_scheme>
\ No newline at end of file diff --git a/Tools/lint.sh b/Tools/lint.sh index 795dfdd0b5..3fe608f613 100755 --- a/Tools/lint.sh +++ b/Tools/lint.sh @@ -41,6 +41,23 @@ if [ $FORCE -eq 0 ]; then fi fi +did_java_setup=0 +JAVA_CODESTYLE_FILE="./$(git rev-parse --show-cdup)/Source/Android/code-style-java.xml" +java_temp_dir="" + +function java_setup() { + if [ "$did_java_setup" = 1 ]; then + return + fi + if [ ! -x "${ANDROID_STUDIO_ROOT}/bin/format.sh" ]; then + echo >&2 "error: must set ANDROID_STUDIO_ROOT environment variable to the IDE installation directory (current: ${ANDROID_STUDIO_ROOT})" + exit 1 + fi + java_temp_dir="$(mktemp -d)" + trap "{ rm -r ${java_temp_dir}; }" EXIT + did_java_setup=1 +} + fail=0 # Default to staged files, unless a commit was passed. @@ -49,9 +66,29 @@ COMMIT=${1:---cached} # Get modified files (must be on own line for exit-code handling) modified_files=$(git diff --name-only --diff-filter=ACMRTUXB $COMMIT) +function java_check() { + echo >&0 "Java changes detected, running Android Studio formatter." || true + "${ANDROID_STUDIO_ROOT}/bin/format.sh" -s "${JAVA_CODESTYLE_FILE}" -R "${java_temp_dir}" >/dev/null + + # ignore 'added'/'deleted' files, we copied only files of interest to the tmpdir + d=$(git diff --diff-filter=ad . "${java_temp_dir}" || true) + if ! [ -z "${d}" ]; then + echo "!!! Java code is not compliant to coding style, here is the fix:" + echo "${d}" + fail=1 + fi +} + # Loop through each modified file. for f in ${modified_files}; do # Filter them. + if echo "${f}" | egrep -q "[.]java$"; then + # Copy Java files to a temporary directory + java_setup + mkdir -p $(dirname "${java_temp_dir}/${f}") + cp "${f}" "${java_temp_dir}/${f}" + continue + fi if ! echo "${f}" | egrep -q "[.](cpp|h|mm)$"; then continue fi @@ -76,4 +113,8 @@ for f in ${modified_files}; do fi done +if [ "${did_java_setup}" = 1 ]; then + java_check +fi + exit ${fail} |
