_dyno_saver_worker
has a cyclomatic complexity of 17 with "high" risk466
467
468@userge.add_task
469async def _dyno_saver_worker() -> None:470 count = 0
471 check_delay = 5
472 offline_start_time = time.time()
convert_usermode
has a cyclomatic complexity of 21 with "high" risk306 "{tr}convert_usermode -c=12345\n"
307 "{tr}convert_usermode -sc=yourcode"
308}, allow_channels=False)
309async def convert_usermode(msg: Message):310 """ convert to user mode """
311 if bool(config.SESSION_STRING):
312 return await msg.err("already using user mode")
unload
has a cyclomatic complexity of 18 with "high" risk198 'usage': "{tr}unload [flags] [name | names]",
199 'examples': [
200 "{tr}unload -p gdrive", "{tr}unload -c gls gup"]}, del_pre=True, allow_channels=False)
201async def unload(message: Message) -> None:202 """ unload plugins, commands, filters """
203 if not message.flags:
204 await message.err("flag required!")
status
has a cyclomatic complexity of 19 with "high" risk 21 'examples': [
22 "{tr}status", "{tr}status -p",
23 "{tr}status -p gdrive", "{tr}status -c {tr}gls"]}, del_pre=True, allow_channels=False)
24async def status(message: Message) -> None: 25 """ view current status """
26 name_ = message.filtered_input_str
27 type_ = list(message.flags)
update
has a cyclomatic complexity of 18 with "high" risk458 "{tr}update -c -pull : pull latest updates to the core repo",
459 "{tr}update -r -pull : pull latest updates to the plugins repos"]
460}, del_pre=True, allow_channels=False)
461async def update(message: Message):462 """ check or do updates """
463 pull_in_flags = False
464 restart_in_flags = False
A function with high cyclomatic complexity can be hard to understand and maintain. Cyclomatic complexity is a software metric that measures the number of independent paths through a function. A higher cyclomatic complexity indicates that the function has more decision points and is more complex.
Functions with high cyclomatic complexity are more likely to have bugs and be harder to test. They may lead to reduced code maintainability and increased development time.
To reduce the cyclomatic complexity of a function, you can:
def number_to_name():
number = input()
if not number.isdigit():
print("Enter a valid number")
return
number = int(number)
if number >= 10:
print("Number is too big")
return
if number == 1:
print("one")
elif number == 2:
print("two")
elif number == 3:
print("three")
elif number == 4:
print("four")
elif number == 5:
print("five")
elif number == 6:
print("six")
elif number == 7:
print("seven")
elif number == 8:
print("eight")
elif number == 9:
print("nine")
def number_to_name():
number = input()
if not number.isdigit():
print("Enter a valid number")
return
number = int(number)
if number >= 10:
print("Number is too big")
return
names = {
1: "one",
2: "two",
3: "three",
4: "four",
5: "five",
6: "six",
7: "seven",
8: "eight",
9: "nine",
}
print(names[number])
Cyclomatic complexity threshold can be configured using the
cyclomatic_complexity_threshold
meta field in the
.deepsource.toml
config file.
Configuring this is optional. If you don't provide a value, the Analyzer will
raise issues for functions with complexity higher than the default threshold,
which is medium
for the Python Analyzer.
Here's the mapping of the risk category to the cyclomatic complexity score to help you configure this better:
Risk category | Cyclomatic complexity range | Recommended action |
---|---|---|
low | 1-5 | No action needed. |
medium | 6-15 | Review and monitor. |
high | 16-25 | Review and refactor. Recommended to add comments if the function is absolutely needed to be kept as it is. |
very-high | 26-50 | Refactor to reduce the complexity. |
critical | >50 | Must refactor this. This can make the code untestable and very difficult to understand. |