#
#    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/**/*"
    - "third_party/**"
    - "third_party/*"
    - "third_party"
    - "**/third_party/**/*"
    - "**/third_party/*"
    - "**/third_party/**"
    - "**/third_party/**/*"
    - "examples/lock-app/efr32/third_party/**/*"
    - "examples/lock-app/efr32/third_party/*"
    - "examples/lock-app/efr32/third_party/**"
    - "build/**/*"
    - "autom4te.cache/**/*"
    - "scripts/tests/save_logs.sh" # quotes $(...) in a for loop

# Restylers to run, and how
restylers:
    - name: whitespace
      enabled: true
      image: restyled/restyler-whitespace:v0.1.0.0-2
      command:
          - whitespace
      arguments: []
      include:
          - "**/Dockerfile"
          - "**/*.yml"
          - "**/*.yaml"
          - "**/*.sh"
          - "**/*.c"
          - "**/*.cc"
          - "**/*.cpp"
          - "**/*.cxx"
          - "**/*.c++"
          - "**/*.C"
          - "**/*.cs"
          - "**/*.h"
          - "**/*.hh"
          - "**/*.hpp"
          - "**/*.hxx"
          - "**/*.h++"
          - "**/*.H"
          - "**/*.java"
          - "**/*.js"
          - "**/*.json"
          - "**/*.m"
          - "**/*.mm"
    - name: google-java-format
      enabled: true
      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:v9.0.0
      command:
          - clang-format
          - "-i"
      arguments: []
      include:
          - "**/*.c"
          - "**/*.cc"
          - "**/*.cpp"
          - "**/*.cxx"
          - "**/*.c++"
          - "**/*.C"
          - "**/*.cs"
          - "**/*.h"
          - "**/*.hh"
          - "**/*.hpp"
          - "**/*.hxx"
          - "**/*.h++"
          - "**/*.H"
          - "**/*.js"
          - "**/*.m"
          - "**/*.mm"
      interpreters: []
    - name: prettier-json
      image: restyled/restyler-prettier:v1.19.1-2
      enabled: true
      command:
          - prettier
          - "--write"
      arguments: []
      include:
          - "**/*.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
      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"
