future annotations in a few files, so it works fine on python 3.8 still
diff --git a/Allura/allura/lib/markdown_extensions.py b/Allura/allura/lib/markdown_extensions.py
index 9bcc7f8..b6d423d 100644
--- a/Allura/allura/lib/markdown_extensions.py
+++ b/Allura/allura/lib/markdown_extensions.py
@@ -15,6 +15,7 @@
# specific language governing permissions and limitations
# under the License.
+from __future__ import annotations
import re
import logging
from typing import List
diff --git a/Allura/allura/lib/plugin.py b/Allura/allura/lib/plugin.py
index 3bb389d..03b6d61 100644
--- a/Allura/allura/lib/plugin.py
+++ b/Allura/allura/lib/plugin.py
@@ -18,6 +18,7 @@
'''
Allura plugins for authentication and project registration
'''
+from __future__ import annotations
import re
import os
import logging
diff --git a/Allura/allura/lib/widgets/discuss.py b/Allura/allura/lib/widgets/discuss.py
index db5cf0a..feef86d 100644
--- a/Allura/allura/lib/widgets/discuss.py
+++ b/Allura/allura/lib/widgets/discuss.py
@@ -14,6 +14,7 @@
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
+from __future__ import annotations
from formencode import validators as fev
diff --git a/ruff.toml b/ruff.toml
index e1cf413..b2e7c55 100644
--- a/ruff.toml
+++ b/ruff.toml
@@ -31,6 +31,7 @@
"PGH", # https://github.com/pre-commit/pygrep-hooks
"T10", # debugger breakpoints
"T20", # print()
+ "FA", # future annotations (to ensure compatibility with `target-version`)
]
ignore = [