# Copyright 2019 The Pigweed 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
#
#     https://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.

load(
    "@com_github_bazelbuild_buildtools//buildifier:def.bzl",
    "buildifier",
    "buildifier_test",
)

licenses(["notice"])

exports_files(
    ["tsconfig.json"],
    visibility = [":__subpackages__"],
)

# Fix all Bazel relevant files.
buildifier(
    name = "buildifier",
    # Ignore gn and CIPD outputs in formatting.
    # NOTE: These globs are not Bazel native and are passed directly
    # through to the buildifier binary.
    # TODO: Remove these globs when
    # https://github.com/bazelbuild/buildtools/issues/623 is addressed.
    exclude_patterns = [
        "./.environment/**/*",
        "./.presubmit/**/*",
        "./.out/**/*",
    ],
)

# Test to ensure all Bazel build files are properly formatted.
buildifier_test(
    name = "buildifier_test",
    srcs = glob(
        [
            "**/*.bazel",
            "**/*.bzl",
            "**/*.oss",
            "**/*.sky",
            "**/BUILD",
        ],
        # Node modules do not play nice with buildifier. Exclude these
        # generated Bazel files from format testing.
        exclude = ["**/node_modules/**/*"],
    ) + ["WORKSPACE"],
    diff_command = "diff -u",
    mode = "diff",
    verbose = True,
)
