晋太元中,武陵人捕鱼为业。缘溪行,忘路之远近。忽逢桃花林,夹岸数百步,中无杂树,芳草鲜美,落英缤纷。渔人甚异之,复前行,欲穷其林。 林尽水源,便得一山,山有小口,仿佛若有光。便舍船,从口入。初极狭,才通人。复行数十步,豁然开朗。土地平旷,屋舍俨然,有良田、美池、桑竹之属。阡陌交通,鸡犬相闻。其中往来种作,男女衣着,悉如外人。黄发垂髫,并怡然自乐。 见渔人,乃大惊,问所从来。具答之。便要还家,设酒杀鸡作食。村中闻有此人,咸来问讯。自云先世避秦时乱,率妻子邑人来此绝境,不复出焉,遂与外人间隔。问今是何世,乃不知有汉,无论魏晋。此人一一为具言所闻,皆叹惋。余人各复延至其家,皆出酒食。停数日,辞去。此中人语云:“不足为外人道也。”(间隔 一作:隔绝) 既出,得其船,便扶向路,处处志之。及郡下,诣太守,说如此。太守即遣人随其往,寻向所志,遂迷,不复得路。 南阳刘子骥,高尚士也,闻之,欣然规往。未果,寻病终。后遂无问津者。
| DIR:/opt/cloudlinux/venv/lib64/python3.11/site-packages/prospector/tools/mccabe/ |
| Current File : //opt/cloudlinux/venv/lib64/python3.11/site-packages/prospector/tools/mccabe/__init__.py |
import ast
from mccabe import PathGraphingAstVisitor
from prospector.encoding import CouldNotHandleEncoding, read_py_file
from prospector.message import Location, Message, make_tool_error_message
from prospector.tools.base import ToolBase
__all__ = ("McCabeTool",)
class McCabeTool(ToolBase):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.ignore_codes = ()
self.max_complexity = 10
def configure(self, prospector_config, _):
self.ignore_codes = prospector_config.get_disabled_messages("mccabe")
options = prospector_config.tool_options("mccabe")
if "max-complexity" in options:
self.max_complexity = options["max-complexity"]
def run(self, found_files):
messages = []
for code_file in found_files.python_modules:
try:
contents = read_py_file(code_file)
tree = ast.parse(
contents,
filename=code_file,
)
except CouldNotHandleEncoding as err:
messages.append(
make_tool_error_message(
code_file,
"mccabe",
"MC0000",
message=f"Could not handle the encoding of this file: {err.encoding}",
)
)
continue
except SyntaxError as err:
messages.append(
make_tool_error_message(
code_file,
"mccabe",
"MC0000",
line=err.lineno,
character=err.offset,
message="Syntax Error",
)
)
continue
except TypeError:
messages.append(make_tool_error_message(code_file, "mccabe", "MC0000", message="Unable to parse file"))
continue
visitor = PathGraphingAstVisitor()
visitor.preorder(tree, visitor)
for graph in visitor.graphs.values():
complexity = graph.complexity()
if complexity > self.max_complexity:
location = Location(
path=code_file, module=None, function=graph.entity, line=graph.lineno, character=0
)
message = Message(
source="mccabe",
code="MC0001",
location=location,
message=f"{graph.entity} is too complex ({complexity})",
)
messages.append(message)
return self.filter_messages(messages)
def filter_messages(self, messages):
return [message for message in messages if message.code not in self.ignore_codes]
|