Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
52 changes: 4 additions & 48 deletions .rubocop.yml
Original file line number Diff line number Diff line change
Expand Up @@ -16,15 +16,16 @@ plugins:
AllCops:
SuggestExtensions: false
NewCops: enable
TargetRubyVersion: 3.3
Exclude:
- vendor/bundle/**/**

Metrics/ParameterLists:
Enabled: false

# This cop is annoying with typed configuration
Style/TrivialAccessors:
Enabled: false
# Allow RBS inline type annotation comments (`#:` and `#|`).
Layout/LeadingCommentSpace:
AllowRBSInlineAnnotation: true

# This rubocop is annoying when we use interfaces a lot
Lint/UnusedMethodArgument:
Expand All @@ -33,9 +34,6 @@ Lint/UnusedMethodArgument:
Gemspec/RequireMFA:
Enabled: false

Lint/DuplicateBranch:
Enabled: false

# If is sometimes easier to think about than unless sometimes
Style/NegatedIf:
Enabled: false
Expand All @@ -44,31 +42,18 @@ Style/NegatedIf:
Style/FrozenStringLiteralComment:
Enabled: false

# It's nice to be able to read the condition first before reading the code within the condition
Style/GuardClause:
Enabled: false

#
# Leaving length metrics to human judgment for now
#
Metrics/ModuleLength:
Enabled: false

Layout/LineLength:
Enabled: false

Metrics/BlockLength:
Enabled: false

Metrics/MethodLength:
Enabled: false

Metrics/AbcSize:
Enabled: false

Metrics/ClassLength:
Enabled: false

# This doesn't feel useful
Metrics/CyclomaticComplexity:
Enabled: false
Expand All @@ -89,26 +74,6 @@ Style/ConditionalAssignment:
Style/Documentation:
Enabled: false

# Sometimes we leave comments in empty else statements intentionally
Style/EmptyElse:
Enabled: false

# Sometimes we want to more explicitly list out a condition
Style/RedundantCondition:
Enabled: false

# This leads to code that is not very readable at times (very long lines)
Layout/MultilineMethodCallIndentation:
Enabled: false

# Blocks across lines are okay sometimes
Style/BlockDelimiters:
Enabled: false

# Sometimes we like methods like `get_packages`
Naming/AccessorMethodName:
Enabled: false

# This leads to code that is not very readable at times (very long lines)
Layout/FirstArgumentIndentation:
Enabled: false
Expand All @@ -117,15 +82,6 @@ Layout/FirstArgumentIndentation:
Layout/ArgumentAlignment:
Enabled: false

Style/AccessorGrouping:
Enabled: false

Style/NumericPredicate:
Enabled: false

Layout/BlockEndNewline:
Enabled: false

Naming/FileName:
Exclude:
- lib/packwerk-extensions.rb
Expand Down
4 changes: 4 additions & 0 deletions Gemfile
Original file line number Diff line number Diff line change
Expand Up @@ -3,3 +3,7 @@
source 'https://rubygems.org'

gemspec

# Pinned to main for the not-yet-released `Sorbet/RedundantTLet` and
# `Sorbet/RedundantTLetForLiteral` cops (see Shopify/rubocop-sorbet#372 and #367).
gem 'rubocop-sorbet', github: 'Shopify/rubocop-sorbet', ref: '7b7d3cb5a41cee8207b3cd00c21f5ef43f7140fd'
60 changes: 33 additions & 27 deletions Gemfile.lock
Original file line number Diff line number Diff line change
@@ -1,10 +1,18 @@
GIT
remote: https://github.com/Shopify/rubocop-sorbet.git
revision: 7b7d3cb5a41cee8207b3cd00c21f5ef43f7140fd
ref: 7b7d3cb5a41cee8207b3cd00c21f5ef43f7140fd
specs:
rubocop-sorbet (0.12.0)
lint_roller
rubocop (>= 1.75.2)

PATH
remote: .
specs:
packwerk-extensions (0.3.0)
packwerk (>= 3)
railties (>= 6.0.0)
sorbet-runtime
zeitwerk

