Extract programming language resolver

What does this MR do and why?

Projects::DetectRepositoryLanguagesService mixes repository language updates with ProgrammingLanguage lookup and creation. This makes the service harder to change when adjusting language matching behavior.

This MR:

  • Adds Gitlab::LanguageDetection::ProgrammingLanguageResolver.
  • Moves ProgrammingLanguage lookup and creation into the resolver.
  • Consumes Gitlab::LanguageDetection::DetectedLanguage objects.
  • Preserves existing behavior without changing language matching.
  • Removes unused name-based color and Gitaly ID helper methods.
  • Adds resolver specs documenting current behavior.

This is a stacked refactor on top of !241475 (merged). It intentionally does not include the Mathematica/Wolfram language matching fix.

References

#602294 (closed) !241475 (merged)

How to set up and validate locally

  1. Check out the stacked base branch:

    git switch 602294-refactor-language-detection-object
  2. Check out this branch:

    git switch 602294-extract-programming-language-resolver
  3. Run affected specs:

    bin/rspec spec/lib/gitlab/language_detection_spec.rb spec/lib/gitlab/language_detection/programming_language_resolver_spec.rb spec/services/projects/detect_repository_languages_service_spec.rb
  4. Run RuboCop:

    bundle exec rubocop app/services/projects/detect_repository_languages_service.rb lib/gitlab/language_detection.rb lib/gitlab/language_detection/programming_language_resolver.rb spec/lib/gitlab/language_detection_spec.rb spec/lib/gitlab/language_detection/programming_language_resolver_spec.rb spec/services/projects/detect_repository_languages_service_spec.rb

MR acceptance checklist

Evaluate this MR against the MR acceptance checklist. It helps you analyze changes to reduce risks in quality, performance, reliability, security, and maintainability.

Edited by Vasilii Iakliushin

Merge request reports

Loading