#
#    Copyright (c) 2020 Project CHIP Authors
#
#    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.
#

# Do anything at all
enabled: true

# Push the style fixes directly to the original PR
auto: false

# Open Restyle PRs?
pull_requests: true

# Add labels to any created Restyle PRs
labels:
    - restyled

# Labels to ignore
ignore_labels:
    - restyled-ignore

# Leave comments on the original PR linking to the Restyle PR?
comments: false

# Request review on the Restyle PR
request_review: none

# Patterns to exclude from all Restylers
exclude:
    - ".github/workflows/**/*" # https://github.com/restyled-io/restyler/issues/73
    - ".github/workflows/*" # https://github.com/restyled-io/restyler/issues/73
    - ".github/**/*" # https://github.com/restyled-io/restyler/issues/73
    - ".github/*" # https://github.com/restyled-io/restyler/issues/73
    - "*/**/third_party/*" # https://github.com/restyled-io/restyled.io/issues/213
    - "*/**/third_party/**" # https://github.com/restyled-io/restyled.io/issues/213
    - "*/**/third_party/**/*" # https://github.com/restyled-io/restyled.io/issues/213
    - "third_party/android/**/*"
    - "third_party/inipp/repo/**/*"
    - "third_party/jlink/**/*"
    - "third_party/lwip/repo/**/*"
    - "third_party/nlbuild-autotools/repo/**/*"
    - "third_party/nlbuild-autotools/repo/.**/*" # "**/*" doesn't include directories that start with "."
    - "third_party/nlassert/repo/**/*" # from here down built with $ awk '/path =/ {print $3 "/**/*"}' .gitmodules
    - "third_party/nlfaultinjection/repo/**/*"
    - "third_party/nlio/repo/**/*"
    - "third_party/mbedtls/repo/**/*"
    - "examples/common/QRCode/repo/**/*"
    - "examples/common/m5stack-tft/repo/**/*"
    - "third_party/pigweed/repo/**/*"
    - "third_party/openthread/repo/**/*"
    - "third_party/ot-br-posix/repo/**/*"
    - "third_party/bluez/repo/**/*"
    - "third_party/cirque/repo/**/*"
    - "third_party/nanopb/repo/**/*"
    - "examples/android/CHIPTool/gradlew" # gradle wrapper generated file
    - "third_party/android_deps/gradlew" # gradle wrapper generated file
    - "src/controller/python/chip/clusters/Objects.py" # generated file, no point to restyle
    - "src/controller/python/chip/clusters/CHIPClusters.py" # generated file, no point to restyle
    - "scripts/py_matter_idl/matter_idl/tests/outputs/**/*" # Matches generated output 1:1
    - "scripts/tools/zap/tests/outputs/**/*" # Matches generated output 1:1
    - "examples/chef/sample_app_util/test_files/*.yaml"
    - "examples/chef/zzz_generated/**/*"
    - "examples/platform/nxp/k32w/k32w0/scripts/demo_generated_certs/**/*"
    - "examples/tv-casting-app/darwin/MatterTvCastingBridge/MatterTvCastingBridge/zap-generated/*" # zap-generated files
    - "integrations/cloudbuild/*.yaml" # uglier long command line content
    - "scripts/run_codegen_targets.sh" # shellharden breaks for loops over command outputs
    - "scripts/tagging/tag_new_release.sh" # shellharden breaks parameter passing
    - "src/darwin/Framework/CHIP/zap-generated/*" # already clang-formatted by our zap tooling
    - "zzz_generated/**/*" # already clang-formatted by our zap tooling
    - "src/controller/java/generated/java/**/*" # not formatted: generated files
    - "src/controller/java/zap-generated/**/*" # not formatted: generated files
    - "scripts/setup/bootstrap.sh" # tries to quote loop variable
    - "integrations/docker/build-all.sh" # tries to quote loop variable
    - "scripts/setup/pigweed.json" # TODO(#29547). This file is temporary copy from pigweed repo that has minor edits. No restyle help in diff.
    - "docs/ERROR_CODES.md" # generated by scripts, not easy to align tables
    - "docs/zap_clusters.md" # generated by scripts, not easy to align tables
    - "docs/spec_clusters.md" # generated by scripts, not easy to align tables
    - "docs/testing/yaml_pseudocluster.md" # generated by scripts, restyler makes the tables render improperly
    - "docs/testing/yaml_schema.md" # generated by scripts, restyler makes the tables render improperly

