Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Crash when running analyzer on a simple folder #86

Open
Sigmanificient opened this issue Jun 21, 2023 · 0 comments
Open

Crash when running analyzer on a simple folder #86

Sigmanificient opened this issue Jun 21, 2023 · 0 comments

Comments

@Sigmanificient
Copy link

I installed sourcery-analytics within my virtual environment.
Using python 3.10 withing NixOS (Linux).

When running the command venv/bin/sourcery-analytics analyze [PATH] the following error occurs

venv/bin/sourcery-analytics analyze vera/rules
Analyzing methods... ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
╭─────────────────────────────── Traceback (most recent call last) ────────────────────────────────╮
│ /home/sigmanificient/dev/bcsc/venv/lib/python3.10/site-packages/sourcery_analytics/main.py:66 in │
│ cli_analyze                                                                                      │
│                                                                                                  │
│    63 │   ]                                                                                      │
│    64 │                                                                                          │
│    65if output is OutputChoice.RICH:                                                        │
│ ❱  66 │   │   analyze_rich_output(method_metric, methods, metrics, sort)                         │
│    67elif output is OutputChoice.PLAIN:                                                     │
│    68 │   │   analyze_plain_output(methods, metrics, sort)                                       │
│    69elif output is OutputChoice.CSV:                                                       │
│                                                                                                  │
│ ╭───────────────────────────────────────── locals ─────────────────────────────────────────╮     │
│ │ method_metric = [                                                                        │     │
│ │                 │   <MethodMetricChoice.LENGTH: 'length'>,                               │     │
│ │                 │   <MethodMetricChoice.CYCLOMATIC_COMPLEXITY: 'cyclomatic_complexity'>, │     │
│ │                 │   <MethodMetricChoice.COGNITIVE_COMPLEXITY: 'cognitive_complexity'>,   │     │
│ │                 │   <MethodMetricChoice.WORKING_MEMORY: 'working_memory'>                │     │
│ │                 ]                                                                        │     │
│ │       methods = <generator object Extractor._extract_from_directory at 0x7f7a7459ee30>   │     │
│ │       metrics = [                                                                        │     │
│ │                 │   <function method_qualname at 0x7f7a74dfecb0>,                        │     │
│ │                 │   <function method_length at 0x7f7a74dfe950>,                          │     │
│ │                 │   <function method_cyclomatic_complexity at 0x7f7a74dfdc60>,           │     │
│ │                 │   <function method_cognitive_complexity at 0x7f7a74dfd990>,            │     │
│ │                 │   <function method_working_memory at 0x7f7a74dff490>                   │     │
│ │                 ]                                                                        │     │
│ │        output = <OutputChoice.RICH: 'rich'>                                              │     │
│ │          path = PosixPath('vera/rules')                                                  │     │
│ │          sort = <MethodMetricChoice.LENGTH: 'length'>                                    │     │
│ ╰──────────────────────────────────────────────────────────────────────────────────────────╯     │
│                                                                                                  │
│ /home/sigmanificient/dev/bcsc/venv/lib/python3.10/site-packages/sourcery_analytics/cli/partials. │
│ py:23 in analyze_rich_output                                                                     │
│                                                                                                  │
│    20console = rich.console.Console()                                                       │
│    21methods_progress = rich.progress.track(methods, description="Analyzing methods...")    │
│    22analysis: typing.List[NamedMetricResult] = sorted(                                     │
│ ❱  23 │   │   analyze(methods_progress, metrics=metrics),                                        │
│    24 │   │   key=operator.itemgetter(sort.method_method_name),                                  │
│    25 │   │   reverse=True,                                                                      │
│    26 │   )                                                                                      │
│                                                                                                  │
│ ╭────────────────────────────────────────── locals ───────────────────────────────────────────╮  │
│ │          console = <console width=114 ColorSystem.TRUECOLOR>                                │  │
│ │    method_metric = [                                                                        │  │
│ │                    │   <MethodMetricChoice.LENGTH: 'length'>,                               │  │
│ │                    │   <MethodMetricChoice.CYCLOMATIC_COMPLEXITY: 'cyclomatic_complexity'>, │  │
│ │                    │   <MethodMetricChoice.COGNITIVE_COMPLEXITY: 'cognitive_complexity'>,   │  │
│ │                    │   <MethodMetricChoice.WORKING_MEMORY: 'working_memory'>                │  │
│ │                    ]                                                                        │  │
│ │          methods = <generator object Extractor._extract_from_directory at 0x7f7a7459ee30>   │  │
│ │ methods_progress = <generator object track at 0x7f7a7459f290>                               │  │
│ │          metrics = [                                                                        │  │
│ │                    │   <function method_qualname at 0x7f7a74dfecb0>,                        │  │
│ │                    │   <function method_length at 0x7f7a74dfe950>,                          │  │
│ │                    │   <function method_cyclomatic_complexity at 0x7f7a74dfdc60>,           │  │
│ │                    │   <function method_cognitive_complexity at 0x7f7a74dfd990>,            │  │
│ │                    │   <function method_working_memory at 0x7f7a74dff490>                   │  │
│ │                    ]                                                                        │  │
│ │             sort = <MethodMetricChoice.LENGTH: 'length'>                                    │  │
│ ╰─────────────────────────────────────────────────────────────────────────────────────────────╯  │
│                                                                                                  │
│ /home/sigmanificient/dev/bcsc/venv/lib/python3.10/site-packages/sourcery_analytics/analysis.py:1 │
│ 27 in analyze                                                                                    │
│                                                                                                  │
│   124metrics = more_itertools.always_iterable(metrics)                                      │
│   125metric = compounder(*metrics)                                                          │
│   126results = (metric(node) for node in nodes)                                             │
│ ❱ 127return aggregation(results)                                                            │
│   128                                                                                            │
│   129                                                                                            │
│   130 def assess(                                                                                │
│                                                                                                  │
│ ╭─────────────────────────────────── locals ────────────────────────────────────╮                │
│ │ aggregation = <class 'list'>                                                  │                │
│ │  compounder = <function name_metrics at 0x7f7a74e0c040>                       │                │
│ │      metric = <function name_metrics.<locals>.name_dict at 0x7f7a745df250>    │                │
│ │     metrics = <list_iterator object at 0x7f7a745ed5d0>                        │                │
│ │       nodes = <generator object track at 0x7f7a7459f290>                      │                │
│ │     results = <generator object analyze.<locals>.<genexpr> at 0x7f7a7459f300> │                │
│ ╰───────────────────────────────────────────────────────────────────────────────╯                │
│                                                                                                  │
│ /home/sigmanificient/dev/bcsc/venv/lib/python3.10/site-packages/sourcery_analytics/analysis.py:1 │
│ 26 in <genexpr>                                                                                  │
│                                                                                                  │
│   123nodes = more_itertools.always_iterable(nodes, base_type=astroid.nodes.NodeNG)          │
│   124metrics = more_itertools.always_iterable(metrics)                                      │
│   125metric = compounder(*metrics)                                                          │
│ ❱ 126results = (metric(node) for node in nodes)                                             │
│   127return aggregation(results)                                                            │
│   128                                                                                            │
│   129                                                                                            │
│                                                                                                  │
│ ╭─────────────────────────────── locals ────────────────────────────────╮                        │
│ │     .0 = <generator object track at 0x7f7a7459f290>                   │                        │
│ │ metric = <function name_metrics.<locals>.name_dict at 0x7f7a745df250> │                        │
│ │   node = <FunctionDef.check_epitech_header l.23 at 0x7f7a745ef6a0>    │                        │
│ ╰───────────────────────────────────────────────────────────────────────╯                        │
│                                                                                                  │
│ /home/sigmanificient/dev/bcsc/venv/lib/python3.10/site-packages/sourcery_analytics/metrics/compo │
│ unders.py:29 in name_dict                                                                        │
│                                                                                                  │
│   26"""A compounder which joins the result as a dictionary keyed on the metric names.""     │
│   27 │                                                                                           │
│   28 │   def name_dict(node: astroid.nodes.NodeNG) -> "NamedMetricResult":                       │
│ ❱ 29 │   │   return NamedMetricResult({metric.__name__: metric(node) for metric in metrics})     │
│   30 │                                                                                           │
│   31 │   return name_dict                                                                        │
│   32                                                                                             │
│                                                                                                  │
│ ╭───────────────────────────────── locals ─────────────────────────────────╮                     │
│ │ metrics = (                                                              │                     │
│ │           │   <function method_qualname at 0x7f7a74dfecb0>,              │                     │
│ │           │   <function method_length at 0x7f7a74dfe950>,                │                     │
│ │           │   <function method_cyclomatic_complexity at 0x7f7a74dfdc60>, │                     │
│ │           │   <function method_cognitive_complexity at 0x7f7a74dfd990>,  │                     │
│ │           │   <function method_working_memory at 0x7f7a74dff490>         │                     │
│ │           )                                                              │                     │
│ │    node = <FunctionDef.check_epitech_header l.23 at 0x7f7a745ef6a0>      │                     │
│ ╰──────────────────────────────────────────────────────────────────────────╯                     │
│                                                                                                  │
│ /home/sigmanificient/dev/bcsc/venv/lib/python3.10/site-packages/sourcery_analytics/metrics/compo │
│ unders.py:29 in <dictcomp>                                                                       │
│                                                                                                  │
│   26 │   """A compounder which joins the result as a dictionary keyed on the metric names.""     │
│   27 │                                                                                           │
│   28def name_dict(node: astroid.nodes.NodeNG) -> "NamedMetricResult":                       │
│ ❱ 29 │   │   return NamedMetricResult({metric.__name__: metric(node) for metric in metrics})     │
│   30 │                                                                                           │
│   31return name_dict                                                                        │
│   32                                                                                             │
│                                                                                                  │
│ ╭────────────────────────────── locals ──────────────────────────────╮                           │
│ │     .0 = <tuple_iterator object at 0x7f7a745efe20>                 │                           │
│ │ metric = <function method_length at 0x7f7a74dfe950>                │                           │
│ │   node = <FunctionDef.check_epitech_header l.23 at 0x7f7a745ef6a0> │                           │
│ ╰────────────────────────────────────────────────────────────────────╯                           │
│                                                                                                  │
│ /home/sigmanificient/dev/bcsc/venv/lib/python3.10/site-packages/sourcery_analytics/utils.py:50   │
│ in wrapped                                                                                       │
│                                                                                                  │
│    47 │   @functools.wraps(node_function)                                                        │
│    48def wrapped(item: NT) -> T:                                                            │
│    49 │   │   if isinstance(item, astroid.nodes.NodeNG):                                         │
│ ❱  50 │   │   │   return node_function(item)                                                     │
│    51 │   │   if isinstance(item, str):                                                          │
│    52 │   │   │   node = astroid.extract_node(item)                                              │
│    53 │   │   │   return node_function(node)                                                     │
│                                                                                                  │
│ ╭───────────────────────────────── locals ──────────────────────────────────╮                    │
│ │          item = <FunctionDef.check_epitech_header l.23 at 0x7f7a745ef6a0> │                    │
│ │       manager = <astroid.manager.AstroidManager object at 0x7f7a74df0340> │                    │
│ │ node_function = <function method_length at 0x7f7a74dfea70>                │                    │
│ ╰───────────────────────────────────────────────────────────────────────────╯                    │
│                                                                                                  │
│ /home/sigmanificient/dev/bcsc/venv/lib/python3.10/site-packages/sourcery_analytics/utils.py:100  │
│ in wrapped                                                                                       │
│                                                                                                  │
│    97 │   │   │   │   │   f"for nodes of type {type(node)}. "                                    │
│    98 │   │   │   │   │   f"Allowed types are: {types}."                                         │
│    99 │   │   │   │   )                                                                          │
│ ❱ 100 │   │   │   return node_function(node)                                                     │
│   101 │   │                                                                                      │
│   102 │   │   return wrapped                                                                     │
│   103                                                                                            │
│                                                                                                  │
│ ╭───────────────────────────────── locals ──────────────────────────────────╮                    │
│ │          node = <FunctionDef.check_epitech_header l.23 at 0x7f7a745ef6a0> │                    │
│ │ node_function = <function method_length at 0x7f7a74dfe9e0>                │                    │
│ │         types = (<class 'astroid.scoped_nodes.FunctionDef'>,)             │                    │
│ ╰───────────────────────────────────────────────────────────────────────────╯                    │
│                                                                                                  │
│ /home/sigmanificient/dev/bcsc/venv/lib/python3.10/site-packages/sourcery_analytics/metrics/metho │
│ d_length.py:26 in method_lengthvenv/bin/sourcery-analytics analyze
│                                                                                                  │
│   23 │   │   >>> method_length("def add(x, y): z = x + y; return z")                             │
│   24 │   │   2                                                                                   │
│   25"""                                                                                     │
│ ❱ 26 │   return total_statement_count(method)                                                    │
│   27                                                                                             │
│   28                                                                                             │
│   29 @nodedispatch                                                                               │
│                                                                                                  │
│ ╭────────────────────────────── locals ──────────────────────────────╮                           │
│ │ method = <FunctionDef.check_epitech_header l.23 at 0x7f7a745ef6a0> │                           │
│ ╰────────────────────────────────────────────────────────────────────╯                           │
│                                                                                                  │
│ /home/sigmanificient/dev/bcsc/venv/lib/python3.10/site-packages/sourcery_analytics/utils.py:50   │
│ in wrapped                                                                                       │
│                                                                                                  │
│    47 │   @functools.wraps(node_function)                                                        │
│    48 │   def wrapped(item: NT) -> T:                                                            │
│    49 │   │   if isinstance(item, astroid.nodes.NodeNG):                                         │
│ ❱  50 │   │   │   return node_function(item)                                                     │
│    51 │   │   if isinstance(item, str):                                                          │
│    52 │   │   │   node = astroid.extract_node(item)                                              │
│    53 │   │   │   return node_function(node)                                                     │
│                                                                                                  │
│ ╭───────────────────────────────── locals ──────────────────────────────────╮                    │
│ │          item = <FunctionDef.check_epitech_header l.23 at 0x7f7a745ef6a0> │                    │
│ │       manager = <astroid.manager.AstroidManager object at 0x7f7a74df03d0> │                    │
│ │ node_function = <function total_statement_count at 0x7f7a74dfeb00>        │                    │
│ ╰───────────────────────────────────────────────────────────────────────────╯                    │
│                                                                                                  │
│ /home/sigmanificient/dev/bcsc/venv/lib/python3.10/site-packages/sourcery_analytics/metrics/metho │
│ d_length.py:41 in total_statement_count                                                          │
│                                                                                                  │
│   38 │   │   2                                                                                   │
│   39 │   """                                                                                     │
│   40visitor = TreeVisitor[int, int](FunctionVisitor(statement_count), collector=sum)        │
│ ❱ 41return visitor.visit(node)                                                              │
│   42                                                                                             │
│   43                                                                                             │
│   44 def statement_count(node: astroid.nodes.NodeNG) -> int:                                     │
│                                                                                                  │
│ ╭─────────────────────────────────── locals ───────────────────────────────────╮                 │
│ │    node = <FunctionDef.check_epitech_header l.23 at 0x7f7a745ef6a0>          │                 │
│ │ visitor = <sourcery_analytics.visitors.TreeVisitor object at 0x7f7a745efe50> │                 │
│ ╰──────────────────────────────────────────────────────────────────────────────╯                 │
│                                                                                                  │
│ /home/sigmanificient/dev/bcsc/venv/lib/python3.10/site-packages/sourcery_analytics/visitors.py:5 │
│ 3 in visit                                                                                       │
│                                                                                                  │
│    50def visit(self, node: astroid.nodes.NodeNG) -> P:                                      │
│    51 │   │   """Enters the node and returns a fact about it."""                                 │
│    52 │   │   with self.enter(node):                                                             │
│ ❱  53 │   │   │   return self.touch(node)                                                        │
│    54                                                                                            │
│    55                                                                                            │
│    56 class IdentityVisitor(Visitor[astroid.nodes.NodeNG]):                                      │
│                                                                                                  │
│ ╭───────────────────────────────── locals ──────────────────────────────────╮                    │
│ │ node = <FunctionDef.check_epitech_header l.23 at 0x7f7a745ef6a0>          │                    │
│ │ self = <sourcery_analytics.visitors.TreeVisitor object at 0x7f7a745efe50> │                    │
│ ╰───────────────────────────────────────────────────────────────────────────╯                    │
│                                                                                                  │
│ /home/sigmanificient/dev/bcsc/venv/lib/python3.10/site-packages/sourcery_analytics/visitors.py:2 │
│ 01 in touch                                                                                      │
│                                                                                                  │
│   198 │   │   │   │   yield from self._visit(child)                                              │
│   199 │                                                                                          │
│   200def touch(self, node: astroid.nodes.NodeNG) -> Q:                                      │
│ ❱ 201 │   │   return self.collector(self._visit(node))                                           │
│   202                                                                                            │
│                                                                                                  │
│ ╭───────────────────────────────── locals ──────────────────────────────────╮                    │
│ │ node = <FunctionDef.check_epitech_header l.23 at 0x7f7a745ef6a0>          │                    │
│ │ self = <sourcery_analytics.visitors.TreeVisitor object at 0x7f7a745efe50> │                    │
│ ╰───────────────────────────────────────────────────────────────────────────╯                    │
│                                                                                                  │
│ /home/sigmanificient/dev/bcsc/venv/lib/python3.10/site-packages/sourcery_analytics/visitors.py:1 │
│ 98 in _visit                                                                                     │
│                                                                                                  │
│   195 │   │   yield self.sub_visitor.touch(node)                                                 │
│   196 │   │   for child in node.get_children():                                                  │
│   197 │   │   │   with self.enter(child):                                                        │
│ ❱ 198 │   │   │   │   yield from self._visit(child)                                              │
│   199 │                                                                                          │
│   200def touch(self, node: astroid.nodes.NodeNG) -> Q:                                      │
│   201 │   │   return self.collector(self._visit(node))                                           │
│                                                                                                  │
│ ╭────────────────────────────────── locals ──────────────────────────────────╮                   │
│ │ child = <Arguments l.23 at 0x7f7a745ee530>                                 │                   │
│ │  node = <FunctionDef.check_epitech_header l.23 at 0x7f7a745ef6a0>          │                   │
│ │  self = <sourcery_analytics.visitors.TreeVisitor object at 0x7f7a745efe50> │                   │
│ ╰────────────────────────────────────────────────────────────────────────────╯                   │
│                                                                                                  │
│ /home/sigmanificient/dev/bcsc/venv/lib/python3.10/site-packages/sourcery_analytics/visitors.py:1 │
│ 95 in _visit                                                                                     │
│                                                                                                  │
│   192 │   │   │   yield                                                                          │
│   193 │                                                                                          │
│   194def _visit(self, node: astroid.nodes.NodeNG):                                          │
│ ❱ 195 │   │   yield self.sub_visitor.touch(node)                                                 │
│   196 │   │   for child in node.get_children():                                                  │
│   197 │   │   │   with self.enter(child):                                                        │
│   198 │   │   │   │   yield from self._visit(child)                                              │
│                                                                                                  │
│ ╭───────────────────────────────── locals ──────────────────────────────────╮                    │
│ │ node = <Arguments l.23 at 0x7f7a745ee530>                                 │                    │
│ │ self = <sourcery_analytics.visitors.TreeVisitor object at 0x7f7a745efe50> │                    │
│ ╰───────────────────────────────────────────────────────────────────────────╯                    │
│                                                                                                  │
│ /home/sigmanificient/dev/bcsc/venv/lib/python3.10/site-packages/sourcery_analytics/visitors.py:7 │
│ 8 in touch                                                                                       │
│                                                                                                  │
│    75 │   │   self.function = function                                                           │
│    76 │                                                                                          │
│    77def touch(self, node: astroid.nodes.NodeNG) -> P:                                      │
│ ❱  78 │   │   return self.function(node)                                                         │
│    79                                                                                            │
│    80                                                                                            │
│    81 class ConditionalVisitor(Visitor[typing.Optional[P]], typing.Generic[P]):                  │
│                                                                                                  │
│ ╭─────────────────────────────────── locals ────────────────────────────────────╮                │
│ │ node = <Arguments l.23 at 0x7f7a745ee530>                                     │                │
│ │ self = <sourcery_analytics.visitors.FunctionVisitor object at 0x7f7a745efdc0> │                │
│ ╰───────────────────────────────────────────────────────────────────────────────╯                │
│                                                                                                  │
│ /home/sigmanificient/dev/bcsc/venv/lib/python3.10/site-packages/sourcery_analytics/metrics/metho │
│ d_length.py:58 in statement_count                                                                │
│                                                                                                  │
│   55 │   │   ),                                                                                  │
│   56 │   ):                                                                                      │
│   57 │   │   return 0                                                                            │
│ ❱ 58if not isinstance(node, astroid.nodes.Statement):                                       │
│   59 │   │   return 0                                                                            │
│   60return 1                                                                                │
│   61                                                                                             │
│                                                                                                  │
│ ╭───────────────── locals ──────────────────╮                                                    │
│ │ node = <Arguments l.23 at 0x7f7a745ee530> │                                                    │
│ ╰───────────────────────────────────────────╯                                                    │
╰──────────────────────────────────────────────────────────────────────────────────────────────────╯
AttributeError: module 'astroid.nodes' has no attribute 'Statement'
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant