Sha256: 0c1c05afbf1be408a349d33a0dfc53303bfeb6a2ee8a68a514bef53adbb30006
Contents?: true
Size: 1.8 KB
Versions: 2
Compression:
Stored size: 1.8 KB
Contents
# frozen_string_literal: true require "pathname" module RuboCop module Cop module Sorbet # Makes sure that RBI files are always located under the defined allowed paths. # # Options: # # * `AllowedPaths`: A list of the paths where RBI files are allowed (default: ["rbi/**", "sorbet/rbi/**"]) # # @example # # bad # # lib/some_file.rbi # # other_file.rbi # # # good # # rbi/external_interface.rbi # # sorbet/rbi/some_file.rbi # # sorbet/rbi/any/path/for/file.rbi class ForbidRBIOutsideOfAllowedPaths < RuboCop::Cop::Base include RangeHelp def on_new_investigation paths = allowed_paths if paths.nil? add_offense( source_range(processed_source.buffer, 1, 0), message: "AllowedPaths expects an array", ) return elsif paths.empty? add_offense( source_range(processed_source.buffer, 1, 0), message: "AllowedPaths cannot be empty", ) return end # When executed the path to the source file is absolute. # We need to remove the exec path directory prefix before matching with the filename regular expressions. rel_path = processed_source.file_path.sub("#{Dir.pwd}/", "") add_offense( source_range(processed_source.buffer, 1, 0), message: "RBI file path should match one of: #{paths.join(", ")}", ) if paths.none? { |pattern| File.fnmatch(pattern, rel_path) } end private def allowed_paths paths = cop_config["AllowedPaths"] return unless paths.is_a?(Array) paths.compact end end end end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
rubocop-sorbet-0.8.5 | lib/rubocop/cop/sorbet/rbi/forbid_rbi_outside_of_allowed_paths.rb |
rubocop-sorbet-0.8.4 | lib/rubocop/cop/sorbet/rbi/forbid_rbi_outside_of_allowed_paths.rb |