Bump pylint to 3.1.0, update changelog

Co-authored-by: Jacob Walls <jacobtylerwalls@gmail.com>
diff --git a/doc/whatsnew/3/3.1/index.rst b/doc/whatsnew/3/3.1/index.rst
index 37ddab5..2580c73 100644
--- a/doc/whatsnew/3/3.1/index.rst
+++ b/doc/whatsnew/3/3.1/index.rst
@@ -7,10 +7,116 @@
    :maxdepth: 2
 
 :Release:3.1
-:Date: TBA
+:Date: 2024-02-25
 
 Summary -- Release highlights
 =============================
 
+Two new checks--``use-yield-from``, ``deprecated-attribute``--
+and a smattering of bug fixes.
 
 .. towncrier release notes start
+
+What's new in Pylint 3.1.0?
+---------------------------
+Release date: 2024-02-25
+
+
+New Features
+------------
+
+- Skip ``consider-using-join`` check for non-empty separators if an ``suggest-join-with-non-empty-separator`` option is set to ``no``.
+
+  Closes #8701 (`#8701 <https://github.com/pylint-dev/pylint/issues/8701>`_)
+
+- Discover ``.pyi`` files when linting.
+
+  These can be ignored with the ``ignore-patterns`` setting.
+
+  Closes #9097 (`#9097 <https://github.com/pylint-dev/pylint/issues/9097>`_)
+
+- Check ``TypeAlias`` and ``TypeVar`` (PEP 695) nodes for ``invalid-name``.
+
+  Refs #9196 (`#9196 <https://github.com/pylint-dev/pylint/issues/9196>`_)
+
+- Support for resolving external toml files named pylintrc.toml and .pylintrc.toml.
+
+  Closes #9228 (`#9228 <https://github.com/pylint-dev/pylint/issues/9228>`_)
+
+- Check for `.clear`, `.discard`, `.pop` and `remove` methods being called on a set while it is being iterated over.
+
+  Closes #9334 (`#9334 <https://github.com/pylint-dev/pylint/issues/9334>`_)
+
+
+
+New Checks
+----------
+
+- New message `use-yield-from` added to the refactoring checker. This message is emitted when yielding from a loop can be replaced by `yield from`.
+
+  Closes #9229. (`#9229 <https://github.com/pylint-dev/pylint/issues/9229>`_)
+
+- Added a ``deprecated-attribute`` message to check deprecated attributes in the stdlib.
+
+  Closes #8855 (`#8855 <https://github.com/pylint-dev/pylint/issues/8855>`_)
+
+
+False Positives Fixed
+---------------------
+
+- Fixed false positive for ``inherit-non-class`` for generic Protocols.
+
+  Closes #9106 (`#9106 <https://github.com/pylint-dev/pylint/issues/9106>`_)
+
+- Exempt ``TypedDict`` from ``typing_extensions`` from ``too-many-ancestor`` checks.
+
+  Refs #9167 (`#9167 <https://github.com/pylint-dev/pylint/issues/9167>`_)
+
+
+
+False Negatives Fixed
+---------------------
+
+- Extend broad-exception-raised and broad-exception-caught to except*.
+
+  Closes #8827 (`#8827 <https://github.com/pylint-dev/pylint/issues/8827>`_)
+
+- Fix a false-negative for unnecessary if blocks using a different than expected ordering of arguments.
+
+  Closes #8947. (`#8947 <https://github.com/pylint-dev/pylint/issues/8947>`_)
+
+
+
+Other Bug Fixes
+---------------
+
+- Improve the message provided for wrong-import-order check.  Instead of the import statement ("import x"), the message now specifies the import that is out of order and which imports should come after it.  As reported in the issue, this is particularly helpful if there are multiple imports on a single line that do not follow the PEP8 convention.
+
+  The message will report imports as follows:
+  For "import X", it will report "(standard/third party/first party/local) import X"
+  For "import X.Y" and "from X import Y", it will report "(standard/third party/first party/local) import X.Y"
+  The import category is specified to provide explanation as to why pylint has issued the message and guidence to the developer on how to fix the problem.
+
+  Closes #8808 (`#8808 <https://github.com/pylint-dev/pylint/issues/8808>`_)
+
+
+
+Other Changes
+-------------
+
+- Print how many files were checked in verbose mode.
+
+  Closes #8935 (`#8935 <https://github.com/pylint-dev/pylint/issues/8935>`_)
+
+- Fix a crash when an enum class which is also decorated with a ``dataclasses.dataclass`` decorator is defined.
+
+  Closes #9100 (`#9100 <https://github.com/pylint-dev/pylint/issues/9100>`_)
+
+
+
+Internal Changes
+----------------
+
+- Update astroid version to 3.1.0.
+
+  Refs #9457 (`#9457 <https://github.com/pylint-dev/pylint/issues/9457>`_)
diff --git a/doc/whatsnew/fragments/8701.feature b/doc/whatsnew/fragments/8701.feature
deleted file mode 100644
index 4a9781a..0000000
--- a/doc/whatsnew/fragments/8701.feature
+++ /dev/null
@@ -1,3 +0,0 @@
-Skip ``consider-using-join`` check for non-empty separators if an ``suggest-join-with-non-empty-separator`` option is set to ``no``.
-
-Closes #8701
diff --git a/doc/whatsnew/fragments/8808.bugfix b/doc/whatsnew/fragments/8808.bugfix
deleted file mode 100644
index a26d735..0000000
--- a/doc/whatsnew/fragments/8808.bugfix
+++ /dev/null
@@ -1,8 +0,0 @@
-Improve the message provided for wrong-import-order check.  Instead of the import statement ("import x"), the message now specifies the import that is out of order and which imports should come after it.  As reported in the issue, this is particularly helpful if there are multiple imports on a single line that do not follow the PEP8 convention.
-
-The message will report imports as follows:
-For "import X", it will report "(standard/third party/first party/local) import X"
-For "import X.Y" and "from X import Y", it will report "(standard/third party/first party/local) import X.Y"
-The import category is specified to provide explanation as to why pylint has issued the message and guidence to the developer on how to fix the problem.
-
-Closes #8808
diff --git a/doc/whatsnew/fragments/8827.false_negative b/doc/whatsnew/fragments/8827.false_negative
deleted file mode 100644
index 42b84e7..0000000
--- a/doc/whatsnew/fragments/8827.false_negative
+++ /dev/null
@@ -1,3 +0,0 @@
-Extend broad-exception-raised and broad-exception-caught to except*.
-
-Closes #8827
diff --git a/doc/whatsnew/fragments/8855.new_check b/doc/whatsnew/fragments/8855.new_check
deleted file mode 100644
index 43eca39..0000000
--- a/doc/whatsnew/fragments/8855.new_check
+++ /dev/null
@@ -1,3 +0,0 @@
-Added a ``deprecated-attribute`` message to check deprecated attributes in the stdlib.
-
-Closes #8855
diff --git a/doc/whatsnew/fragments/8935.other b/doc/whatsnew/fragments/8935.other
deleted file mode 100644
index f105c8e..0000000
--- a/doc/whatsnew/fragments/8935.other
+++ /dev/null
@@ -1,3 +0,0 @@
-Print how many files were checked in verbose mode.
-
-Closes #8935
diff --git a/doc/whatsnew/fragments/8947.false_negative b/doc/whatsnew/fragments/8947.false_negative
deleted file mode 100644
index 7ecacfa..0000000
--- a/doc/whatsnew/fragments/8947.false_negative
+++ /dev/null
@@ -1,3 +0,0 @@
-Fix a false-negative for unnecessary if blocks using a different than expected ordering of arguments.
-
-Closes #8947.
diff --git a/doc/whatsnew/fragments/9097.feature b/doc/whatsnew/fragments/9097.feature
deleted file mode 100644
index 51874b3..0000000
--- a/doc/whatsnew/fragments/9097.feature
+++ /dev/null
@@ -1,5 +0,0 @@
-Discover ``.pyi`` files when linting.
-
-These can be ignored with the ``ignore-patterns`` setting.
-
-Closes #9097
diff --git a/doc/whatsnew/fragments/9100.other b/doc/whatsnew/fragments/9100.other
deleted file mode 100644
index 75e1917..0000000
--- a/doc/whatsnew/fragments/9100.other
+++ /dev/null
@@ -1,3 +0,0 @@
-Fix a crash when an enum class which is also decorated with a ``dataclasses.dataclass`` decorator is defined.
-
-Closes #9100
diff --git a/doc/whatsnew/fragments/9106.false_positive b/doc/whatsnew/fragments/9106.false_positive
deleted file mode 100644
index 58edbc0..0000000
--- a/doc/whatsnew/fragments/9106.false_positive
+++ /dev/null
@@ -1,3 +0,0 @@
-Fixed false positive for ``inherit-non-class`` for generic Protocols.
-
-Closes #9106
diff --git a/doc/whatsnew/fragments/9167.false_positive b/doc/whatsnew/fragments/9167.false_positive
deleted file mode 100644
index 58701e6..0000000
--- a/doc/whatsnew/fragments/9167.false_positive
+++ /dev/null
@@ -1,3 +0,0 @@
-Exempt ``TypedDict`` from ``typing_extensions`` from ``too-many-ancestor`` checks.
-
-Refs #9167
diff --git a/doc/whatsnew/fragments/9196.feature b/doc/whatsnew/fragments/9196.feature
deleted file mode 100644
index df1a560..0000000
--- a/doc/whatsnew/fragments/9196.feature
+++ /dev/null
@@ -1,3 +0,0 @@
-Check ``TypeAlias`` and ``TypeVar`` (PEP 695) nodes for ``invalid-name``.
-
-Refs #9196
diff --git a/doc/whatsnew/fragments/9228.feature b/doc/whatsnew/fragments/9228.feature
deleted file mode 100644
index e7b9840..0000000
--- a/doc/whatsnew/fragments/9228.feature
+++ /dev/null
@@ -1,3 +0,0 @@
-Support for resolving external toml files named pylintrc.toml and .pylintrc.toml.
-
-Closes #9228
diff --git a/doc/whatsnew/fragments/9229.feature b/doc/whatsnew/fragments/9229.feature
deleted file mode 100644
index 22d059e..0000000
--- a/doc/whatsnew/fragments/9229.feature
+++ /dev/null
@@ -1,3 +0,0 @@
-New message `use-yield-from` added to the refactoring checker. This message is emitted when yielding from a loop can be replaced by `yield from`.
-
-Closes #9229.
diff --git a/doc/whatsnew/fragments/9334.feature b/doc/whatsnew/fragments/9334.feature
deleted file mode 100644
index ec4b62a..0000000
--- a/doc/whatsnew/fragments/9334.feature
+++ /dev/null
@@ -1,3 +0,0 @@
-Check for `.clear`, `.discard`, `.pop` and `remove` methods being called on a set while it is being iterated over.
-
-Closes #9334
diff --git a/doc/whatsnew/fragments/9457.internal b/doc/whatsnew/fragments/9457.internal
deleted file mode 100644
index 504ee2b..0000000
--- a/doc/whatsnew/fragments/9457.internal
+++ /dev/null
@@ -1,3 +0,0 @@
-Update astroid version to 3.1.0.
-
-Refs #9457
diff --git a/examples/pylintrc b/examples/pylintrc
index 5ca3f45..d478005 100644
--- a/examples/pylintrc
+++ b/examples/pylintrc
@@ -468,6 +468,11 @@
 # printed.
 never-returning-functions=sys.exit,argparse.parse_error
 