changed_paths:
    maximum: 100000
    outcome: error

# Restylers to run, and how
restylers:
    - name: whitespace
      enabled: true
      image: restyled/restyler-whitespace:v0.1.0.1
      command:
          - whitespace
      arguments: []
      include:
          - "**/Dockerfile"
          - ".**/Dockerfile"
          - "**/*.yml"
          - "**/*.yaml"
          - ".**/*.yml"
          - ".**/*.yaml"
          - "**/*.sh"
          - "**/*.c"
          - "**/*.cc"
          - "**/*.cpp"
          - "**/*.ipp"
          - "**/*.cxx"
          - "**/*.c++"
          - "**/*.C"
          - "**/*.cs"
          - "**/*.h"
          - "**/*.hh"
          - "**/*.hpp"
          - "**/*.hxx"
          - "**/*.h++"
          - "**/*.H"
          - "**/*.java"
          - "**/*.js"
          - "**/*.json"
          - ".**/*.js"
          - ".**/*.json"
          - "**/*.m"
          - "**/*.mm"
    - name: google-java-format
      enabled: true
      # Update https://github.com/project-chip/connectedhomeip/blob/master/scripts/tools/zap/generate.py if this version changes.
      image: restyled/restyler-google-java-format:v1.6
      command:
          - google-java-format
          - "--replace"
      arguments: []
      include:
          - "**/*.java"
      interpreters: []
    - name: clang-format
      enabled: true
      image: restyled/restyler-clang-format:v16.0.6
      command:
          - clang-format
          - "-i"
      arguments: []
      include:
          - "**/*.c"
          - "**/*.cc"
          - "**/*.cpp"
          - "**/*.ipp"
          - "**/*.cxx"
          - "**/*.c++"
          - "**/*.C"
          - "**/*.cs"
          - "**/*.h"
          - "**/*.hh"
          - "**/*.hpp"
          - "**/*.hxx"
          - "**/*.h++"
          - "**/*.H"
          - "**/*.js"
          - "**/*.m"
          - "**/*.mm"
      interpreters: []
    - name: gn
      image: restyled/restyler-gn:v1
      enabled: true
      include:
          - "**/*.gn"
          - "**/*.gni"
    - name: prettier-json
      image: restyled/restyler-prettier:v1.19.1-2
      enabled: true
      command:
          - prettier
          - "--write"
      arguments: []
      include:
          - "**/*.json"
          - ".**/*.json"
      interpreters: []
    - name: prettier-markdown
      image: restyled/restyler-prettier:v1.19.1-2
      command:
          - prettier
          - "--write"
      arguments: []
      enabled: true
      include:
          - "**/*.md"
          - "**/*.markdown"
    - name: prettier-yaml
      image: restyled/restyler-prettier:v1.19.1-2
      enabled: true
      command:
          - prettier
          - "--write"
      include:
          - "**/*.yml"
          - "**/*.yaml"
    - name: shellharden
      image: restyled/restyler-shellharden:v4.1.1-2
      enabled: true
      include:
          - "**/*.sh"
          - "**/*.bash"
    - name: shfmt
      image: restyled/restyler-shfmt:v3.0.1
      enabled: true
      command:
          - shfmt
          - "-w"
      arguments:
          - "-i"
          - "4"
          - "-ci"
      interpreters:
          - sh
          - bash
      include:
          - "**/*.sh"
          - "**/*.bash"
    - name: autopep8
      image: restyled/restyler-autopep8:v2.0.0
      command:
          - autopep8
          - "--in-place"
          - "--max-line-length"
          - "132"
      arguments: []
      include:
          - "**/*.py"
      interpreters:
          - python
    - name: isort
      image: restyled/restyler-isort:v5.11.2
      command:
          - isort
      arguments: []
      include:
          - "**/*.py"
      interpreters:
          - python
