Class: RuboCop::Cop::Style::OneClassPerFile

Inherits:
Base
  • Object
show all
Includes:
RangeHelp
Defined in:
lib/rubocop/cop/style/one_class_per_file.rb

Overview

Checks that each source file defines at most one top-level class or module.

Keeping one class or module per file makes it easier to find and navigate code, and follows the convention used by most Ruby projects.

Classes and modules listed in ‘AllowedClasses` are not counted toward the limit. This is useful for small ancillary classes like custom exception classes that logically belong with the main class.

Examples:

# bad - Multiple top-level classes
class Foo
end

class Bar
end

# bad - Multiple top-level modules
module Foo
end

module Bar
end

# bad - A top-level class and a top-level module
class Foo
end

module Bar
end

# good - A single top-level class
class Foo
end

# good - A single top-level module
module Foo
end

# good - Nested classes within a single top-level class
class Foo
  class Bar
  end
end

# good - Multiple classes within a single top-level module
module Foo
  class Bar
  end

  class Baz
  end
end

AllowedClasses: [‘AllowedClass’]

# good
class Foo
end

class AllowedClass
end

Constant Summary collapse

MSG =
'Do not define multiple classes/modules at the top level in a single file.'

Constants included from RangeHelp

RangeHelp::BYTE_ORDER_MARK, RangeHelp::NOT_GIVEN

Constants inherited from Base

Base::RESTRICT_ON_SEND

Instance Attribute Summary

Attributes inherited from Base

#config, #processed_source

Instance Method Summary collapse

Methods inherited from Base

#active_support_extensions_enabled?, #add_global_offense, #add_offense, #always_autocorrect?, autocorrect_incompatible_with, badge, #begin_investigation, #callbacks_needed, callbacks_needed, #config_to_allow_offenses, #config_to_allow_offenses=, #contextual_autocorrect?, #cop_config, cop_name, #cop_name, department, documentation_url, exclude_from_registry, #excluded_file?, #external_dependency_checksum, inherited, #initialize, #inspect, joining_forces, lint?, match?, #message, #offenses, #on_investigation_end, #on_other_file, #parse, #parser_engine, #ready, #relevant_file?, requires_gem, #string_literals_frozen_by_default?, support_autocorrect?, support_multiple_source?, #target_gem_version, #target_rails_version, #target_ruby_version

Methods included from ExcludeLimit

cop_dir_for, #exclude_limit, read_limits

Methods included from AutocorrectLogic

#autocorrect?, #autocorrect_enabled?, #autocorrect_requested?, #autocorrect_with_disable_uncorrectable?, #correctable?, #disable_uncorrectable?, #safe_autocorrect?

Methods included from IgnoredNode

#ignore_node, #ignored_node?, #part_of_ignored_node?

Methods included from Util

silence_warnings

Constructor Details

This class inherits a constructor from RuboCop::Cop::Base

Instance Method Details

#on_class(node) ⇒ Object



77
78
79
# File 'lib/rubocop/cop/style/one_class_per_file.rb', line 77

def on_class(node)
  check_top_level(node)
end

#on_module(node) ⇒ Object



81
82
83
# File 'lib/rubocop/cop/style/one_class_per_file.rb', line 81

def on_module(node)
  check_top_level(node)
end

#on_new_investigationObject



73
74
75
# File 'lib/rubocop/cop/style/one_class_per_file.rb', line 73

def on_new_investigation
  @top_level_definitions = []
end