Class: Gitlab::Styles::Rubocop::Cop::ProjectPathHelper

Inherits:
RuboCop::Cop::Cop
  • Object
show all
Defined in:
lib/gitlab/styles/rubocop/cop/project_path_helper.rb

Constant Summary collapse

MSG =
'Use short project path helpers without explicitly passing the namespace: ' \
'`foo_project_bar_path(project, bar)` instead of ' \
'`foo_namespace_project_bar_path(project.namespace, project, bar)`.'.freeze
METHOD_NAME_PATTERN =
/\A([a-z_]+_)?namespace_project(?:_[a-z_]+)?_(?:url|path)\z/

Instance Method Summary collapse

Instance Method Details

#autocorrect(node) ⇒ Object



25
26
27
28
29
30
31
32
33
34
35
36
# File 'lib/gitlab/styles/rubocop/cop/project_path_helper.rb', line 25

def autocorrect(node)
  helper_name = method_name(node).to_s.sub('namespace_project', 'project')

  arguments = arguments(node)
  arguments.shift # Remove namespace argument

  replacement = "#{helper_name}(#{arguments.map(&:source).join(', ')})"

  lambda do |corrector|
    corrector.replace(node.source_range, replacement)
  end
end

#on_send(node) ⇒ Object



12
13
14
15
16
17
18
19
20
21
22
23
# File 'lib/gitlab/styles/rubocop/cop/project_path_helper.rb', line 12

def on_send(node)
  return unless method_name(node).to_s =~ METHOD_NAME_PATTERN

  namespace_expr, project_expr = arguments(node)
  return unless namespace_expr && project_expr

  return unless namespace_expr.type == :send
  return unless method_name(namespace_expr) == :namespace
  return unless receiver(namespace_expr) == project_expr

  add_offense(node, :selector)
end