diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 2f821a42..09f1ae57 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -34,3 +34,10 @@ repos: rev: 22.3.0 hooks: - id: black + - repo: https://github.com/astral-sh/ruff-pre-commit + rev: v0.9.7 + hooks: + # Run the linter. + - id: ruff + # The formatter could be run in the future + #- id: ruff-format diff --git a/doc/source/conf.py b/doc/source/conf.py index f5691bbc..45d9bf7f 100644 --- a/doc/source/conf.py +++ b/doc/source/conf.py @@ -12,10 +12,10 @@ import os import sys from datetime import datetime +from importlib import util as importlib_util import jsonschema2md -import fusesoc from fusesoc.capi2.json_schema import capi2_schema from fusesoc.utils import yaml_read @@ -109,11 +109,9 @@ # or # - apt-get install python-sphinx-rtd-theme -try: - import sphinx_rtd_theme - +if importlib_util.find_spec("sphinx_rtd_theme") is not None: html_theme = "sphinx_rtd_theme" -except ImportError: +else: sys.stderr.write( "Warning: The Sphinx 'sphinx_rtd_theme' HTML theme was " + "not found. Make sure you have the theme installed to produce pretty " diff --git a/fusesoc/capi2/core.py b/fusesoc/capi2/core.py index dac0188a..6ce63d90 100644 --- a/fusesoc/capi2/core.py +++ b/fusesoc/capi2/core.py @@ -380,7 +380,6 @@ def _parse_param(flags, name, core_param): # ...or in any of its dependencies elif p in ext_parameters: parameters[p] = ext_parameters[p] - datatype = parameters[p]["datatype"] else: raise SyntaxError( diff --git a/fusesoc/coremanager.py b/fusesoc/coremanager.py index 6eaee2a8..c4bbba1f 100644 --- a/fusesoc/coremanager.py +++ b/fusesoc/coremanager.py @@ -222,7 +222,7 @@ def eq_vln(this, that): transaction = solver.solve(request) except SatisfiabilityError as e: raise DependencyError(top_core.name, msg=e.unsat.to_string(pool)) - except NoPackageFound as e: + except NoPackageFound: raise DependencyError(top_core.name) virtual_selection = {} @@ -376,7 +376,7 @@ def _detect_capi_version(self, core_file) -> int: core_file ) ) - except Exception as error: + except Exception: error_msg = f"Unable to determine CAPI version from core file {core_file}" logger.warning(error_msg) return -1 diff --git a/fusesoc/edalizer.py b/fusesoc/edalizer.py index 30918c4c..76191fd5 100644 --- a/fusesoc/edalizer.py +++ b/fusesoc/edalizer.py @@ -13,7 +13,6 @@ from fusesoc import utils from fusesoc.capi2.coreparser import Core2Parser -from fusesoc.coremanager import DependencyError from fusesoc.utils import merge_dict from fusesoc.vlnv import Vlnv @@ -338,7 +337,7 @@ def _build_parser(self, backend_class, edam): default = [ typedict[param["datatype"]]["type"](param["default"]) ] - except KeyError as e: + except KeyError: pass try: param_groups[_paramtype].add_argument( @@ -622,11 +621,6 @@ def is_generator_cacheable(self): def is_cacheable(self): return self.is_input_cacheable() or self.is_generator_cacheable() - def acquire_cache_lock(self): - have_lock = False - # while not have_lock: - # if - def generate(self): """Run a parametrized generator diff --git a/fusesoc/filters/splitlib.py b/fusesoc/filters/splitlib.py index 2ffb7a11..bf95f9c8 100644 --- a/fusesoc/filters/splitlib.py +++ b/fusesoc/filters/splitlib.py @@ -1,5 +1,4 @@ import logging -import os logger = logging.getLogger(__name__) diff --git a/fusesoc/fusesoc.py b/fusesoc/fusesoc.py index 5f163fc1..da4d1233 100644 --- a/fusesoc/fusesoc.py +++ b/fusesoc/fusesoc.py @@ -6,11 +6,10 @@ import os from importlib import import_module -from fusesoc.config import Config from fusesoc.coremanager import CoreManager, DependencyError from fusesoc.edalizer import Edalizer from fusesoc.librarymanager import Library, LibraryManager -from fusesoc.utils import Launcher, setup_logging, yaml_fread +from fusesoc.utils import setup_logging, yaml_fread from fusesoc.vlnv import Vlnv try: @@ -36,7 +35,7 @@ def _register_libraries(self): for library in self.config.libraries + cores_root_libs: try: self.add_library(library) - except (RuntimeError, OSError) as e: + except (RuntimeError, OSError): try: temporary_lm = LibraryManager(self.config.library_root) # try to initialize library @@ -146,6 +145,7 @@ def get_backend(self, core, flags, backendargs=[]): try: backend_class = get_edatool(flags["tool"]) except ImportError: + tool = flags.setdefault("tool", "") raise RuntimeError(f"Backend {tool!r} not found") edalizer = Edalizer( diff --git a/fusesoc/librarymanager.py b/fusesoc/librarymanager.py index f1e638b6..5894d8b1 100644 --- a/fusesoc/librarymanager.py +++ b/fusesoc/librarymanager.py @@ -60,7 +60,7 @@ def l(s): logger.info(l(f"{self.location} does not exist. Trying a checkout")) try: provider.init_library(self) - except RuntimeError as e: + except RuntimeError: # Keep old behavior of logging a warning if there is a library # in `fusesoc.conf`, but the directory does not exist for some # reason and it could not be initialized. diff --git a/fusesoc/parser/coreparser.py b/fusesoc/parser/coreparser.py index b8c24cc8..60a47086 100644 --- a/fusesoc/parser/coreparser.py +++ b/fusesoc/parser/coreparser.py @@ -3,7 +3,6 @@ # SPDX-License-Identifier: BSD-2-Clause import fastjsonschema -import yaml from fusesoc import utils diff --git a/fusesoc/provider/git.py b/fusesoc/provider/git.py index bb1af4b1..d88e58db 100644 --- a/fusesoc/provider/git.py +++ b/fusesoc/provider/git.py @@ -3,8 +3,6 @@ # SPDX-License-Identifier: BSD-2-Clause import logging -import os.path -import shutil import subprocess from fusesoc.provider.provider import Provider diff --git a/fusesoc/provider/opencores.py b/fusesoc/provider/opencores.py index 2bd60bd6..92b93f67 100644 --- a/fusesoc/provider/opencores.py +++ b/fusesoc/provider/opencores.py @@ -3,7 +3,6 @@ # SPDX-License-Identifier: BSD-2-Clause import logging -import sys from fusesoc.provider.provider import Provider from fusesoc.utils import Launcher, cygpath, is_mingw diff --git a/pyproject.toml b/pyproject.toml index 5c80b634..bca10079 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -60,3 +60,22 @@ envlist = py3 deps = pytest commands = pytest """ + +[tool.ruff] +line-length = 88 +indent-width = 4 + +target-version = "py37" + +[tool.ruff.lint] +ignore = [ + "E711", + "E712", + "E713", + "E714", + "E721", + "E722", + "E741", + "E743", + "E402", +] diff --git a/tests/test_capi2.py b/tests/test_capi2.py index 687b994a..47b9b9bc 100644 --- a/tests/test_capi2.py +++ b/tests/test_capi2.py @@ -38,14 +38,13 @@ def test_files_out_of_hierarchy(): def test_empty_core(): import os - import tempfile from fusesoc.capi2.coreparser import Core2Parser from fusesoc.core import Core core_file = os.path.join(tests_dir, "capi2_cores", "misc", "empty.core") with pytest.raises(SyntaxError) as excinfo: - core = Core(Core2Parser(), core_file) + Core(Core2Parser(), core_file) assert "Error validating" in str(excinfo.value) @@ -127,8 +126,6 @@ def test_capi2_export_no_overwrite(): "vpifile", ] - result = [] - # Export and check all dst files are equal to src files core.export(export_root) for f in expected: @@ -282,7 +279,7 @@ def test_capi2_type_check(): core_file = os.path.join(tests_dir, "capi2_cores", "misc", "typecheck.core") with pytest.raises(SyntaxError) as excinfo: - core = Core(Core2Parser(), core_file) + Core(Core2Parser(), core_file) assert "Error validating" in str(excinfo.value) diff --git a/tests/test_libraries.py b/tests/test_libraries.py index 9348fa2c..0adf7b64 100644 --- a/tests/test_libraries.py +++ b/tests/test_libraries.py @@ -7,13 +7,13 @@ import shutil import subprocess import tempfile +from textwrap import dedent from argparse import Namespace from test_common import cache_root, cores_root, library_root from fusesoc.config import Config from fusesoc.fusesoc import Fusesoc -from fusesoc.librarymanager import Library build_root = "test_build_root" @@ -61,7 +61,6 @@ def test_library_add(caplog): import tempfile from fusesoc.coremanager import CoreManager - from fusesoc.librarymanager import LibraryManager from fusesoc.main import add_library with tempfile.TemporaryDirectory() as td: @@ -136,14 +135,14 @@ def test_library_add(caplog): vars(args)["sync-version"] = "capi2" args.location = None - expected = """[library.fusesoc-cores] -location = fusesoc_libraries/fusesoc-cores -sync-uri = https://github.com/fusesoc/fusesoc-cores -sync-version = capi2 -sync-type = git -auto-sync = true""".format( - cm._lm.library_root - ) + expected = dedent(""" + [library.fusesoc-cores] + location = fusesoc_libraries/fusesoc-cores + sync-uri = https://github.com/fusesoc/fusesoc-cores + sync-version = capi2 + sync-type = git + auto-sync = true + """) add_library(cm, args) @@ -177,8 +176,6 @@ def test_library_update(caplog): conf = Config(tcf.name) - args = Namespace() - Fusesoc.init_logging(False, False) fs = Fusesoc(conf) @@ -236,8 +233,6 @@ def test_library_update_with_initialize(caplog): conf = Config(tcf.name) - args = Namespace() - Fusesoc.init_logging(False, False) fs = Fusesoc(conf) diff --git a/tests/test_vlnv.py b/tests/test_vlnv.py index 069ee0d5..329daebe 100644 --- a/tests/test_vlnv.py +++ b/tests/test_vlnv.py @@ -2,8 +2,6 @@ # Licensed under the 2-Clause BSD License, see LICENSE for details. # SPDX-License-Identifier: BSD-2-Clause -import pytest - from fusesoc.vlnv import Vlnv