mirror of
https://github.com/IfcOpenShell/IfcOpenShell.git
synced 2026-08-12 02:23:34 +00:00
Introduce Ruff github CI with some basic linter rules
And also to help catching syntax errors on older Python versions.
This commit is contained in:
@@ -23,6 +23,8 @@ jobs:
|
||||
run: |
|
||||
python3 -m pip install --upgrade pip
|
||||
python3 -m pip install 'black>=24.10.0'
|
||||
curl -LsSf https://astral.sh/uv/install.sh | sh
|
||||
uv tool install ruff
|
||||
|
||||
# black doesn't catch all syntax errors, so we check them explicitly.
|
||||
- name: Check syntax errors
|
||||
@@ -35,18 +37,27 @@ jobs:
|
||||
continue-on-error: true
|
||||
|
||||
- name: Black formatter
|
||||
id: linting
|
||||
id: black
|
||||
run: |
|
||||
python3 -m black --diff --check .
|
||||
continue-on-error: true
|
||||
|
||||
- name: Ruff check
|
||||
id: ruff
|
||||
run: |
|
||||
uvx ruff check
|
||||
continue-on-error: true
|
||||
|
||||
- name: Final check
|
||||
run: |
|
||||
ERROR=0
|
||||
if [ "${{ steps.syntax-errors.outcome }}" != "success" ]; then
|
||||
echo "::error::Syntax errors check failed, see 'syntax-errors' step for the details." && ERROR=1
|
||||
fi
|
||||
if [ "${{ steps.linting.outcome }}" != "success" ]; then
|
||||
echo "::error::Black formatting check failed, see 'linting' step for the details." && ERROR=1
|
||||
if [ "${{ steps.black.outcome }}" != "success" ]; then
|
||||
echo "::error::Black formatting check failed, see 'black' step for the details." && ERROR=1
|
||||
fi
|
||||
if [ "${{ steps.ruff.outcome }}" != "success" ]; then
|
||||
echo "::error::Ruff check failed, see 'ruff' step for the details." && ERROR=1
|
||||
fi
|
||||
exit $ERROR
|
||||
|
||||
@@ -38,3 +38,46 @@ disableBytesTypePromotions = true
|
||||
reportUnnecessaryTypeIgnoreComment = true
|
||||
# Just to add a quick insert of `# pyright: ignore[xxx]` comments in Pylance.
|
||||
enableTypeIgnoreComments = false
|
||||
|
||||
# Define here general ruff settings,
|
||||
# then they will be inherited projects .toml files.
|
||||
# This allows using assuming different Python version for different projects.
|
||||
[tool.ruff]
|
||||
exclude = [
|
||||
# Submodules.
|
||||
"src/ifcopenshell-python/ifcopenshell/express",
|
||||
"src/ifcopenshell-python/ifcopenshell/mvd",
|
||||
"src/ifcopenshell-python/ifcopenshell/simple_spf",
|
||||
"src/svgfill",
|
||||
#
|
||||
# Unformatted.
|
||||
"src/exterior-shell-extractor",
|
||||
# Incompatible with linter.
|
||||
"src/ifc2ca/templates",
|
||||
]
|
||||
[tool.ruff.lint]
|
||||
select = [
|
||||
# Default Ruff rules.
|
||||
# "E4", # imports
|
||||
# "E7", # statements
|
||||
"E9", # io errors
|
||||
# "F", # pyflakes
|
||||
#
|
||||
"FA", # future annotations
|
||||
"UP", # pyupgrade
|
||||
]
|
||||
ignore = [
|
||||
"FA100", # Conflicts with Blender using annotations for props definitions.
|
||||
# Maybe will enable later:
|
||||
"UP006", # deprecated symbols
|
||||
"UP007", # Optional to X | Y
|
||||
"UP015", # Unnecessary mode argument
|
||||
"UP028", # yield for -> yield from
|
||||
"UP030", # implicit references for positional format fields
|
||||
"UP031", # Replace % with .format
|
||||
"UP032", # Replace .format with f-string
|
||||
"UP035", # List -> list
|
||||
|
||||
# Deprecated Ruff rules.
|
||||
"UP038", # Use X | Y in isinstance
|
||||
]
|
||||
|
||||
@@ -2,7 +2,7 @@ Code style
|
||||
============
|
||||
|
||||
|
||||
Black code formatter
|
||||
Code formatters
|
||||
-------------------------------
|
||||
For Python code formatting, we use `Black code formatter <https://pypi.org/project/black/>`__,
|
||||
black settings are stored in the repository's pyproject.toml.
|
||||
@@ -19,3 +19,17 @@ We have GitHub workflow `ci-black-formatting` to maintain black formatting acros
|
||||
# Format only some specific file.
|
||||
black src/bonsai/bonsai/bim/module/qto/operator.py
|
||||
|
||||
|
||||
There is also `ruff` with some basic linter rules (checked automatically by the same Github workflow).
|
||||
Which also helps maintaining consistency across the code base
|
||||
and ensure new Python syntax doesn't break code on older Python versions.
|
||||
|
||||
``ruff`` can be installed using ``pip install ruff`` and files can be formatted with the following example commands:
|
||||
|
||||
.. code-block:: bash
|
||||
# Check issues for the entire repository.
|
||||
ruff check
|
||||
# Apply some automatic fixes, if available.
|
||||
ruff check --fix
|
||||
# Check only some specific file.
|
||||
ruff src/bonsai/bonsai/bim/module/qto/operator.py
|
||||
|
||||
@@ -13,6 +13,7 @@ keywords = ["IFC", "Blender", "BIM"]
|
||||
classifiers = [
|
||||
"Programming Language :: Python :: 3",
|
||||
]
|
||||
requires-python = ">=3.11"
|
||||
dependencies = [
|
||||
"ifcopenshell",
|
||||
]
|
||||
@@ -28,3 +29,6 @@ exclude = ["test*"]
|
||||
|
||||
[tool.setuptools.package-data]
|
||||
"*" = ["*.*", "libs/desktop/bonsai", "libs/bin/ifcmerge"]
|
||||
|
||||
[tool.ruff]
|
||||
extend = "../../pyproject.toml"
|
||||
|
||||
@@ -36,3 +36,6 @@ include = ["ifcopenshell*"]
|
||||
|
||||
[tool.setuptools.package-data]
|
||||
"*" = ["*.*"]
|
||||
|
||||
[tool.ruff]
|
||||
extend = "../../pyproject.toml"
|
||||
|
||||
Reference in New Issue
Block a user