Răsfoiți Sursa

Switch to swift-format

George Barnett 2 ani în urmă
părinte
comite
cca64837d6
4 a modificat fișierele cu 129 adăugiri și 16 ștergeri
  1. 1 0
      .gitignore
  2. 58 0
      .swift-format
  3. 69 14
      scripts/format.sh
  4. 1 2
      scripts/sanity.sh

+ 1 - 0
.gitignore

@@ -19,5 +19,6 @@ Examples/EchoWeb/node_modules
 Examples/EchoWeb/package-lock.json
 dev/codegen-tests/**/generated/*
 /scripts/.swiftformat-source/
+/scripts/.swift-format-source/
 Package.resolved
 *.out.*

+ 58 - 0
.swift-format

@@ -0,0 +1,58 @@
+{
+  "fileScopedDeclarationPrivacy" : {
+    "accessLevel" : "private"
+  },
+  "indentation" : {
+    "spaces" : 2
+  },
+  "indentConditionalCompilationBlocks" : false,
+  "indentSwitchCaseLabels" : false,
+  "lineBreakAroundMultilineExpressionChainComponents" : false,
+  "lineBreakBeforeControlFlowKeywords" : false,
+  "lineBreakBeforeEachArgument" : true,
+  "lineBreakBeforeEachGenericRequirement" : false,
+  "lineLength" : 100,
+  "maximumBlankLines" : 1,
+  "prioritizeKeepingFunctionOutputTogether" : true,
+  "respectsExistingLineBreaks" : true,
+  "rules" : {
+    "AllPublicDeclarationsHaveDocumentation" : false,
+    "AlwaysUseLowerCamelCase" : false,
+    "AmbiguousTrailingClosureOverload" : true,
+    "BeginDocumentationCommentWithOneLineSummary" : false,
+    "DoNotUseSemicolons" : true,
+    "DontRepeatTypeInStaticProperties" : true,
+    "FileScopedDeclarationPrivacy" : true,
+    "FullyIndirectEnum" : true,
+    "GroupNumericLiterals" : true,
+    "IdentifiersMustBeASCII" : true,
+    "NeverForceUnwrap" : false,
+    "NeverUseForceTry" : false,
+    "NeverUseImplicitlyUnwrappedOptionals" : false,
+    "NoAccessLevelOnExtensionDeclaration" : true,
+    "NoAssignmentInExpressions" : true,
+    "NoBlockComments" : false,
+    "NoCasesWithOnlyFallthrough" : true,
+    "NoEmptyTrailingClosureParentheses" : true,
+    "NoLabelsInCasePatterns" : false,
+    "NoLeadingUnderscores" : false,
+    "NoParensAroundConditions" : true,
+    "NoVoidReturnOnFunctionSignature" : true,
+    "OneCasePerLine" : true,
+    "OneVariableDeclarationPerLine" : true,
+    "OnlyOneTrailingClosureArgument" : true,
+    "OrderedImports" : true,
+    "ReturnVoidInsteadOfEmptyTuple" : true,
+    "UseEarlyExits" : false,
+    "UseLetInEveryBoundCaseVariable" : false,
+    "UseShorthandTypeNames" : true,
+    "UseSingleLinePropertyGetter" : false,
+    "UseSynthesizedInitializer" : false,
+    "UseTripleSlashForDocumentationComments" : true,
+    "UseWhereClausesInForLoops" : false,
+    "ValidateDocumentationComments" : false
+  },
+  "spacesAroundRangeFormationOperators" : true,
+  "tabWidth" : 2,
+  "version" : 1
+}

+ 69 - 14
scripts/format.sh

@@ -16,43 +16,98 @@
 
 set -eu
 
+function log() { printf -- "** %s\n" "$*" >&2; }
+function error() { printf -- "** ERROR: %s\n" "$*" >&2; }
+function fatal() { error "$*"; exit 1; }
+
+function usage() {
+  echo >&2 "Usage:"
+  echo >&2 "  $0 -[f|l]"
+  echo >&2 ""
+  echo >&2 "Options:"
+  echo >&2 "  -f   Format source code in place"
+  echo >&2 "  -l   Lint check without formatting the source code"
+}
+
+lint=false
+while getopts ":lh" opt; do
+  case "$opt" in
+    l)
+      lint=true
+      ;;
+    h)
+      usage
+      exit 1
+      ;;
+    \?)
+      usage
+      exit 1
+      ;;
+  esac
+done
+
+THIS_SCRIPT=$0
 HERE="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
 REPO="$HERE/.."
-SWIFTFORMAT_DIR="$HERE/.swiftformat-source"
-
-# Important: if this is changed then make sure to update the version
-# in the .github/workflows/ci.yaml as well!
-SWIFTFORMAT_VERSION=0.52.0
+SWIFTFORMAT_DIR="$HERE/.swift-format-source"
+SWIFTFORMAT_VERSION=509.0.0
 
 # Clone SwiftFormat if we don't already have it.
 if [ ! -d "$SWIFTFORMAT_DIR" ]; then
-  echo "- Cloning SwiftFormat @ $SWIFTFORMAT_VERSION"
+  echo "- Cloning swift-format @ $SWIFTFORMAT_VERSION"
   git clone \
     --depth 1 \
     --branch "$SWIFTFORMAT_VERSION" \
-    https://github.com/nicklockwood/SwiftFormat.git \
+    https://github.com/apple/swift-format.git \
     "$SWIFTFORMAT_DIR"
 fi
 
 cd "$SWIFTFORMAT_DIR"
 
 # Figure out the path for the binary.
-SWIFTFORMAT_BIN="$(swift build --show-bin-path -c release)/swiftformat-$SWIFTFORMAT_VERSION"
+SWIFTFORMAT_BIN="$(swift build --show-bin-path -c release)/swift-format-$SWIFTFORMAT_VERSION"
 
 # Build it if we don't already have it.
 if [ ! -f "$SWIFTFORMAT_BIN" ]; then
   # We're not on the right tag, fetch and checkout the right one.
-  echo "- Fetching SwiftFormat @ $SWIFTFORMAT_VERSION"
+  echo "- Fetching swift-format @ $SWIFTFORMAT_VERSION"
   git fetch --depth 1 origin "refs/tags/$SWIFTFORMAT_VERSION:refs/tags/$SWIFTFORMAT_VERSION"
   git checkout "$SWIFTFORMAT_VERSION"
 
   # Now build and name the bin appropriately.
-  echo "- Building SwiftFormat @ $SWIFTFORMAT_VERSION"
-  swift build -c release --product swiftformat
-  mv "$(swift build --show-bin-path -c release)/swiftformat" "$SWIFTFORMAT_BIN"
+  echo "- Building swift-format @ $SWIFTFORMAT_VERSION"
+  swift build -c release --product swift-format
+  mv "$(swift build --show-bin-path -c release)/swift-format" "$SWIFTFORMAT_BIN"
 
   echo "- OK"
 fi
 
-# Now run it.
-$SWIFTFORMAT_BIN "$REPO"
+if "$lint"; then
+  "${SWIFTFORMAT_BIN}" lint \
+    --parallel --recursive --strict \
+    "${REPO}/Sources" "${REPO}/Tests" \
+    && SWIFT_FORMAT_RC=$? || SWIFT_FORMAT_RC=$?
+
+  if [[ "${SWIFT_FORMAT_RC}" -ne 0 ]]; then
+    fatal "Running swift-format produced errors.
+
+    To fix, run the following command:
+
+    % $THIS_SCRIPT -f
+    "
+    exit "${SWIFT_FORMAT_RC}"
+  fi
+
+  log "Ran swift-format lint with no errors."
+else
+  "${SWIFTFORMAT_BIN}" format \
+    --parallel --recursive --in-place \
+    "${REPO}/Sources" "${REPO}/Tests" \
+    && SWIFT_FORMAT_RC=$? || SWIFT_FORMAT_RC=$?
+
+  if [[ "${SWIFT_FORMAT_RC}" -ne 0 ]]; then
+    fatal "Running swift-format produced errors." "${SWIFT_FORMAT_RC}"
+  fi
+
+  log "Ran swift-format with no errors."
+fi

+ 1 - 2
scripts/sanity.sh

@@ -42,8 +42,7 @@ function check_license_headers() {
 }
 
 function check_formatting() {
-  hash swiftformat 2> /dev/null || { printf "\033[0;31mERROR\033[0m swiftformat must be installed (see: https://github.com/nicklockwood/SwiftFormat)\n"; exit 1; }
-  run_logged "Checking formatting (swiftformat $(swiftformat --version))" "swiftformat --lint --verbose $HERE/.."
+  run_logged "Checking formatting" "$HERE/format.sh lint"
 }
 
 errors=0