alot/commands/globals.py

Summary

Maintainability
F
4 days
Test Coverage

File globals.py has 998 lines of code (exceeds 250 allowed). Consider refactoring.
Open

# Copyright (C) 2011-2012  Patrick Totzke <patricktotzke@gmail.com>
# Copyright © 2018 Dylan Baker
# This file is released under the GNU GPL, version 3 or a later revision.
# For further details see the COPYING file
import argparse
Severity: Major
Found in alot/commands/globals.py - About 2 days to fix

    Function apply has a Cognitive Complexity of 15 (exceeds 5 allowed). Consider refactoring.
    Open

        def apply(self, ui):
            logging.debug('HELP')
            if self.commandname == 'bindings':
                text_att = settings.get_theming_attribute('help', 'text')
                title_att = settings.get_theming_attribute('help', 'title')
    Severity: Minor
    Found in alot/commands/globals.py - About 1 hr to fix

    Cognitive Complexity

    Cognitive Complexity is a measure of how difficult a unit of code is to intuitively understand. Unlike Cyclomatic Complexity, which determines how difficult your code will be to test, Cognitive Complexity tells you how difficult your code will be to read and comprehend.

    A method's cognitive complexity is based on a few simple rules:

    • Code is not considered more complex when it uses shorthand that the language provides for collapsing multiple statements into one
    • Code is considered more complex for each "break in the linear flow of the code"
    • Code is considered more complex when "flow breaking structures are nested"

    Further reading

    Function __init__ has 15 arguments (exceeds 4 allowed). Consider refactoring.
    Open

        def __init__(
    Severity: Major
    Found in alot/commands/globals.py - About 1 hr to fix

      Function apply has a Cognitive Complexity of 14 (exceeds 5 allowed). Consider refactoring.
      Open

          def apply(self, ui):
              try:
                  ui.dbman.flush()
                  if callable(self.callback):
                      self.callback()
      Severity: Minor
      Found in alot/commands/globals.py - About 1 hr to fix

      Cognitive Complexity

      Cognitive Complexity is a measure of how difficult a unit of code is to intuitively understand. Unlike Cyclomatic Complexity, which determines how difficult your code will be to test, Cognitive Complexity tells you how difficult your code will be to read and comprehend.

      A method's cognitive complexity is based on a few simple rules:

      • Code is not considered more complex when it uses shorthand that the language provides for collapsing multiple statements into one
      • Code is considered more complex for each "break in the linear flow of the code"
      • Code is considered more complex when "flow breaking structures are nested"

      Further reading

      Function apply has a Cognitive Complexity of 14 (exceeds 5 allowed). Consider refactoring.
      Open

          def apply(self, ui):
              if self.query:
                  open_searches = ui.get_buffers_of_type(buffers.SearchBuffer)
                  to_be_focused = None
                  for sb in open_searches:
      Severity: Minor
      Found in alot/commands/globals.py - About 1 hr to fix

      Cognitive Complexity

      Cognitive Complexity is a measure of how difficult a unit of code is to intuitively understand. Unlike Cyclomatic Complexity, which determines how difficult your code will be to test, Cognitive Complexity tells you how difficult your code will be to read and comprehend.

      A method's cognitive complexity is based on a few simple rules:

      • Code is not considered more complex when it uses shorthand that the language provides for collapsing multiple statements into one
      • Code is considered more complex for each "break in the linear flow of the code"
      • Code is considered more complex when "flow breaking structures are nested"

      Further reading

      Function __init__ has 8 arguments (exceeds 4 allowed). Consider refactoring.
      Open

          def __init__(self, cmd, stdin=None, shell=False, spawn=False,
      Severity: Major
      Found in alot/commands/globals.py - About 1 hr to fix

        Function apply has a Cognitive Complexity of 9 (exceeds 5 allowed). Consider refactoring.
        Open

            def apply(self, ui):
                if self.movement in ['up', 'down', 'page up', 'page down']:
                    ui.mainloop.process_input([self.movement])
                elif self.movement in ['halfpage down', 'halfpage up']:
                    ui.mainloop.process_input(
        Severity: Minor
        Found in alot/commands/globals.py - About 55 mins to fix

        Cognitive Complexity

        Cognitive Complexity is a measure of how difficult a unit of code is to intuitively understand. Unlike Cyclomatic Complexity, which determines how difficult your code will be to test, Cognitive Complexity tells you how difficult your code will be to read and comprehend.

        A method's cognitive complexity is based on a few simple rules:

        • Code is not considered more complex when it uses shorthand that the language provides for collapsing multiple statements into one
        • Code is considered more complex for each "break in the linear flow of the code"
        • Code is considered more complex when "flow breaking structures are nested"

        Further reading

        Function __init__ has a Cognitive Complexity of 8 (exceeds 5 allowed). Consider refactoring.
        Open

            def __init__(self, cmd, stdin=None, shell=False, spawn=False,
                         refocus=True, thread=False, on_success=None, **kwargs):
                """
                :param cmd: the command to call
                :type cmd: list or str
        Severity: Minor
        Found in alot/commands/globals.py - About 45 mins to fix

        Cognitive Complexity

        Cognitive Complexity is a measure of how difficult a unit of code is to intuitively understand. Unlike Cyclomatic Complexity, which determines how difficult your code will be to test, Cognitive Complexity tells you how difficult your code will be to read and comprehend.

        A method's cognitive complexity is based on a few simple rules:

        • Code is not considered more complex when it uses shorthand that the language provides for collapsing multiple statements into one
        • Code is considered more complex for each "break in the linear flow of the code"
        • Code is considered more complex when "flow breaking structures are nested"

        Further reading

        Function __init__ has a Cognitive Complexity of 8 (exceeds 5 allowed). Consider refactoring.
        Open

            def __init__(self, path, spawn=None, thread=None, **kwargs):
                """
                :param path: path to the file to be edited
                :type path: str
                :param spawn: force running edtor in a new terminal
        Severity: Minor
        Found in alot/commands/globals.py - About 45 mins to fix

        Cognitive Complexity

        Cognitive Complexity is a measure of how difficult a unit of code is to intuitively understand. Unlike Cyclomatic Complexity, which determines how difficult your code will be to test, Cognitive Complexity tells you how difficult your code will be to read and comprehend.

        A method's cognitive complexity is based on a few simple rules:

        • Code is not considered more complex when it uses shorthand that the language provides for collapsing multiple statements into one
        • Code is considered more complex for each "break in the linear flow of the code"
        • Code is considered more complex when "flow breaking structures are nested"

        Further reading

        Function _set_envelope has a Cognitive Complexity of 8 (exceeds 5 allowed). Consider refactoring.
        Open

            def _set_envelope(self):
                if self.envelope is None:
                    if self.rest:
                        if self.rest.startswith('mailto'):
                            self.envelope = mailto_to_envelope(self.rest)
        Severity: Minor
        Found in alot/commands/globals.py - About 45 mins to fix

        Cognitive Complexity

        Cognitive Complexity is a measure of how difficult a unit of code is to intuitively understand. Unlike Cyclomatic Complexity, which determines how difficult your code will be to test, Cognitive Complexity tells you how difficult your code will be to read and comprehend.

        A method's cognitive complexity is based on a few simple rules:

        • Code is not considered more complex when it uses shorthand that the language provides for collapsing multiple statements into one
        • Code is considered more complex for each "break in the linear flow of the code"
        • Code is considered more complex when "flow breaking structures are nested"

        Further reading

        Function apply has a Cognitive Complexity of 7 (exceeds 5 allowed). Consider refactoring.
        Open

            def apply(self, ui):
                if self.buffer is None:
                    if self.index is not None:
                        try:
                            self.buffer = ui.buffers[self.index]
        Severity: Minor
        Found in alot/commands/globals.py - About 35 mins to fix

        Cognitive Complexity

        Cognitive Complexity is a measure of how difficult a unit of code is to intuitively understand. Unlike Cyclomatic Complexity, which determines how difficult your code will be to test, Cognitive Complexity tells you how difficult your code will be to read and comprehend.

        A method's cognitive complexity is based on a few simple rules:

        • Code is not considered more complex when it uses shorthand that the language provides for collapsing multiple statements into one
        • Code is considered more complex for each "break in the linear flow of the code"
        • Code is considered more complex when "flow breaking structures are nested"

        Further reading

        Function _set_base_attributes has a Cognitive Complexity of 7 (exceeds 5 allowed). Consider refactoring.
        Open

            def _set_base_attributes(self):
                # set forced headers
                for key, value in self.headers.items():
                    self.envelope.add(key, value)
        
        
        Severity: Minor
        Found in alot/commands/globals.py - About 35 mins to fix

        Cognitive Complexity

        Cognitive Complexity is a measure of how difficult a unit of code is to intuitively understand. Unlike Cyclomatic Complexity, which determines how difficult your code will be to test, Cognitive Complexity tells you how difficult your code will be to read and comprehend.

        A method's cognitive complexity is based on a few simple rules:

        • Code is not considered more complex when it uses shorthand that the language provides for collapsing multiple statements into one
        • Code is considered more complex for each "break in the linear flow of the code"
        • Code is considered more complex when "flow breaking structures are nested"

        Further reading

        Function _set_attachments has a Cognitive Complexity of 6 (exceeds 5 allowed). Consider refactoring.
        Open

            def _set_attachments(self):
                if self.attach:
                    for gpath in self.attach:
                        for a in glob.glob(gpath):
                            self.envelope.attach(a)
        Severity: Minor
        Found in alot/commands/globals.py - About 25 mins to fix

        Cognitive Complexity

        Cognitive Complexity is a measure of how difficult a unit of code is to intuitively understand. Unlike Cyclomatic Complexity, which determines how difficult your code will be to test, Cognitive Complexity tells you how difficult your code will be to read and comprehend.

        A method's cognitive complexity is based on a few simple rules:

        • Code is not considered more complex when it uses shorthand that the language provides for collapsing multiple statements into one
        • Code is considered more complex for each "break in the linear flow of the code"
        • Code is considered more complex when "flow breaking structures are nested"

        Further reading

        TODO found
        Open

        # TODO: choices
        Severity: Minor
        Found in alot/commands/globals.py by fixme

        TODO found
        Open

                # TODO: these can probably be refactored in terms of helper.call_cmd
        Severity: Minor
        Found in alot/commands/globals.py by fixme

        XXX found
        Open

                        # XXX: is utf-8 always safe to use here, or do we need to check
        Severity: Minor
        Found in alot/commands/globals.py by fixme

        Too many blank lines (3)
        Open

        @registerCommand(
        Severity: Minor
        Found in alot/commands/globals.py by pep8

        Separate top-level function and class definitions with two blank lines.

        Method definitions inside a class are separated by a single blank
        line.
        
        Extra blank lines may be used (sparingly) to separate groups of
        related functions.  Blank lines may be omitted between a bunch of
        related one-liners (e.g. a set of dummy implementations).
        
        Use blank lines in functions, sparingly, to indicate logical
        sections.
        
        Okay: def a():\n    pass\n\n\ndef b():\n    pass
        Okay: def a():\n    pass\n\n\nasync def b():\n    pass
        Okay: def a():\n    pass\n\n\n# Foo\n# Bar\n\ndef b():\n    pass
        Okay: default = 1\nfoo = 1
        Okay: classify = 1\nfoo = 1
        
        E301: class Foo:\n    b = 0\n    def bar():\n        pass
        E302: def a():\n    pass\n\ndef b(n):\n    pass
        E302: def a():\n    pass\n\nasync def b(n):\n    pass
        E303: def a():\n    pass\n\n\n\ndef b(n):\n    pass
        E303: def a():\n\n\n\n    pass
        E304: @decorator\n\ndef a():\n    pass
        E305: def a():\n    pass\na()
        E306: def a():\n    def b():\n        pass\n    def c():\n        pass

        Line break after binary operator
        Open

                        if (isinstance(buffer, buffers.EnvelopeBuffer) and
        Severity: Minor
        Found in alot/commands/globals.py by pep8

        Avoid breaks after binary operators.

        The preferred place to break around a binary operator is before the
        operator, not after it.
        
        W504: (width == 0 +\n height == 0)
        W504: (width == 0 and\n height == 0)
        W504: var = (1 &\n       ~2)
        
        Okay: foo(\n    -x)
        Okay: foo(x\n    [])
        Okay: x = '''\n''' + ''
        Okay: x = '' + '''\n'''
        Okay: foo(x,\n    -y)
        Okay: foo(x,  # comment\n    -y)
        
        The following should be W504 but unary_context is tricky with these
        Okay: var = (1 /\n       -2)
        Okay: var = (1 +\n       -1 +\n       -2)

        Line break after binary operator
        Open

                if (isinstance(self.buffer, buffers.EnvelopeBuffer) and
        Severity: Minor
        Found in alot/commands/globals.py by pep8

        Avoid breaks after binary operators.

        The preferred place to break around a binary operator is before the
        operator, not after it.
        
        W504: (width == 0 +\n height == 0)
        W504: (width == 0 and\n height == 0)
        W504: var = (1 &\n       ~2)
        
        Okay: foo(\n    -x)
        Okay: foo(x\n    [])
        Okay: x = '''\n''' + ''
        Okay: x = '' + '''\n'''
        Okay: foo(x,\n    -y)
        Okay: foo(x,  # comment\n    -y)
        
        The following should be W504 but unary_context is tricky with these
        Okay: var = (1 /\n       -2)
        Okay: var = (1 +\n       -1 +\n       -2)

        Line break after binary operator
        Open

                                                            msg_position='left')) ==
        Severity: Minor
        Found in alot/commands/globals.py by pep8

        Avoid breaks after binary operators.

        The preferred place to break around a binary operator is before the
        operator, not after it.
        
        W504: (width == 0 +\n height == 0)
        W504: (width == 0 and\n height == 0)
        W504: var = (1 &\n       ~2)
        
        Okay: foo(\n    -x)
        Okay: foo(x\n    [])
        Okay: x = '''\n''' + ''
        Okay: x = '' + '''\n'''
        Okay: foo(x,\n    -y)
        Okay: foo(x,  # comment\n    -y)
        
        The following should be W504 but unary_context is tricky with these
        Okay: var = (1 /\n       -2)
        Okay: var = (1 +\n       -1 +\n       -2)

        Continuation line over-indented for hanging indent
        Open

                            "None" if proc is None else proc.returncode,
        Severity: Minor
        Found in alot/commands/globals.py by pep8

        Continuation lines indentation.

        Continuation lines should align wrapped elements either vertically
        using Python's implicit line joining inside parentheses, brackets
        and braces, or using a hanging indent.
        
        When using a hanging indent these considerations should be applied:
        - there should be no arguments on the first line, and
        - further indentation should be used to clearly distinguish itself
          as a continuation line.
        
        Okay: a = (\n)
        E123: a = (\n    )
        
        Okay: a = (\n    42)
        E121: a = (\n   42)
        E122: a = (\n42)
        E123: a = (\n    42\n    )
        E124: a = (24,\n     42\n)
        E125: if (\n    b):\n    pass
        E126: a = (\n        42)
        E127: a = (24,\n      42)
        E128: a = (24,\n    42)
        E129: if (a or\n    b):\n    pass
        E131: a = (\n    42\n 24)

        There are no issues that match your filters.

        Category
        Status