diff --git a/.flake8 b/.flake8
deleted file mode 100644
index 2b7958b8..00000000
--- a/.flake8
+++ /dev/null
@@ -1,4 +0,0 @@
-[flake8]
-import-order-style = pep8
-application-import-names = yamllint
-ignore = W503,W504
diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml
index 780831e9..506d610d 100644
--- a/.github/workflows/ci.yaml
+++ b/.github/workflows/ci.yaml
@@ -21,9 +21,9 @@ jobs:
- name: Set up Python
uses: actions/setup-python@v5
- run:
- pip install flake8 flake8-import-order sphinx rstcheck[sphinx] doc8
+ pip install ruff sphinx rstcheck[sphinx] doc8
- run: pip install .
- - run: flake8 .
+ - run: ruff .
- run: doc8 $(git ls-files '*.rst')
- run: rstcheck --ignore-directives automodule $(git ls-files '*.rst')
- run: yamllint --strict $(git ls-files '*.yaml' '*.yml')
diff --git a/.ruff.toml b/.ruff.toml
new file mode 100644
index 00000000..943ec041
--- /dev/null
+++ b/.ruff.toml
@@ -0,0 +1,5 @@
+[lint]
+extend-select = ["I"]
+
+[lint.isort]
+known-third-party = ["tests"]
diff --git a/CONTRIBUTING.rst b/CONTRIBUTING.rst
index 312c6d88..a1fde07b 100644
--- a/CONTRIBUTING.rst
+++ b/CONTRIBUTING.rst
@@ -23,7 +23,7 @@ Pull Request Process
.. code:: bash
- flake8 .
+ ruff .
If you added/modified documentation:
diff --git a/docs/conf.py b/docs/conf.py
index 2c40177c..98cc2c40 100644
--- a/docs/conf.py
+++ b/docs/conf.py
@@ -1,8 +1,8 @@
# yamllint documentation build configuration file, created by
# sphinx-quickstart on Thu Jan 21 21:18:52 2016.
-import sys
import os
+import sys
from unittest.mock import MagicMock
sys.path.insert(0, os.path.abspath('..'))
diff --git a/pyproject.toml b/pyproject.toml
index 63746f63..5fd24df5 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -26,9 +26,8 @@ dynamic = ["version"]
[project.optional-dependencies]
dev = [
"doc8",
- "flake8",
- "flake8-import-order",
"rstcheck[sphinx]",
+ "ruff",
"sphinx",
]
diff --git a/tests/__init__.py b/tests/__init__.py
index da1cd75d..d8c46fc3 100644
--- a/tests/__init__.py
+++ b/tests/__init__.py
@@ -15,5 +15,4 @@
import locale
-
locale.setlocale(locale.LC_ALL, 'C')
diff --git a/tests/common.py b/tests/common.py
index 640be53b..1aef9e62 100644
--- a/tests/common.py
+++ b/tests/common.py
@@ -21,8 +21,8 @@
import yaml
-from yamllint.config import YamlLintConfig
from yamllint import linter
+from yamllint.config import YamlLintConfig
class RuleTestCase(unittest.TestCase):
diff --git a/tests/rules/test_indentation.py b/tests/rules/test_indentation.py
index ad1aeaff..3e929bf2 100644
--- a/tests/rules/test_indentation.py
+++ b/tests/rules/test_indentation.py
@@ -15,7 +15,7 @@
from tests.common import RuleTestCase
-from yamllint.parser import token_or_comment_generator, Comment
+from yamllint.parser import Comment, token_or_comment_generator
from yamllint.rules.indentation import check
diff --git a/tests/test_cli.py b/tests/test_cli.py
index f8493fe2..bcdd000b 100644
--- a/tests/test_cli.py
+++ b/tests/test_cli.py
@@ -13,7 +13,6 @@
# You should have received a copy of the GNU General Public License
# along with this program. If not, see .
-from io import StringIO
import fcntl
import locale
import os
@@ -22,11 +21,11 @@
import sys
import tempfile
import unittest
+from io import StringIO
from tests.common import build_temp_workspace, temp_workspace
-from yamllint import cli
-from yamllint import config
+from yamllint import cli, config
class RunContext:
diff --git a/tests/test_config.py b/tests/test_config.py
index 13d7ab3b..73f7c01e 100644
--- a/tests/test_config.py
+++ b/tests/test_config.py
@@ -13,18 +13,17 @@
# You should have received a copy of the GNU General Public License
# along with this program. If not, see .
-from io import StringIO
import os
import shutil
import sys
import tempfile
import unittest
+from io import StringIO
from tests.common import build_temp_workspace
+from yamllint import cli, config
from yamllint.config import YamlLintConfigError
-from yamllint import cli
-from yamllint import config
class SimpleConfigTestCase(unittest.TestCase):
diff --git a/tests/test_linter.py b/tests/test_linter.py
index 9855120b..ea509d8a 100644
--- a/tests/test_linter.py
+++ b/tests/test_linter.py
@@ -16,8 +16,8 @@
import io
import unittest
-from yamllint.config import YamlLintConfig
from yamllint import linter
+from yamllint.config import YamlLintConfig
class LinterTestCase(unittest.TestCase):
diff --git a/tests/test_module.py b/tests/test_module.py
index 299e153d..7f4f62ba 100644
--- a/tests/test_module.py
+++ b/tests/test_module.py
@@ -16,11 +16,10 @@
import os
import shutil
import subprocess
-import tempfile
import sys
+import tempfile
import unittest
-
PYTHON = sys.executable or 'python'
diff --git a/tests/test_parser.py b/tests/test_parser.py
index dbeb36b4..c2b598ac 100644
--- a/tests/test_parser.py
+++ b/tests/test_parser.py
@@ -17,9 +17,14 @@
import yaml
-from yamllint.parser import (line_generator, token_or_comment_generator,
- token_or_comment_or_line_generator,
- Line, Token, Comment)
+from yamllint.parser import (
+ Comment,
+ Line,
+ Token,
+ line_generator,
+ token_or_comment_generator,
+ token_or_comment_or_line_generator,
+)
class ParserTestCase(unittest.TestCase):
diff --git a/tests/test_spec_examples.py b/tests/test_spec_examples.py
index ac68e12e..eb1582ef 100644
--- a/tests/test_spec_examples.py
+++ b/tests/test_spec_examples.py
@@ -17,7 +17,6 @@
from tests.common import RuleTestCase
-
# This file checks examples from YAML 1.2 specification [1] against yamllint.
#
# [1]: http://www.yaml.org/spec/1.2/spec.html
diff --git a/yamllint/cli.py b/yamllint/cli.py
index dadce781..1050d95d 100644
--- a/yamllint/cli.py
+++ b/yamllint/cli.py
@@ -19,8 +19,7 @@
import platform
import sys
-from yamllint import APP_DESCRIPTION, APP_NAME, APP_VERSION
-from yamllint import linter
+from yamllint import APP_DESCRIPTION, APP_NAME, APP_VERSION, linter
from yamllint.config import YamlLintConfig, YamlLintConfigError
from yamllint.linter import PROBLEM_LEVELS
diff --git a/yamllint/linter.py b/yamllint/linter.py
index 0de1f716..a2faa061 100644
--- a/yamllint/linter.py
+++ b/yamllint/linter.py
@@ -13,14 +13,13 @@
# You should have received a copy of the GNU General Public License
# along with this program. If not, see .
-import re
import io
+import re
import yaml
from yamllint import parser
-
PROBLEM_LEVELS = {
0: None,
1: 'warning',
diff --git a/yamllint/rules/__init__.py b/yamllint/rules/__init__.py
index 606b37a4..815d4bcf 100644
--- a/yamllint/rules/__init__.py
+++ b/yamllint/rules/__init__.py
@@ -25,6 +25,7 @@
document_start,
empty_lines,
empty_values,
+ float_values,
hyphens,
indentation,
key_duplicates,
@@ -33,7 +34,6 @@
new_line_at_end_of_file,
new_lines,
octal_values,
- float_values,
quoted_strings,
trailing_spaces,
truthy,
diff --git a/yamllint/rules/anchors.py b/yamllint/rules/anchors.py
index 343f38b7..d968461f 100644
--- a/yamllint/rules/anchors.py
+++ b/yamllint/rules/anchors.py
@@ -108,7 +108,6 @@
from yamllint.linter import LintProblem
-
ID = 'anchors'
TYPE = 'token'
CONF = {'forbid-undeclared-aliases': bool,
diff --git a/yamllint/rules/braces.py b/yamllint/rules/braces.py
index e77cda44..19f870a1 100644
--- a/yamllint/rules/braces.py
+++ b/yamllint/rules/braces.py
@@ -137,7 +137,6 @@
from yamllint.linter import LintProblem
from yamllint.rules.common import spaces_after, spaces_before
-
ID = 'braces'
TYPE = 'token'
CONF = {'forbid': (bool, 'non-empty'),
diff --git a/yamllint/rules/brackets.py b/yamllint/rules/brackets.py
index 47d2ad4a..f1c08d5a 100644
--- a/yamllint/rules/brackets.py
+++ b/yamllint/rules/brackets.py
@@ -138,7 +138,6 @@
from yamllint.linter import LintProblem
from yamllint.rules.common import spaces_after, spaces_before
-
ID = 'brackets'
TYPE = 'token'
CONF = {'forbid': (bool, 'non-empty'),
diff --git a/yamllint/rules/colons.py b/yamllint/rules/colons.py
index 7390e51b..2a181c66 100644
--- a/yamllint/rules/colons.py
+++ b/yamllint/rules/colons.py
@@ -82,7 +82,6 @@
from yamllint.rules.common import is_explicit_key, spaces_after, spaces_before
-
ID = 'colons'
TYPE = 'token'
CONF = {'max-spaces-before': int,
diff --git a/yamllint/rules/commas.py b/yamllint/rules/commas.py
index e87c8f94..baa8b7dd 100644
--- a/yamllint/rules/commas.py
+++ b/yamllint/rules/commas.py
@@ -106,7 +106,6 @@
from yamllint.linter import LintProblem
from yamllint.rules.common import spaces_after, spaces_before
-
ID = 'commas'
TYPE = 'token'
CONF = {'max-spaces-before': int,
diff --git a/yamllint/rules/comments.py b/yamllint/rules/comments.py
index 1259dea6..7e4f04c1 100644
--- a/yamllint/rules/comments.py
+++ b/yamllint/rules/comments.py
@@ -75,7 +75,6 @@
from yamllint.linter import LintProblem
-
ID = 'comments'
TYPE = 'comment'
CONF = {'require-starting-space': bool,
diff --git a/yamllint/rules/comments_indentation.py b/yamllint/rules/comments_indentation.py
index 569abee7..8bcda4d2 100644
--- a/yamllint/rules/comments_indentation.py
+++ b/yamllint/rules/comments_indentation.py
@@ -79,7 +79,6 @@
from yamllint.linter import LintProblem
from yamllint.rules.common import get_line_indent
-
ID = 'comments-indentation'
TYPE = 'comment'
diff --git a/yamllint/rules/document_end.py b/yamllint/rules/document_end.py
index 2337484c..e1ce2a14 100644
--- a/yamllint/rules/document_end.py
+++ b/yamllint/rules/document_end.py
@@ -85,7 +85,6 @@
from yamllint.linter import LintProblem
-
ID = 'document-end'
TYPE = 'token'
CONF = {'present': bool}
diff --git a/yamllint/rules/document_start.py b/yamllint/rules/document_start.py
index f1d66673..225d7c3d 100644
--- a/yamllint/rules/document_start.py
+++ b/yamllint/rules/document_start.py
@@ -75,7 +75,6 @@
from yamllint.linter import LintProblem
-
ID = 'document-start'
TYPE = 'token'
CONF = {'present': bool}
diff --git a/yamllint/rules/empty_lines.py b/yamllint/rules/empty_lines.py
index eca78125..7ccbedf0 100644
--- a/yamllint/rules/empty_lines.py
+++ b/yamllint/rules/empty_lines.py
@@ -61,7 +61,6 @@
from yamllint.linter import LintProblem
-
ID = 'empty-lines'
TYPE = 'line'
CONF = {'max': int,
diff --git a/yamllint/rules/empty_values.py b/yamllint/rules/empty_values.py
index 6c8328b7..c1ff4f20 100644
--- a/yamllint/rules/empty_values.py
+++ b/yamllint/rules/empty_values.py
@@ -105,7 +105,6 @@
from yamllint.linter import LintProblem
-
ID = 'empty-values'
TYPE = 'token'
CONF = {'forbid-in-block-mappings': bool,
diff --git a/yamllint/rules/float_values.py b/yamllint/rules/float_values.py
index a5852c56..77a243bf 100644
--- a/yamllint/rules/float_values.py
+++ b/yamllint/rules/float_values.py
@@ -90,7 +90,6 @@
from yamllint.linter import LintProblem
-
ID = 'float-values'
TYPE = 'token'
CONF = {
diff --git a/yamllint/rules/hyphens.py b/yamllint/rules/hyphens.py
index 50e4d6d9..54a96bf1 100644
--- a/yamllint/rules/hyphens.py
+++ b/yamllint/rules/hyphens.py
@@ -79,7 +79,6 @@
from yamllint.rules.common import spaces_after
-
ID = 'hyphens'
TYPE = 'token'
CONF = {'max-spaces-after': int}
diff --git a/yamllint/rules/indentation.py b/yamllint/rules/indentation.py
index d839d5aa..bde6fa38 100644
--- a/yamllint/rules/indentation.py
+++ b/yamllint/rules/indentation.py
@@ -204,7 +204,6 @@
from yamllint.linter import LintProblem
from yamllint.rules.common import get_real_end_line, is_explicit_key
-
ID = 'indentation'
TYPE = 'token'
CONF = {'spaces': (int, 'consistent'),
diff --git a/yamllint/rules/key_duplicates.py b/yamllint/rules/key_duplicates.py
index bc6550f8..638ac1e0 100644
--- a/yamllint/rules/key_duplicates.py
+++ b/yamllint/rules/key_duplicates.py
@@ -93,7 +93,6 @@
from yamllint.linter import LintProblem
-
ID = 'key-duplicates'
TYPE = 'token'
CONF = {'forbid-duplicated-merge-keys': bool}
diff --git a/yamllint/rules/key_ordering.py b/yamllint/rules/key_ordering.py
index 7fa9597a..ec0716d9 100644
--- a/yamllint/rules/key_ordering.py
+++ b/yamllint/rules/key_ordering.py
@@ -86,7 +86,6 @@
from yamllint.linter import LintProblem
-
ID = 'key-ordering'
TYPE = 'token'
diff --git a/yamllint/rules/line_length.py b/yamllint/rules/line_length.py
index e7cc8bc2..8214d74e 100644
--- a/yamllint/rules/line_length.py
+++ b/yamllint/rules/line_length.py
@@ -101,7 +101,6 @@
from yamllint.linter import LintProblem
-
ID = 'line-length'
TYPE = 'line'
CONF = {'max': int,
diff --git a/yamllint/rules/new_line_at_end_of_file.py b/yamllint/rules/new_line_at_end_of_file.py
index 302cfe6a..f49edb95 100644
--- a/yamllint/rules/new_line_at_end_of_file.py
+++ b/yamllint/rules/new_line_at_end_of_file.py
@@ -25,7 +25,6 @@
from yamllint.linter import LintProblem
-
ID = 'new-line-at-end-of-file'
TYPE = 'line'
diff --git a/yamllint/rules/new_lines.py b/yamllint/rules/new_lines.py
index 4e3023e4..2ee5512a 100644
--- a/yamllint/rules/new_lines.py
+++ b/yamllint/rules/new_lines.py
@@ -37,7 +37,6 @@
from yamllint.linter import LintProblem
-
ID = 'new-lines'
TYPE = 'line'
CONF = {'type': ('unix', 'dos', 'platform')}
diff --git a/yamllint/rules/octal_values.py b/yamllint/rules/octal_values.py
index eb24c81f..e94e4bff 100644
--- a/yamllint/rules/octal_values.py
+++ b/yamllint/rules/octal_values.py
@@ -76,7 +76,6 @@
from yamllint.linter import LintProblem
-
ID = 'octal-values'
TYPE = 'token'
CONF = {'forbid-implicit-octal': bool,
diff --git a/yamllint/rules/trailing_spaces.py b/yamllint/rules/trailing_spaces.py
index 22957147..b5455f32 100644
--- a/yamllint/rules/trailing_spaces.py
+++ b/yamllint/rules/trailing_spaces.py
@@ -40,7 +40,6 @@
from yamllint.linter import LintProblem
-
ID = 'trailing-spaces'
TYPE = 'line'
diff --git a/yamllint/rules/truthy.py b/yamllint/rules/truthy.py
index d19f6eaf..4b7179ab 100644
--- a/yamllint/rules/truthy.py
+++ b/yamllint/rules/truthy.py
@@ -125,7 +125,6 @@
from yamllint.linter import LintProblem
-
TRUTHY = ['YES', 'Yes', 'yes',
'NO', 'No', 'no',
'TRUE', 'True', 'true',