mirror of
https://github.com/github/codeql.git
synced 2025-12-16 16:53:25 +01:00
This is a developer QoL improvement, where running codegen will skip writing (and especially formatting) any files that were not changed. **Why?** While code generation in itself was pretty much instant, QL formatting of generated code was starting to take a long time. This made unconditionally running codegen quite annoying, for example before each test run as part of an IDE workflow or as part of the pre-commit hook. **How?** This was not completely straightforward as we could not work with the contents of the file prior to code generation as that was already post-processed by the QL formatting, so we had no chance of comparing the output of template rendering with that. We therefore store the hashes of the files _prior_ to QL formatting in a checked-in file (`swift/ql/.generated.list`). We can therefore load those hashes at the beginning of code generation, use them to compare the template rendering output and update them in this special registry file. **What else?** We also extend this mechanism to detect accidental modification of generated files in a more robust way. Before this patch, we were doing it with a rough regexp based heuristic. Now, we just store the hashes of the files _after_ QL formatting in the same checked file, so we can check that and stop generation if a generated file was modified, or a stub was modified without removing the `// generated` header.
58 lines
1.8 KiB
YAML
58 lines
1.8 KiB
YAML
# See https://pre-commit.com for more information
|
|
# See https://pre-commit.com/hooks.html for more hooks
|
|
repos:
|
|
- repo: https://github.com/pre-commit/pre-commit-hooks
|
|
rev: v3.2.0
|
|
hooks:
|
|
- id: trailing-whitespace
|
|
exclude: /test/.*$(?<!\.ql)(?<!\.qll)(?<!\.qlref)
|
|
- id: end-of-file-fixer
|
|
exclude: /test/.*$(?<!\.ql)(?<!\.qll)(?<!\.qlref)
|
|
|
|
- repo: https://github.com/pre-commit/mirrors-clang-format
|
|
rev: v13.0.1
|
|
hooks:
|
|
- id: clang-format
|
|
files: ^swift/.*\.(h|c|cpp)$
|
|
|
|
- repo: https://github.com/pre-commit/mirrors-autopep8
|
|
rev: v1.6.0
|
|
hooks:
|
|
- id: autopep8
|
|
files: ^swift/.*\.py
|
|
|
|
- repo: local
|
|
hooks:
|
|
- id: codeql-format
|
|
name: Fix QL file formatting
|
|
files: \.qll?$
|
|
language: system
|
|
entry: codeql query format --in-place
|
|
|
|
- id: sync-files
|
|
name: Fix files required to be identical
|
|
files: \.(qll?|qhelp|swift)$|^config/identical-files\.json$
|
|
language: system
|
|
entry: python3 config/sync-files.py --latest
|
|
pass_filenames: false
|
|
|
|
- id: qhelp
|
|
name: Check query help generation
|
|
files: \.qhelp$
|
|
language: system
|
|
entry: python3 misc/scripts/check-qhelp.py
|
|
|
|
- id: swift-codegen
|
|
name: Run Swift checked in code generation
|
|
files: ^swift/(schema.py$|codegen/|.*/generated/|ql/lib/(swift\.dbscheme$|codeql/swift/elements)|ql/\.generated.list)
|
|
language: system
|
|
entry: bazel run //swift/codegen -- --quiet
|
|
pass_filenames: false
|
|
|
|
- id: swift-codegen-unit-tests
|
|
name: Run Swift code generation unit tests
|
|
files: ^swift/codegen/.*\.py$
|
|
language: system
|
|
entry: bazel test //swift/codegen/test
|
|
pass_filenames: false
|