From f932015f62ab7aeb5f7f8a1a739245dcfbd46a26 Mon Sep 17 00:00:00 2001 From: Kenneth Daily Date: Fri, 6 Dec 2024 10:52:33 -0800 Subject: [PATCH] Add pre-commit hook First pass at adding a pre-commit hook to enforce formatting and linting standards. This adds the pre-commit command to run on a limited set of directories. Subsequent changes will remove excluded folders and run formatting on them as well. The command will use the standard pre-commit hooks for yaml, whitespace, and end of line linting. It will also use `ruff` configured identically to the Python SDK repositories. The intention is to start enforcing formatting and linting standards on edited code. Running the pre-commit hook manually will make numerous changes that should be broken into multiple phases. --- .pre-commit-config.yaml | 29 +++++++++++++++++++++++++++++ CONTRIBUTING.rst | 24 +++++++++++++++++++++++- pyproject.toml | 25 +++++++++++++++++++++++++ 3 files changed, 77 insertions(+), 1 deletion(-) create mode 100644 .pre-commit-config.yaml diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml new file mode 100644 index 000000000000..917cd2d10146 --- /dev/null +++ b/.pre-commit-config.yaml @@ -0,0 +1,29 @@ +exclude: "\ + ^(\ + .changes|\ + .github|\ + awscli/examples|\ + awscli/topics|\ + awscli/botocore|\ + awscli/s3transfer|\ + awscli/doc|\ + exe/assets|\ + tests/functional/cloudformation/deploy_templates/booleans/input.yml|\ + tests/functional/cloudformation/deploy_templates/nested-tag/input.yml|\ + tests/|\ + CHANGELOG.rst|\ + configure\ + )" +repos: + - repo: 'https://github.com/pre-commit/pre-commit-hooks' + rev: v4.5.0 + hooks: + - id: check-yaml + - id: end-of-file-fixer + - id: trailing-whitespace + - repo: https://github.com/astral-sh/ruff-pre-commit + rev: v0.4.8 + hooks: + - id: ruff + args: [ --fix ] + - id: ruff-format diff --git a/CONTRIBUTING.rst b/CONTRIBUTING.rst index 0a89c7b112f9..0d60b0eda675 100644 --- a/CONTRIBUTING.rst +++ b/CONTRIBUTING.rst @@ -67,7 +67,7 @@ Also, ensure your commit messages match this format:: Describe your changes in the imperative mood, e.g. "Add foo to bar", "Update foo component for bar", "Fix race condition for foo". - + The body of the commit message can include: * an explanation of the problem and what this change @@ -120,6 +120,28 @@ can run these commands:: When you push to your remote, the output will contain a URL you can use to open a pull request. +Codestyle +--------- +This project uses `ruff `__ to enforce +codstyle requirements. We've codified this process using a tool called +`pre-commit `__. pre-commit allows us to specify a +config file with all tools required for code linting, and surfaces either a +git commit hook, or single command, for enforcing these. + +To validate your pull request prior to publishing, you can use the following +`installation guide `__ to setup pre-commit. + +If you don't want to use the git commit hook, you can run the below command +to automatically perform the codestyle validation: + +.. code-block:: bash + + $ pre-commit run + +This will automatically perform simple updates (such as white space clean up) +and provide a list of any failing checks. After these are addressed, +you can commit the changes prior to publishing the pull request. + Reporting Issues ---------------- diff --git a/pyproject.toml b/pyproject.toml index 58ba14278b04..6f3de5dd1bf2 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -130,3 +130,28 @@ markers = [ [tool.black] line-length = 80 + +[tool.ruff.lint] +# Enable Pyflakes (`F`) and a subset of the pycodestyle (`E`) codes by default. +# Unlike Flake8, Ruff doesn't enable pycodestyle warnings (`W`) or +# McCabe complexity (`C901`) by default. +select = ["E4", "E7", "E9", "F", "I", "UP"] +ignore = [] + +# Allow fix for all enabled rules (when `--fix`) is provided. +fixable = ["ALL"] +unfixable = [] + +# Allow unused variables when underscore-prefixed. +dummy-variable-rgx = "^(_+|(_+[a-zA-Z0-9_]*[a-zA-Z0-9]+?))$" + +[tool.ruff.format] +# Like Black, use double quotes for strings, spaces for indents +# and trailing commas. +quote-style = "preserve" +indent-style = "space" +skip-magic-trailing-comma = false +line-ending = "auto" + +docstring-code-format = false +docstring-code-line-length = "dynamic"