Skip to content

Commit c5e8b27

Browse files
Add TypeAlias for rules (#567)
1 parent 2da4729 commit c5e8b27

File tree

2 files changed

+26
-24
lines changed

2 files changed

+26
-24
lines changed

src/usethis/_tool.py

Lines changed: 24 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,7 @@
7171
from usethis._io import Key, KeyValueFileManager
7272

7373
ResolutionT: TypeAlias = Literal["first", "first_content", "bespoke"]
74+
Rule: TypeAlias = str
7475

7576

7677
class ConfigSpec(BaseModel):
@@ -546,7 +547,7 @@ def update_bitbucket_steps(self) -> None:
546547
):
547548
remove_bitbucket_step_from_default(step)
548549

549-
def get_associated_ruff_rules(self) -> list[str]:
550+
def get_associated_ruff_rules(self) -> list[Rule]:
550551
"""Get the Ruff rule codes associated with the tool.
551552
552553
These are managed rules and it is assumed that they can be removed if the tool
@@ -557,22 +558,22 @@ def get_associated_ruff_rules(self) -> list[str]:
557558
# https://github.com/nathanjmcdougall/usethis-python/issues/499
558559
return []
559560

560-
def is_managed_rule(self, rule: str) -> bool:
561+
def is_managed_rule(self, rule: Rule) -> bool:
561562
"""Determine if a rule is managed by this tool."""
562563
return False
563564

564-
def select_rules(self, rules: list[str]) -> None:
565+
def select_rules(self, rules: list[Rule]) -> None:
565566
"""Select the rules managed by the tool.
566567
567568
These rules are not validated; it is assumed they are valid rules for the tool,
568569
and that the tool will be able to manage them.
569570
"""
570571

571-
def get_selected_rules(self) -> list[str]:
572+
def get_selected_rules(self) -> list[Rule]:
572573
"""Get the rules managed by the tool that are currently selected."""
573574
return []
574575

575-
def ignore_rules(self, rules: list[str]) -> None:
576+
def ignore_rules(self, rules: list[Rule]) -> None:
576577
"""Ignore rules managed by the tool.
577578
578579
Ignoring a rule is different from deselecting it - it means that even if it
@@ -583,11 +584,11 @@ def ignore_rules(self, rules: list[str]) -> None:
583584
and that the tool will be able to manage them.
584585
"""
585586

586-
def get_ignored_rules(self) -> list[str]:
587+
def get_ignored_rules(self) -> list[Rule]:
587588
"""Get the ignored rules managed by the tool."""
588589
return []
589590

590-
def deselect_rules(self, rules: list[str]) -> None:
591+
def deselect_rules(self, rules: list[Rule]) -> None:
591592
"""Deselect the rules managed by the tool.
592593
593594
Any rules that aren't already selected are ignored.
@@ -948,24 +949,24 @@ def get_bitbucket_steps(self) -> list[BitbucketStep]:
948949
)
949950
]
950951

951-
def is_managed_rule(self, rule: str) -> bool:
952+
def is_managed_rule(self, rule: Rule) -> bool:
952953
return rule.startswith("DEP") and rule[3:].isdigit()
953954

954-
def select_rules(self, rules: list[str]) -> None:
955+
def select_rules(self, rules: list[Rule]) -> None:
955956
"""Does nothing for deptry - all rules are automatically enabled by default."""
956957

957-
def get_selected_rules(self) -> list[str]:
958+
def get_selected_rules(self) -> list[Rule]:
958959
"""No notion of selection for deptry.
959960
960961
This doesn't mean rules won't be enabled, it just means we don't keep track
961962
of selection for them.
962963
"""
963964
return []
964965

965-
def deselect_rules(self, rules: list[str]) -> None:
966+
def deselect_rules(self, rules: list[Rule]) -> None:
966967
"""Does nothing for deptry - all rules are automatically enabled by default."""
967968

968-
def ignore_rules(self, rules: list[str]) -> None:
969+
def ignore_rules(self, rules: list[Rule]) -> None:
969970
rules = sorted(set(rules) - set(self.get_ignored_rules()))
970971

971972
if not rules:
@@ -982,11 +983,11 @@ def ignore_rules(self, rules: list[str]) -> None:
982983
keys = self._get_ignore_keys(file_manager)
983984
file_manager.extend_list(keys=keys, values=rules)
984985

985-
def get_ignored_rules(self) -> list[str]:
986+
def get_ignored_rules(self) -> list[Rule]:
986987
(file_manager,) = self.get_active_config_file_managers()
987988
keys = self._get_ignore_keys(file_manager)
988989
try:
989-
rules: list[str] = file_manager[keys]
990+
rules: list[Rule] = file_manager[keys]
990991
except (KeyError, FileNotFoundError):
991992
rules = []
992993

