Skip to content

Decrease CyclomaticComplexity threshold step by step (from 17 to 10)

Description

By analogy with #28202 (moved) and #31358 (moved) let's plan decreasing CyclomaticComplexity step by step (from 17 to 10)

2017-04-24 data:

Rubocop default level is 6 => 146 offenses Some statistics on different benchmarks:

  • CyclomaticComplexity size 10 => 30 offences
  • CyclomaticComplexity size 12 => 11 offences
  • CyclomaticComplexity size 14 => 4 offences
  • CyclomaticComplexity size 16 => 1 offences

Proposal

I think that level 10 is achievable in the nearest future. So I prepared checklist for first steps.

Decrease it step by step (values in TODO were checked on 17 Oct 2017):

  • Step to 16
    • refactor lib/gitlab/google_code_import/importer.rb:163:7 CyclomaticComplexity = 17 - !10928 (merged)
  • Step to 15 - !13905 (merged)
    • no offences in CE and EE
  • Step to 14 - !13972 (merged)
    • refactor app/helpers/projects_helper.rb:21:3 CyclomaticComplexity = 15
    • refactor app/services/ci/create_pipeline_service.rb:50:5 - EE CyclomaticComplexity = 15
  • Step to 13 - !14152 (merged)
  • Step to 12 - !14232 (closed)
    • refactor app/helpers/projects_helper.rb:30:3 CyclomaticComplexity = 13 - !14231 (merged)
    • refactor app/services/merge_requests/update_service.rb:24:5 CyclomaticComplexity = 13
    • refactor lib/gitlab/diff/parser.rb:6:7 CyclomaticComplexity = 13
    • refactor lib/gitlab/utils/merge_hash.rb:58:7 CyclomaticComplexity = 13
    • refactor app/controllers/autocomplete_controller.rb:8:3 - EE CyclomaticComplexity = 13 - !13778 (merged)
    • refactor app/controllers/concerns/issuable_collections.rb:133:3 - EE CyclomaticComplexity = 13
    • refactor app/finders/autocomplete_users_finder.rb:23:3 - EE CyclomaticComplexity = 13
    • refactor lib/gitlab/checks/change_access.rb:149:7 - EE CyclomaticComplexity = 13
  • Step to 11
    • refactor app/helpers/nav_helper.rb:10:3 CyclomaticComplexity = 12

    • refactor app/services/issues/update_service.rb:16:5 CyclomaticComplexity = 12

    • refactor app/services/projects/create_service.rb:7:5 CyclomaticComplexity = 12

    • refactor app/services/system_hooks_service.rb:14:3 CyclomaticComplexity = 12

    • refactor app/workers/email_receiver_worker.rb:17:3 CyclomaticComplexity = 12

    • refactor lib/declarative_policy/runner.rb:75:5 CyclomaticComplexity = 12

    • refactor lib/gitlab/google_code_import/importer.rb:235:7 CyclomaticComplexity = 12

    • refactor app/helpers/dropdowns_helper.rb:2:3 - EE CyclomaticComplexity = 12

    • refactor app/helpers/license_helper.rb:15:3 - EE CyclomaticComplexity = 12

Links / references

Documentation blurb

(Write the start of the documentation of this feature here, include:

  1. Why should someone use it; what's the underlying problem.
  2. What is the solution.
  3. How does someone use this

During implementation, this can then be copied and used as a starter for the documentation.)

/cc @rymai @grzesiek

Possible labels: ~Edge ~backstage meta

Edited by Rémy Coutable