diff --git a/app/controllers/projects/blob_controller.rb b/app/controllers/projects/blob_controller.rb
index 39ba815cfcaf17c0bf87ba33d0bc7cb471ed50ee..f9a5ef46786db8125bc4e6f549fa3c0189ba3331 100644
--- a/app/controllers/projects/blob_controller.rb
+++ b/app/controllers/projects/blob_controller.rb
@@ -5,7 +5,7 @@ class Projects::BlobController < Projects::ApplicationController
   include ActionView::Helpers::SanitizeHelper
 
   # Raised when given an invalid file path
-  class InvalidPathError < StandardError; end
+  InvalidPathError = Class.new(StandardError)
 
   before_action :require_non_empty_project, except: [:new, :create]
   before_action :authorize_download_code!
diff --git a/app/models/project_wiki.rb b/app/models/project_wiki.rb
index 1caebabbd532386912fcc3c32b8da5b52c75ec7e..3b6ce5c9acc7224bcd4f402afe26e4c98ecff99b 100644
--- a/app/models/project_wiki.rb
+++ b/app/models/project_wiki.rb
@@ -9,7 +9,7 @@ class ProjectWiki
     'AsciiDoc' => :asciidoc
   }.freeze unless defined?(MARKUPS)
 
-  class CouldNotCreateWikiError < StandardError; end
+  CouldNotCreateWikiError = Class.new(StandardError)
 
   # Returns a string describing what went wrong after
   # an operation fails.
diff --git a/app/serializers/pipeline_serializer.rb b/app/serializers/pipeline_serializer.rb
index 2bc6cf3266edadb9f7bd9c578239eec7b268a428..ab2d3d5a3ece51f5148f70d78b49bd3a056381bb 100644
--- a/app/serializers/pipeline_serializer.rb
+++ b/app/serializers/pipeline_serializer.rb
@@ -1,5 +1,5 @@
 class PipelineSerializer < BaseSerializer
-  class InvalidResourceError < StandardError; end
+  InvalidResourceError = Class.new(StandardError)
 
   entity PipelineEntity
 
diff --git a/app/services/commits/change_service.rb b/app/services/commits/change_service.rb
index 25e22f14e60b0c3d9cb3c0827cf76a6607578d33..8a9bcd2d053a316e39d701c26f6890c98a2646de 100644
--- a/app/services/commits/change_service.rb
+++ b/app/services/commits/change_service.rb
@@ -1,7 +1,7 @@
 module Commits
   class ChangeService < ::BaseService
-    class ValidationError < StandardError; end
-    class ChangeError < StandardError; end
+    ValidationError = Class.new(StandardError)
+    ChangeError = Class.new(StandardError)
 
     def execute
       @start_project = params[:start_project] || @project
diff --git a/app/services/files/base_service.rb b/app/services/files/base_service.rb
index 582dccac479d953de7b3882d1cb4550f6190c326..38868cf3fef5e6b1ada2286952bcd658d06e427d 100644
--- a/app/services/files/base_service.rb
+++ b/app/services/files/base_service.rb
@@ -1,6 +1,6 @@
 module Files
   class BaseService < ::BaseService
-    class ValidationError < StandardError; end
+    ValidationError = Class.new(StandardError)
 
     def execute
       @start_project = params[:start_project] || @project
diff --git a/app/services/files/multi_service.rb b/app/services/files/multi_service.rb
index 0609c6219e72b483799b07502ecd325a11629814..700f9f4f6f0f9d86410a5e29d2c263f6abba637c 100644
--- a/app/services/files/multi_service.rb
+++ b/app/services/files/multi_service.rb
@@ -1,6 +1,6 @@
 module Files
   class MultiService < Files::BaseService
-    class FileChangedError < StandardError; end
+    FileChangedError = Class.new(StandardError)
 
     ACTIONS = %w[create update delete move].freeze
 
diff --git a/app/services/files/update_service.rb b/app/services/files/update_service.rb
index 54e1aaf3f6725e1095033b21020b63db9d86f329..fbbab97632ea0235e73c6175ff202a9f19dafb2c 100644
--- a/app/services/files/update_service.rb
+++ b/app/services/files/update_service.rb
@@ -1,6 +1,6 @@
 module Files
   class UpdateService < Files::BaseService
