diff --git a/templates/.github/workflows/black.yml b/templates/.github/workflows/black.yml deleted file mode 100644 index 6f47e98f..00000000 --- a/templates/.github/workflows/black.yml +++ /dev/null @@ -1,10 +0,0 @@ -name: Check black formatting - -on: [push] - -jobs: - lint: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v3 - - uses: psf/black@stable diff --git a/templates/.github/workflows/flake8.yml b/templates/.github/workflows/flake8.yml deleted file mode 100644 index 621b03da..00000000 --- a/templates/.github/workflows/flake8.yml +++ /dev/null @@ -1,19 +0,0 @@ -name: Python flake8 check - -on: [push] - -jobs: - build: - - runs-on: ubuntu-latest - - steps: - - uses: actions/checkout@v3 - - name: Set up Python 3.10 - uses: actions/setup-python@v4 - with: - python-version: "3.10" - - name: Lint with flake8 - run: | - pip install flake8 - flake8 . --exclude=docs --count --ignore=W503,W504,F541,E203 --max-line-length=100 --show-source --statistics diff --git a/templates/.github/workflows/python-formatting.yml b/templates/.github/workflows/python-formatting.yml new file mode 100644 index 00000000..4dc79f7e --- /dev/null +++ b/templates/.github/workflows/python-formatting.yml @@ -0,0 +1,10 @@ +name: check format using ruff +on: [push] +jobs: + ruff: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: chartboost/ruff-action@v1 + with: + args: format --check diff --git a/templates/.github/workflows/python-linting.yml b/templates/.github/workflows/python-linting.yml new file mode 100644 index 00000000..5b842f0c --- /dev/null +++ b/templates/.github/workflows/python-linting.yml @@ -0,0 +1,8 @@ +name: lint code using ruff +on: [push] +jobs: + ruff: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: chartboost/ruff-action@v1 diff --git a/templates/.pre-commit-config.yaml b/templates/.pre-commit-config.yaml index e3e5bcb9..f055986a 100644 --- a/templates/.pre-commit-config.yaml +++ b/templates/.pre-commit-config.yaml @@ -1,13 +1,9 @@ repos: -- repo: https://github.com/psf/black - rev: 23.3.0 - hooks: - - id: black - language_version: python3.10 - -- repo: https://github.com/pycqa/isort - rev: 5.12.0 - hooks: - - id: isort - name: isort (python) - language_version: python3.10 +- repo: https://github.com/astral-sh/ruff-pre-commit + # Ruff version. + rev: v0.1.5 + hooks: + # Run the linter. + - id: ruff + # Run the formatter. + - id: ruff-format diff --git a/templates/pyproject.toml b/templates/pyproject.toml deleted file mode 100644 index 006a70bb..00000000 --- a/templates/pyproject.toml +++ /dev/null @@ -1,28 +0,0 @@ -[tool.black] -include = '\.pyi?$' -exclude = ''' -/( - \.git - | \.mypy_cache - | \.tox - | \.venv - | \.vscode - | \.eggs - | _build - | buck-out - | build - | dist - | docs -)/ -''' - -[tool.isort] -profile = "black" - -[tool.pyright] -ignore = [ - "**/node_modules", - "**/__pycache__", - "**/*.ipynb", - ".git" -] diff --git a/templates/pyrightconfig.json b/templates/pyrightconfig.json new file mode 100644 index 00000000..7fef666c --- /dev/null +++ b/templates/pyrightconfig.json @@ -0,0 +1,8 @@ +{ + "ignore": [ + "**/node_modules", + "**/__pycache__", + "**/*.ipynb", + ".git" + ] +} \ No newline at end of file diff --git a/templates/ruff.toml b/templates/ruff.toml new file mode 100644 index 00000000..be100189 --- /dev/null +++ b/templates/ruff.toml @@ -0,0 +1,74 @@ +# Copied originally from pandas +target-version = "py310" + +# fix = true +unfixable = [] + +select = [ + "I", # isort + "F", # pyflakes + "E", "W", # pycodestyle + "YTT", # flake8-2020 + "B", # flake8-bugbear + "Q", # flake8-quotes + "T10", # flake8-debugger + "INT", # flake8-gettext + "PLC", "PLE", "PLR", "PLW", # pylint + "PIE", # misc lints + "PYI", # flake8-pyi + "TID", # tidy imports + "ISC", # implicit string concatenation + "TCH", # type-checking imports + "C4", # comprehensions + "PGH" # pygrep-hooks +] + +# Some additional rules that are useful +extend-select = [ +"UP009", # UTF-8 encoding declaration is unnecessary +"SIM118", # Use `key in dict` instead of `key in dict.keys()` +"D205", # One blank line required between summary line and description +"ARG001", # Unused function argument +"RSE102", # Unnecessary parentheses on raised exception +"PERF401", # Use a list comprehension to create a transformed list +] + +ignore = [ + "ISC001", # Disable this for compatibility with ruff format + "B028", # No explicit `stacklevel` keyword argument found + "B905", # `zip()` without an explicit `strict=` parameter + "E402", # module level import not at top of file + "E731", # do not assign a lambda expression, use a def + "PLC1901", # compare-to-empty-string + "PLR0911", # Too many returns + "PLR0912", # Too many branches + "PLR0913", # Too many arguments to function call + "PLR0915", # Too many statements + "PLR2004", # Magic number +] + +# TODO : fix these and stop ignoring. Commented out ones are common and OK to except. +extend-ignore = [ + "PGH004", # Use specific rule codes when using `noqa` +# "C401", # Unnecessary generator (rewrite as a `set` comprehension) +# "C402", # Unnecessary generator (rewrite as a dict comprehension) +# "C405", # Unnecessary `list` literal (rewrite as a `set` literal) +# "C408", # Unnecessary `dict` call (rewrite as a literal) +# "C416", # Unnecessary `dict` comprehension (rewrite using `dict()`) +# "PGH002", # warn is deprecated in favor of warning +# "PYI056", # Calling `.append()` on `__all__` may not be supported by all type checkers +] + +extend-exclude = [ + "docs", +] + +[pycodestyle] +max-line-length = 100 # E501 reports lines that exceed the length of 100. + +[lint.extend-per-file-ignores] +"__init__.py" = ["E402", "F401", "F403"] +# For tests: +# - D205: Don't worry about test docstrings +# - ARG001: Unused function argument false positives for some fixtures +"**/tests/test_*.py" = ["D205", "ARG001"]