| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101 |
- # Copyright 2018 Google
- #
- # Licensed under the Apache License, Version 2.0 (the "License");
- # you may not use this file except in compliance with the License.
- # You may obtain a copy of the License at
- #
- # http://www.apache.org/licenses/LICENSE-2.0
- #
- # Unless required by applicable law or agreed to in writing, software
- # distributed under the License is distributed on an "AS IS" BASIS,
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- # See the License for the specific language governing permissions and
- # limitations under the License.
- # Lints C++ files for conformance with the Google C++ style guide
- # Joins the given arguments with the separator given as the first argument.
- function join() {
- local IFS="$1"
- shift
- echo "$*"
- }
- git_options=(
- -z # \0 terminate output
- )
- objc_lint_filters=(
- # Objective-C uses #import and does not use header guards
- -build/header_guard
- # Inline definitions of Objective-C blocks confuse
- -readability/braces
- # C-style casts are acceptable in Objective-C++
- -readability/casting
- # Objective-C needs use type 'long' for interop between types like NSInteger
- # and printf-style functions.
- -runtime/int
- # cpplint is generally confused by Objective-C mixing with C++.
- # * Objective-C method invocations in a for loop make it think its a
- # range-for
- # * Objective-C dictionary literals confuse brace spacing
- # * Empty category declarations ("@interface Foo ()") look like function
- # invocations
- -whitespace
- )
- objc_lint_options=(
- # cpplint normally excludes Objective-C++
- --extensions=h,m,mm
- # Objective-C style allows longer lines
- --linelength=100
- --filter=$(join , "${objc_lint_filters[@]}")
- )
- if [[ $# -gt 0 ]]; then
- # Interpret any command-line argument as a revision range
- command=(git diff --name-only --diff-filter=ACMR)
- git_options+=("$@")
- else
- # Default to operating on all files that match the pattern
- command=(git ls-files)
- fi
- # POSIX xargs is required to run commands at least once, but cpplint.py fails
- # (with huge help text) if no files are supplied. Apple xargs avoids invocation
- # if there are no arguments. Use a temporary file to avoid depending on/testing
- # for this feature.
- TEMP=$(mktemp -t lint-files-$$.XXXXXXXXXX)
- trap "rm '$TEMP'" EXIT
- # Straight C++ files get regular cpplint
- "${command[@]}" "${git_options[@]}" \
- -- 'Firestore/core/**/*.'{h,cc} \
- > "$TEMP"
- if [[ -s "$TEMP" ]]; then
- xargs -0 python scripts/cpplint.py --quiet 2>&1 < "$TEMP"
- fi
- CPP_STATUS=$?
- # Objective-C++ files get a looser cpplint
- "${command[@]}" "${git_options[@]}" \
- -- 'Firestore/Source/**/*.'{h,m,mm} \
- 'Firestore/Example/Tests/**/*.'{h,m,mm} \
- 'Firestore/core/**/*.mm' \
- > "$TEMP"
- if [[ -s "$TEMP" ]]; then
- xargs -0 python scripts/cpplint.py "${objc_lint_options[@]}" --quiet 2>&1 < "$TEMP"
- fi
- OBJC_STATUS=$?
- if [[ $CPP_STATUS != 0 || $OBJC_STATUS != 0 ]]; then
- exit 1
- fi
|