GEM
Expand Down Expand Up @@ -106,7 +114,7 @@ GEM
prism (>= 0.25.0)
sorbet-runtime (>= 0.5.9914)
zeitwerk (>= 2.6.1)
parallel (1.27.0)
parallel (1.28.0)
parser (3.3.10.2)
ast (~> 2.4.1)
racc
Expand Down Expand Up @@ -149,12 +157,12 @@ GEM
zeitwerk (~> 2.6)
rainbow (3.1.1)
rake (13.3.1)
rbi (0.3.9)
rbi (0.3.12)
prism (~> 1.0)
rbs (>= 3.4.4)
rbs (4.0.0.dev.5)
rbs (>= 4.0.1)
rbs (4.1.0.pre.1)
logger
prism (>= 1.3.0)
prism (>= 1.6.0)
tsort
rdoc (7.2.0)
erb
Expand All @@ -163,7 +171,7 @@ GEM
regexp_parser (2.11.3)
reline (0.6.3)
io-console (~> 0.5)
require-hooks (0.2.3)
require-hooks (0.4.0)
rexml (3.4.4)
rubocop (1.85.1)
json (~> 2.3)
Expand Down Expand Up @@ -198,41 +206,42 @@ GEM
rubocop-rspec (3.9.0)
lint_roller (~> 1.1)
rubocop (~> 1.81)
rubocop-sorbet (0.12.0)
lint_roller
rubocop (>= 1.75.2)
ruby-progressbar (1.13.0)
ruby2_keywords (0.0.5)
rubydex (0.2.5-arm64-darwin)
rubydex (0.2.5-x86_64-darwin)
rubydex (0.2.5-x86_64-linux)
securerandom (0.4.1)
smart_properties (1.17.0)
sorbet (0.6.12992)
sorbet-static (= 0.6.12992)
sorbet-runtime (0.6.12992)
sorbet-static (0.6.12992-universal-darwin)
sorbet-static (0.6.12992-x86_64-linux)
sorbet-static-and-runtime (0.6.12992)
sorbet (= 0.6.12992)
sorbet-runtime (= 0.6.12992)
spoom (1.7.11)
sorbet (0.6.13258)
sorbet-static (= 0.6.13258)
sorbet-runtime (0.6.13258)
sorbet-static (0.6.13258-universal-darwin)
sorbet-static (0.6.13258-x86_64-linux)
sorbet-static-and-runtime (0.6.13258)
sorbet (= 0.6.13258)
sorbet-runtime (= 0.6.13258)
spoom (1.7.16)
erubi (>= 1.10.0)
prism (>= 0.28.0)
rbi (>= 0.3.3)
rbs (>= 4.0.0.dev.4)
rbs (>= 4.0.0.dev.5)
rexml (>= 3.2.6)
sorbet-static-and-runtime (>= 0.5.10187)
thor (>= 0.19.2)
stringio (3.2.0)
tapioca (0.17.10)
tapioca (0.19.1)
benchmark
bundler (>= 2.2.25)
netrc (>= 0.11.0)
parallel (>= 1.21.0)
rbi (>= 0.3.7)
require-hooks (>= 0.2.2)
sorbet-static-and-runtime (>= 0.5.11087)
rubydex (>= 0.1.0.beta10)
sorbet-static-and-runtime (>= 0.6.12698)
spoom (>= 1.7.9)
thor (>= 1.2.0)
yard-sorbet
tsort
thor (1.5.0)
tsort (0.2.0)
tzinfo (2.0.6)
Expand All @@ -242,10 +251,6 @@ GEM
unicode-emoji (4.2.0)
uri (1.1.1)
useragent (0.16.11)
yard (0.9.38)
yard-sorbet (0.9.0)
sorbet-runtime
yard
zeitwerk (2.7.5)

PLATFORMS
Expand All @@ -261,6 +266,7 @@ DEPENDENCIES
rake
rubocop
rubocop-gusto
rubocop-sorbet!
sorbet
sorbet-static
tapioca
Expand Down
1 change: 0 additions & 1 deletion lib/packwerk-extensions.rb
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
# typed: strict
# frozen_string_literal: true

