danini-the-panini/mittsu-opengl

View on GitHub
lib/mittsu/opengl/geometry_group.rb

Summary

Maintainability
F
6 days
Test Coverage
F
38%

Method has too many lines. [438/30]
Open

    def set_mesh_buffers(object, hint, should_dispose, material)
      return unless @initted_arrays

      geometry = object.geometry

Severity: Minor
Found in lib/mittsu/opengl/geometry_group.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.

Class has too many lines. [562/250]
Open

  class OpenGL::GeometryGroup
    include OpenGL::GeometryLike

    attr_reader :id, :material_index

Severity: Minor
Found in lib/mittsu/opengl/geometry_group.rb by rubocop

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

Method set_mesh_buffers has 438 lines of code (exceeds 25 allowed). Consider refactoring.
Open

    def set_mesh_buffers(object, hint, should_dispose, material)
      return unless @initted_arrays

      geometry = object.geometry

Severity: Major
Found in lib/mittsu/opengl/geometry_group.rb - About 2 days to fix

    Method set_mesh_buffers has a Cognitive Complexity of 84 (exceeds 5 allowed). Consider refactoring.
    Open

        def set_mesh_buffers(object, hint, should_dispose, material)
          return unless @initted_arrays
    
          geometry = object.geometry
    
    
    Severity: Minor
    Found in lib/mittsu/opengl/geometry_group.rb - 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 geometry_group.rb has 567 lines of code (exceeds 250 allowed). Consider refactoring.
    Open

    require 'mittsu/opengl/geometry_like'
    
    module Mittsu
      class OpenGL::GeometryGroup
        include OpenGL::GeometryLike
    Severity: Major
    Found in lib/mittsu/opengl/geometry_group.rb - About 1 day to fix

      Cyclomatic complexity for set_mesh_buffers is too high. [48/6]
      Open

          def set_mesh_buffers(object, hint, should_dispose, material)
            return unless @initted_arrays
      
            geometry = object.geometry
      
      
      Severity: Minor
      Found in lib/mittsu/opengl/geometry_group.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.

      Method has too many lines. [69/30]
      Open

          def init_mesh_buffers(object)
            geometry = object.geometry
      
            nvertices = @faces3.length * 3
            nvertices2 = nvertices * 2
      Severity: Minor
      Found in lib/mittsu/opengl/geometry_group.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.

      Method init_mesh_buffers has 69 lines of code (exceeds 25 allowed). Consider refactoring.
      Open

          def init_mesh_buffers(object)
            geometry = object.geometry
      
            nvertices = @faces3.length * 3
            nvertices2 = nvertices * 2
      Severity: Major
      Found in lib/mittsu/opengl/geometry_group.rb - About 2 hrs to fix

        Cyclomatic complexity for init_mesh_buffers is too high. [14/6]
        Open

            def init_mesh_buffers(object)
              geometry = object.geometry
        
              nvertices = @faces3.length * 3
              nvertices2 = nvertices * 2
        Severity: Minor
        Found in lib/mittsu/opengl/geometry_group.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.

        Method init_mesh_buffers has a Cognitive Complexity of 17 (exceeds 5 allowed). Consider refactoring.
        Open

            def init_mesh_buffers(object)
              geometry = object.geometry
        
              nvertices = @faces3.length * 3
              nvertices2 = nvertices * 2
        Severity: Minor
        Found in lib/mittsu/opengl/geometry_group.rb - 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

        Avoid deeply nested control flow statements.
        Open

                    if custom_attribute[:bound_to].nil? || custom_attribute[:bound_to] == :vertices
                      @faces3.each do |chf|
                        face = obj_faces[chf];
        
                        v1 = custom_attribute[:value][face.a]
        Severity: Major
        Found in lib/mittsu/opengl/geometry_group.rb - About 45 mins to fix

          Avoid deeply nested control flow statements.
          Open

                    elsif custom_attribute[:size] == 4
                      if custom_attribute[:bound_to].nil? || custom_attribute[:bound_to] == :vertices
                        @faces3.each do |chf|
                          face = obj_faces[chf]
          
          
          Severity: Major
          Found in lib/mittsu/opengl/geometry_group.rb - About 45 mins to fix

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

                  if geometry.uvs_need_update && obj_uvs
                    @faces3.each do |fi|
                      uv = obj_uvs[fi]
            
                      next if uv.nil?
            Severity: Major
            Found in lib/mittsu/opengl/geometry_group.rb and 1 other location - About 1 hr to fix
            lib/mittsu/opengl/geometry_group.rb on lines 470..490

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

            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

                  if geometry.uvs_need_update && obj_uvs2
                    @faces3.each do |fi|
                      uv2 = obj_uvs2[fi]
            
                      next if uv2.nil?
            Severity: Major
            Found in lib/mittsu/opengl/geometry_group.rb and 1 other location - About 1 hr to fix
            lib/mittsu/opengl/geometry_group.rb on lines 448..468

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

            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

            end at 139, 12 is not aligned with case at 134, 19.
            Open

                        end
            Severity: Minor
            Found in lib/mittsu/opengl/geometry_group.rb by rubocop

            This cop checks whether the end keywords are aligned properly.

            Three modes are supported through the EnforcedStyleAlignWith configuration parameter:

            If it's set to keyword (which is the default), the end shall be aligned with the start of the keyword (if, class, etc.).

            If it's set to variable the end shall be aligned with the left-hand-side of the variable assignment, if there is one.

            If it's set to start_of_line, the end shall be aligned with the start of the line where the matching keyword appears.

            Example: EnforcedStyleAlignWith: keyword (default)

            # bad
            
            variable = if true
                end
            
            # good
            
            variable = if true
                       end

            Example: EnforcedStyleAlignWith: variable

            # bad
            
            variable = if true
                end
            
            # good
            
            variable = if true
            end

            Example: EnforcedStyleAlignWith: startofline

            # bad
            
            variable = if true
                end
            
            # good
            
            puts(if true
            end)

            Unused block argument - i. You can omit the argument if you don't care about it.
            Open

                        3.times do |i|
            Severity: Minor
            Found in lib/mittsu/opengl/geometry_group.rb by rubocop

            This cop checks for unused block arguments.

            Example:

            # bad
            
            do_something do |used, unused|
              puts used
            end
            
            do_something do |bar|
              puts :foo
            end
            
            define_method(:foo) do |bar|
              puts :baz
            end

            Example:

            #good
            
            do_something do |used, _unused|
              puts used
            end
            
            do_something do
              puts :foo
            end
            
            define_method(:foo) do |_bar|
              puts :baz
            end

            Unused block argument - chf. You can omit the argument if you don't care about it.
            Open

                    @faces3.each do |chf|
            Severity: Minor
            Found in lib/mittsu/opengl/geometry_group.rb by rubocop

            This cop checks for unused block arguments.

            Example:

            # bad
            
            do_something do |used, unused|
              puts used
            end
            
            do_something do |bar|
              puts :foo
            end
            
            define_method(:foo) do |bar|
              puts :baz
            end

            Example:

            #good
            
            do_something do |used, _unused|
              puts used
            end
            
            do_something do
              puts :foo
            end
            
            define_method(:foo) do |_bar|
              puts :baz
            end

            Unused block argument - m. You can omit the argument if you don't care about it.
            Open

                    num_morph_targets.times do |m|
            Severity: Minor
            Found in lib/mittsu/opengl/geometry_group.rb by rubocop

            This cop checks for unused block arguments.

            Example:

            # bad
            
            do_something do |used, unused|
              puts used
            end
            
            do_something do |bar|
              puts :foo
            end
            
            define_method(:foo) do |bar|
              puts :baz
            end

            Example:

            #good
            
            do_something do |used, _unused|
              puts used
            end
            
            do_something do
              puts :foo
            end
            
            define_method(:foo) do |_bar|
              puts :baz
            end

            Unused block argument - m. You can omit the argument if you don't care about it.
            Open

                    @num_morph_normals.times do |m|
            Severity: Minor
            Found in lib/mittsu/opengl/geometry_group.rb by rubocop

            This cop checks for unused block arguments.

            Example:

            # bad
            
            do_something do |used, unused|
              puts used
            end
            
            do_something do |bar|
              puts :foo
            end
            
            define_method(:foo) do |bar|
              puts :baz
            end

            Example:

            #good
            
            do_something do |used, _unused|
              puts used
            end
            
            do_something do
              puts :foo
            end
            
            define_method(:foo) do |_bar|
              puts :baz
            end

            Unused block argument - m. You can omit the argument if you don't care about it.
            Open

                    @num_morph_targets.times do |m|
            Severity: Minor
            Found in lib/mittsu/opengl/geometry_group.rb by rubocop

            This cop checks for unused block arguments.

            Example:

            # bad
            
            do_something do |used, unused|
              puts used
            end
            
            do_something do |bar|
              puts :foo
            end
            
            define_method(:foo) do |bar|
              puts :baz
            end

            Example:

            #good
            
            do_something do |used, _unused|
              puts used
            end
            
            do_something do
              puts :foo
            end
            
            define_method(:foo) do |_bar|
              puts :baz
            end

            Unused block argument - m. You can omit the argument if you don't care about it.
            Open

                    num_morph_normals.times do |m|
            Severity: Minor
            Found in lib/mittsu/opengl/geometry_group.rb by rubocop

            This cop checks for unused block arguments.

            Example:

            # bad
            
            do_something do |used, unused|
              puts used
            end
            
            do_something do |bar|
              puts :foo
            end
            
            define_method(:foo) do |bar|
              puts :baz
            end

            Example:

            #good
            
            do_something do |used, _unused|
              puts used
            end
            
            do_something do
              puts :foo
            end
            
            define_method(:foo) do |_bar|
              puts :baz
            end

            There are no issues that match your filters.

            Category
            Status