wurmlab/sequenceserver

View on GitHub

Showing 16,957 of 16,957 total issues

Function renderButton has 46 lines of code (exceeds 25 allowed). Consider refactoring.
Open

    renderButton(method, multi, methods) {
        return (
            <div className="flex">
                <button
                    type="submit"
Severity: Minor
Found in public/js/search_button.js - About 1 hr to fix

    Similar blocks of code found in 4 locations. Consider refactoring.
    Open

    class FastqNotification extends Component {
        render() {
            return (<div
                data-role="notification"
                id="fastq-sequence-notification"
    Severity: Major
    Found in public/js/form.js and 3 other locations - About 1 hr to fix
    public/js/form.js on lines 286..300
    public/js/form.js on lines 302..315
    public/js/form.js on lines 332..346

    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 71.

    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

    Similar blocks of code found in 4 locations. Consider refactoring.
    Open

    class MixedNotification extends Component {
        render() {
            return (
                <div
                    data-role="notification"
    Severity: Major
    Found in public/js/form.js and 3 other locations - About 1 hr to fix
    public/js/form.js on lines 286..300
    public/js/form.js on lines 302..315
    public/js/form.js on lines 317..330

    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 71.

    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

    Similar blocks of code found in 4 locations. Consider refactoring.
    Open

    class ProteinNotification extends Component {
        render() {
            return (
                <div
                    data-role="notification"
    Severity: Major
    Found in public/js/form.js and 3 other locations - About 1 hr to fix
    public/js/form.js on lines 302..315
    public/js/form.js on lines 317..330
    public/js/form.js on lines 332..346

    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 71.

    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

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

            return parentElement.selectAll('.axis').data(axes).enter().append('path').attr('opacity', conf.opacity).attr('class', 'axis').attr('d', axis).attr('stroke-width', function(d, i) {
                if (i % conf.axes.major.spacing === 0) {
                    return conf.axes.major.thickness;
                } else {
                    return conf.axes.minor.thickness;
    Severity: Major
    Found in public/js/circosjs.js and 1 other location - About 1 hr to fix
    public/js/circosjs.js on lines 691..703

    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 71.

    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

    Similar blocks of code found in 4 locations. Consider refactoring.
    Open

    class NucleotideNotification extends Component {
        render() {
            return (<div
                data-role="notification"
                id="nucleotide-sequence-notification"
    Severity: Major
    Found in public/js/form.js and 3 other locations - About 1 hr to fix
    public/js/form.js on lines 286..300
    public/js/form.js on lines 317..330
    public/js/form.js on lines 332..346

    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 71.

    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

    Cyclomatic complexity for xml_ir is too high. [8/7]
    Open

          def xml_ir
            @xml_ir ||=
              if job.imported_xml_file
                parse_xml(File.read(job.imported_xml_file)).tap do |xml_ir|
                  if xml_ir.size < 9 || !xml_ir[0].is_a?(String) || !xml_ir[1].is_a?(String) || !xml_ir[7].is_a?(Array) || !xml_ir[8].is_a?(Array)
    Severity: Minor
    Found in lib/sequenceserver/blast/report.rb by rubocop

    This cop checks that the cyclomatic complexity of methods is not higher than the configured maximum. The cyclomatic complexity is the number of linearly independent paths through a method. The algorithm counts decision points and adds one.

    An if statement (or unless or ?:) increases the complexity by one. An else branch does not, since it doesn't add a decision point. The && operator (or keyword and) can be converted to a nested if statement, and ||/or is shorthand for a sequence of ifs, so they also add one. Loops can be said to have an exit condition, so they add one. Blocks that are calls to builtin iteration methods (e.g. `ary.map{...}) also add one, others are ignored.

    def each_child_node(*types)               # count begins: 1
      unless block_given?                     # unless: +1
        return to_enum(__method__, *types)
    
      children.each do |child|                # each{}: +1
        next unless child.is_a?(Node)         # unless: +1
    
        yield child if types.empty? ||        # if: +1, ||: +1
                       types.include?(child.type)
      end
    
      self
    end                                       # total: 6

    Perceived complexity for convert_deprecated_options is too high. [9/8]
    Open

        def convert_deprecated_options(options)
          options.each do |blast_algo, algo_config|
            if algo_config.is_a?(Array)
              # Very old config files may have a single array with CLI args.
              # e.g. { blastn: ['-task blastn', '-evalue 1e-5'] }
    Severity: Minor
    Found in lib/sequenceserver/config.rb by rubocop

    This cop tries to produce a complexity score that's a measure of the complexity the reader experiences when looking at a method. For that reason it considers when nodes as something that doesn't add as much complexity as an if or a &&. Except if it's one of those special case/when constructs where there's no expression after case. Then the cop treats it as an if/elsif/elsif... and lets all the when nodes count. In contrast to the CyclomaticComplexity cop, this cop considers else nodes as adding complexity.

    Example:

    def my_method                   # 1
      if cond                       # 1
        case var                    # 2 (0.8 + 4 * 0.2, rounded)
        when 1 then func_one
        when 2 then func_two
        when 3 then func_three
        when 4..10 then func_other
        end
      else                          # 1
        do_something until a && b   # 2
      end                           # ===
    end                             # 7 complexity points

    Perceived complexity for xml_ir is too high. [9/8]
    Open

          def xml_ir
            @xml_ir ||=
              if job.imported_xml_file
                parse_xml(File.read(job.imported_xml_file)).tap do |xml_ir|
                  if xml_ir.size < 9 || !xml_ir[0].is_a?(String) || !xml_ir[1].is_a?(String) || !xml_ir[7].is_a?(Array) || !xml_ir[8].is_a?(Array)
    Severity: Minor
    Found in lib/sequenceserver/blast/report.rb by rubocop

    This cop tries to produce a complexity score that's a measure of the complexity the reader experiences when looking at a method. For that reason it considers when nodes as something that doesn't add as much complexity as an if or a &&. Except if it's one of those special case/when constructs where there's no expression after case. Then the cop treats it as an if/elsif/elsif... and lets all the when nodes count. In contrast to the CyclomaticComplexity cop, this cop considers else nodes as adding complexity.

    Example:

    def my_method                   # 1
      if cond                       # 1
        case var                    # 2 (0.8 + 4 * 0.2, rounded)
        when 1 then func_one
        when 2 then func_two
        when 3 then func_three
        when 4..10 then func_other
        end
      else                          # 1
        do_something until a && b   # 2
      end                           # ===
    end                             # 7 complexity points

    Method has too many lines. [16/15]
    Open

        def retrieve(accession, coords = nil)
          fail(
            InvalidSequenceIdError,
            "Invalid sequence id: #{accession}"
          ) unless accession =~ SequenceServer::BLAST::VALID_SEQUENCE_ID
    Severity: Minor
    Found in lib/sequenceserver/database.rb by rubocop

    This cop checks if the length of a method exceeds some maximum value. Comment lines can optionally be ignored. The maximum allowed length is configurable.

    You can set literals you want to fold with CountAsOne. Available are: 'array', 'hash', and 'heredoc'. Each literal will be counted as one line regardless of its actual size.

    NOTE: The ExcludedMethods configuration is deprecated and only kept for backwards compatibility. Please use IgnoredMethods instead.

    Example: CountAsOne: ['array', 'heredoc']

    def m
      array = [       # +1
        1,
        2
      ]
    
      hash = {        # +3
        key: 'value'
      }
    
      <<~HEREDOC      # +1
        Heredoc
        content.
      HEREDOC
    end               # 5 points

    Cyclomatic complexity for raise! is too high. [8/7]
    Open

          def raise!
            return true if exitstatus.zero? && !File.zero?(stdout)
    
            case exitstatus
            when 1..2
    Severity: Minor
    Found in lib/sequenceserver/blast/error.rb by rubocop

    This cop checks that the cyclomatic complexity of methods is not higher than the configured maximum. The cyclomatic complexity is the number of linearly independent paths through a method. The algorithm counts decision points and adds one.

    An if statement (or unless or ?:) increases the complexity by one. An else branch does not, since it doesn't add a decision point. The && operator (or keyword and) can be converted to a nested if statement, and ||/or is shorthand for a sequence of ifs, so they also add one. Loops can be said to have an exit condition, so they add one. Blocks that are calls to builtin iteration methods (e.g. `ary.map{...}) also add one, others are ignored.

    def each_child_node(*types)               # count begins: 1
      unless block_given?                     # unless: +1
        return to_enum(__method__, *types)
    
      children.each do |child|                # each{}: +1
        next unless child.is_a?(Node)         # unless: +1
    
        yield child if types.empty? ||        # if: +1, ||: +1
                       types.include?(child.type)
      end
    
      self
    end                                       # total: 6

    Perceived complexity for sys is too high. [9/8]
    Open

      def self.sys(command, options = {})
        # Available output channels
        channels = %i[stdout stderr]
    
        # Make temporary files to store output from stdout and stderr.
    Severity: Minor
    Found in lib/sequenceserver/sys.rb by rubocop

    This cop tries to produce a complexity score that's a measure of the complexity the reader experiences when looking at a method. For that reason it considers when nodes as something that doesn't add as much complexity as an if or a &&. Except if it's one of those special case/when constructs where there's no expression after case. Then the cop treats it as an if/elsif/elsif... and lets all the when nodes count. In contrast to the CyclomaticComplexity cop, this cop considers else nodes as adding complexity.

    Example:

    def my_method                   # 1
      if cond                       # 1
        case var                    # 2 (0.8 + 4 * 0.2, rounded)
        when 1 then func_one
        when 2 then func_two
        when 3 then func_three
        when 4..10 then func_other
        end
      else                          # 1
        do_something until a && b   # 2
      end                           # ===
    end                             # 7 complexity points

    Function poll has 44 lines of code (exceeds 25 allowed). Consider refactoring.
    Open

            function poll() {
                fetch(path)
                    .then(response => {
                        // Handle HTTP status codes
                        if (!response.ok) throw response;
    Severity: Minor
    Found in public/js/report.js - About 1 hr to fix

      Function tableJSX has 44 lines of code (exceeds 25 allowed). Consider refactoring.
      Open

          tableJSX() {
              var hasName = _.every(this.props.query.hits, function (hit) {
                  return hit.sciname !== '';
              });
      
      
      Severity: Minor
      Found in public/js/query.js - About 1 hr to fix

        Function renderChords has 44 lines of code (exceeds 25 allowed). Consider refactoring.
        Open

            this.renderChords = function(parentElement, name, conf, data, layout, ratio, getSource, getTarget) {
                var link, track;
                track = parentElement.append('g').attr('class', conf.colorPalette);
                link = track
                    .selectAll('.chord')
        Severity: Minor
        Found in public/js/circosjs.js - About 1 hr to fix

          Method retrieve has a Cognitive Complexity of 14 (exceeds 5 allowed). Consider refactoring.
          Open

              def retrieve(accession, coords = nil)
                fail(
                  InvalidSequenceIdError,
                  "Invalid sequence id: #{accession}"
                ) unless accession =~ SequenceServer::BLAST::VALID_SEQUENCE_ID
          Severity: Minor
          Found in lib/sequenceserver/database.rb - 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 mixConf has a Cognitive Complexity of 14 (exceeds 5 allowed). Consider refactoring.
          Open

          circosJS.mixConf = function(conf, defaultConf) {
              var key, newConf, value;
              newConf = {};
              for (key in defaultConf) {
                  value = defaultConf[key];
          Severity: Minor
          Found in public/js/circosjs.js - 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

          Method spawn_cleanup has a Cognitive Complexity of 14 (exceeds 5 allowed). Consider refactoring.
          Open

              def spawn_cleanup
                Thread.new do
                  loop do
                    now = Time.now
                    finished_jobs = Job.all.select(&:done?)
          Severity: Minor
          Found in lib/sequenceserver/job_remover.rb - 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 calculate_multipliers has 43 lines of code (exceeds 25 allowed). Consider refactoring.
          Open

              calculate_multipliers() {
                  var sum_query_length = 0;
                  var sum_hit_length = 0;
                  _.each(
                      this.query_arr,
          Severity: Minor
          Found in public/js/circos.js - About 1 hr to fix

            Method defaults has 43 lines of code (exceeds 25 allowed). Consider refactoring.
            Open

                def defaults
                  @defaults ||= {
                    host: '0.0.0.0',
                    port: 4567,
                    databases_widget: 'classic',
            Severity: Minor
            Found in lib/sequenceserver/config.rb - About 1 hr to fix
              Severity
              Category
              Status
              Source
              Language