@@ -385,7 +385,7 @@ def add_configs(self) -> None:
385
385
386
386
shared_keys = []
387
387
for key in entry .keys :
388
- shared_keys += key
388
+ shared_keys . append ( key )
389
389
new_file_managers = [
390
390
file_manager
391
391
for file_manager in file_managers
@@ -397,12 +397,12 @@ def add_configs(self) -> None:
397
397
398
398
# Now, use the highest-prority file manager to add the config
399
399
(used_file_manager ,) = file_managers
400
- used_file_manager [entry .keys ] = entry .value
401
400
if first_addition :
402
401
tick_print (
403
402
f"Adding { self .name } config to '{ used_file_manager .relative_path } '."
404
403
)
405
404
first_addition = False
405
+ used_file_manager [entry .keys ] = entry .value
406
406
407
407
def remove_configs (self ) -> None :
408
408
"""Remove the tool's configuration sections.
@@ -1075,8 +1075,7 @@ def get_dev_deps(self, *, unconditional: bool = False) -> list[Dependency]:
1075
1075
def get_config_spec (self ) -> ConfigSpec :
1076
1076
# https://docs.astral.sh/ruff/configuration/#config-file-discovery
1077
1077
1078
- root_value = {"line-length" : 88 }
1079
- lint_value = {"select" : []}
1078
+ line_length = 88
1080
1079
1081
1080
return ConfigSpec .from_flat (
1082
1081
file_managers = [
@@ -1089,22 +1088,23 @@ def get_config_spec(self) -> ConfigSpec:
1089
1088
ConfigItem (
1090
1089
description = "Overall config" ,
1091
1090
root = {
1092
- Path (".ruff.toml" ): ConfigEntry (keys = [], value = root_value ),
1093
- Path ("ruff.toml" ): ConfigEntry (keys = [], value = root_value ),
1094
- Path ("pyproject.toml" ): ConfigEntry (
1095
- keys = ["tool" , "ruff" ], value = root_value
1096
- ),
1091
+ Path (".ruff.toml" ): ConfigEntry (keys = []),
1092
+ Path ("ruff.toml" ): ConfigEntry (keys = []),
1093
+ Path ("pyproject.toml" ): ConfigEntry (keys = ["tool" , "ruff" ]),
1097
1094
},
1098
1095
),
1099
1096
ConfigItem (
1100
- description = "Lint config " ,
1097
+ description = "Line length " ,
1101
1098
root = {
1102
1099
Path (".ruff.toml" ): ConfigEntry (
1103
- keys = ["lint" ], value = lint_value
1100
+ keys = ["line-length" ], value = line_length
1101
+ ),
1102
+ Path ("ruff.toml" ): ConfigEntry (
1103
+ keys = ["line-length" ], value = line_length
1104
1104
),
1105
- Path ("ruff.toml" ): ConfigEntry (keys = ["lint" ], value = lint_value ),
1106
1105
Path ("pyproject.toml" ): ConfigEntry (
1107
- keys = ["tool" , "ruff" , "lint" ], value = lint_value
1106
+ keys = ["tool" , "ruff" , "line-length" ],
1107
+ value = line_length ,
1108
1108
),
1109
1109
},
1110
1110
),
@@ -1174,10 +1174,11 @@ def select_rules(self, rules: list[str]) -> None:
1174
1174
1175
1175
rules_str = ", " .join ([f"'{ rule } '" for rule in rules ])
1176
1176
s = "" if len (rules ) == 1 else "s"
1177
- tick_print (f"Enabling Ruff rule{ s } { rules_str } in 'pyproject.toml'." )
1178
1177
1179
1178
(file_manager ,) = self .get_active_config_file_managers ()
1180
- file_manager .extend_list (keys = ["tool" , "ruff" , "lint" , "select" ], values = rules )
1179
+ tick_print (f"Enabling Ruff rule{ s } { rules_str } in '{ file_manager .name } '." )
1180
+ keys = self ._get_select_keys (file_manager )
1181
+ file_manager .extend_list (keys = keys , values = rules )
1181
1182
1182
1183
def ignore_rules (self , rules : list [str ]) -> None :
1183
1184
"""Ignore Ruff rules in the project."""
@@ -1188,10 +1189,11 @@ def ignore_rules(self, rules: list[str]) -> None:
1188
1189
1189
1190
rules_str = ", " .join ([f"'{ rule } '" for rule in rules ])
1190
1191
s = "" if len (rules ) == 1 else "s"
1191
- tick_print (f"Ignoring Ruff rule{ s } { rules_str } in 'pyproject.toml'." )
1192
1192
1193
1193
(file_manager ,) = self .get_active_config_file_managers ()
1194
- file_manager .extend_list (keys = ["tool" , "ruff" , "lint" , "ignore" ], values = rules )
1194
+ tick_print (f"Ignoring Ruff rule{ s } { rules_str } in '{ file_manager .name } '." )
1195
+ keys = self ._get_ignore_keys (file_manager )
1196
+ file_manager .extend_list (keys = keys , values = rules )
1195
1197
1196
1198
def deselect_rules (self , rules : list [str ]) -> None :
1197
1199
"""Ensure Ruff rules are not selected in the project."""
@@ -1202,18 +1204,18 @@ def deselect_rules(self, rules: list[str]) -> None:
1202
1204
1203
1205
rules_str = ", " .join ([f"'{ rule } '" for rule in rules ])
1204
1206
s = "" if len (rules ) == 1 else "s"
1205
- tick_print (f"Disabling Ruff rule{ s } { rules_str } in 'pyproject.toml'." )
1206
1207
1207
1208
(file_manager ,) = self .get_active_config_file_managers ()
1208
- file_manager .remove_from_list (
1209
- keys = [ "tool" , "ruff" , "lint" , "select" ], values = rules
1210
- )
1209
+ tick_print ( f"Disabling Ruff rule { s } { rules_str } in ' { file_manager .name } '." )
1210
+ keys = self . _get_select_keys ( file_manager )
1211
+ file_manager . remove_from_list ( keys = keys , values = rules )
1211
1212
1212
1213
def get_rules (self ) -> list [str ]:
1213
1214
"""Get the Ruff rules selected in the project."""
1214
1215
(file_manager ,) = self .get_active_config_file_managers ()
1216
+ keys = self ._get_select_keys (file_manager )
1215
1217
try :
1216
- rules : list [str ] = file_manager [[ "tool" , "ruff" , "lint" , "select" ] ]
1218
+ rules : list [str ] = file_manager [keys ]
1217
1219
except KeyError :
1218
1220
rules = []
1219
1221
@@ -1222,13 +1224,42 @@ def get_rules(self) -> list[str]:
1222
1224
def get_ignored_rules (self ) -> list [str ]:
1223
1225
"""Get the Ruff rules ignored in the project."""
1224
1226
(file_manager ,) = self .get_active_config_file_managers ()
1227
+ keys = self ._get_ignore_keys (file_manager )
1225
1228
try :
1226
- rules : list [str ] = file_manager [[ "tool" , "ruff" , "lint" , "ignore" ] ]
1229
+ rules : list [str ] = file_manager [keys ]
1227
1230
except KeyError :
1228
1231
rules = []
1229
1232
1230
1233
return rules
1231
1234
1235
+ @staticmethod
1236
+ def _get_select_keys (file_manager : KeyValueFileManager ) -> list [str ]:
1237
+ """Get the keys for the select rules in the given file manager."""
1238
+ if isinstance (file_manager , PyprojectTOMLManager ):
1239
+ return ["tool" , "ruff" , "lint" , "select" ]
1240
+ elif isinstance (file_manager , RuffTOMLManager | DotRuffTOMLManager ):
1241
+ return ["lint" , "select" ]
1242
+ else :
1243
+ msg = (
1244
+ f"Unknown location for selected ruff rules for file manager "
1245
+ f"'{ file_manager .name } ' of type { file_manager .__class__ .__name__ } ."
1246
+ )
1247
+ raise NotImplementedError (msg )
1248
+
1249
+ @staticmethod
1250
+ def _get_ignore_keys (file_manager : KeyValueFileManager ) -> list [str ]:
1251
+ """Get the keys for the ignored rules in the given file manager."""
1252
+ if isinstance (file_manager , PyprojectTOMLManager ):
1253
+ return ["tool" , "ruff" , "lint" , "ignore" ]
1254
+ elif isinstance (file_manager , RuffTOMLManager | DotRuffTOMLManager ):
1255
+ return ["lint" , "ignore" ]
1256
+ else :
1257
+ msg = (
1258
+ f"Unknown location for ignored ruff rules for file manager "
1259
+ f"'{ file_manager .name } ' of type { file_manager .__class__ .__name__ } ."
1260
+ )
1261
+ raise NotImplementedError (msg )
1262
+
1232
1263
1233
1264
ALL_TOOLS : list [Tool ] = [
1234
1265
CodespellTool (),
0 commit comments