1212from .._compat import tomllib
1313from ..checks .ruff import get_rule_selection , ruff
1414
15- libs = {"AIR" , "ASYNC" , "DJ" , "FAST" , "INT" , "NPY" , "PD" }
16- specialty = {
17- "CPY" , # preview only
18- "A" , # Naming related
19- "N" , # Naming related
20- "ANN" , # Not all rules good
21- "TID" , # Not all rules good
22- "C90" , # Complexity
23- "COM" , # Trailing commas inform the formatter
24- "D" , # Requires everything documented
25- "DOC" , # Style-specific
26- "ERA" , # Check for commented code
27- "FBT" , # Can't be applied to old code very well
28- "FIX" , # TODO's are okay
29- "TD" , # Picky on todo rules
30- "INP" , # Namespace packages are correct sometimes
31- "S" , # Security (can be picky)
32- "SLF" , # Very picky
33- }
15+ # Create using ruff linter --output-format=json > src/sp_repo_review/ruff/linter.json
16+ RESOURCE_DIR = importlib .resources .files ("sp_repo_review.ruff_checks" )
17+ with RESOURCE_DIR .joinpath ("linter.json" ).open (encoding = "utf-8" ) as f :
18+ linter = json .load (f )
19+
20+ LINT_INFO = {r ["prefix" ]: r ["name" ] for r in linter if r ["prefix" ] not in {"" , "F" }}
21+ LINT_INFO = dict (sorted (LINT_INFO .items ()))
22+
23+ with RESOURCE_DIR .joinpath ("select.json" ).open (encoding = "utf-8" ) as f :
24+ select_info = json .load (f )
25+ LIBS = frozenset (select_info ["libs" ])
26+ SPECIALTY = frozenset (r ["name" ] for r in select_info ["specialty" ])
27+
28+ with RESOURCE_DIR .joinpath ("ignore.json" ).open (encoding = "utf-8" ) as f :
29+ IGNORE_INFO = json .load (f )
30+
31+
32+ def print_each (items : dict [str , str ]) -> Iterator [str ]:
33+ for k , v in items .items ():
34+ kk = f'[green]"{ k } "[/green],'
35+ yield f" { kk :23} [dim]# { v } [/dim]"
3436
3537
3638def process_dir (path : Path ) -> None :
@@ -55,32 +57,32 @@ def process_dir(path: Path) -> None:
5557 )
5658 raise SystemExit (2 )
5759
58- # Create using ruff linter --output-format=json > src/sp_repo_review/ruff/linter.json
59- with (
60- importlib .resources .files ("sp_repo_review.ruff_checks" )
61- .joinpath ("linter.json" )
62- .open (encoding = "utf-8" ) as ff
63- ):
64- linter = json .load (ff )
65-
66- lint_info = {r ["prefix" ]: r ["name" ] for r in linter if r ["prefix" ] not in {"" , "F" }}
67- lint_info = dict (sorted (lint_info .items ()))
68-
6960 if "ALL" in selected :
70- selected = frozenset (lint_info .keys ())
71-
72- selected_items = {k : v for k , v in lint_info .items () if k in selected }
73- all_uns_items = {k : v for k , v in lint_info .items () if k not in selected }
61+ ignored = get_rule_selection (ruff_config , "ignore" )
62+ missed = [
63+ r
64+ for r in IGNORE_INFO
65+ if not any (
66+ x .startswith ((r .get ("rule" , "." ), r .get ("family" , "." )))
67+ for x in ignored
68+ )
69+ ]
70+
71+ print ('[green]"ALL"[/green] selected.' )
72+ ignores = {v .get ("rule" , v .get ("family" , "" )): v ["reason" ] for v in missed }
73+ if ignores :
74+ print ("Some things that sometimes need ignoring:" )
75+ for item in print_each (ignores ):
76+ print (item )
77+ return
78+
79+ selected_items = {k : v for k , v in LINT_INFO .items () if k in selected }
80+ all_uns_items = {k : v for k , v in LINT_INFO .items () if k not in selected }
7481 unselected_items = {
75- k : v for k , v in all_uns_items .items () if k not in libs | specialty
82+ k : v for k , v in all_uns_items .items () if k not in LIBS | SPECIALTY
7683 }
77- libs_items = {k : v for k , v in all_uns_items .items () if k in libs }
78- spec_items = {k : v for k , v in all_uns_items .items () if k in specialty }
79-
80- def print_each (items : dict [str , str ]) -> Iterator [str ]:
81- for k , v in items .items ():
82- kk = f'[green]"{ k } "[/green],'
83- yield f" { kk :23} [dim]# { v } [/dim]"
84+ libs_items = {k : v for k , v in all_uns_items .items () if k in LIBS }
85+ spec_items = {k : v for k , v in all_uns_items .items () if k in SPECIALTY }
8486
8587 panel_sel = Panel (
8688 "\n " .join (print_each (selected_items )), title = "Selected" , border_style = "green"
0 commit comments