mirror of
https://github.com/carbon-language/carbon-lang.git
synced 2026-09-24 19:50:14 +01:00
A lot of the JSON we use is parsed by VSCode or other systems that are happy to have comments in them, and we should retain a license header there. We can exclude specific files where this is a problem. I think the `package.json` and generated lock file from it are two such cases where we can't have the license header, but we can directly exclude more as needed. This should help make sure that when we *do* have a license header in a JSON file it stays up to date and is formatted canonically.
242 lines
7.9 KiB
YAML
242 lines
7.9 KiB
YAML
# Part of the Carbon Language project, under the Apache License v2.0 with LLVM
|
|
# Exceptions. See /LICENSE for license information.
|
|
# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
|
|
|
# Update versions with:
|
|
# pre-commit autoupdate --freeze && pre-commit run -a
|
|
# See https://pre-commit.com for more information
|
|
# See https://pre-commit.com/hooks.html for more hooks
|
|
|
|
default_language_version:
|
|
python: python3 # Defaults to python2, so override it.
|
|
|
|
repos:
|
|
- repo: https://github.com/pre-commit/pre-commit-hooks
|
|
rev: 2c9f875913ee60ca25ce70243dc24d5b6415598c # frozen: v4.6.0
|
|
hooks:
|
|
- id: check-added-large-files
|
|
- id: check-case-conflict
|
|
- id: check-executables-have-shebangs
|
|
- id: check-merge-conflict
|
|
- id: check-symlinks
|
|
exclude: ^bazel-execroot$
|
|
- id: check-yaml
|
|
- id: detect-private-key
|
|
- id: end-of-file-fixer
|
|
exclude: '^(.*/fuzzer_corpus/.*|.*\.svg)$'
|
|
- id: mixed-line-ending
|
|
args: ['--fix=lf']
|
|
exclude: '^(.*/fuzzer_corpus/.*|.*\.svg)$'
|
|
- id: trailing-whitespace
|
|
exclude: '^(.*/fuzzer_corpus/.*|.*/testdata/.*\.golden|.*\.svg)$'
|
|
- repo: https://github.com/google/pre-commit-tool-hooks
|
|
rev: efaea7c61c774c0b1a9805fd999e754a2d19dbd1 # frozen: v1.2.5
|
|
hooks:
|
|
- id: check-google-doc-style
|
|
- id: markdown-toc
|
|
- repo: local
|
|
hooks:
|
|
- id: fix-cc-deps
|
|
name: Fix missing C++ deps
|
|
entry: scripts/fix_cc_deps.py
|
|
language: python
|
|
files: ^.*/(BUILD|[^/]+\.(h|cpp))$
|
|
pass_filenames: false
|
|
|
|
# Formatters should be run late so that they can re-format any prior changes.
|
|
- repo: https://github.com/psf/black
|
|
rev: 3702ba224ecffbcec30af640c149f231d90aebdb # frozen: 24.4.2
|
|
hooks:
|
|
- id: black
|
|
- repo: https://github.com/pre-commit/mirrors-prettier
|
|
rev: ffb6a759a979008c0e6dff86e39f4745a2d9eac4 # frozen: v3.1.0
|
|
hooks:
|
|
- id: prettier
|
|
- repo: local
|
|
hooks:
|
|
- id: buildifier
|
|
name: Bazel buildifier
|
|
entry: scripts/run_buildifier.py
|
|
# Beyond just formatting, explicitly fix lint warnings.
|
|
args: ['--lint=fix', '--warnings=all', '-r', '.']
|
|
language: python
|
|
files: |
|
|
(?x)^(
|
|
.*BUILD.*|
|
|
.*MODULE.bazel.*|
|
|
.*WORKSPACE.*|
|
|
.*\.bzl
|
|
)$
|
|
- id: check-bazel-mod-deps
|
|
# Check this after buildifier because buildifier may modify inputs, and
|
|
# MODULE.bazel.lock includes line/column details.
|
|
name: Check bazel mod deps
|
|
entry: scripts/bazel_mod_deps.py
|
|
language: python
|
|
files: |
|
|
(?x)^(
|
|
.*MODULE.bazel.*|
|
|
.*WORKSPACE.*
|
|
)$
|
|
- id: clang-format
|
|
name: clang-format
|
|
entry: clang-format
|
|
types_or: [c++, proto, def]
|
|
language: python
|
|
args: ['-i']
|
|
additional_dependencies: ['clang-format==17.0.1']
|
|
- id: explorer-format-grammar
|
|
name: Format the explorer grammar file
|
|
entry: explorer/syntax/format_grammar.py
|
|
language: python
|
|
files: ^explorer/syntax/(lexer.lpp|parser.ypp)$
|
|
pass_filenames: false
|
|
additional_dependencies: ['clang-format==17.0.1']
|
|
|
|
- repo: local
|
|
hooks:
|
|
- id: check-header-guards
|
|
# This should run after clang-format, which may reformat a guard.
|
|
name: Check header guards
|
|
entry: scripts/check_header_guards.py
|
|
language: python
|
|
files: ^.*\.h$
|
|
- id: check-sha-filenames
|
|
# This may rename files, so it's deliberately between formatters and
|
|
# linters.
|
|
name: Check fuzzer SHA filenames
|
|
entry: scripts/check_sha_filenames.py
|
|
language: python
|
|
files: ^.*/fuzzer_corpus/.*$
|
|
- id: check-toolchain-diagnostics
|
|
name: Check toolchain diagnostics
|
|
entry: toolchain/diagnostics/check_diagnostics.py
|
|
language: python
|
|
files: |
|
|
(?x)^(
|
|
toolchain/.*\.cpp|
|
|
toolchain/.*\.h|
|
|
toolchain/diagnostics/check_diagnostics\.py|
|
|
toolchain/diagnostics/diagnostic_kind\.def
|
|
)$
|
|
pass_filenames: false
|
|
|
|
# Run linters last, as formatters and other checks may fix issues.
|
|
- repo: local
|
|
hooks:
|
|
- id: forbid-llvm-googletest
|
|
name: Checks for deps on LLVM's version of GoogleTest
|
|
entry: scripts/forbid_llvm_googletest.py
|
|
language: python
|
|
files: ^.*/BUILD$
|
|
pass_filenames: false
|
|
- repo: https://github.com/PyCQA/flake8
|
|
rev: 7d37d9032d0d161634be4554273c30efd4dea0b3 # frozen: 7.0.0
|
|
hooks:
|
|
- id: flake8
|
|
- repo: https://github.com/pre-commit/mirrors-mypy
|
|
rev: 'e5ea6670624c24f8321f6328ef3176dbba76db46' # frozen: v1.10.0
|
|
hooks:
|
|
- id: mypy
|
|
# Use setup.cfg to match the command line.
|
|
args:
|
|
- --config-file=setup.cfg
|
|
# This should match the requirements added in the WORKSPACE pip_install.
|
|
additional_dependencies:
|
|
- gql >= 2.0.0, < 3.0.0
|
|
- PyGitHub
|
|
# Exclusions are:
|
|
# - p#### scripts because they're not tested or maintained.
|
|
# - lit.cfg.py because it has multiple copies, breaking mypy.
|
|
# - Unit tests because they sometimes violate typing, such as by
|
|
# assigning a mock to a function.
|
|
exclude: |
|
|
(?x)^(
|
|
proposals/(?!scripts/).*|
|
|
.*/lit\.cfg\.py|
|
|
.*_test\.py
|
|
)$
|
|
- repo: https://github.com/codespell-project/codespell
|
|
rev: 6e41aba91fb32e9feb741a6258eefeb9c6e4a482 # frozen: v2.2.6
|
|
hooks:
|
|
- id: codespell
|
|
args: ['-I', '.codespell_ignore', '--uri-ignore-words-list', '*']
|
|
# Test data may contain intentional misspellings, as well as short,
|
|
# meaningless identifiers that codespell incorrectly identifies as
|
|
# typos but that we would want to detect in other contexts.
|
|
exclude: |
|
|
(?x)^(
|
|
.*/testdata/.*|
|
|
.*/fuzzer_corpus/.*
|
|
)$
|
|
- repo: https://github.com/google/pre-commit-tool-hooks
|
|
rev: efaea7c61c774c0b1a9805fd999e754a2d19dbd1 # frozen: v1.2.5
|
|
hooks:
|
|
- id: check-copyright
|
|
args:
|
|
- --copyright
|
|
- |+
|
|
Part of the Carbon Language project, under the Apache License v2.0 with LLVM
|
|
Exceptions. See /LICENSE for license information.
|
|
SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
|
- --skip_pattern
|
|
# The default skip pattern skips JSON which we use with VSCode and
|
|
# it, like most file-based parsers, can support comments easily.
|
|
- '(^LICENSE|\.(ico))$'
|
|
- --custom_format
|
|
- '\.(carbon|c|json|proto|ypp)(\.tmpl)?$'
|
|
- ''
|
|
- '// '
|
|
- ''
|
|
- --custom_format
|
|
- '\.(l|lpp|y)$'
|
|
- '/*'
|
|
- ''
|
|
- '*/'
|
|
- --custom_format
|
|
- '\.(plist)$'
|
|
- '<!--'
|
|
- ''
|
|
- '\-->'
|
|
- --custom_format
|
|
- '\.vim$'
|
|
- ''
|
|
- '" '
|
|
- ''
|
|
- --custom_format
|
|
- '\.scm$'
|
|
- ''
|
|
- '; '
|
|
- ''
|
|
- --custom_format
|
|
- '\.lua$'
|
|
- ''
|
|
- '-- '
|
|
- ''
|
|
exclude: |
|
|
(?x)^(
|
|
.bazelversion|
|
|
.github/pull_request_template.md|
|
|
.vscode/extensions.json|
|
|
compile_flags.txt|
|
|
github_tools/requirements.txt|
|
|
third_party/.*|
|
|
utils/vscode/package(-lock)?.json|
|
|
.*\.def|
|
|
.*\.svg|
|
|
.*/fuzzer_corpus/.*|
|
|
.*/testdata/.*\.golden
|
|
)$
|
|
- id: check-links
|
|
|
|
# This excludes third-party code, and patches to third-party code.
|
|
exclude: |
|
|
(?x)^(
|
|
MODULE.bazel.lock|
|
|
bazel/bazel_clang_tidy/.*\.patch|
|
|
bazel/google_benchmark/.*\.patch|
|
|
bazel/libpfm/.*\.patch|
|
|
bazel/llvm_project/.*\.patch|
|
|
third_party/examples/.*/carbon/.*|
|
|
)$
|