require 'sorbet-runtime'
require 'packwerk'

require 'packwerk/privacy/checker'
Expand Down
34 changes: 11 additions & 23 deletions lib/packwerk/folder_privacy/checker.rb
Original file line number Diff line number Diff line change
Expand Up @@ -7,21 +7,18 @@
module Packwerk
module FolderPrivacy
class Checker
extend T::Sig
include Packwerk::Checker

VIOLATION_TYPE = T.let('folder_privacy', String)
VIOLATION_TYPE = 'folder_privacy'

sig { override.returns(String) }
# @override
#: -> String
def violation_type
VIOLATION_TYPE
end

sig do
override
.params(reference: Packwerk::Reference)
.returns(T::Boolean)
end
# @override
#: (Packwerk::Reference reference) -> bool
def invalid_reference?(reference)
referencing_package = reference.package
referenced_package = reference.constant.package
Expand All @@ -41,21 +38,15 @@ def invalid_reference?(reference)
true
end

sig do
override
.params(listed_offense: Packwerk::ReferenceOffense)
.returns(T::Boolean)
end
# @override
#: (Packwerk::ReferenceOffense listed_offense) -> bool
def strict_mode_violation?(listed_offense)
publishing_package = listed_offense.reference.constant.package
publishing_package.config['enforce_folder_privacy'] == 'strict'
end

sig do
override
.params(reference: Packwerk::Reference)
.returns(String)
end
# @override
#: (Packwerk::Reference reference) -> String
def message(reference)
source_desc = "'#{reference.package}'"

Expand All @@ -71,15 +62,12 @@ def message(reference)

private

sig do
params(visibility_option: T.nilable(T.any(T::Boolean, String)))
.returns(T::Boolean)
end
#: ((bool | String)? visibility_option) -> bool
def enforcement_disabled?(visibility_option)
[false, nil].include?(visibility_option)
end

sig { params(reference: Reference).returns(String) }
#: (Reference reference) -> String
def standard_help_message(reference)
standard_message = <<~MESSAGE.chomp
Inference details: this is a reference to #{reference.constant.name} which seems to be defined in #{reference.constant.location}.
Expand Down
14 changes: 8 additions & 6 deletions lib/packwerk/folder_privacy/package.rb
Original file line number Diff line number Diff line change
Expand Up @@ -3,15 +3,17 @@

module Packwerk
module FolderPrivacy
class Package < T::Struct
extend T::Sig
class Package
#: (bool | String)?
attr_reader :enforce_folder_privacy

const :enforce_folder_privacy, T.nilable(T.any(T::Boolean, String))
#: (enforce_folder_privacy: (bool | String)?) -> void
def initialize(enforce_folder_privacy:)
@enforce_folder_privacy = enforce_folder_privacy
end

class << self
extend T::Sig

sig { params(package: ::Packwerk::Package).returns(Package) }
#: (::Packwerk::Package package) -> Package
def from(package)
Package.new(
enforce_folder_privacy: package.config['enforce_folder_privacy']
Expand Down
9 changes: 5 additions & 4 deletions lib/packwerk/folder_privacy/validator.rb
Original file line number Diff line number Diff line change
Expand Up @@ -4,14 +4,14 @@
module Packwerk
module FolderPrivacy
class Validator
extend T::Sig
include Packwerk::Validator

Result = Packwerk::Validator::Result

sig { override.params(package_set: PackageSet, configuration: Configuration).returns(Result) }
# @override
#: (PackageSet package_set, Configuration configuration) -> Result
def call(package_set, configuration)
results = T.let([], T::Array[Result])
results = [] #: Array[Result]

package_manifests_settings_for(configuration, 'enforce_folder_privacy').each do |config, setting|
next if setting.nil?
Expand All @@ -27,7 +27,8 @@ def call(package_set, configuration)
merge_results(results, separator: "\n---\n")
end

sig { override.returns(T::Array[String]) }
# @override
#: -> Array[String]
def permitted_keys
%w(enforce_folder_privacy)
end
Expand Down
Loading