mirror of
https://gitlab.com/gitlab-org/gitlab-foss.git
synced 2025-08-10 01:31:45 +00:00
58 lines
1.5 KiB
Ruby
58 lines
1.5 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
require 'rubocop-rspec'
|
|
|
|
module RuboCop
|
|
module Cop
|
|
module Gitlab
|
|
# This cop checks for use Current.organization at banned layers of the application
|
|
#
|
|
# @example
|
|
#
|
|
# # bad
|
|
# class SomeService
|
|
# def execute
|
|
# do_something_with(Current.organization)
|
|
# end
|
|
# end
|
|
#
|
|
# # good
|
|
# class SomeController < ApplicationController
|
|
# def create
|
|
# response = SomeService.new(organization: Current.organization).execute
|
|
# end
|
|
# end
|
|
#
|
|
# class SomeService
|
|
# def initialize(organization:)
|
|
# @organization = organization
|
|
# end
|
|
#
|
|
# def execute
|
|
# do_something_with(@organization)
|
|
# end
|
|
# end
|
|
#
|
|
#
|
|
class AvoidCurrentOrganization < RuboCop::Cop::Base
|
|
MSG = 'Avoid the use of `%{name}` outside of approved application layers. ' \
|
|
'Instead, pass the value down to those layers. ' \
|
|
'See https://gitlab.com/gitlab-org/gitlab/-/issues/442751.'
|
|
|
|
# @!method current_organization?(node)
|
|
def_node_matcher :current_organization?, <<~PATTERN
|
|
(send
|
|
(const
|
|
{nil? (cbase)} :Current) {:organization | :organization=} ...)
|
|
PATTERN
|
|
|
|
def on_send(node)
|
|
return unless current_organization?(node)
|
|
|
|
add_offense(node, message: format(MSG, name: node.method_name))
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|