bitcoin/bitcoin

View on GitHub

Showing 84 of 84 total issues

File asmap.py has 661 lines of code (exceeds 250 allowed). Consider refactoring.
Open

# Copyright (c) 2022 Pieter Wuille
# Distributed under the MIT software license, see the accompanying
# file LICENSE or http://www.opensource.org/licenses/mit-license.php.

"""
Severity: Major
Found in contrib/seeds/asmap.py - About 1 day to fix

    Function main has a Cognitive Complexity of 62 (exceeds 5 allowed). Consider refactoring.
    Open

    def main():
    
        # Enable debug logging if running in CI
        if 'CI' in os.environ and os.environ['CI'].lower() == "true":
            logging.getLogger().setLevel(logging.DEBUG)
    Severity: Minor
    Found in contrib/verify-commits/verify-commits.py - About 1 day 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

    File verify.py has 541 lines of code (exceeds 250 allowed). Consider refactoring.
    Open

    #!/usr/bin/env python3
    # Copyright (c) 2020-2021 The Bitcoin Core developers
    # Distributed under the MIT software license, see the accompanying
    # file COPYING or http://www.opensource.org/licenses/mit-license.php.
    """Script for verifying Bitcoin Core release binaries.
    Severity: Major
    Found in contrib/verify-binaries/verify.py - About 1 day to fix

      Function main has a Cognitive Complexity of 47 (exceeds 5 allowed). Consider refactoring.
      Open

      def main():
          parser = argparse.ArgumentParser(
              description=__doc__.format(clang_format_diff="%(prog)s"),
              formatter_class=argparse.RawDescriptionHelpFormatter,
          )
      Severity: Minor
      Found in contrib/devtools/clang-format-diff.py - About 7 hrs 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 test_patching has a Cognitive Complexity of 43 (exceeds 5 allowed). Consider refactoring.
      Open

          def test_patching(self) -> None:
              """Test behavior of update, lookup, extends, and diff."""
              #pylint: disable=too-many-locals,too-many-nested-blocks
              # Iterate over the number of leaves the random test ASMap objects have.
              for leaves in range(1, 20):
      Severity: Minor
      Found in contrib/seeds/asmap.py - About 6 hrs 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

      File copyright_header.py has 426 lines of code (exceeds 250 allowed). Consider refactoring.
      Open

      #!/usr/bin/env python3
      # Copyright (c) 2016-2022 The Bitcoin Core developers
      # Distributed under the MIT software license, see the accompanying
      # file COPYING or http://www.opensource.org/licenses/mit-license.php.
      
      
      Severity: Minor
      Found in contrib/devtools/copyright_header.py - About 6 hrs to fix

        Function _to_entries_minimal has a Cognitive Complexity of 34 (exceeds 5 allowed). Consider refactoring.
        Open

            def _to_entries_minimal(self, fill: bool = False) -> list[ASNEntry]:
                """Convert a trie to a minimal list of ASNEntry objects, exploiting overlap."""
                prefix : list[bool] = []
        
                def recurse(node: list) -> (tuple[dict[Optional[int], list[ASNEntry]], bool]):
        Severity: Minor
        Found in contrib/seeds/asmap.py - About 5 hrs 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 _to_binnode has a Cognitive Complexity of 30 (exceeds 5 allowed). Consider refactoring.
        Open

            def _to_binnode(self, fill: bool = False) -> _BinNode:
                """Convert a trie to a _BinNode object."""
                def recurse(node: list) -> tuple[dict[Optional[int], _BinNode], bool]:
                    if len(node) == 1 and node[0] == 0:
                        return {(None if fill else 0): _BinNode.make_end()}, True
        Severity: Minor
        Found in contrib/seeds/asmap.py - About 4 hrs 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 name_to_bip155 has a Cognitive Complexity of 29 (exceeds 5 allowed). Consider refactoring.
        Open

        def name_to_bip155(addr):
            '''Convert address string to BIP155 (networkID, addr) tuple.'''
            if addr.endswith('.onion'):
                vchAddr = b32decode(addr[0:-6], True)
                if len(vchAddr) == 35:
        Severity: Minor
        Found in contrib/seeds/generate-seeds.py - About 4 hrs 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

        Identical blocks of code found in 2 locations. Consider refactoring.
        Open

                    if self.outF:
                        self.outF.close()
                        if self.setFileTime:
                            os.utime(self.outFname, (int(time.time()), self.highTS))
                        self.outF = None
        Severity: Major
        Found in contrib/linearize/linearize-data.py and 1 other location - About 4 hrs to fix
        contrib/linearize/linearize-data.py on lines 118..125

        Duplicated Code

        Duplicated code can lead to software that is hard to understand and difficult to change. The Don't Repeat Yourself (DRY) principle states:

        Every piece of knowledge must have a single, unambiguous, authoritative representation within a system.

        When you violate DRY, bugs and maintenance problems are sure to follow. Duplicated code has a tendency to both continue to replicate and also to diverge (leaving bugs as two similar implementations differ in subtle ways).

        Tuning

        This issue has a mass of 77.

        We set useful threshold defaults for the languages we support but you may want to adjust these settings based on your project guidelines.

        The threshold configuration represents the minimum mass a code block must have to be analyzed for duplication. The lower the threshold, the more fine-grained the comparison.

        If the engine is too easily reporting duplication, try raising the threshold. If you suspect that the engine isn't catching enough duplication, try lowering the threshold. The best setting tends to differ from language to language.

        See codeclimate-duplication's documentation for more information about tuning the mass threshold in your .codeclimate.yml.

        Refactorings

        Further Reading

        Identical blocks of code found in 2 locations. Consider refactoring.
        Open

                if not self.fileOutput and ((self.outsz + blockSizeOnDisk) > self.maxOutSz):
                    self.outF.close()
                    if self.setFileTime:
                        os.utime(self.outFname, (int(time.time()), self.highTS))
                    self.outF = None
        Severity: Major
        Found in contrib/linearize/linearize-data.py and 1 other location - About 4 hrs to fix
        contrib/linearize/linearize-data.py on lines 131..138

        Duplicated Code

        Duplicated code can lead to software that is hard to understand and difficult to change. The Don't Repeat Yourself (DRY) principle states:

        Every piece of knowledge must have a single, unambiguous, authoritative representation within a system.

        When you violate DRY, bugs and maintenance problems are sure to follow. Duplicated code has a tendency to both continue to replicate and also to diverge (leaving bugs as two similar implementations differ in subtle ways).

        Tuning

        This issue has a mass of 77.

        We set useful threshold defaults for the languages we support but you may want to adjust these settings based on your project guidelines.

        The threshold configuration represents the minimum mass a code block must have to be analyzed for duplication. The lower the threshold, the more fine-grained the comparison.

        If the engine is too easily reporting duplication, try raising the threshold. If you suspect that the engine isn't catching enough duplication, try lowering the threshold. The best setting tends to differ from language to language.

        See codeclimate-duplication's documentation for more information about tuning the mass threshold in your .codeclimate.yml.

        Refactorings

        Further Reading

        Function parseline has a Cognitive Complexity of 28 (exceeds 5 allowed). Consider refactoring.
        Open

        def parseline(line: str) -> Union[dict, None]:
            """ Parses a line from `seeds_main.txt` into a dictionary of details for that line.
            or `None`, if the line could not be parsed.
            """
            if line.startswith('#'):
        Severity: Minor
        Found in contrib/seeds/makeseeds.py - About 4 hrs 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 attack_rate has a Cognitive Complexity of 27 (exceeds 5 allowed). Consider refactoring.
        Open

        def attack_rate(period, bufsize, limit=None):
            """Compute maximal accepted headers per attack in (period, bufsize) configuration.
        
            If limit is provided, the computation is stopped early when the result is known to exceed the
            value in limit.
        Severity: Minor
        Found in contrib/devtools/headerssync-params.py - About 3 hrs 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 run has a Cognitive Complexity of 26 (exceeds 5 allowed). Consider refactoring.
        Open

            def run(self):
                while self.blkCountOut < len(self.blkindex):
                    if not self.inF:
                        fname = self.inFileName(self.inFn)
                        print("Input file " + fname)
        Severity: Minor
        Found in contrib/linearize/linearize-data.py - About 3 hrs 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 loop has a Cognitive Complexity of 24 (exceeds 5 allowed). Consider refactoring.
        Open

        def loop(screen, bpf, peers):
            screen.nodelay(1)
            cur_list_pos = 0
            win = curses.newwin(30, 70, 2, 7)
            win.erase()
        Severity: Minor
        Found in contrib/tracing/p2p_monitor.py - About 3 hrs 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 process_file has a Cognitive Complexity of 23 (exceeds 5 allowed). Consider refactoring.
        Open

        def process_file(path: str, messages: list[Any], recv: bool, progress_bar: Optional[ProgressBar]) -> None:
            with open(path, 'rb') as f_in:
                if progress_bar:
                    bytes_read = 0
        
        
        Severity: Minor
        Found in contrib/message-capture/message-capture-parser.py - About 3 hrs 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 print_image has a Cognitive Complexity of 21 (exceeds 5 allowed). Consider refactoring.
        Open

        def print_image(img, threshold=128):
            '''Print black-and-white image to terminal in braille unicode characters.'''
            x_blocks = (img.size[0] + BW - 1) // BW
            y_blocks = (img.size[1] + BH - 1) // BH
        
        
        Severity: Minor
        Found in contrib/signet/getcoins.py - About 2 hrs 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

        File mempool_monitor.py has 287 lines of code (exceeds 250 allowed). Consider refactoring.
        Open

        #!/usr/bin/env python3
        # Copyright (c) 2022 The Bitcoin Core developers
        # Distributed under the MIT software license, see the accompanying
        # file COPYING or http://www.opensource.org/licenses/mit-license.php.
        
        
        Severity: Minor
        Found in contrib/tracing/mempool_monitor.py - About 2 hrs to fix

          Function diff has a Cognitive Complexity of 18 (exceeds 5 allowed). Consider refactoring.
          Open

              def diff(self, other: "ASMap") -> list[ASNDiff]:
                  """Compute the diff from self to other."""
                  prefix: list[bool] = []
                  ret: list[ASNDiff] = []
          
          
          Severity: Minor
          Found in contrib/seeds/asmap.py - About 2 hrs 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 from_binary has a Cognitive Complexity of 18 (exceeds 5 allowed). Consider refactoring.
          Open

              def from_binary(bindata: bytes) -> Optional["ASMap"]:
                  """Decode an ASMap object from the provided binary encoding."""
          
                  bits: list[int] = []
                  for byte in bindata:
          Severity: Minor
          Found in contrib/seeds/asmap.py - About 2 hrs 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

          Severity
          Category
          Status
          Source
          Language