+# Let 'consider-using-join' be raised when the separator to join on would be
+# non-empty (resulting in expected fixes of the type: ``"- " + " -
+# ".join(items)``)
+suggest-join-with-non-empty-separator=yes
+
 
 [REPORTS]
 
diff --git a/examples/pyproject.toml b/examples/pyproject.toml
index 2a518ea..a8ec9a7 100644
--- a/examples/pyproject.toml
+++ b/examples/pyproject.toml
@@ -394,6 +394,10 @@
 # considered as an explicit return statement and no message will be printed.
 never-returning-functions = ["sys.exit", "argparse.parse_error"]
 
+# Let 'consider-using-join' be raised when the separator to join on would be non-
+# empty (resulting in expected fixes of the type: ``"- " + " - ".join(items)``)
+suggest-join-with-non-empty-separator = true
+
 [tool.pylint.reports]
 # Python expression which should return a score less than or equal to 10. You
 # have access to the variables 'fatal', 'error', 'warning', 'refactor',
diff --git a/pylint/__pkginfo__.py b/pylint/__pkginfo__.py
index 9db81fb..06884a7 100644
--- a/pylint/__pkginfo__.py
+++ b/pylint/__pkginfo__.py
@@ -9,7 +9,7 @@
 
 from __future__ import annotations
 
-__version__ = "3.1.0-dev0"
+__version__ = "3.1.0"
 
 
 def get_numversion_from_version(v: str) -> tuple[int, int, int]:
diff --git a/tbump.toml b/tbump.toml
index 3c747af..a12e0ef 100644
--- a/tbump.toml
+++ b/tbump.toml
@@ -1,7 +1,7 @@
 github_url = "https://github.com/pylint-dev/pylint"
 
 [version]
-current = "3.1.0-dev0"
+current = "3.1.0"
 regex = '''
 ^(?P<major>0|[1-9]\d*)
 \.