@@ -1559,7 +1560,7 @@ def get_config_spec(self) -> ConfigSpec:
15591560
def get_managed_files(self) -> list[Path]:
15601561
return [Path(".pytest.ini"), Path("pytest.ini"), Path("tests/conftest.py")]
15611562

1562-
def get_associated_ruff_rules(self) -> list[str]:
1563+
def get_associated_ruff_rules(self) -> list[Rule]:
15631564
return ["PT"]
15641565

15651566
def get_active_config_file_managers(self) -> set[KeyValueFileManager]:
@@ -1814,7 +1815,7 @@ def get_bitbucket_steps(self) -> list[BitbucketStep]:
18141815
)
18151816
]
18161817

1817-
def select_rules(self, rules: list[str]) -> None:
1818+
def select_rules(self, rules: list[Rule]) -> None:
18181819
"""Add Ruff rules to the project."""
18191820
rules = sorted(set(rules) - set(self.get_selected_rules()))
18201821

@@ -1832,7 +1833,7 @@ def select_rules(self, rules: list[str]) -> None:
18321833
keys = self._get_select_keys(file_manager)
18331834
file_manager.extend_list(keys=keys, values=rules)
18341835

1835-
def ignore_rules(self, rules: list[str]) -> None:
1836+
def ignore_rules(self, rules: list[Rule]) -> None:
18361837
"""Ignore Ruff rules in the project."""
18371838
rules = sorted(set(rules) - set(self.get_ignored_rules()))
18381839

@@ -1850,7 +1851,7 @@ def ignore_rules(self, rules: list[str]) -> None:
18501851
keys = self._get_ignore_keys(file_manager)
18511852
file_manager.extend_list(keys=keys, values=rules)
18521853

1853-
def deselect_rules(self, rules: list[str]) -> None:
1854+
def deselect_rules(self, rules: list[Rule]) -> None:
18541855
"""Ensure Ruff rules are not selected in the project."""
18551856
rules = list(set(rules) & set(self.get_selected_rules()))
18561857

@@ -1868,24 +1869,24 @@ def deselect_rules(self, rules: list[str]) -> None:
18681869
keys = self._get_select_keys(file_manager)
18691870
file_manager.remove_from_list(keys=keys, values=rules)
18701871

1871-
def get_selected_rules(self) -> list[str]:
1872+
def get_selected_rules(self) -> list[Rule]:
18721873
"""Get the Ruff rules selected in the project."""
18731874
(file_manager,) = self.get_active_config_file_managers()
18741875

18751876
keys = self._get_select_keys(file_manager)
18761877
try:
1877-
rules: list[str] = file_manager[keys]
1878+
rules: list[Rule] = file_manager[keys]
18781879
except (KeyError, FileNotFoundError):
18791880
rules = []
18801881

18811882
return rules
18821883

1883-
def get_ignored_rules(self) -> list[str]:
1884+
def get_ignored_rules(self) -> list[Rule]:
18841885
"""Get the Ruff rules ignored in the project."""
18851886
(file_manager,) = self.get_active_config_file_managers()
18861887
keys = self._get_ignore_keys(file_manager)
18871888
try:
1888-
rules: list[str] = file_manager[keys]
1889+
rules: list[Rule] = file_manager[keys]
18891890
except (KeyError, FileNotFoundError):
18901891
rules = []
18911892

@@ -1930,7 +1931,7 @@ def _are_pydocstyle_rules_selected(self) -> bool:
19301931
return False
19311932

19321933
@staticmethod
1933-
def _is_pydocstyle_rule(rule: str) -> bool:
1934+
def _is_pydocstyle_rule(rule: Rule) -> bool:
19341935
return [d for d in rule if d.isalpha()] == ["D"]
19351936

19361937
def _get_select_keys(self, file_manager: KeyValueFileManager) -> list[str]:

tests/usethis/test_usethis_tool.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
PyprojectTOMLTool,
2626
RequirementsTxtTool,
2727
RuffTool,
28+
Rule,
2829
Tool,
2930
)
3031

@@ -91,7 +92,7 @@ def get_config_spec(self) -> ConfigSpec:
9192
],
9293
)
9394

94-
def get_associated_ruff_rules(self) -> list[str]:
95+
def get_associated_ruff_rules(self) -> list[Rule]:
9596
return ["MYRULE"]
9697

9798
def get_managed_files(self) -> list[Path]:

0 commit comments

Comments
 (0)