Repository: MarketSquare/robotframework-robocop
Pull request #1272 (2025-03-01 17:03:46)

Add tests for extended view for misc rules & add ignore_file_config flag


Patch:
diff --git a/src/robocop/cli.py b/src/robocop/cli.py
index a4bb987..3f688f3 100644
--- a/src/robocop/cli.py
+++ b/src/robocop/cli.py
@@ -171,7 +171,15 @@ def check_files(
         list[str],
         typer.Option("--ext-rules", help="Load custom rules", show_default=False, rich_help_panel="Selecting rules"),
     ] = None,
-    ignore_git_dir: Annotated[bool, typer.Option(rich_help_panel="Configuration")] = False,
+    ignore_git_dir: Annotated[
+        bool,
+        typer.Option(
+            rich_help_panel="Configuration", help="Do not stop searching for config file when .git directory is found."
+        ),
+    ] = False,
+    ignore_file_config: Annotated[
+        bool, typer.Option(rich_help_panel="Configuration", help="Do not load configuration files.")
+    ] = False,
     skip_gitignore: Annotated[bool, typer.Option(rich_help_panel="File discovery")] = False,
     persistent: Annotated[
         bool,
@@ -221,6 +229,7 @@ def check_files(
         config=configuration_file,
         root=root,
         ignore_git_dir=ignore_git_dir,
+        ignore_file_config=ignore_file_config,
         skip_gitignore=skip_gitignore,
         overwrite_config=overwrite_config,
     )
@@ -365,7 +374,15 @@ def format_files(
             rich_help_panel="Skip formatting",
         ),
     ] = None,
-    ignore_git_dir: Annotated[bool, typer.Option(rich_help_panel="Configuration")] = False,
+    ignore_git_dir: Annotated[
+        bool,
+        typer.Option(
+            rich_help_panel="Configuration", help="Do not stop searching for config file when .git directory is found."
+        ),
+    ] = False,
+    ignore_file_config: Annotated[
+        bool, typer.Option(rich_help_panel="Configuration", help="Do not load configuration files.")
+    ] = False,
     skip_gitignore: Annotated[bool, typer.Option(rich_help_panel="File discovery")] = False,
     reruns: Annotated[
         int,
@@ -422,6 +439,7 @@ def format_files(
         config=configuration_file,
         root=root,
         ignore_git_dir=ignore_git_dir,
+        ignore_file_config=ignore_file_config,
         skip_gitignore=skip_gitignore,
         overwrite_config=overwrite_config,
     )
diff --git a/src/robocop/config.py b/src/robocop/config.py
index 87cb454..8a145ff 100644
--- a/src/robocop/config.py
+++ b/src/robocop/config.py
@@ -556,6 +556,7 @@ class ConfigManager:
         config: Path | None = None,
         root: str | None = None,  # noqa: ARG002  TODO
         ignore_git_dir: bool = False,
+        ignore_file_config: bool = False,
         skip_gitignore: bool = False,  # noqa: ARG002  TODO
         overwrite_config: Config | None = None,
     ):
@@ -568,6 +569,7 @@ class ConfigManager:
             root: Root of the project. Can be supplied if it's known beforehand (for example by IDE plugin)
             Otherwise it will be automatically found.
             ignore_git_dir: Flag for project root discovery to decide if directories with `.git` should be ignored.
+            ignore_file_config: If set to True, Robocop will not load found configuration files
             skip_gitignore: Do not load .gitignore files when looking for the files to parse
             overwrite_config: Overwrite existing configuration file with the Config class
 
@@ -575,6 +577,7 @@ class ConfigManager:
         self.cached_configs: dict[Path, Config] = {}
         self.overwrite_config = overwrite_config
         self.ignore_git_dir = ignore_git_dir
