Skip to content

Commit 735bdeb

Browse files
authored
Bump pre-commit versions (#311)
* Bump pre-commit versions * Use ruff instead of black
1 parent e735350 commit 735bdeb

File tree

10 files changed

+34
-81
lines changed

10 files changed

+34
-81
lines changed

.pre-commit-config.yaml

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,30 @@
11
repos:
22
- repo: https://github.com/pre-commit/pre-commit-hooks
3-
rev: v5.0.0
3+
rev: v6.0.0
44
hooks:
55
- id: check-docstring-first
66
- id: end-of-file-fixer
77
- id: trailing-whitespace
88

9-
- repo: https://github.com/psf/black-pre-commit-mirror
10-
rev: 25.1.0
9+
- repo: https://github.com/astral-sh/ruff-pre-commit
10+
rev: v0.13.1
1111
hooks:
12-
- id: black
12+
- id: ruff-format
1313

1414
- repo: https://github.com/tlambert03/napari-plugin-checks
1515
rev: v0.3.0
1616
hooks:
1717
- id: napari-plugin-checks
1818

1919
- repo: https://github.com/pre-commit/mirrors-mypy
20-
rev: v1.15.0
20+
rev: v1.18.2
2121
hooks:
2222
- id: mypy
2323
additional_dependencies: [numpy, matplotlib]
2424

2525
- repo: https://github.com/astral-sh/ruff-pre-commit
2626
# Ruff version.
27-
rev: 'v0.11.9'
27+
rev: 'v0.13.1'
2828
hooks:
2929
- id: ruff
3030

src/napari_matplotlib/base.py

Lines changed: 5 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -83,9 +83,7 @@ def _on_napari_theme_changed(self, event: Event) -> None:
8383
event : napari.utils.events.Event
8484
Event that triggered the callback.
8585
"""
86-
self.napari_theme_style_sheet = style_sheet_from_theme(
87-
get_theme(event.value)
88-
)
86+
self.napari_theme_style_sheet = style_sheet_from_theme(get_theme(event.value))
8987
self._replace_toolbar_icons()
9088

9189
def _napari_theme_has_light_bg(self) -> bool:
@@ -220,9 +218,7 @@ def _setup_callbacks(self) -> None:
220218
# z-step changed in viewer
221219
self.viewer.dims.events.current_step.connect(self._draw)
222220
# Layer selection changed in viewer
223-
self.viewer.layers.selection.events.changed.connect(
224-
self._update_layers
225-
)
221+
self.viewer.layers.selection.events.changed.connect(self._update_layers)
226222

227223
@property
228224
def _valid_layer_selection(self) -> bool:
@@ -307,9 +303,7 @@ class NapariNavigationToolbar(NavigationToolbar2QT):
307303
def __init__(self, *args, **kwargs) -> None: # type: ignore[no-untyped-def]
308304
super().__init__(*args, **kwargs) # type: ignore[no-untyped-call]
309305
self.setIconSize(
310-
from_napari_css_get_size_of(
311-
"QtViewerPushButton", fallback=(28, 28)
312-
)
306+
from_napari_css_get_size_of("QtViewerPushButton", fallback=(28, 28))
313307
)
314308

315309
def _update_buttons_checked(self) -> None:
@@ -324,15 +318,11 @@ def _update_buttons_checked(self) -> None:
324318
QIcon(os.path.join(icon_dir, "Pan_checked.png"))
325319
)
326320
else:
327-
self._actions["pan"].setIcon(
328-
QIcon(os.path.join(icon_dir, "Pan.png"))
329-
)
321+
self._actions["pan"].setIcon(QIcon(os.path.join(icon_dir, "Pan.png")))
330322
if "zoom" in self._actions:
331323
if self._actions["zoom"].isChecked():
332324
self._actions["zoom"].setIcon(
333325
QIcon(os.path.join(icon_dir, "Zoom_checked.png"))
334326
)
335327
else:
336-
self._actions["zoom"].setIcon(
337-
QIcon(os.path.join(icon_dir, "Zoom.png"))
338-
)
328+
self._actions["zoom"].setIcon(QIcon(os.path.join(icon_dir, "Zoom.png")))

src/napari_matplotlib/histogram.py

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -100,9 +100,7 @@ def on_update_layers(self) -> None:
100100
"""
101101
super().on_update_layers()
102102
if self._valid_layer_selection:
103-
self.layers[0].events.contrast_limits.connect(
104-
self._update_contrast_lims
105-
)
103+
self.layers[0].events.contrast_limits.connect(self._update_contrast_lims)
106104

107105
if not self.layers:
108106
return
@@ -170,8 +168,7 @@ def draw(self) -> None:
170168
self.axes.hist(data.ravel(), bins=bins.tolist(), label=layer.name)
171169

172170
self._contrast_lines = [
173-
self.axes.axvline(lim, color="white")
174-
for lim in layer.contrast_limits
171+
self.axes.axvline(lim, color="white") for lim in layer.contrast_limits
175172
]
176173
self.axes.legend()
177174

@@ -197,9 +194,7 @@ def __init__(
197194
self.layout().addWidget(QLabel("Key:"))
198195
self.layout().addWidget(self._key_selection_widget)
199196

200-
self._key_selection_widget.currentTextChanged.connect(
201-
self._set_axis_keys
202-
)
197+
self._key_selection_widget.currentTextChanged.connect(self._set_axis_keys)
203198

204199
self._update_layers(None)
205200

src/napari_matplotlib/tests/scatter/test_scatter.py

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -37,9 +37,7 @@ def test_scatter_3D(make_napari_viewer, brain_data):
3737

3838
viewer.add_image(brain_data[0], **brain_data[1], name="brain")
3939

40-
viewer.add_image(
41-
brain_data[0] * -1.0, **brain_data[1], name="brain_reversed"
42-
)
40+
viewer.add_image(brain_data[0] * -1.0, **brain_data[1], name="brain_reversed")
4341
# De-select existing selection
4442
viewer.layers.selection.clear()
4543
axis = viewer.dims.last_used

src/napari_matplotlib/tests/scatter/test_scatter_features.py

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -9,16 +9,12 @@
99

1010

1111
@pytest.mark.mpl_image_compare
12-
def test_features_scatter_widget_2D(
13-
make_napari_viewer, points_with_features_data
14-
):
12+
def test_features_scatter_widget_2D(make_napari_viewer, points_with_features_data):
1513
viewer = make_napari_viewer()
1614
viewer.theme = "light"
1715
widget = FeaturesScatterWidget(viewer)
1816

19-
viewer.add_points(
20-
points_with_features_data[0], **points_with_features_data[1]
21-
)
17+
viewer.add_points(points_with_features_data[0], **points_with_features_data[1])
2218
assert len(viewer.layers) == 1
2319
# De-select existing selection
2420
viewer.layers.selection.clear()
@@ -33,9 +29,7 @@ def test_features_scatter_widget_2D(
3329
return deepcopy(fig)
3430

3531

36-
def make_labels_layer_with_features() -> (
37-
tuple[npt.NDArray[np.uint16], dict[str, Any]]
38-
):
32+
def make_labels_layer_with_features() -> tuple[npt.NDArray[np.uint16], dict[str, Any]]:
3933
label_image: npt.NDArray[np.uint16] = np.zeros((100, 100), dtype=np.uint16)
4034
for label_value, start_index in enumerate([10, 30, 50], start=1):
4135
end_index = start_index + 10

src/napari_matplotlib/tests/test_layer_changes.py

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -71,9 +71,7 @@ def assert_features_plot_changes(
7171
widget = widget_cls(viewer)
7272
viewer.add_points(data[0], **data[1])
7373
# Change the features data for the second layer
74-
data[1]["features"] = {
75-
name: data + 1 for name, data in data[1]["features"].items()
76-
}
74+
data[1]["features"] = {name: data + 1 for name, data in data[1]["features"].items()}
7775
viewer.add_points(data[0], **data[1])
7876
assert_plot_changes(viewer, widget, n_layers=1)
7977

src/napari_matplotlib/tests/test_theme.py

Lines changed: 7 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -10,17 +10,15 @@
1010
"theme_name, expected_icons",
1111
[("dark", "white"), ("light", "black")],
1212
)
13-
def test_theme_mpl_toolbar_icons(
14-
make_napari_viewer, theme_name, expected_icons
15-
):
13+
def test_theme_mpl_toolbar_icons(make_napari_viewer, theme_name, expected_icons):
1614
"""Check that the icons are taken from the correct folder for each napari theme."""
1715
viewer = make_napari_viewer()
1816
viewer.theme = theme_name
1917
path_to_icons = NapariMPLWidget(viewer)._get_path_to_icon()
2018
assert path_to_icons.exists(), "The theme points to non-existant icons."
21-
assert (
22-
path_to_icons.stem == expected_icons
23-
), "The theme is selecting unexpected icons."
19+
assert path_to_icons.stem == expected_icons, (
20+
"The theme is selecting unexpected icons."
21+
)
2422

2523

2624
def _mock_up_theme() -> None:
@@ -32,9 +30,7 @@ def _mock_up_theme() -> None:
3230
blue_theme = napari.utils.theme.get_theme("dark")
3331
blue_theme.label = "blue"
3432
blue_theme.background = "#4169e1" # my favourite shade of blue
35-
napari.utils.theme.register_theme(
36-
"blue", blue_theme, source="napari-mpl-tests"
37-
)
33+
napari.utils.theme.register_theme("blue", blue_theme, source="napari-mpl-tests")
3834

3935

4036
def test_theme_background_check(make_napari_viewer):
@@ -62,9 +58,7 @@ def test_theme_background_check(make_napari_viewer):
6258
("light", "#3b3a39"), # #3b3a39 is a brownish dark grey (almost black)
6359
],
6460
)
65-
def test_titles_respect_theme(
66-
make_napari_viewer, theme_name, expected_text_colour
67-
):
61+
def test_titles_respect_theme(make_napari_viewer, theme_name, expected_text_colour):
6862
"""
6963
Test that the axis labels and titles are the correct color for the napari theme.
7064
"""
@@ -114,9 +108,7 @@ def test_no_theme_side_effects(make_napari_viewer):
114108
ax.hist(normal_dist, bins=100)
115109
ax.set_xlabel("something unrelated to napari (x)")
116110
ax.set_ylabel("something unrelated to napari (y)")
117-
ax.set_title(
118-
"this plot style should not change with napari styles or themes"
119-
)
111+
ax.set_title("this plot style should not change with napari styles or themes")
120112
unrelated_figure.tight_layout()
121113

122114
return unrelated_figure

src/napari_matplotlib/tests/test_ui.py

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,7 @@ def _are_different(a: QImage, b: QImage) -> bool:
1919
return False
2020

2121

22-
@pytest.mark.parametrize(
23-
"Widget", [HistogramWidget, ScatterWidget, SliceWidget]
24-
)
22+
@pytest.mark.parametrize("Widget", [HistogramWidget, ScatterWidget, SliceWidget])
2523
def test_mpl_toolbar_buttons_checked(make_napari_viewer, Widget):
2624
"""Test that the icons for checkable actions change when when a tool is selected.
2725

src/napari_matplotlib/tests/test_util.py

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
def test_version_fallback(mocker):
1111
"""Test the versioning fallback (in case setuptools_scm didn't work)"""
1212
import napari_matplotlib # fmt: skip
13+
1314
assert napari_matplotlib.__version__ != "unknown" # type: ignore[attr-defined]
1415

1516
mocker.patch.dict(sys.modules, {"napari_matplotlib._version": None})
@@ -70,9 +71,7 @@ def test_fallback_if_missing_dimensions(mocker):
7071
mocker.patch("napari.qt.get_current_stylesheet").return_value = test_css
7172
with pytest.warns(RuntimeWarning, match="Unable to find DimensionToken"):
7273
with pytest.warns(RuntimeWarning, match="Unable to find Flobble"):
73-
assert from_napari_css_get_size_of("Flobble", (1, 2)) == QSize(
74-
1, 2
75-
)
74+
assert from_napari_css_get_size_of("Flobble", (1, 2)) == QSize(1, 2)
7675

7776

7877
def test_fallback_if_prelude_not_in_css():

src/napari_matplotlib/util.py

Lines changed: 5 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -54,20 +54,15 @@ def _helper_text(self) -> str | None:
5454
if self.lower is None and self.upper is None:
5555
helper_text = None
5656
elif self.lower is not None and self.upper is None:
57-
helper_text = (
58-
f"Select at least {self.lower} layers to generate plot"
59-
)
57+
helper_text = f"Select at least {self.lower} layers to generate plot"
6058
elif self.lower is None and self.upper is not None:
61-
helper_text = (
62-
f"Select at most {self.upper} layers to generate plot"
63-
)
59+
helper_text = f"Select at most {self.upper} layers to generate plot"
6460
elif self.lower == self.upper:
6561
helper_text = f"Select {self.lower} layers to generate plot"
6662

6763
else:
6864
helper_text = (
69-
f"Select between {self.lower} and "
70-
f"{self.upper} layers to generate plot"
65+
f"Select between {self.lower} and {self.upper} layers to generate plot"
7166
)
7267

7368
if helper_text is not None:
@@ -80,9 +75,7 @@ def _has_id(nodes: list[tinycss2.ast.Node], id_name: str) -> bool:
8075
"""
8176
Is `id_name` in IdentTokens in the list of CSS `nodes`?
8277
"""
83-
return any(
84-
[node.type == "ident" and node.value == id_name for node in nodes]
85-
)
78+
return any([node.type == "ident" and node.value == id_name for node in nodes])
8679

8780

8881
def _get_dimension(nodes: list[tinycss2.ast.Node], id_name: str) -> int | None:
@@ -95,11 +88,7 @@ def _get_dimension(nodes: list[tinycss2.ast.Node], id_name: str) -> int | None:
9588
"""
9689
cleaned_nodes = [node for node in nodes if node.type != "whitespace"]
9790
for name, _, value, _ in zip(*(iter(cleaned_nodes),) * 4, strict=False):
98-
if (
99-
name.type == "ident"
100-
and value.type == "dimension"
101-
and name.value == id_name
102-
):
91+
if name.type == "ident" and value.type == "dimension" and name.value == id_name:
10392
return value.int_value
10493
warn(
10594
f"Unable to find DimensionToken for {id_name}",

0 commit comments

Comments
 (0)