# mpyhooks This tool provides various hooks to check file content in a repository, with many originating from the [OpenFOAM Foundation's code style guide](https://openfoam.org/dev/coding-style-guide/). The hooks can be easily integrated with pre-commit for automated checking. ## Usage ```bash mpyhooks [options] [files ...] ``` ## Available Hooks ### encoding - Preview File Encoding Check encoding for preview files in [Rodare](https://rodare.hzdr.de) (Rossendorf Data Repository). **Usage:** ```bash mpyhooks encoding file1 file2 ... ``` ### line-length - Line Length Check Check for line length less than 80 characters. Enforces maximum line length following OpenFOAM Foundation software style guide. **Usage:** ```bash mpyhooks line-length file1.C file2.H ... ``` ### ifndef - Header Guard Check Check for `#ifndef` directive and `#define` statements in header files. Ensures proper include guards in header files. **Usage:** ```bash mpyhooks ifndef MyClass.H ... ``` **Expected format:** ```cpp #ifndef MyClass_H #define MyClass_H // ... content ... #endif ``` ### tabs - Tab Detection Check for tabs in files (should use 4 spaces instead). **Usage:** ```bash mpyhooks tabs file1.C file2.py ... ``` ### non-standard-code - Code Style Check Checks for non-standard C++ patterns per OpenFOAM Foundation software guidelines. **Usage:** ```bash mpyhooks non-standard-code file1.C file2.H ... ``` ### copyright-year - Copyright Year (deprecated) Check for year in copyright headers. **Usage:** ```bash mpyhooks copyright-year file1.C file2.H ... ``` ### copyright-header - Copyright Header Validation (deprecated) Check for copyright header using regex pattern. Validates presence and format of copyright headers. **Usage:** ```bash mpyhooks copyright-header 'pattern' file1 file2 ... ``` **Note:** Pass regex pattern in single quotes. **Example valid header:** ```cpp // SPDX-FileCopyrightText: 2025 Helmholtz-Zentrum Dresden-Rossendorf e.V. // SPDX-License-Identifier: GPL-3.0-or-later ``` ### keywords - Keyword Validation Check keyword validity in [case metadata](../case-metadata). **Usage:** ```bash mpyhooks keywords --ref reference.yml case.yml ``` ## Pre-commit Integration Detailed installation and usage instructions for `pre-commit` can be found [here](https://pre-commit.com). To use the hooks provided by this package you have to have access to the repository for this package in Helmholtz Codebase. For using the hooks in your own repository, create a `.pre-commit-hooks.yaml` in the root of the repository: ```yaml repos: - repo: https://TOKEN_NAME:TOKEN@codebase.helmholtz.cloud/fwdc/python.git rev: 2.1.3 hooks: - id: line-length - id: preview-encoding - id: ifndef - id: tabs - id: non-standard-code - id: copyright-year - id: copyright-header name: source-code-header types_or: [c, c++, header] entry: |- mpyhooks copyright-header 'My C++ Header RegExp' - id: copyright-header name: shell-header types: [file, text, shell] entry: |- mpyhooks copyright-header 'My Shell Header RegExp' ``` Install [pre-commit](https://pre-commit.com): ```bash pip install pre-commit pre-commit install ``` Now hooks run automatically on `git commit` for all stashed files. For running a single hook only use `pre commit run `, or for running all hooks on all files `pre commit run --all-files`, or for running the hooks only on selected files `pre-commit run --files ...`. For more information on `pre-commit` the reader is referred to its [documentation](https://pre-commit.com).