+        self.ignore_file_config = ignore_file_config
         self.gitignore_resolver = GitIgnoreResolver()
         self.overridden_config = (
             config is not None
@@ -666,7 +669,7 @@ class ConfigManager:
             source_file: Path to Robot Framework source file or directory.
 
         """
-        if self.overridden_config:
+        if self.overridden_config or self.ignore_file_config:
             return self.default_config
         return self.find_closest_config(source_file)
 
diff --git a/src/robocop/linter/rules/misc.py b/src/robocop/linter/rules/misc.py
index c415eae..fc09e5a 100644
--- a/src/robocop/linter/rules/misc.py
+++ b/src/robocop/linter/rules/misc.py
@@ -39,7 +39,6 @@ from robocop.linter.utils import (  # FIXME: import as module
     normalize_robot_name,
     normalize_robot_var_name,
     parse_assignment_sign_type,
-    token_col,
 )
 from robocop.linter.utils.misc import RETURN_CLASSES, _is_var_scope_local, find_escaped_variables
 from robocop.linter.utils.variable_matcher import VariableMatches
@@ -457,6 +456,7 @@ class MultilineInlineIfRule(Rule):
 
 class UnnecessaryStringConversionRule(Rule):
     """
+    # TODO: Not used atm, see if it was deprecated before
     Variable in condition has unnecessary string conversion.
 
     Expressions in Robot Framework are evaluated using Python's eval function. When a variable is used
@@ -657,7 +657,9 @@ class UnreachableCodeChecker(VisitorChecker):
                 statement_node = child
             elif not isinstance(child, (EmptyLine, Comment, Teardown)) and statement_node is not None:
                 token = statement_node.data_tokens[0]
-                code_after_statement = child.data_tokens[0] if hasattr(child, "data_tokens") else child
+                if hasattr(child, "header"):
+                    child = child.header
+                code_after_statement = child.data_tokens[0]
                 self.report(
                     self.unreachable_code,
                     statement=token.value,
@@ -904,7 +906,13 @@ class IfChecker(VisitorChecker):
                 self.check_whether_if_should_be_inline(child)
                 if previous_if and child.header and self.compare_conditions(child, previous_if):
                     token = child.header.get_token(child.header.type)
-                    self.report(self.if_can_be_merged, line=previous_if.lineno, node=token, col=token.col_offset + 1)
+                    self.report(
+                        self.if_can_be_merged,
+                        line=previous_if.lineno,
+                        node=token,
+                        col=token.col_offset + 1,
+                        end_col=token.end_col_offset + 1,
+                    )
                 previous_if = child
             elif not isinstance(child, (Comment, EmptyLine)):
                 previous_if = None
@@ -966,7 +974,13 @@ class IfChecker(VisitorChecker):
         if min_possible > self.inline_if_can_be_used.max_width:
             return
         token = node.header.get_token(node.header.type)
-        self.report(self.inline_if_can_be_used, node=node, col=token.col_offset + 1, sev_threshold_value=min_possible)
+        self.report(
+            self.inline_if_can_be_used,
+            node=node,
+            col=token.col_offset + 1,
+            end_col=token.end_col_offset + 1,
+            sev_threshold_value=min_possible,
+        )
 
 
 class LoopStatementsChecker(VisitorChecker):
@@ -1020,17 +1034,20 @@ class LoopStatementsChecker(VisitorChecker):
                     statement_type="statement",
                     node=node,
                     col=error_token.col_offset + 1,
+                    end_col=error_token.end_col_offset + 1,
                 )
 
     def check_statement_in_loop(self, node, token_type) -> None:
         if self.loops or (node.errors and f"{token_type} can only be used inside a loop." not in node.errors):
             return
+        error_token = node.get_token(token_type)
         self.report(
             self.statement_outside_loop,
             name=token_type,
             statement_type="statement",
             node=node,
-            col=token_col(node, token_type),
+            col=error_token.col_offset + 1,
+            end_col=error_token.end_col_offset + 1,
         )
 
 


Test patch:
diff --git a/tests/linter/rules/misc/can_be_resource_file/expected_extended.txt b/tests/linter/rules/misc/can_be_resource_file/expected_extended.txt
new file mode 100644
index 0000000..a6024b9
--- /dev/null
+++ b/tests/linter/rules/misc/can_be_resource_file/expected_extended.txt
@@ -0,0 +1,1 @@
+no_test.robot:1:1 MISC06 No tests in 'no_test.robot' file, consider renaming to 'no_test.resource'
\ No newline at end of file
diff --git a/tests/linter/rules/misc/can_be_resource_file/test_rule.py b/tests/linter/rules/misc/can_be_resource_file/test_rule.py
index e0553eb..931c17e 100644
--- a/tests/linter/rules/misc/can_be_resource_file/test_rule.py
+++ b/tests/linter/rules/misc/can_be_resource_file/test_rule.py
@@ -4,3 +4,6 @@ from tests.linter.utils import RuleAcceptance
 class TestRuleAcceptance(RuleAcceptance):
     def test_rule(self):
         self.check_rule(expected_file="expected_output.txt")
+
+    def test_extended(self):
+        self.check_rule(expected_file="expected_extended.txt", output_format="extended")
diff --git a/tests/linter/rules/misc/empty_return/expected_extended.txt b/tests/linter/rules/misc/empty_return/expected_extended.txt
new file mode 100644
index 0000000..58766ca
--- /dev/null
+++ b/tests/linter/rules/misc/empty_return/expected_extended.txt
@@ -0,0 +1,8 @@
+test.robot:21:5 MISC02 [Return] is empty
+    |
+ 19 |     No Operation
+ 20 |     Fail
+ 21 |     [Return]
+    |     ^^^^^^^ MISC02
+    |
+
diff --git a/tests/linter/rules/misc/empty_return/test_rule.py b/tests/linter/rules/misc/empty_return/test_rule.py
index cba6753..4a48afe 100644
--- a/tests/linter/rules/misc/empty_return/test_rule.py
+++ b/tests/linter/rules/misc/empty_return/test_rule.py
@@ -4,3 +4,6 @@ from tests.linter.utils import RuleAcceptance
 class TestRuleAcceptance(RuleAcceptance):
     def test_rule(self):
         self.check_rule(src_files=["test.robot"], expected_file="expected_output.txt")
+
+    def test_extended(self):
+        self.check_rule(src_files=["test.robot"], expected_file="expected_extended.txt", output_format="extended")
diff --git a/tests/linter/rules/misc/expression_can_be_simplified/expected_extended.txt b/tests/linter/rules/misc/expression_can_be_simplified/expected_extended.txt
new file mode 100644
index 0000000..7ce2dab
--- /dev/null
+++ b/tests/linter/rules/misc/expression_can_be_simplified/expected_extended.txt
@@ -0,0 +1,97 @@
+test.robot:3:11 MISC13 'IF' condition can be simplified
+   |
+ 1 | *** Test Cases ***
+ 2 | If condition
+ 3 |     IF    ${status} == ${TRUE}
+   |           ^^^^^^^^^^^^^^^^^^^^ MISC13
+ 4 |         Log    ${variable}
+ 5 |     ELSE IF    ${status} == ${false}
+   |
+
+test.robot:5:16 MISC13 'ELSE IF' condition can be simplified
+   |
+ 3 |     IF    ${status} == ${TRUE}
+ 4 |         Log    ${variable}
+ 5 |     ELSE IF    ${status} == ${false}
+   |                ^^^^^^^^^^^^^^^^^^^^^ MISC13
+ 6 |         Log    ${variable}
+ 7 |         IF    ${status} != ${true}
+   |
+
+test.robot:7:15 MISC13 'IF' condition can be simplified
+   |
+ 5 |     ELSE IF    ${status} == ${false}
+ 6 |         Log    ${variable}
+ 7 |         IF    ${status} != ${true}
+   |               ^^^^^^^^^^^^^^^^^^^^ MISC13
+ 8 |             Log    ${variable}
+ 9 |         END
+   |
+
+test.robot:17:14 MISC13 'WHILE' condition can be simplified
+    |
+ 15 |
+ 16 | While condition
+ 17 |     WHILE    ${status} == ${TRUE}    limit=1 min
+    |              ^^^^^^^^^^^^^^^^^^^^ MISC13
+ 18 |         WHILE    ${status} != ${true}
+ 19 |             Log    ${variable}
+    |
+
+test.robot:18:18 MISC13 'WHILE' condition can be simplified
+    |
+ 16 | While condition
+ 17 |     WHILE    ${status} == ${TRUE}    limit=1 min
+ 18 |         WHILE    ${status} != ${true}
+    |                  ^^^^^^^^^^^^^^^^^^^^ MISC13
+ 19 |             Log    ${variable}
+ 20 |         END
+    |
+
+test.robot:29:24 MISC13 'Set Variable If' condition can be simplified
+    |
+ 27 |
+ 28 | Keywords With Conditions
+ 29 |     Set Variable If    len(@{list})
+    |                        ^^^^^^^^^^^^ MISC13
+ 30 |     ...    value
+ 31 |     ...    not ${variable} == []
+    |
+
+test.robot:31:16 MISC13 'Set Variable If' condition can be simplified
+    |
+ 29 |     Set Variable If    len(@{list})
+ 30 |     ...    value
+ 31 |     ...    not ${variable} == []
+    |                ^^^^^^^^^^^^^^^^^ MISC13
+ 32 |     ...    value
+ 33 |     ...    ${class.attr['item']} != set()
+    |
+
+test.robot:33:12 MISC13 'Set Variable If' condition can be simplified
+    |
+ 31 |     ...    not ${variable} == []
+ 32 |     ...    value
+ 33 |     ...    ${class.attr['item']} != set()
+    |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ MISC13
+ 34 |     ...    value
+ 35 |     Skip If    ${true}
+    |
+
+test.robot:36:16 MISC13 'Skip If' condition can be simplified
+    |
+ 34 |     ...    value
+ 35 |     Skip If    ${true}
+ 36 |     Skip If    ${variable} != ${truE}
+    |                ^^^^^^^^^^^^^^^^^^^^^^ MISC13
+ 37 |     Should Be True    ${flag} == False
+    |
+
+test.robot:37:23 MISC13 'Should Be True' condition can be simplified
+    |
+ 35 |     Skip If    ${true}
+ 36 |     Skip If    ${variable} != ${truE}
+ 37 |     Should Be True    ${flag} == False
+    |                       ^^^^^^^^^^^^^^^^ MISC13
+    |
+
diff --git a/tests/linter/rules/misc/expression_can_be_simplified/test_rule.py b/tests/linter/rules/misc/expression_can_be_simplified/test_rule.py
index f6c120b..14dfd58 100644
--- a/tests/linter/rules/misc/expression_can_be_simplified/test_rule.py
+++ b/tests/linter/rules/misc/expression_can_be_simplified/test_rule.py
@@ -7,3 +7,11 @@ class TestRuleAcceptance(RuleAcceptance):
 
     def test_rule(self):
         self.check_rule(src_files=["test.robot"], expected_file="expected_output.txt", test_on_version=">=5")
+
+    def test_extended(self):
+        self.check_rule(
+            src_files=["test.robot"],
+            expected_file="expected_extended.txt",
+            output_format="extended",
+            test_on_version=">=5",
+        )
diff --git a/tests/linter/rules/misc/if_can_be_merged/expected_extended.txt b/tests/linter/rules/misc/if_can_be_merged/expected_extended.txt
new file mode 100644
index 0000000..675228e
--- /dev/null
+++ b/tests/linter/rules/misc/if_can_be_merged/expected_extended.txt
@@ -0,0 +1,104 @@
+inline_if.robot:21:15 MISC07 IF statement can be merged with previous IF (defined in line 20)
+    |
+ 19 | Adjacent with return
+ 20 |     ${var}    IF    $condition    Keyword2    ${arg}
+ 21 |     ${var}    IF    $condition    Keyword2    ${arg}
+    |               ^^ MISC07
+    |
+
+inline_if.robot:26:5 MISC07 IF statement can be merged with previous IF (defined in line 25)
+    |
+ 24 | Adjacent with no return
+ 25 |     IF    $condition    Keyword2    ${arg}    ELSE    Keyword3
+ 26 |     IF    $condition    Keyword2    ${arg}    ELSE    Keyword3
+    |     ^^ MISC07
+    |
+
+test.robot:8:5 MISC07 IF statement can be merged with previous IF (defined in line 4)
+   |
+ 6 |     END
+ 7 |     # comment
+ 8 |     IF  ${condition} == 'True'
+   |     ^^ MISC07
+ 9 |         Step 2
+10 |     END
+   |
+
+test.robot:50:5 MISC07 IF statement can be merged with previous IF (defined in line 41)
+    |
+ 50 |     IF  ${condition} == 'True'
+    |     ^^ MISC07
+ 51 |         Step 2
+ 52 |     END
+    |
+
+test.robot:67:9 MISC07 IF statement can be merged with previous IF (defined in line 64)
+    |
+ 65 |             Log    ${value}
+ 66 |         END
+ 67 |         IF  ${value}==${5}
+    |         ^^ MISC07
+ 68 |             Log    ${value}
+ 69 |         END
+    |
+
+test.robot:79:5 MISC07 IF statement can be merged with previous IF (defined in line 76)
+    |
+ 77 |         Step 1
+ 78 |     END
+ 79 |     IF  ${condition} == 'True'  # comment
+    |     ^^ MISC07
+ 80 |         Step 2
+ 81 |     END
+    |
+
+test.robot:90:5 MISC07 IF statement can be merged with previous IF (defined in line 86)
+    |
+ 88 |     END
+ 89 |     # comment
+ 90 |     IF  ${condition} == 'True'
+    |     ^^ MISC07
+ 91 |         Step 2
+ 92 |     END
+    |
+
+test.robot:99:9 MISC07 IF statement can be merged with previous IF (defined in line 96)
+    |
+ 97 |             Step 1
+ 98 |         END
+ 99 |         IF  ${condition} == 'True'
+    |         ^^ MISC07
+100 |             Step 2
+101 |         END
+    |
+
+test.robot:148:5 MISC07 IF statement can be merged with previous IF (defined in line 141)
+     |
+ 146 |         Step 3
+ 147 |     END
+ 148 |     IF  ${condition} == 'True'
+     |     ^^ MISC07
+ 149 |         Step 1
+ 150 |     ELSE IF  ${stuff}
+     |
+
+test.robot:162:5 MISC07 IF statement can be merged with previous IF (defined in line 157)
+     |
+ 160 |         Step 2
+ 161 |     END
+ 162 |     IF  ${condition} == 'True'
+     |     ^^ MISC07
+ 163 |         Step 1
+ 164 |     ELSE IF  ${stuff}
+     |
+
+test.robot:167:5 MISC07 IF statement can be merged with previous IF (defined in line 162)
+     |
+ 165 |         Step 2
+ 166 |     END
+ 167 |     IF  ${condition} == 'True'
+     |     ^^ MISC07
+ 168 |         Step 1
+ 169 |     ELSE IF  ${stuff}
+     |
+
diff --git a/tests/linter/rules/misc/if_can_be_merged/test_rule.py b/tests/linter/rules/misc/if_can_be_merged/test_rule.py
index 26eb4d8..6d53976 100644
--- a/tests/linter/rules/misc/if_can_be_merged/test_rule.py
+++ b/tests/linter/rules/misc/if_can_be_merged/test_rule.py
@@ -3,7 +3,19 @@ from tests.linter.utils import RuleAcceptance
 
 class TestRuleAcceptance(RuleAcceptance):
     def test_rule(self):
-        self.check_rule(expected_file="expected_output.txt", test_on_version=">=5.0")
+        self.check_rule(
+            src_files=["inline_if.robot", "invalid.robot", "test.robot"],
+            expected_file="expected_output.txt",
+            test_on_version=">=5.0",
+        )
 
     def test_rule_rf4(self):
         self.check_rule(expected_file="expected_output_rf4.txt", test_on_version="==4.*")
+
+    def test_extended(self):
+        self.check_rule(
+            src_files=["inline_if.robot", "invalid.robot", "test.robot"],
+            expected_file="expected_extended.txt",
+            output_format="extended",
+            test_on_version=">=5.0",
+        )
diff --git a/tests/linter/rules/misc/inconsistent_assignment/expected_extended.txt b/tests/linter/rules/misc/inconsistent_assignment/expected_extended.txt
new file mode 100644
index 0000000..29fc4e5
--- /dev/null
+++ b/tests/linter/rules/misc/inconsistent_assignment/expected_extended.txt
@@ -0,0 +1,18 @@
+test.robot:25:5 MISC04 The assignment sign is not consistent within the file. Expected '' but got ' =' instead
+    |
+ 23 |
+ 24 | Keyword With One Assignment
+ 25 |     ${var} =    Keyword
+    |     ^^^^^^^^ MISC04
+    |
+
+test.robot:31:15 MISC04 The assignment sign is not consistent within the file. Expected '' but got '=' instead
+    |
+ 29 |
+ 30 | Keyword With Multiline Keyword
+ 31 |     ${var}    ${var}=    Keyword
+    |               ^^^^^^^ MISC04
+ 32 |     ...    ${arg}
+ 33 |     ...    ${1}
+    |
+
diff --git a/tests/linter/rules/misc/inconsistent_assignment/test_rule.py b/tests/linter/rules/misc/inconsistent_assignment/test_rule.py
index e8a9169..10d777a 100644
--- a/tests/linter/rules/misc/inconsistent_assignment/test_rule.py
+++ b/tests/linter/rules/misc/inconsistent_assignment/test_rule.py
@@ -5,6 +5,9 @@ class TestRuleAcceptance(RuleAcceptance):
     def test_rule(self):
         self.check_rule(src_files=["test.robot"], expected_file="expected_output.txt")
 
+    def test_extended(self):
+        self.check_rule(src_files=["test.robot"], expected_file="expected_extended.txt", output_format="extended")
+
     def test_golden(self):
         self.check_rule(src_files=["golden/golden.robot"], expected_file=None)
 
diff --git a/tests/linter/rules/misc/inconsistent_assignment_in_variables/expected_extended.txt b/tests/linter/rules/misc/inconsistent_assignment_in_variables/expected_extended.txt
new file mode 100644
index 0000000..04b60bc
--- /dev/null
+++ b/tests/linter/rules/misc/inconsistent_assignment_in_variables/expected_extended.txt
@@ -0,0 +1,17 @@
+test.robot:7:1 MISC05 The assignment sign is not consistent inside the variables section. Expected ' =' but got '=' instead
+   |
+ 5 | *** Variables ***
+ 6 | ${var} =    1
+ 7 | ${var2}=    2
+   | ^^^^^^^^ MISC05
+ 8 | ${var3}     3
+   |
+
+test.robot:8:1 MISC05 The assignment sign is not consistent inside the variables section. Expected ' =' but got '' instead
+   |
+ 6 | ${var} =    1
+ 7 | ${var2}=    2
+ 8 | ${var3}     3
+   | ^^^^^^^ MISC05
+   |
+
diff --git a/tests/linter/rules/misc/inconsistent_assignment_in_variables/test_rule.py b/tests/linter/rules/misc/inconsistent_assignment_in_variables/test_rule.py
index c289ee5..dd9cdd5 100644
--- a/tests/linter/rules/misc/inconsistent_assignment_in_variables/test_rule.py
+++ b/tests/linter/rules/misc/inconsistent_assignment_in_variables/test_rule.py
@@ -5,6 +5,9 @@ class TestRuleAcceptance(RuleAcceptance):
     def test_rule(self):
         self.check_rule(src_files=["test.robot"], expected_file="expected_output.txt")
 
+    def test_extended(self):
+        self.check_rule(src_files=["test.robot"], expected_file="expected_extended.txt", output_format="extended")
+
     def test_golden(self):
         self.check_rule(src_files=["golden/golden.robot"], expected_file=None)
 
diff --git a/tests/linter/rules/misc/inline_if_can_be_used/expected_extended.txt b/tests/linter/rules/misc/inline_if_can_be_used/expected_extended.txt
new file mode 100644
index 0000000..556ff1d
--- /dev/null
+++ b/tests/linter/rules/misc/inline_if_can_be_used/expected_extended.txt
@@ -0,0 +1,10 @@
+test.robot:3:5 MISC09 IF can be replaced with inline IF
+   |
+ 1 | *** Test Cases ***
+ 2 | Short IF
+ 3 |     IF    $condition
+   |     ^^ MISC09
+ 4 |         Keyword    ${var}
+ 5 |     END
+   |
+
diff --git a/tests/linter/rules/misc/inline_if_can_be_used/test_rule.py b/tests/linter/rules/misc/inline_if_can_be_used/test_rule.py
index 664ff79..7b4176e 100644
--- a/tests/linter/rules/misc/inline_if_can_be_used/test_rule.py
+++ b/tests/linter/rules/misc/inline_if_can_be_used/test_rule.py
@@ -5,6 +5,14 @@ class TestRuleAcceptance(RuleAcceptance):
     def test_rule(self):
         self.check_rule(src_files=["test.robot"], expected_file="expected_output.txt", test_on_version=">=5.0")
 
+    def test_extended(self):
+        self.check_rule(
+            src_files=["test.robot"],
+            expected_file="expected_extended.txt",
+            output_format="extended",
+            test_on_version=">=5.0",
+        )
+
     def test_severity_threshold(self):
         self.check_rule(
             configure=["inline-if-can-be-used.severity_threshold=warning=40"],
diff --git a/tests/linter/rules/misc/keyword_after_return/expected_extended.txt b/tests/linter/rules/misc/keyword_after_return/expected_extended.txt
new file mode 100644
index 0000000..f404590
--- /dev/null
+++ b/tests/linter/rules/misc/keyword_after_return/expected_extended.txt
@@ -0,0 +1,17 @@
+keyword_after_return_from.robot:21:5 MISC01 Keyword call after 'Return From Keyword'
+    |
+ 19 |     No Operation
+ 20 |     Return From Keyword
+ 21 |     Fail
+    |     ^^^^ MISC01
+    |
+
+test.robot:20:5 MISC01 [Return] is not defined at the end of keyword. Note that [Return] does not quit from keyword but only set variables to be returned
+    |
+ 18 |     Pass
+ 19 |     No Operation
+ 20 |     [Return]    ${var}
+    |     ^^^^^^^^ MISC01
+ 21 |     Fail
+    |
+
diff --git a/tests/linter/rules/misc/keyword_after_return/test_rule.py b/tests/linter/rules/misc/keyword_after_return/test_rule.py
index cb5f216..194feac 100644
--- a/tests/linter/rules/misc/keyword_after_return/test_rule.py
+++ b/tests/linter/rules/misc/keyword_after_return/test_rule.py
@@ -4,3 +4,6 @@ from tests.linter.utils import RuleAcceptance
 class TestRuleAcceptance(RuleAcceptance):
     def test_rule_before(self):
         self.check_rule(expected_file="expected_output.txt")
+
+    def test_extended(self):
+        self.check_rule(expected_file="expected_extended.txt", output_format="extended")
diff --git a/tests/linter/rules/misc/misplaced_negative_condition/expected_extended.txt b/tests/linter/rules/misc/misplaced_negative_condition/expected_extended.txt
new file mode 100644
index 0000000..faca532
--- /dev/null
+++ b/tests/linter/rules/misc/misplaced_negative_condition/expected_extended.txt
@@ -0,0 +1,77 @@
+test.robot:5:16 MISC14 'ELSE IF' condition 'not ${status} is ${false}' can be rewritten to '${status} is not ${false}'
+   |
+ 3 |     IF    ${status} is ${TRUE}
+ 4 |         Log    ${variable}
+ 5 |     ELSE IF    not ${status} is ${false}
+   |                ^^^^^^^^^^^^^^^^^^^^^^^^^ MISC14
+ 6 |         Log    ${variable}
+ 7 |         IF    not ${status} is ${NONE}
+   |
+
+test.robot:7:15 MISC14 'IF' condition 'not ${status} is ${NONE}' can be rewritten to '${status} is not ${NONE}'
+   |
+ 5 |     ELSE IF    not ${status} is ${false}
+ 6 |         Log    ${variable}
+ 7 |         IF    not ${status} is ${NONE}
+   |               ^^^^^^^^^^^^^^^^^^^^^^^^ MISC14
+ 8 |             Log    ${variable}
+ 9 |         END
+   |
+
+test.robot:17:14 MISC14 'WHILE' condition 'not ${status} is ${variable}' can be rewritten to '${status} is not ${variable}'
+    |
+ 15 |
+ 16 | While condition
+ 17 |     WHILE    not ${status} is ${variable}    limit=1 min
+    |              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ MISC14
+ 18 |         WHILE    not not ${status} is None
+ 19 |             Log    ${variable}
+    |
+
+test.robot:18:18 MISC14 'WHILE' condition 'not ${status} is None' can be rewritten to '${status} is not None'
+    |
+ 16 | While condition
+ 17 |     WHILE    not ${status} is ${variable}    limit=1 min
+ 18 |         WHILE    not not ${status} is None
+    |                  ^^^^^^^^^^^^^^^^^^^^^^^^^ MISC14
+ 19 |             Log    ${variable}
+ 20 |         END
+    |
+
+test.robot:31:12 MISC14 'Set Variable If' condition 'not ${status} is None' can be rewritten to '${status} is not None'
+    |
+ 29 |     Set Variable If    len(@{list})
+ 30 |     ...    value
+ 31 |     ...    not ${status} is None
+    |            ^^^^^^^^^^^^^^^^^^^^^ MISC14
+ 32 |     ...    value
+ 33 |     ...    not ${class.attr['item']} is set()
+    |
+
+test.robot:33:12 MISC14 'Set Variable If' condition 'not ${class.attr['item']} is set()' can be rewritten to '${class.attr['item']} is not set()'
+    |
+ 31 |     ...    not ${status} is None
+ 32 |     ...    value
+ 33 |     ...    not ${class.attr['item']} is set()
+    |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ MISC14
+ 34 |     ...    value
+ 35 |     Skip If    ${true}
+    |
+
+test.robot:36:16 MISC14 'Skip If' condition 'not ${status} is None' can be rewritten to '${status} is not None'
+    |
+ 34 |     ...    value
+ 35 |     Skip If    ${true}
+ 36 |     Skip If    not ${status} is None
+    |                ^^^^^^^^^^^^^^^^^^^^^ MISC14
+ 37 |     Should Be True    not ${status} is None
+    |
+
+test.robot:37:23 MISC14 'Should Be True' condition 'not ${status} is None' can be rewritten to '${status} is not None'
+    |
+ 35 |     Skip If    ${true}
+ 36 |     Skip If    not ${status} is None
+ 37 |     Should Be True    not ${status} is None
+    |                       ^^^^^^^^^^^^^^^^^^^^^ MISC14
+    |
+
diff --git a/tests/linter/rules/misc/misplaced_negative_condition/test_rule.py b/tests/linter/rules/misc/misplaced_negative_condition/test_rule.py
index f6c120b..14dfd58 100644
--- a/tests/linter/rules/misc/misplaced_negative_condition/test_rule.py
+++ b/tests/linter/rules/misc/misplaced_negative_condition/test_rule.py
@@ -7,3 +7,11 @@ class TestRuleAcceptance(RuleAcceptance):
 
     def test_rule(self):
         self.check_rule(src_files=["test.robot"], expected_file="expected_output.txt", test_on_version=">=5")
+
+    def test_extended(self):
+        self.check_rule(
+            src_files=["test.robot"],
+            expected_file="expected_extended.txt",
+            output_format="extended",
+            test_on_version=">=5",
+        )
diff --git a/tests/linter/rules/misc/multiline_inline_if/expected_extended.txt b/tests/linter/rules/misc/multiline_inline_if/expected_extended.txt
new file mode 100644
index 0000000..c356144
--- /dev/null
+++ b/tests/linter/rules/misc/multiline_inline_if/expected_extended.txt
@@ -0,0 +1,66 @@
+test.robot:4:5 MISC11 Inline IF split to multiple lines
+   |  
+ 2 |   My Test Case
+ 3 |       IF  ${condition}    Log  hello     ELSE    Log  hi!
+ 4 | /     IF  ${condition}  Log  hello
+ 5 | |   ...    ELSE       Log  hi!
+   | |_^ MISC11
+ 6 |       IF  ${condition}
+ 7 |           Log  hello
+   |  
+
+test.robot:11:5 MISC11 Inline IF split to multiple lines
+    |  
+  9 |           Log  hi!
+ 10 |       END
+ 11 | /     IF  ${condition}
+ 12 | |     ...  Log  hello
+ 13 | |     ...  ELSE
+ 14 | |     ...  Log  hi!
+    | |_^ MISC11
+ 15 |       Log    something
+ 16 |       IF  ${condition}
+    |  
+
+test.robot:16:5 MISC11 Inline IF split to multiple lines
+    |  
+ 14 |       ...  Log  hi!
+ 15 |       Log    something
+ 16 | /     IF  ${condition}
+ 17 | |     ...  Log  hello  ELSE  Log  hi!
+    | |_^ MISC11
+    |  
+
+test.robot:23:5 MISC11 Inline IF split to multiple lines
+    |  
+ 21 |   My Keyword
+ 22 |       IF  ${condition}    Log  hello     ELSE    Log  hi!
+ 23 | /     IF  ${condition}  Log  hello
+ 24 | |     ...    ELSE       Log  hi!
+    | |_^ MISC11
+ 25 |       IF  ${condition}
+ 26 |           Log  hello
+    |  
+
+test.robot:30:5 MISC11 Inline IF split to multiple lines
+    |  
+ 28 |           Log  hi!
+ 29 |       END
+ 30 | /     IF  ${condition}
+ 31 | |     ...  Log  hello
+ 32 | |     ...  ELSE
+ 33 | |     ...  Log  hi!
+    | |_^ MISC11
+ 34 |       Log    something
+ 35 |       IF  ${condition}
+    |  
+
+test.robot:35:5 MISC11 Inline IF split to multiple lines
+    |  
+ 33 |       ...  Log  hi!
+ 34 |       Log    something
+ 35 | /     IF  ${condition}
+ 36 | |     ...  Log  hello  ELSE  Log  hi!
+    | |_^ MISC11
+    |  
+
diff --git a/tests/linter/rules/misc/multiline_inline_if/test_rule.py b/tests/linter/rules/misc/multiline_inline_if/test_rule.py
index 562dab1..e707a9f 100644
--- a/tests/linter/rules/misc/multiline_inline_if/test_rule.py
+++ b/tests/linter/rules/misc/multiline_inline_if/test_rule.py
@@ -4,3 +4,11 @@ from tests.linter.utils import RuleAcceptance
 class TestRuleAcceptance(RuleAcceptance):
     def test_rule(self):
         self.check_rule(expected_file="expected_output.txt", test_on_version=">=5.0")
+
+    def test_extended(self):
+        self.check_rule(
+            src_files=["test.robot"],
+            expected_file="expected_extended.txt",
+            output_format="extended",
+            test_on_version=">=5.0",
+        )
diff --git a/tests/linter/rules/misc/nested_for_loop/expected_extended.txt b/tests/linter/rules/misc/nested_for_loop/expected_extended.txt
new file mode 100644
index 0000000..e69de29
diff --git a/tests/linter/rules/misc/statement_outside_loop/expected_extended.txt b/tests/linter/rules/misc/statement_outside_loop/expected_extended.txt
new file mode 100644
index 0000000..f4eecb1
--- /dev/null
+++ b/tests/linter/rules/misc/statement_outside_loop/expected_extended.txt
@@ -0,0 +1,208 @@
+test.robot:3:5 MISC08 'Continue For Loop' keyword used outside a loop
+   |
+ 1 | *** Test Cases ***
+ 2 | Test
+ 3 |     Continue For Loop
+   |     ^^^^^^^^^^^^^^^^^ MISC08
+ 4 |     FOR    ${var}    IN RANGE    10
+ 5 |         Keyword 2
+   |
+
+test.robot:13:5 MISC08 'BuiltIn.Exit For Loop' keyword used outside a loop
+    |
+ 11 |         Continuefor_loopIf    $condition
+ 12 |     END
+ 13 |     BuiltIn.Exit For Loop
+    |     ^^^^^^^^^^^^^^^^^^^^^ MISC08
+ 14 |     CONTINUE
+ 15 |     BREAK
+    |
+
+test.robot:14:5 MISC08 CONTINUE statement used outside a loop
+    |
+ 12 |     END
+ 13 |     BuiltIn.Exit For Loop
+ 14 |     CONTINUE
+    |     ^^^^^^^^ MISC08
+ 15 |     BREAK
+ 16 |     Exit For Loop If    $condition
+    |
+
+test.robot:15:5 MISC08 BREAK statement used outside a loop
+    |
+ 13 |     BuiltIn.Exit For Loop
+ 14 |     CONTINUE
+ 15 |     BREAK
+    |     ^^^^^ MISC08
+ 16 |     Exit For Loop If    $condition
+ 17 |     Continuefor_loopIf    $condition
+    |
+
+test.robot:16:5 MISC08 'Exit For Loop If' keyword used outside a loop
+    |
+ 14 |     CONTINUE
+ 15 |     BREAK
+ 16 |     Exit For Loop If    $condition
+    |     ^^^^^^^^^^^^^^^^ MISC08
+ 17 |     Continuefor_loopIf    $condition
+    |
+
+test.robot:17:5 MISC08 'Continuefor_loopIf' keyword used outside a loop
+    |
+ 15 |     BREAK
+ 16 |     Exit For Loop If    $condition
+ 17 |     Continuefor_loopIf    $condition
+    |     ^^^^^^^^^^^^^^^^^^ MISC08
+    |
+
+test.robot:20:5 MISC08 'Exit For Loop' keyword used outside a loop
+    |
+ 18 |
+ 19 | Test 2
+ 20 |     Exit For Loop
+    |     ^^^^^^^^^^^^^ MISC08
+ 21 |     Continue For Loop
+ 22 |     CONTINUE
+    |
+
+test.robot:21:5 MISC08 'Continue For Loop' keyword used outside a loop
+    |
+ 19 | Test 2
+ 20 |     Exit For Loop
+ 21 |     Continue For Loop
+    |     ^^^^^^^^^^^^^^^^^ MISC08
+ 22 |     CONTINUE
+ 23 |     BREAK
+    |
+
+test.robot:22:5 MISC08 CONTINUE statement used outside a loop
+    |
+ 20 |     Exit For Loop
+ 21 |     Continue For Loop
+ 22 |     CONTINUE
+    |     ^^^^^^^^ MISC08
+ 23 |     BREAK
+    |
+
+test.robot:23:5 MISC08 BREAK statement used outside a loop
+    |
+ 21 |     Continue For Loop
+ 22 |     CONTINUE
+ 23 |     BREAK
+    |     ^^^^^ MISC08
+    |
+
+test.robot:28:5 MISC08 'Continue For Loop' keyword used outside a loop
+    |
+ 26 | *** Keywords ***
+ 27 | Keyword
+ 28 |     Continue For Loop
+    |     ^^^^^^^^^^^^^^^^^ MISC08
+ 29 |     CONTINUE
+ 30 |     BREAK
+    |
+
+test.robot:29:5 MISC08 CONTINUE statement used outside a loop
+    |
+ 27 | Keyword
+ 28 |     Continue For Loop
+ 29 |     CONTINUE
+    |     ^^^^^^^^ MISC08
+ 30 |     BREAK
+ 31 |     FOR    ${var}    IN RANGE    10
+    |
+
+test.robot:30:5 MISC08 BREAK statement used outside a loop
+    |
+ 28 |     Continue For Loop
+ 29 |     CONTINUE
+ 30 |     BREAK
+    |     ^^^^^ MISC08
+ 31 |     FOR    ${var}    IN RANGE    10
+ 32 |         Keyword 2
+    |
+
+test.robot:42:5 MISC08 'Exit For Loop' keyword used outside a loop
+    |
+ 40 |     END
+ 41 |     Keyword
+ 42 |     Exit For Loop
+    |     ^^^^^^^^^^^^^ MISC08
+    |
+
+test.robot:46:5 MISC08 'Exit For Loop' keyword used outside a loop
+    |
+ 44 | Keyword 2
+ 45 |     Keyword
+ 46 |     Exit For Loop
+    |     ^^^^^^^^^^^^^ MISC08
+ 47 |     Continue For Loop
+ 48 |     IF    $condition
+    |
+
+test.robot:47:5 MISC08 'Continue For Loop' keyword used outside a loop
+    |
+ 45 |     Keyword
+ 46 |     Exit For Loop
+ 47 |     Continue For Loop
+    |     ^^^^^^^^^^^^^^^^^ MISC08
+ 48 |     IF    $condition
+ 49 |         CONTINUE
+    |
+
+test.robot:49:9 MISC08 CONTINUE statement used outside a loop
+    |
+ 47 |     Continue For Loop
+ 48 |     IF    $condition
+ 49 |         CONTINUE
+    |         ^^^^^^^^ MISC08
+ 50 |     END
+ 51 |     BREAK
+    |
+
+test.robot:51:5 MISC08 BREAK statement used outside a loop
+    |
+ 49 |         CONTINUE
+ 50 |     END
+ 51 |     BREAK
+    |     ^^^^^ MISC08
+ 52 |     IF    $condition    Exit For Loop If    $condition
+ 53 |     Continuefor_loopIf    $condition
+    |
+
+test.robot:52:25 MISC08 'Exit For Loop If' keyword used outside a loop
+    |
+ 50 |     END
+ 51 |     BREAK
+ 52 |     IF    $condition    Exit For Loop If    $condition
+    |                         ^^^^^^^^^^^^^^^^ MISC08
+ 53 |     Continuefor_loopIf    $condition
+    |
+
+test.robot:53:5 MISC08 'Continuefor_loopIf' keyword used outside a loop
+    |
+ 51 |     BREAK
+ 52 |     IF    $condition    Exit For Loop If    $condition
+ 53 |     Continuefor_loopIf    $condition
+    |     ^^^^^^^^^^^^^^^^^^ MISC08
+    |
+
+test.robot:67:9 MISC08 'Continue For Loop' keyword used outside a loop
+    |
+ 65 |     END
+ 66 |     TRY
+ 67 |         Continue For Loop
+    |         ^^^^^^^^^^^^^^^^^ MISC08
+ 68 |     EXCEPT
+ 69 |         BREAK
+    |
+
+test.robot:69:9 MISC08 BREAK statement used outside a loop
+    |
+ 67 |         Continue For Loop
+ 68 |     EXCEPT
+ 69 |         BREAK
+    |         ^^^^^ MISC08
+ 70 |     END
+    |
+
diff --git a/tests/linter/rules/misc/statement_outside_loop/test_rule.py b/tests/linter/rules/misc/statement_outside_loop/test_rule.py
index 4cd2688..994bcef 100644
--- a/tests/linter/rules/misc/statement_outside_loop/test_rule.py
+++ b/tests/linter/rules/misc/statement_outside_loop/test_rule.py
@@ -4,3 +4,11 @@ from tests.linter.utils import RuleAcceptance
 class TestRuleAcceptance(RuleAcceptance):
     def test_rule(self):
         self.check_rule(src_files=["test.robot"], expected_file="expected_output.txt", test_on_version=">=5.0")
+
+    def test_extended(self):
+        self.check_rule(
+            src_files=["test.robot"],
+            expected_file="expected_extended.txt",
+            output_format="extended",
+            test_on_version=">=5.0",
+        )
diff --git a/tests/linter/rules/misc/unreachable_code/expected_extended.txt b/tests/linter/rules/misc/unreachable_code/expected_extended.txt
new file mode 100644
index 0000000..f273e5d
--- /dev/null
+++ b/tests/linter/rules/misc/unreachable_code/expected_extended.txt
@@ -0,0 +1,135 @@
+test.robot:14:9 MISC10 Unreachable code after RETURN statement
+    |
+ 12 |     IF    $condition
+ 13 |         RETURN
+ 14 |         Keyword
+    |         ^^^^^^^^ MISC10
+ 15 |     END
+    |
+
+test.robot:62:9 MISC10 Unreachable code after RETURN statement
+    |
+ 60 |     IF    $condition
+ 61 |         RETURN
+ 62 |         Keyword
+    |         ^^^^^^^^ MISC10
+ 63 |     END
+ 64 |     WHILE    $condition
+    |
+
+test.robot:66:9 MISC10 Unreachable code after RETURN statement
+    |
+ 64 |     WHILE    $condition
+ 65 |         RETURN
+ 66 |         Keyword
+    |         ^^^^^^^^ MISC10
+ 67 |     END
+ 68 |     FOR    ${var}    IN RANGE  10
+    |
+
+test.robot:70:9 MISC10 Unreachable code after RETURN statement
+    |
+ 68 |     FOR    ${var}    IN RANGE  10
+ 69 |         RETURN
+ 70 |         Keyword
+    |         ^^^^^^^^ MISC10
+ 71 |     END
+ 72 |     TRY
+    |
+
+test.robot:74:9 MISC10 Unreachable code after RETURN statement
+    |
+ 72 |     TRY
+ 73 |         RETURN
+ 74 |         Keyword
+    |         ^^^^^^^^ MISC10
+ 75 |     EXCEPT
+ 76 |         RETURN
+    |
+
+test.robot:77:9 MISC10 Unreachable code after RETURN statement
+    |
+ 75 |     EXCEPT
+ 76 |         RETURN
+ 77 |         Keyword
+    |         ^^^^^^^^ MISC10
+ 78 |     FINALLY
+ 79 |         RETURN
+    |
+
+test.robot:80:9 MISC10 Unreachable code after RETURN statement
+    |
+ 78 |     FINALLY
+ 79 |         RETURN
+ 80 |         IF    $condition    RETURN
+    |         ^^^^^^^^^^^^^^^^ MISC10
+ 81 |     END
+ 82 |     RETURN
+    |
+
+test.robot:83:5 MISC10 Unreachable code after RETURN statement
+    |
+ 81 |     END
+ 82 |     RETURN
+ 83 |     No Operation
+    |     ^^^^^^^^^^^^^ MISC10
+ 84 |     FOR    ${var}    IN    @{LIST}
+ 85 |         RETURN
+    |
+
+test.robot:86:9 MISC10 Unreachable code after RETURN statement
+    |
+ 84 |     FOR    ${var}    IN    @{LIST}
+ 85 |         RETURN
+ 86 |         Keyword
+    |         ^^^^^^^^ MISC10
+ 87 |         RETURN
+ 88 |     END
+    |
+
+test.robot:106:13 MISC10 Unreachable code after CONTINUE statement
+     |
+ 104 |         IF    '${animal}' == 'cat'
+ 105 |             CONTINUE
+ 106 |             Log  ${animal}  # unreachable log
+     |             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ MISC10
+ 107 |         END
+ 108 |         BREAK
+     |
+
+test.robot:109:9 MISC10 Unreachable code after BREAK statement
+     |
+ 107 |         END
+ 108 |         BREAK
+ 109 |         Log    Unreachable log
+     |         ^^^^^^^^^^^^^^^^^^^^^^^ MISC10
+ 110 |     END
+ 111 |     RETURN
+     |
+
+test.robot:112:5 MISC10 Unreachable code after RETURN statement
+     |
+ 110 |     END
+ 111 |     RETURN
+ 112 |     Log    Unreachable log
+     |     ^^^^^^^^^^^^^^^^^^^^^^^ MISC10
+     |
+
+test.robot:118:13 MISC10 Unreachable code after BREAK statement
+     |
+ 116 |         IF    '${animal}' == 'cat'
+ 117 |             BREAK
+ 118 |             Log  ${animal}  # unreachable code
+     |             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ MISC10
+ 119 |             Log  ${animal}  # should not report here
+ 120 |         END
+     |
+
+test.robot:123:5 MISC10 Unreachable code after RETURN statement
+     |
+ 121 |     END
+ 122 |     RETURN
+ 123 |     IF    $condition    RETURN
+     |     ^^^^^^^^^^^^^^^^ MISC10
+     |
+
diff --git a/tests/linter/rules/misc/unreachable_code/expected_output.txt b/tests/linter/rules/misc/unreachable_code/expected_output.txt
index 3747a5c..4f1c00a 100644
--- a/tests/linter/rules/misc/unreachable_code/expected_output.txt
+++ b/tests/linter/rules/misc/unreachable_code/expected_output.txt
@@ -4,11 +4,11 @@ test.robot:66:9 [W] MISC10 Unreachable code after RETURN statement
 test.robot:70:9 [W] MISC10 Unreachable code after RETURN statement
 test.robot:74:9 [W] MISC10 Unreachable code after RETURN statement
 test.robot:77:9 [W] MISC10 Unreachable code after RETURN statement
-test.robot:80:1 [W] MISC10 Unreachable code after RETURN statement
+test.robot:80:9 [W] MISC10 Unreachable code after RETURN statement
 test.robot:83:5 [W] MISC10 Unreachable code after RETURN statement
 test.robot:86:9 [W] MISC10 Unreachable code after RETURN statement
 test.robot:106:13 [W] MISC10 Unreachable code after CONTINUE statement
 test.robot:109:9 [W] MISC10 Unreachable code after BREAK statement
 test.robot:112:5 [W] MISC10 Unreachable code after RETURN statement
 test.robot:118:13 [W] MISC10 Unreachable code after BREAK statement
-test.robot:123:1 [W] MISC10 Unreachable code after RETURN statement
\ No newline at end of file
+test.robot:123:5 [W] MISC10 Unreachable code after RETURN statement
\ No newline at end of file
diff --git a/tests/linter/rules/misc/unreachable_code/test_rule.py b/tests/linter/rules/misc/unreachable_code/test_rule.py
index 75c649f..da59494 100644
--- a/tests/linter/rules/misc/unreachable_code/test_rule.py
+++ b/tests/linter/rules/misc/unreachable_code/test_rule.py
@@ -4,6 +4,15 @@ from tests.linter.utils import RuleAcceptance
 class TestRuleAcceptance(RuleAcceptance):
     def test_rule_before(self):
         self.check_rule(
+            src_files=["test.robot"],
             expected_file="expected_output.txt",
             test_on_version=">=5.0",
         )
+
+    def test_extended(self):
+        self.check_rule(
+            src_files=["test.robot"],
+            expected_file="expected_extended.txt",
+            output_format="extended",
+            test_on_version=">=5.0",
+        )
diff --git a/tests/linter/utils/__init__.py b/tests/linter/utils/__init__.py
index 00e9bcd..20b7508 100644
--- a/tests/linter/utils/__init__.py
+++ b/tests/linter/utils/__init__.py
@@ -133,6 +133,7 @@ class RuleAcceptance:
                         issue_format=issue_format,
                         threshold=threshold,
                         language=language,
+                        ignore_file_config=True,
                         **kwargs,
                     )
             finally: