apache / apache/cloudstack

16 essential tools that can be run as wrappers for pre-commit, primarily targeting Python and Shell. Gemini can make mistakes, so double-check it

Ouverte
#11,323 2 commentaires 1 réaction 0 personnes assignées Voir sur GitHub
long-term-plan
Langage dominant
Java
Étoiles
3.1k
Forks
1.4k
Merge moyen
6 j 19 h
PR mergées (30 j)
32

Description

To enhance code quality, consistency, and catch common errors early in the development cycle, integrating pre-commit hooks into your workflow is incredibly effective. For projects that heavily utilize Python and Shell scripting, like many infrastructure or automation platforms, leveraging the right tools as `pre-commit` wrappers can significantly streamline development.

Here are the first 16 essential tools that can be run as wrappers for `pre-commit`, primarily targeting **Python** and **Shell** scripting:

---

### Python Specific Hooks

#### Formatters

- [ ] 1. **Black**: This uncompromising Python code formatter ensures your code adheres to a consistent style, making it highly readable and uniform across your codebase.
- [ ] 2. **Ruff (Formatter)**: An exceptionally fast Rust-powered formatter that's 100% compatible with Black. It's a fantastic choice for quickly standardizing your Python code's appearance.
- [ ] 3. **isort**: Automatically sorts your Python imports alphabetically and groups them into logical sections, cleaning up your import statements.
- [ ] 4. **autoflake**: A utility that intelligently removes unused imports and unused variables from your Python code, based on reports from Pyflakes.
- [ ] 5. **docformatter**: Formats Python docstrings to conform to PEP 257, ensuring consistent and readable documentation within your code.

#### Linters & Static Analysis

- [x] 6. **Flake8**: A versatile wrapper that combines PyFlakes (for basic syntax errors), pycodestyle (for PEP 8 compliance), and McCabe complexity checker (for code complexity).
- [ ] 7. **Ruff (Linter)**: A blazing-fast Python linter written in Rust. It can replace a multitude of other linters like Flake8, isort, pydocstyle, pyupgrade, and autoflake, offering significant speed advantages.
- [ ] 8. **Mypy**: A static type checker for Python. It helps catch type-related errors before runtime, improving code robustness and maintainability.
- [ ] 9. **Pylint**: A highly customizable and comprehensive Python linter that checks for errors, enforces coding standards, and identifies potential code smells.
- [ ] 10. **Bandit**: Focuses on security, designed to find common security issues in your Python code, helping to prevent vulnerabilities.
- [ ] 11. **Pyupgrade**: Automatically upgrades Python syntax to newer versions, such as converting older string formatting to f-strings or adding modern type hints.
- [ ] 12. **debug-statements**: Catches accidental `print()` statements, `pdb.set_trace()` calls, or `breakpoint()` calls that might be left in production code.
- [ ] 13. **check-ast**: Performs a simple check to ensure that your Python files can be parsed as valid Python code, catching basic syntax errors.

---

### Shell Script Specific Hooks

- [ ] 14. **ShellCheck**: A powerful static analysis tool for shell scripts (Bash, sh, ksh). It catches common syntax errors, logical flaws, and stylistic issues, making your scripts more reliable.
- [ ] 15. **bashate**: A dedicated code style enforcement tool specifically for Bash programs, commonly used in large-scale projects to maintain consistent scripting practices.
- [ ] 16. **shfmt**: An opinionated formatter for shell scripts that automatically formats your scripts according to a consistent style, improving readability.

Guide de contribution

Ouvrir le guide de contribution

Piste de recherche

Commencez par examiner la configuration pre-commit existante du dépôt et l’élément Flake8 actuellement coché. Évaluez les outils Python et Shell restants en tant que wrappers pre-commit, puis mettez à jour la configuration et la liste de contrôle afin que les hooks sélectionnés soient intégrés et utilisables.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Évaluation

Stack technique
python, shell
Domaine
tooling
Type d'issue
Fonctionnalité
Difficulté
5/5
Temps estimé
Plus d'une semaine
Activité
À l'abandon
Clarté
À clarifier
Accessibilité débutants
25/100

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.