Update ruff to latest version. NFC (#1751)
diff --git a/emsdk.py b/emsdk.py
index 4f3a4be..6afb1de 100644
--- a/emsdk.py
+++ b/emsdk.py
@@ -27,7 +27,7 @@
 from urllib.parse import urljoin
 from urllib.request import urlopen
 
-if sys.version_info < (3, 10):  # noqa: UP036
+if sys.version_info < (3, 10):  # ruff: ignore[outdated-version-block]
   print(f'error: emsdk requires python 3.10 or above ({sys.executable} {sys.version})', file=sys.stderr)
   sys.exit(1)
 
@@ -2928,7 +2928,7 @@
   return name
 
 
-def main(args):  # noqa: C901, PLR0911, PLR0912
+def main(args):  # ruff: ignore[complex-structure, too-many-return-statements, too-many-branches]
   if not args:
     errlog("Missing command; Type 'emsdk help' to get a list of commands.")
     return 1
diff --git a/pyproject.toml b/pyproject.toml
index 91cb738..3dc6610 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -30,41 +30,42 @@
 ]
 lint.external = [ "D" ]
 lint.ignore = [
-  "B011", # See https://github.com/PyCQA/flake8-bugbear/issues/66
-  "B023",
-  "B026",
-  "E402",
-  "E501",
-  "E721",
-  "E741",
-  "E111", # Does not seem to honor `indent-width = 2` above
-  "E114", # Does not seem to honor `indent-width = 2` above
-  "PERF203",
-  "PERF401",
-  "PLC0415",
-  "PLR0904",
-  "PLR0915",
-  "PLR0916",
-  "PLR1702",
-  "PLR1704",
-  "PLR5501",
-  "PLR6301",
-  "PLW0602",
-  "PLW0603",
-  "PLR0914",
-  "PLW1510",
-  "PLW1514",
-  "PLW2901",
-  "RUF039", # https://docs.astral.sh/ruff/rules/unraw-re-pattern/
-  "UP030", # TODO
-  "UP031", # TODO
-  "UP032", # TODO
+  "assert-false", # See https://github.com/PyCQA/flake8-bugbear/issues/66
+  "function-uses-loop-variable",
+  "star-arg-unpacking-after-keyword-arg",
+  "module-import-not-at-top-of-file",
+  "line-too-long",
+  "type-comparison",
+  "ambiguous-variable-name",
+  "indentation-with-invalid-multiple", # Does not seem to honor `indent-width = 2` above
+  "indentation-with-invalid-multiple-comment", # Does not seem to honor `indent-width = 2` above
+  "try-except-in-loop",
+  "manual-list-comprehension",
+  "import-outside-top-level",
+  "too-many-public-methods",
+  "too-many-statements",
+  "too-many-boolean-expressions",
+  "too-many-nested-blocks",
+  "redefined-argument-from-local",
+  "collapsible-else-if",
+  "no-self-use",
+  "global-variable-not-assigned",
+  "global-statement",
+  "too-many-locals",
+  "subprocess-run-without-check",
+  "unspecified-encoding",
+  "redefined-loop-name",
+  "unraw-re-pattern", # https://docs.astral.sh/ruff/rules/unraw-re-pattern/
+  "format-literals", # TODO
+  "printf-string-formatting", # TODO
+  "f-string", # TODO
+  "too-many-statements-in-try-clause",
 ]
-lint.per-file-ignores."emrun.py" = [ "PLE0704" ]
-lint.per-file-ignores."tools/ports/*.py" = [ "ARG001", "ARG005" ]
-lint.per-file-ignores."test/other/ports/*.py" = [ "ARG001" ]
-lint.per-file-ignores."test/parallel_testsuite.py" = [ "ARG002" ]
-lint.per-file-ignores."test/test_benchmark.py" = [ "ARG002" ]
+lint.per-file-ignores."emrun.py" = [ "misplaced-bare-raise" ]
+lint.per-file-ignores."tools/ports/*.py" = [ "unused-function-argument", "unused-lambda-argument" ]
+lint.per-file-ignores."test/other/ports/*.py" = [ "unused-function-argument" ]
+lint.per-file-ignores."test/parallel_testsuite.py" = [ "unused-method-argument" ]
+lint.per-file-ignores."test/test_benchmark.py" = [ "unused-method-argument" ]
 lint.mccabe.max-complexity = 51 # Recommended: 10
 lint.pylint.allow-magic-value-types = [
   "bytes",
diff --git a/requirements-dev.txt b/requirements-dev.txt
index 9eded73..b6a61f9 100644
--- a/requirements-dev.txt
+++ b/requirements-dev.txt
@@ -1,2 +1,2 @@
 flake8==7.1.1
-ruff==0.14.1
+ruff==0.16.0