-    class FileChangedError < StandardError; end
+    FileChangedError = Class.new(StandardError)
 
     def commit
       repository.update_file(current_user, @file_path, @file_content,
diff --git a/app/services/issues/move_service.rb b/app/services/issues/move_service.rb
index a2a5f57d069db4907b1d34fb41b3f61b5106363a..711f4035c55a4ae6617c1b1d0a102c7c624e61de 100644
--- a/app/services/issues/move_service.rb
+++ b/app/services/issues/move_service.rb
@@ -1,6 +1,6 @@
 module Issues
   class MoveService < Issues::BaseService
-    class MoveError < StandardError; end
+    MoveError = Class.new(StandardError)
 
     def execute(issue, new_project)
       @old_issue = issue
diff --git a/app/services/merge_requests/resolve_service.rb b/app/services/merge_requests/resolve_service.rb
index d22a1d3e0ad3d2c2f797080c41368d4d70074da9..82cd89d9a0bdf37f8f0ded33eabe88f18b6ff344 100644
--- a/app/services/merge_requests/resolve_service.rb
+++ b/app/services/merge_requests/resolve_service.rb
@@ -1,7 +1,6 @@
 module MergeRequests
   class ResolveService < MergeRequests::BaseService
-    class MissingFiles < Gitlab::Conflict::ResolutionError
-    end
+    MissingFiles = Class.new(Gitlab::Conflict::ResolutionError)
 
     attr_accessor :conflicts, :rugged, :merge_index, :merge_request
 
diff --git a/app/services/merge_requests/working_copy_base_service.rb b/app/services/merge_requests/working_copy_base_service.rb
index b12f8f8f0197c6cb4d48df6824b173ed3a971fce..27c7040769b340f9d4c47826410b327334129a24 100644
--- a/app/services/merge_requests/working_copy_base_service.rb
+++ b/app/services/merge_requests/working_copy_base_service.rb
@@ -1,6 +1,6 @@
 module MergeRequests
   class WorkingCopyBaseService < MergeRequests::BaseService
-    class GitCommandError < StandardError; end
+    GitCommandError = Class.new(StandardError)
 
     include Gitlab::Popen
 
diff --git a/app/services/projects/destroy_service.rb b/app/services/projects/destroy_service.rb
index 808f2250c72bc9acf9ec3fbf2151dc25fbb66d1c..f1ade4a2c9caa683bf4a801552be1f83c51771ad 100644
--- a/app/services/projects/destroy_service.rb
+++ b/app/services/projects/destroy_service.rb
@@ -2,7 +2,7 @@ module Projects
   class DestroyService < BaseService
     include Gitlab::ShellAdapter
 
-    class DestroyError < StandardError; end
+    DestroyError = Class.new(StandardError)
 
     DELETED_FLAG = '+deleted'.freeze
 
diff --git a/app/services/projects/import_service.rb b/app/services/projects/import_service.rb
index cd230528743f9bcdef5642afa05e32c7c68e06bc..1c5a549feb9cec77ca766d4cf3a92afab83e3f82 100644
--- a/app/services/projects/import_service.rb
+++ b/app/services/projects/import_service.rb
@@ -2,7 +2,7 @@ module Projects
   class ImportService < BaseService
     include Gitlab::ShellAdapter
 
-    class Error < StandardError; end
+    Error = Class.new(StandardError)
 
     def execute
       add_repository_to_project unless project.gitlab_project_import?
diff --git a/app/services/projects/transfer_service.rb b/app/services/projects/transfer_service.rb
index 20dfbddc823c0bd7b66f5b9d6bdbf340c1702c65..da6e6acd4a71c29c152be558a67c9e1c78713935 100644
--- a/app/services/projects/transfer_service.rb
+++ b/app/services/projects/transfer_service.rb
@@ -9,7 +9,7 @@
 module Projects
   class TransferService < BaseService
     include Gitlab::ShellAdapter
-    class TransferError < StandardError; end
+    TransferError = Class.new(StandardError)
 
     def execute(new_namespace)
       if allowed_transfer?(current_user, project, new_namespace)
diff --git a/app/services/projects/update_mirror_service.rb b/app/services/projects/update_mirror_service.rb
index 1e9b4e2e165a376ff115b7dd5d96d5f3207e857e..4268e326079f3ebd3b4ad9d72f7b2ccf38394fc9 100644
--- a/app/services/projects/update_mirror_service.rb
+++ b/app/services/projects/update_mirror_service.rb
@@ -1,7 +1,7 @@
 module Projects
   class UpdateMirrorService < BaseService
-    class Error < StandardError; end
-    class UpdateError < Error; end
+    Error = Class.new(StandardError)
+    UpdateError = Class.new(Error)
 
     def execute
       unless project.mirror?
diff --git a/app/workers/repository_update_mirror_worker.rb b/app/workers/repository_update_mirror_worker.rb
index d512b8fdcba569e89598d3f213114cf961fc6927..ee23a154dd8ecd6a5987d74d0147543d62484566 100644
--- a/app/workers/repository_update_mirror_worker.rb
+++ b/app/workers/repository_update_mirror_worker.rb
@@ -1,5 +1,5 @@
 class RepositoryUpdateMirrorWorker
-  class UpdateMirrorError < StandardError; end
+  UpdateMirrorError = Class.new(StandardError)
 
   include Sidekiq::Worker
   include Gitlab::ShellAdapter
diff --git a/app/workers/repository_update_remote_mirror_worker.rb b/app/workers/repository_update_remote_mirror_worker.rb
index d20ca32f0a0d72fd1119838b115b64530700d165..3c9599150ee6538c3099170dad7367ed13c69df3 100644
--- a/app/workers/repository_update_remote_mirror_worker.rb
+++ b/app/workers/repository_update_remote_mirror_worker.rb
@@ -1,5 +1,5 @@
 class RepositoryUpdateRemoteMirrorWorker
-  class UpdateRemoteMirrorError < StandardError; end
+  UpdateRemoteMirrorError = Class.new(StandardError)
 
   include Sidekiq::Worker
   include Gitlab::ShellAdapter
diff --git a/lib/api/api_guard.rb b/lib/api/api_guard.rb
index c11f8529183a6f0be52a3409090fe07c085bbdf5..409cb5b924f249e1743f2cebca57f90d2f2fc6a9 100644
--- a/lib/api/api_guard.rb
+++ b/lib/api/api_guard.rb
@@ -160,13 +160,10 @@ def oauth2_bearer_token_error_handler
     # Exceptions
     #
 
-    class MissingTokenError < StandardError; end
-
-    class TokenNotFoundError < StandardError; end
-
-    class ExpiredError < StandardError; end
-
-    class RevokedError < StandardError; end
+    MissingTokenError = Class.new(StandardError)
+    TokenNotFoundError = Class.new(StandardError)
+    ExpiredError = Class.new(StandardError)
+    RevokedError = Class.new(StandardError)
 
     class InsufficientScopeError < StandardError
       attr_reader :scopes
diff --git a/lib/bitbucket/error/unauthorized.rb b/lib/bitbucket/error/unauthorized.rb
index 5e2eb57bb0ee37dad8158dcaf6bcf001e5e0ebf4..efe10542f199c3a218068b8b780530744c77d2dd 100644
--- a/lib/bitbucket/error/unauthorized.rb
+++ b/lib/bitbucket/error/unauthorized.rb
@@ -1,6 +1,5 @@
 module Bitbucket
   module Error
-    class Unauthorized < StandardError
-    end
+    Unauthorized = Class.new(StandardError)
   end
 end
diff --git a/lib/ci/gitlab_ci_yaml_processor.rb b/lib/ci/gitlab_ci_yaml_processor.rb
index 649ee4d018b4db4e5e793151678274fba79c22e5..e390919ae1daa6e36c8cab52ae9de6ec3134ff45 100644
--- a/lib/ci/gitlab_ci_yaml_processor.rb
+++ b/lib/ci/gitlab_ci_yaml_processor.rb
@@ -1,6 +1,6 @@
 module Ci
   class GitlabCiYamlProcessor
-    class ValidationError < StandardError; end
+    ValidationError = Class.new(StandardError)
 
     include Gitlab::Ci::Config::Entry::LegacyValidationHelpers
 
diff --git a/lib/extracts_path.rb b/lib/extracts_path.rb
index 9ece84cc4695d6ed1b79f211e517f1bc5461a170..dd864eea3fa09c8ff72d8a1977fa8800686de710 100644
--- a/lib/extracts_path.rb
+++ b/lib/extracts_path.rb
@@ -2,7 +2,7 @@
 # file path string when combined in a request parameter
 module ExtractsPath
   # Raised when given an invalid file path
-  class InvalidPathError < StandardError; end
+  InvalidPathError = Class.new(StandardError)
 
   # Given a string containing both a Git tree-ish, such as a branch or tag, and
   # a filesystem path joined by forward slashes, attempts to separate the two.
diff --git a/lib/gitlab/access.rb b/lib/gitlab/access.rb
index 3b210eeda9d7a6192e737f5f786569fe09adbea6..8c28009b9c6518acde431540fe6374d0964833c8 100644
--- a/lib/gitlab/access.rb
+++ b/lib/gitlab/access.rb
@@ -5,7 +5,7 @@
 #
 module Gitlab
   module Access
-    class AccessDeniedError < StandardError; end
+    AccessDeniedError = Class.new(StandardError)
 
     NO_ACCESS = 0
     GUEST     = 10
diff --git a/lib/gitlab/auth.rb b/lib/gitlab/auth.rb
index bf100dcb5d89fde94b0a99c5160b19f829913076..6a4b7b9d9ab927f99ef97e2aca255c7a28ec38f7 100644
--- a/lib/gitlab/auth.rb
+++ b/lib/gitlab/auth.rb
@@ -1,6 +1,6 @@
 module Gitlab
   module Auth
-    class MissingPersonalTokenError < StandardError; end
+    MissingPersonalTokenError = Class.new(StandardError)
 
     SCOPES = [:api, :read_user].freeze
     DEFAULT_SCOPES = [:api].freeze
diff --git a/lib/gitlab/ci/build/artifacts/metadata.rb b/lib/gitlab/ci/build/artifacts/metadata.rb
index cd2e83b4c27e96e7b41ad3777a4ff97832a596e8..a375ccbece0b35b9ef195f584c9387520c55c7bb 100644
--- a/lib/gitlab/ci/build/artifacts/metadata.rb
+++ b/lib/gitlab/ci/build/artifacts/metadata.rb
@@ -6,7 +6,7 @@ module Ci
     module Build
       module Artifacts
         class Metadata
-          class ParserError < StandardError; end
+          ParserError = Class.new(StandardError)
 
           VERSION_PATTERN = /^[\w\s]+(\d+\.\d+\.\d+)/
           INVALID_PATH_PATTERN = %r{(^\.?\.?/)|(/\.?\.?/)}
diff --git a/lib/gitlab/ci/config/entry/factory.rb b/lib/gitlab/ci/config/entry/factory.rb
index 9f5e393d191c493156e2511a70052bc00de3a213..6be8288748f7eb649ed3843bf71e3fbd512f36d5 100644
--- a/lib/gitlab/ci/config/entry/factory.rb
+++ b/lib/gitlab/ci/config/entry/factory.rb
@@ -6,7 +6,7 @@ module Entry
         # Factory class responsible for fabricating entry objects.
         #
         class Factory
-          class InvalidFactory < StandardError; end
+          InvalidFactory = Class.new(StandardError)
 
           def initialize(entry)
             @entry = entry
diff --git a/lib/gitlab/ci/config/entry/node.rb b/lib/gitlab/ci/config/entry/node.rb
index 5eef2868cd69ee12447e9378617f368bfe918c22..55a5447ab512aaa782a450f4eecc80ae3aa85fb2 100644
--- a/lib/gitlab/ci/config/entry/node.rb
+++ b/lib/gitlab/ci/config/entry/node.rb
@@ -6,7 +6,7 @@ module Entry
         # Base abstract class for each configuration entry node.
         #
         class Node
-          class InvalidError < StandardError; end
+          InvalidError = Class.new(StandardError)
 
           attr_reader :config, :metadata
           attr_accessor :key, :parent, :description
diff --git a/lib/gitlab/ci/config/loader.rb b/lib/gitlab/ci/config/loader.rb
index dbf6eb0edbe6625f60db0111822cf9b482919e05..e7d9f6a77610009073694731d802f8560de28ab8 100644
--- a/lib/gitlab/ci/config/loader.rb
+++ b/lib/gitlab/ci/config/loader.rb
@@ -2,7 +2,7 @@ module Gitlab
   module Ci
     class Config
       class Loader
-        class FormatError < StandardError; end
+        FormatError = Class.new(StandardError)
 
         def initialize(config)
           @config = YAML.safe_load(config, [Symbol], [], true)
diff --git a/lib/gitlab/conflict/file.rb b/lib/gitlab/conflict/file.rb
index d80bc7482099fa29ace3d0151f7939dcf111edb7..75a213ef752d100258d4486bfed5376643e5212f 100644
--- a/lib/gitlab/conflict/file.rb
+++ b/lib/gitlab/conflict/file.rb
@@ -4,8 +4,7 @@ class File
       include Gitlab::Routing.url_helpers
       include IconsHelper
 
-      class MissingResolution < ResolutionError
-      end
+      MissingResolution = Class.new(ResolutionError)
 
       CONTEXT_LINES = 3
 
diff --git a/lib/gitlab/conflict/file_collection.rb b/lib/gitlab/conflict/file_collection.rb
index fa5bd4649d473c619d1a4d75baaf1b703892aaed..990b719ecfdf24d6d9bf6be66531064538d4f924 100644
--- a/lib/gitlab/conflict/file_collection.rb
+++ b/lib/gitlab/conflict/file_collection.rb
@@ -1,8 +1,7 @@
 module Gitlab
   module Conflict
     class FileCollection
-      class ConflictSideMissing < StandardError
-      end
+      ConflictSideMissing = Class.new(StandardError)
 
       attr_reader :merge_request, :our_commit, :their_commit
 
diff --git a/lib/gitlab/conflict/parser.rb b/lib/gitlab/conflict/parser.rb
index ddd657903fb6ab08625218bc37ece897ec98143c..d3524c338ee1344bf2282221033c49cdac77b565 100644
--- a/lib/gitlab/conflict/parser.rb
+++ b/lib/gitlab/conflict/parser.rb
@@ -1,25 +1,15 @@
 module Gitlab
   module Conflict
     class Parser
-      class UnresolvableError < StandardError
-      end
-
-      class UnmergeableFile < UnresolvableError
-      end
-
-      class UnsupportedEncoding < UnresolvableError
-      end
+      UnresolvableError = Class.new(StandardError)
+      UnmergeableFile = Class.new(UnresolvableError)
+      UnsupportedEncoding = Class.new(UnresolvableError)
 
       # Recoverable errors - the conflict can be resolved in an editor, but not with
       # sections.
-      class ParserError < StandardError
-      end
-
-      class UnexpectedDelimiter < ParserError
-      end
-
-      class MissingEndDelimiter < ParserError
-      end
+      ParserError = Class.new(StandardError)
+      UnexpectedDelimiter = Class.new(ParserError)
+      MissingEndDelimiter = Class.new(ParserError)
 
       def parse(text, our_path:, their_path:, parent_file: nil)
         raise UnmergeableFile if text.blank? # Typically a binary file
diff --git a/lib/gitlab/conflict/resolution_error.rb b/lib/gitlab/conflict/resolution_error.rb
index a0f2006bc245b7bc22811d11d85dda466a0fb9a6..0b61256b35a39e9be4448bed890484ddb5f94598 100644
--- a/lib/gitlab/conflict/resolution_error.rb
+++ b/lib/gitlab/conflict/resolution_error.rb
@@ -1,6 +1,5 @@
 module Gitlab
   module Conflict
-    class ResolutionError < StandardError
-    end
+    ResolutionError = Class.new(StandardError)
   end
 end
diff --git a/lib/gitlab/email/receiver.rb b/lib/gitlab/email/receiver.rb
index b64db5d01ae43e44d1c899e4688855d324e8ac63..ec0529b5a4b20c3cd1fe446cac276fa5c8a1f399 100644
--- a/lib/gitlab/email/receiver.rb
+++ b/lib/gitlab/email/receiver.rb
@@ -4,19 +4,19 @@
 # Inspired in great part by Discourse's Email::Receiver
 module Gitlab
   module Email
-    class ProcessingError < StandardError; end
-    class EmailUnparsableError < ProcessingError; end
-    class SentNotificationNotFoundError < ProcessingError; end
-    class ProjectNotFound < ProcessingError; end
-    class EmptyEmailError < ProcessingError; end
-    class AutoGeneratedEmailError < ProcessingError; end
-    class UserNotFoundError < ProcessingError; end
-    class UserBlockedError < ProcessingError; end
-    class UserNotAuthorizedError < ProcessingError; end
-    class NoteableNotFoundError < ProcessingError; end
-    class InvalidNoteError < ProcessingError; end
-    class InvalidIssueError < ProcessingError; end
-    class UnknownIncomingEmail < ProcessingError; end
+    ProcessingError = Class.new(StandardError)
+    EmailUnparsableError = Class.new(ProcessingError)
+    SentNotificationNotFoundError = Class.new(ProcessingError)
+    ProjectNotFound = Class.new(ProcessingError)
+    EmptyEmailError = Class.new(ProcessingError)
+    AutoGeneratedEmailError = Class.new(ProcessingError)
+    UserNotFoundError = Class.new(ProcessingError)
+    UserBlockedError = Class.new(ProcessingError)
+    UserNotAuthorizedError = Class.new(ProcessingError)
+    NoteableNotFoundError = Class.new(ProcessingError)
+    InvalidNoteError = Class.new(ProcessingError)
+    InvalidIssueError = Class.new(ProcessingError)
+    UnknownIncomingEmail = Class.new(ProcessingError)
 
     class Receiver
       def initialize(raw)
diff --git a/lib/gitlab/geo.rb b/lib/gitlab/geo.rb
index a5e1404a73a220cb3d7990da45e5e561c89bea7b..3f2754e43d85267755769e7238390ac25716e2ed 100644
--- a/lib/gitlab/geo.rb
+++ b/lib/gitlab/geo.rb
@@ -1,6 +1,6 @@
 module Gitlab
   module Geo
-    class OauthApplicationUndefinedError < StandardError; end
+    OauthApplicationUndefinedError = Class.new(StandardError)
 
     def self.current_node
       self.cache_value(:geo_node_current) do
diff --git a/lib/gitlab/git/diff.rb b/lib/gitlab/git/diff.rb
index d6b3b5705a9a764c23bc24b8a1a551ad1675769f..2a017c93f57c68405e0660c4cc30080fb870f974 100644
--- a/lib/gitlab/git/diff.rb
+++ b/lib/gitlab/git/diff.rb
@@ -2,7 +2,7 @@
 module Gitlab
   module Git
     class Diff
-      class TimeoutError < StandardError; end
+      TimeoutError = Class.new(StandardError)
       include Gitlab::Git::EncodingHelper
 
       # Diff properties
diff --git a/lib/gitlab/git/repository.rb b/lib/gitlab/git/repository.rb
index 8ec90885231b8297282b8ad6ecd36342f56bbe39..0e9b812ffddf9c761d2d1d015fafb2d6c124dad2 100644
--- a/lib/gitlab/git/repository.rb
+++ b/lib/gitlab/git/repository.rb
@@ -10,9 +10,9 @@ class Repository
 
       SEARCH_CONTEXT_LINES = 3
 
-      class NoRepository < StandardError; end
-      class InvalidBlobName < StandardError; end
-      class InvalidRef < StandardError; end
+      NoRepository = Class.new(StandardError)
+      InvalidBlobName = Class.new(StandardError)
+      InvalidRef = Class.new(StandardError)
 
       # Full path to repo
       attr_reader :path
diff --git a/lib/gitlab/import_export/error.rb b/lib/gitlab/import_export/error.rb
index e341c4d9cf898973e9cf3a63a29a11ed3b562750..788eedf2686d407e3a1294ad9ffc74e08163eead 100644
--- a/lib/gitlab/import_export/error.rb
+++ b/lib/gitlab/import_export/error.rb
@@ -1,5 +1,5 @@
 module Gitlab
   module ImportExport
-    class Error < StandardError; end
+    Error = Class.new(StandardError)
   end
 end
diff --git a/lib/gitlab/ldap/config.rb b/lib/gitlab/ldap/config.rb
index f1e29d479e000d7c02246debf23c619ec2a3c7bd..20650f68d431dffa6e36fb63202bc8cc1315da3e 100644
--- a/lib/gitlab/ldap/config.rb
+++ b/lib/gitlab/ldap/config.rb
@@ -4,7 +4,7 @@ module LDAP
     class Config
       attr_accessor :provider, :options
 
-      class InvalidProvider < StandardError; end
+      InvalidProvider = Class.new(StandardError)
 
       def self.enabled?
         Gitlab.config.ldap.enabled
diff --git a/lib/gitlab/o_auth/user.rb b/lib/gitlab/o_auth/user.rb
index 95d2f559588ce56ecd816e0ad732e6acfc30a7ef..fcf51b7fc5bfc157bb7884c73a4ae79e1771ea9f 100644
--- a/lib/gitlab/o_auth/user.rb
+++ b/lib/gitlab/o_auth/user.rb
@@ -5,7 +5,7 @@
 #
 module Gitlab
   module OAuth
-    class SignupDisabledError < StandardError; end
+    SignupDisabledError = Class.new(StandardError)
 
     class User
       attr_accessor :auth_hash, :gl_user
diff --git a/lib/gitlab/route_map.rb b/lib/gitlab/route_map.rb
index 72d00abfcc26e2995bc9fdb9ac56ff572f0acd98..36791fae60f9c70e7d7443090ad84ed10b909331 100644
--- a/lib/gitlab/route_map.rb
+++ b/lib/gitlab/route_map.rb
@@ -1,6 +1,6 @@
 module Gitlab
   class RouteMap
-    class FormatError < StandardError; end
+    FormatError = Class.new(StandardError)
 
     def initialize(data)
       begin
diff --git a/lib/gitlab/serializer/pagination.rb b/lib/gitlab/serializer/pagination.rb
index bf2c0acc7298420e9d1617449c602027ffeccebd..9c92b83dddcfb5609f9b726fccb250bf7d684284 100644
--- a/lib/gitlab/serializer/pagination.rb
+++ b/lib/gitlab/serializer/pagination.rb
@@ -1,7 +1,7 @@
 module Gitlab
   module Serializer
     class Pagination
-      class InvalidResourceError < StandardError; end
+      InvalidResourceError = Class.new(StandardError)
       include ::API::Helpers::Pagination
 
       def initialize(request, response)
diff --git a/lib/gitlab/shell.rb b/lib/gitlab/shell.rb
index f9a8cba6ad6e1a7d16c98ca3fdec36d7b7c4cdf6..3f6f9e7f43a2937e3445e60e2ac04461a6be77eb 100644
--- a/lib/gitlab/shell.rb
+++ b/lib/gitlab/shell.rb
@@ -2,7 +2,7 @@
 
 module Gitlab
   class Shell
-    class Error < StandardError; end
+    Error = Class.new(StandardError)
 
     KeyAdder = Struct.new(:io) do
       def add_key(id, key)
diff --git a/lib/gitlab/sidekiq_cluster/cli.rb b/lib/gitlab/sidekiq_cluster/cli.rb
index 0e5096ca38d852da210261543ee9ba2620065000..01eb3713ab0c771f37af578949f7c4fca70868bf 100644
--- a/lib/gitlab/sidekiq_cluster/cli.rb
+++ b/lib/gitlab/sidekiq_cluster/cli.rb
@@ -5,7 +5,7 @@
 module Gitlab
   module SidekiqCluster
     class CLI
-      class CommandError < StandardError; end
+      CommandError = Class.new(StandardError)
 
       def initialize(log_output = STDERR)
         @environment = ENV['RAILS_ENV'] || 'development'
diff --git a/lib/gitlab/template/finders/repo_template_finder.rb b/lib/gitlab/template/finders/repo_template_finder.rb
index 22c39436cb2465dc290a0b85d6717f31b92eea26..cb7957e2af961eeceb14df20f5708539d3c8ec70 100644
--- a/lib/gitlab/template/finders/repo_template_finder.rb
+++ b/lib/gitlab/template/finders/repo_template_finder.rb
@@ -4,7 +4,7 @@ module Template
     module Finders
       class RepoTemplateFinder < BaseTemplateFinder
         # Raised when file is not found
-        class FileNotFoundError < StandardError; end
+        FileNotFoundError = Class.new(StandardError)
 
         def initialize(project, base_dir, extension, categories = {})
           @categories     = categories
diff --git a/lib/gitlab/update_path_error.rb b/lib/gitlab/update_path_error.rb
index ce14cc887d0f4edfd674c9df14b2feeb2274d1e4..8947ecfb92ee39dcc51bb5be21a9c7db20dff3d3 100644
--- a/lib/gitlab/update_path_error.rb
+++ b/lib/gitlab/update_path_error.rb
@@ -1,3 +1,3 @@
 module Gitlab
-  class UpdatePathError < StandardError; end
+  UpdatePathError = Class.new(StandardError)
 end
diff --git a/lib/mattermost/client.rb b/lib/mattermost/client.rb
index e55c0d6ac49c6f7f837282e79f83682df9d93dd6..ad6df24609107a6e8bb288c0057b8a7fac7ad7c1 100644
--- a/lib/mattermost/client.rb
+++ b/lib/mattermost/client.rb
@@ -1,5 +1,5 @@
 module Mattermost
-  class ClientError < Mattermost::Error; end
+  ClientError = Class.new(Mattermost::Error)
 
   class Client
     attr_reader :user
diff --git a/lib/mattermost/error.rb b/lib/mattermost/error.rb
index 014df175be09d87b0a3fd218363beaf6ca41cd5c..dee6deb7974861661d9f30838a7a7fdc3d23d42d 100644
--- a/lib/mattermost/error.rb
+++ b/lib/mattermost/error.rb
@@ -1,3 +1,3 @@
 module Mattermost
-  class Error < StandardError; end
+  Error = Class.new(StandardError)
 end
diff --git a/lib/mattermost/session.rb b/lib/mattermost/session.rb
index 377cb7b10211f4b8101d923d6fb99c0f0500cb32..5388966605d478531ed6d30c9d80fb54ad0cfdf9 100644
--- a/lib/mattermost/session.rb
+++ b/lib/mattermost/session.rb
@@ -5,7 +5,7 @@ def message
     end
   end
 
-  class ConnectionError < Mattermost::Error; end
+  ConnectionError = Class.new(Mattermost::Error)
 
   # This class' prime objective is to obtain a session token on a Mattermost
   # instance with SSO configured where this GitLab instance is the provider.
diff --git a/rubocop/rubocop.rb b/rubocop/rubocop.rb
index d4266d0deae6df23bb857cbe90acb3053dcc52d7..ea8e0f64b0d97ad01a1645f8d9a1b4cb0118fcd7 100644
--- a/rubocop/rubocop.rb
+++ b/rubocop/rubocop.rb
@@ -1,3 +1,4 @@
+require_relative 'cop/custom_error_class'
 require_relative 'cop/gem_fetcher'
 require_relative 'cop/migration/add_column'
 require_relative 'cop/migration/add_column_with_default'