From c8744122f63698e6917fee2a870197f550cfd27a Mon Sep 17 00:00:00 2001 From: Florian Bruhin Date: Thu, 29 Jun 2023 21:55:45 +0200 Subject: qt6 mypy: Fix unused-ignores with mypy-pyqt5 --- .mypy.ini | 4 +--- qutebrowser/browser/browsertab.py | 8 ++++---- qutebrowser/browser/network/pac.py | 18 +++++++++++++----- qutebrowser/browser/webengine/interceptor.py | 4 ++-- qutebrowser/browser/webengine/notification.py | 2 +- qutebrowser/browser/webengine/webenginequtescheme.py | 2 +- qutebrowser/browser/webengine/webenginetab.py | 14 +++++++++----- qutebrowser/mainwindow/prompt.py | 2 +- qutebrowser/mainwindow/tabbedbrowser.py | 3 ++- qutebrowser/misc/crashdialog.py | 2 +- qutebrowser/misc/httpclient.py | 3 ++- qutebrowser/utils/debug.py | 2 +- qutebrowser/utils/qtutils.py | 11 ++++++----- qutebrowser/utils/urlutils.py | 15 +++++++++++++-- qutebrowser/utils/version.py | 8 +++++--- 15 files changed, 62 insertions(+), 36 deletions(-) diff --git a/.mypy.ini b/.mypy.ini index 3e83460f0..e0bff335f 100644 --- a/.mypy.ini +++ b/.mypy.ini @@ -11,9 +11,7 @@ disallow_incomplete_defs = True check_untyped_defs = True disallow_untyped_decorators = True warn_redundant_casts = True -## can't use warn_unused_ignores because of different Qt5/Qt6 ignores. -## FIXME:v4 (lint) reenable when dropping Qt 5 -# warn_unused_ignores = True +warn_unused_ignores = True # warn_return_any = True # no_implicit_reexport = True strict_equality = True diff --git a/qutebrowser/browser/browsertab.py b/qutebrowser/browser/browsertab.py index eae58f7ed..9692be483 100644 --- a/qutebrowser/browser/browsertab.py +++ b/qutebrowser/browser/browsertab.py @@ -1073,7 +1073,7 @@ class AbstractTab(QWidget): # FIXME:v4 ignore needed for QtWebKit self.data.splitter = miscwidgets.InspectorSplitter( win_id=self.win_id, - main_webview=widget, # type: ignore[arg-type] + main_webview=widget, # type: ignore[arg-type,unused-ignore] ) self._layout.wrap(self, self.data.splitter) self.history._history = widget.history() @@ -1182,7 +1182,7 @@ class AbstractTab(QWidget): def _on_load_finished(self, ok: bool) -> None: assert self._widget is not None # FIXME:mypy PyQt6-stubs issue? - if sip.isdeleted(self._widget): # type: ignore[arg-type] + if sip.isdeleted(self._widget): # https://github.com/qutebrowser/qutebrowser/issues/3498 return @@ -1318,7 +1318,7 @@ class AbstractTab(QWidget): else: qtutils.ensure_valid(rect) # FIXME:v4 ignore needed for QtWebKit - pic = self._widget.grab(rect) # type: ignore[arg-type] + pic = self._widget.grab(rect) # type: ignore[arg-type,unused-ignore] if pic.isNull(): return None @@ -1343,4 +1343,4 @@ class AbstractTab(QWidget): def is_deleted(self) -> bool: assert self._widget is not None # FIXME:mypy PyQt6-stubs issue? - return sip.isdeleted(self._widget) # type: ignore[arg-type] + return sip.isdeleted(self._widget) diff --git a/qutebrowser/browser/network/pac.py b/qutebrowser/browser/network/pac.py index c372c6eea..8a67850f5 100644 --- a/qutebrowser/browser/network/pac.py +++ b/qutebrowser/browser/network/pac.py @@ -21,15 +21,16 @@ import sys import functools -from typing import Optional +from typing import Optional, cast +from qutebrowser.qt import machinery from qutebrowser.qt.core import QObject, pyqtSignal, pyqtSlot, QUrl from qutebrowser.qt.network import (QNetworkProxy, QNetworkRequest, QHostInfo, QNetworkReply, QNetworkAccessManager, QHostAddress) from qutebrowser.qt.qml import QJSEngine, QJSValue -from qutebrowser.utils import log, utils, qtutils, resources +from qutebrowser.utils import log, utils, qtutils, resources, urlutils class ParseProxyError(Exception): @@ -214,13 +215,20 @@ class PACResolver: """ qtutils.ensure_valid(query.url()) + string_flags: urlutils.URL_FLAGS_T if from_file: string_flags = QUrl.ComponentFormattingOption.PrettyDecoded else: - string_flags = QUrl.UrlFormattingOption.RemoveUserInfo # type: ignore[assignment] + string_flags = QUrl.UrlFormattingOption.RemoveUserInfo if query.url().scheme() == 'https': - string_flags |= QUrl.UrlFormattingOption.RemovePath # type: ignore[assignment] - string_flags |= QUrl.UrlFormattingOption.RemoveQuery # type: ignore[assignment] + https_opts = ( + QUrl.UrlFormattingOption.RemovePath | + QUrl.UrlFormattingOption.RemoveQuery) + + if machinery.IS_QT5: + string_flags |= cast(QUrl.UrlFormattingOption, https_opts) + else: + string_flags |= https_opts result = self._resolver.call([query.url().toString(string_flags), query.peerHostName()]) diff --git a/qutebrowser/browser/webengine/interceptor.py b/qutebrowser/browser/webengine/interceptor.py index 5781a281d..651b08061 100644 --- a/qutebrowser/browser/webengine/interceptor.py +++ b/qutebrowser/browser/webengine/interceptor.py @@ -36,8 +36,8 @@ class WebEngineRequest(interceptors.Request): _WHITELISTED_REQUEST_METHODS = { # FIXME:mypy PyQt6-stubs issue? - QByteArray(b'GET'), # type: ignore[call-overload] - QByteArray(b'HEAD'), # type: ignore[call-overload] + QByteArray(b'GET'), # type: ignore[call-overload,unused-ignore] + QByteArray(b'HEAD'), # type: ignore[call-overload,unused-ignore] } def __init__(self, *args, webengine_info, **kwargs): diff --git a/qutebrowser/browser/webengine/notification.py b/qutebrowser/browser/webengine/notification.py index ba00b066b..1c608812e 100644 --- a/qutebrowser/browser/webengine/notification.py +++ b/qutebrowser/browser/webengine/notification.py @@ -1112,7 +1112,7 @@ class DBusNotificationAdapter(AbstractNotificationAdapter): bits = qimage.constBits().asstring(size) # FIXME:mypy PyQt6-stubs issue - image_data.add(QByteArray(bits)) # type: ignore[call-overload] + image_data.add(QByteArray(bits)) # type: ignore[call-overload,unused-ignore] image_data.endStructure() return image_data diff --git a/qutebrowser/browser/webengine/webenginequtescheme.py b/qutebrowser/browser/webengine/webenginequtescheme.py index fd21408b6..205380484 100644 --- a/qutebrowser/browser/webengine/webenginequtescheme.py +++ b/qutebrowser/browser/webengine/webenginequtescheme.py @@ -28,7 +28,7 @@ from qutebrowser.browser import qutescheme from qutebrowser.utils import log, qtutils # FIXME:mypy PyQt6-stubs issue? -_QUTE = QByteArray(b'qute') # type: ignore[call-overload] +_QUTE = QByteArray(b'qute') # type: ignore[call-overload,unused-ignore] class QuteSchemeHandler(QWebEngineUrlSchemeHandler): diff --git a/qutebrowser/browser/webengine/webenginetab.py b/qutebrowser/browser/webengine/webenginetab.py index a1d3af6ea..23dfcdb58 100644 --- a/qutebrowser/browser/webengine/webenginetab.py +++ b/qutebrowser/browser/webengine/webenginetab.py @@ -106,6 +106,12 @@ class WebEnginePrinting(browsertab.AbstractPrinting): self._widget.print(printer) +if machinery.IS_QT5: + _FIND_FLAG_T = Union[QWebEnginePage.FindFlag, QWebEnginePage.FindFlags] +else: + _FIND_FLAG_T = QWebEnginePage.FindFlag + + @dataclasses.dataclass class _FindFlags: @@ -114,13 +120,11 @@ class _FindFlags: def to_qt(self): """Convert flags into Qt flags.""" - # FIXME:mypy Those should be correct, reevaluate with PyQt6-stubs - flags = QWebEnginePage.FindFlag(0) + flags: _FIND_FLAG_T = QWebEnginePage.FindFlag(0) if self.case_sensitive: - flags |= ( # type: ignore[assignment] - QWebEnginePage.FindFlag.FindCaseSensitively) + flags |= QWebEnginePage.FindFlag.FindCaseSensitively if self.backward: - flags |= QWebEnginePage.FindFlag.FindBackward # type: ignore[assignment] + flags |= QWebEnginePage.FindFlag.FindBackward return flags def __bool__(self): diff --git a/qutebrowser/mainwindow/prompt.py b/qutebrowser/mainwindow/prompt.py index c1ad82990..90e0d21c6 100644 --- a/qutebrowser/mainwindow/prompt.py +++ b/qutebrowser/mainwindow/prompt.py @@ -189,7 +189,7 @@ class PromptQueue(QObject): question.completed.connect(loop.deleteLater) log.prompt.debug("Starting loop.exec() for {}".format(question)) flags = QEventLoop.ProcessEventsFlag.ExcludeSocketNotifiers - loop.exec(flags) # type: ignore[arg-type] + loop.exec(flags) log.prompt.debug("Ending loop.exec() for {}".format(question)) log.prompt.debug("Restoring old question {}".format(old_question)) diff --git a/qutebrowser/mainwindow/tabbedbrowser.py b/qutebrowser/mainwindow/tabbedbrowser.py index df79752ea..dbaffa2bf 100644 --- a/qutebrowser/mainwindow/tabbedbrowser.py +++ b/qutebrowser/mainwindow/tabbedbrowser.py @@ -221,7 +221,8 @@ class TabbedBrowser(QWidget): self._tab_insert_idx_right = -1 self.is_shutting_down = False self.widget.tabCloseRequested.connect(self.on_tab_close_requested) - self.widget.new_tab_requested.connect(self.tabopen) # type: ignore[arg-type] + self.widget.new_tab_requested.connect( # type: ignore[arg-type,unused-ignore] + self.tabopen) self.widget.currentChanged.connect(self._on_current_changed) self.cur_fullscreen_requested.connect(self.widget.tab_bar().maybe_hide) diff --git a/qutebrowser/misc/crashdialog.py b/qutebrowser/misc/crashdialog.py index 1d709c0e4..81085f6a4 100644 --- a/qutebrowser/misc/crashdialog.py +++ b/qutebrowser/misc/crashdialog.py @@ -634,7 +634,7 @@ class ReportErrorDialog(QDialog): hbox.addStretch() btn = QPushButton("Close") # FIXME:mypy PyQt6-stubs issue - btn.clicked.connect(self.close) # type: ignore[arg-type] + btn.clicked.connect(self.close) # type: ignore[arg-type,unused-ignore] hbox.addWidget(btn) vbox.addLayout(hbox) diff --git a/qutebrowser/misc/httpclient.py b/qutebrowser/misc/httpclient.py index 23943c27c..269c73c81 100644 --- a/qutebrowser/misc/httpclient.py +++ b/qutebrowser/misc/httpclient.py @@ -81,7 +81,8 @@ class HTTPClient(QObject): request.setHeader(QNetworkRequest.KnownHeaders.ContentTypeHeader, 'application/x-www-form-urlencoded;charset=utf-8') # FIXME:mypy PyQt6-stubs issue - reply = self._nam.post(request, encoded_data) # type: ignore[call-overload] + reply = self._nam.post( # type: ignore[call-overload,unused-ignore] + request, encoded_data) self._handle_reply(reply) def get(self, url): diff --git a/qutebrowser/utils/debug.py b/qutebrowser/utils/debug.py index 15796c5d2..654062d70 100644 --- a/qutebrowser/utils/debug.py +++ b/qutebrowser/utils/debug.py @@ -227,7 +227,7 @@ def qflags_key(base: Type[sip.simplewrapper], for bit in bits: # We have to re-convert to an enum type here or we'll sometimes get an # empty string back. - enum_value = klass(bit) # type: ignore[call-arg] + enum_value = klass(bit) # type: ignore[call-arg,unused-ignore] names.append(qenum_key(base, enum_value, klass)) return '|'.join(names) diff --git a/qutebrowser/utils/qtutils.py b/qutebrowser/utils/qtutils.py index d5c0dd12f..89e4140c2 100644 --- a/qutebrowser/utils/qtutils.py +++ b/qutebrowser/utils/qtutils.py @@ -459,7 +459,8 @@ class QtValueError(ValueError): if machinery.IS_QT6: _ProcessEventFlagType = QEventLoop.ProcessEventsFlag else: - _ProcessEventFlagType = QEventLoop.ProcessEventsFlags + _ProcessEventFlagType = Union[ + QEventLoop.ProcessEventsFlag, QEventLoop.ProcessEventsFlags] class EventLoop(QEventLoop): @@ -474,15 +475,15 @@ class EventLoop(QEventLoop): self._executing = False def exec( - self, - flags: _ProcessEventFlagType = ( - QEventLoop.ProcessEventsFlag.AllEvents # type: ignore[assignment] - ), + self, + flags: _ProcessEventFlagType = QEventLoop.ProcessEventsFlag.AllEvents, ) -> int: """Override exec_ to raise an exception when re-running.""" if self._executing: raise AssertionError("Eventloop is already running!") self._executing = True + if machinery.IS_QT5: + flags = cast(QEventLoop.ProcessEventsFlags, flags) status = super().exec(flags) self._executing = False return status diff --git a/qutebrowser/utils/urlutils.py b/qutebrowser/utils/urlutils.py index 866d0a662..5e8fbebe5 100644 --- a/qutebrowser/utils/urlutils.py +++ b/qutebrowser/utils/urlutils.py @@ -42,6 +42,17 @@ from qutebrowser.browser.network import pac # https://github.com/qutebrowser/qutebrowser/issues/108 +if machinery.IS_QT6: + URL_FLAGS_T = Union[QUrl.UrlFormattingOption, QUrl.ComponentFormattingOption] +else: + URL_FLAGS_T = Union[ + QUrl.FormattingOptions, + QUrl.UrlFormattingOption, + QUrl.ComponentFormattingOption, + QUrl.ComponentFormattingOptions, + ] + + # URL schemes supported by QtWebEngine WEBENGINE_SCHEMES = [ 'about', @@ -508,8 +519,8 @@ def same_domain(url1: QUrl, url2: QUrl) -> bool: # we use a NetworkManager from QtWebKit. However, QtWebKit is Qt 5 only. assert machinery.IS_QT6, machinery.INFO - suffix1 = url1.topLevelDomain() # type: ignore[attr-defined] - suffix2 = url2.topLevelDomain() # type: ignore[attr-defined] + suffix1 = url1.topLevelDomain() # type: ignore[attr-defined,unused-ignore] + suffix2 = url2.topLevelDomain() # type: ignore[attr-defined,unused-ignore] if not suffix1: return url1.host() == url2.host() diff --git a/qutebrowser/utils/version.py b/qutebrowser/utils/version.py index ebe361390..727028759 100644 --- a/qutebrowser/utils/version.py +++ b/qutebrowser/utils/version.py @@ -1045,13 +1045,15 @@ def opengl_info() -> Optional[OpenGLInfo]: # pragma: no cover return None if vf is None: - log.init.debug( # type: ignore[unreachable] + log.init.debug( # type: ignore[unreachable,unused-ignore] "Getting version functions failed!") return None # FIXME:mypy PyQt6-stubs issue? - vendor = vf.glGetString(vf.GL_VENDOR) # type: ignore[attr-defined] - version = vf.glGetString(vf.GL_VERSION) # type: ignore[attr-defined] + vendor = vf.glGetString( + vf.GL_VENDOR) # type: ignore[attr-defined,unused-ignore] + version = vf.glGetString( + vf.GL_VERSION) # type: ignore[attr-defined,unused-ignore] return OpenGLInfo.parse(vendor=vendor, version=version) finally: -- cgit v1.2.3-54-g00ecf