packwerk 1.0.1 → 1.1.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (118) hide show
  1. checksums.yaml +4 -4
  2. data/.github/pull_request_template.md +8 -7
  3. data/.github/workflows/ci.yml +14 -5
  4. data/.ruby-version +1 -1
  5. data/Gemfile +2 -1
  6. data/Gemfile.lock +130 -110
  7. data/README.md +8 -1
  8. data/USAGE.md +23 -2
  9. data/dev.yml +1 -1
  10. data/exe/packwerk +1 -1
  11. data/gemfiles/Gemfile-rails-6-0 +22 -0
  12. data/lib/packwerk.rb +4 -2
  13. data/lib/packwerk/application_load_paths.rb +68 -0
  14. data/lib/packwerk/application_validator.rb +94 -74
  15. data/lib/packwerk/association_inspector.rb +24 -9
  16. data/lib/packwerk/cache_deprecated_references.rb +55 -0
  17. data/lib/packwerk/checker.rb +3 -0
  18. data/lib/packwerk/checking_deprecated_references.rb +5 -2
  19. data/lib/packwerk/cli.rb +56 -55
  20. data/lib/packwerk/commands/detect_stale_violations_command.rb +60 -0
  21. data/lib/packwerk/commands/offense_progress_marker.rb +24 -0
  22. data/lib/packwerk/commands/result.rb +13 -0
  23. data/lib/packwerk/commands/update_deprecations_command.rb +81 -0
  24. data/lib/packwerk/configuration.rb +5 -37
  25. data/lib/packwerk/const_node_inspector.rb +28 -17
  26. data/lib/packwerk/dependency_checker.rb +13 -5
  27. data/lib/packwerk/deprecated_references.rb +23 -0
  28. data/lib/packwerk/detect_stale_deprecated_references.rb +14 -0
  29. data/lib/packwerk/file_processor.rb +4 -4
  30. data/lib/packwerk/formatters/offenses_formatter.rb +48 -0
  31. data/lib/packwerk/formatters/progress_formatter.rb +6 -2
  32. data/lib/packwerk/inflector.rb +17 -8
  33. data/lib/packwerk/node.rb +61 -38
  34. data/lib/packwerk/node_processor.rb +4 -4
  35. data/lib/packwerk/node_processor_factory.rb +39 -0
  36. data/lib/packwerk/node_visitor.rb +1 -1
  37. data/lib/packwerk/offense.rb +4 -6
  38. data/lib/packwerk/output_style.rb +20 -0
  39. data/lib/packwerk/output_styles/coloured.rb +29 -0
  40. data/lib/packwerk/output_styles/plain.rb +26 -0
  41. data/lib/packwerk/package_set.rb +9 -3
  42. data/lib/packwerk/parsed_constant_definitions.rb +4 -4
  43. data/lib/packwerk/parsers/erb.rb +4 -0
  44. data/lib/packwerk/parsers/factory.rb +10 -1
  45. data/lib/packwerk/privacy_checker.rb +23 -5
  46. data/lib/packwerk/run_context.rb +69 -46
  47. data/lib/packwerk/sanity_checker.rb +1 -1
  48. data/lib/packwerk/spring_command.rb +1 -1
  49. data/lib/packwerk/updating_deprecated_references.rb +2 -39
  50. data/lib/packwerk/version.rb +1 -1
  51. data/library.yml +1 -1
  52. data/packwerk.gemspec +1 -1
  53. data/service.yml +2 -2
  54. data/shipit.rubygems.yml +5 -1
  55. data/sorbet/rbi/gems/{actioncable@6.1.0.alpha-d80c18a391e33552ae2d943e68af56946f883f65.rbi → actioncable@7.0.0.alpha-d612542336d9a61381311c95a27d801bb4094779.rbi} +56 -36
  56. data/sorbet/rbi/gems/{actionmailbox@6.1.0.alpha-d80c18a391e33552ae2d943e68af56946f883f65.rbi → actionmailbox@7.0.0.alpha-d612542336d9a61381311c95a27d801bb4094779.rbi} +25 -28
  57. data/sorbet/rbi/gems/{actionmailer@6.1.0.alpha-d80c18a391e33552ae2d943e68af56946f883f65.rbi → actionmailer@7.0.0.alpha-d612542336d9a61381311c95a27d801bb4094779.rbi} +43 -24
  58. data/sorbet/rbi/gems/{actionpack@6.1.0.alpha-d80c18a391e33552ae2d943e68af56946f883f65.rbi → actionpack@7.0.0.alpha-d612542336d9a61381311c95a27d801bb4094779.rbi} +382 -284
  59. data/sorbet/rbi/gems/{actiontext@6.1.0.alpha-d80c18a391e33552ae2d943e68af56946f883f65.rbi → actiontext@7.0.0.alpha-d612542336d9a61381311c95a27d801bb4094779.rbi} +76 -40
  60. data/sorbet/rbi/gems/{actionview@6.1.0.alpha-d80c18a391e33552ae2d943e68af56946f883f65.rbi → actionview@7.0.0.alpha-d612542336d9a61381311c95a27d801bb4094779.rbi} +206 -195
  61. data/sorbet/rbi/gems/{activejob@6.1.0.alpha-d80c18a391e33552ae2d943e68af56946f883f65.rbi → activejob@7.0.0.alpha-d612542336d9a61381311c95a27d801bb4094779.rbi} +64 -75
  62. data/sorbet/rbi/gems/{activemodel@6.1.0.alpha-d80c18a391e33552ae2d943e68af56946f883f65.rbi → activemodel@7.0.0.alpha-d612542336d9a61381311c95a27d801bb4094779.rbi} +103 -56
  63. data/sorbet/rbi/gems/{activerecord@6.1.0.alpha-d80c18a391e33552ae2d943e68af56946f883f65.rbi → activerecord@7.0.0.alpha-d612542336d9a61381311c95a27d801bb4094779.rbi} +1250 -898
  64. data/sorbet/rbi/gems/{activestorage@6.1.0.alpha-d80c18a391e33552ae2d943e68af56946f883f65.rbi → activestorage@7.0.0.alpha-d612542336d9a61381311c95a27d801bb4094779.rbi} +92 -120
  65. data/sorbet/rbi/gems/{activesupport@6.1.0.alpha-d80c18a391e33552ae2d943e68af56946f883f65.rbi → activesupport@7.0.0.alpha-d612542336d9a61381311c95a27d801bb4094779.rbi} +292 -193
  66. data/sorbet/rbi/gems/{ast@2.4.1.rbi → ast@2.4.2.rbi} +2 -1
  67. data/sorbet/rbi/gems/{better_html@1.0.15.rbi → better_html@1.0.16.rbi} +2 -2
  68. data/sorbet/rbi/gems/{concurrent-ruby@1.1.6.rbi → concurrent-ruby@1.1.8.rbi} +12 -9
  69. data/sorbet/rbi/gems/{erubi@1.9.0.rbi → erubi@1.10.0.rbi} +3 -1
  70. data/sorbet/rbi/gems/{i18n@1.8.2.rbi → i18n@1.8.10.rbi} +19 -52
  71. data/sorbet/rbi/gems/{loofah@2.5.0.rbi → loofah@2.9.0.rbi} +3 -1
  72. data/sorbet/rbi/gems/marcel@1.0.0.rbi +70 -0
  73. data/sorbet/rbi/gems/{mini_mime@1.0.2.rbi → mini_mime@1.0.3.rbi} +6 -6
  74. data/sorbet/rbi/gems/{mini_portile2@2.4.0.rbi → minitest-focus@1.2.1.rbi} +2 -2
  75. data/sorbet/rbi/gems/{minitest@5.14.0.rbi → minitest@5.14.4.rbi} +31 -29
  76. data/sorbet/rbi/gems/{mocha@1.11.2.rbi → mocha@1.12.0.rbi} +25 -36
  77. data/sorbet/rbi/gems/{nio4r@2.5.2.rbi → nio4r@2.5.7.rbi} +21 -20
  78. data/sorbet/rbi/gems/{nokogiri@1.10.9.rbi → nokogiri@1.11.2.rbi} +193 -154
  79. data/sorbet/rbi/gems/{parallel@1.19.1.rbi → parallel@1.20.1.rbi} +1 -1
  80. data/sorbet/rbi/gems/parlour@6.0.0.rbi +1272 -0
  81. data/sorbet/rbi/gems/{parser@2.7.1.4.rbi → parser@3.0.0.0.rbi} +287 -174
  82. data/sorbet/rbi/gems/{pry@0.13.1.rbi → pry@0.14.0.rbi} +1 -1
  83. data/sorbet/rbi/gems/racc@1.5.2.rbi +57 -0
  84. data/sorbet/rbi/gems/{rack@2.2.2.rbi → rack@2.2.3.rbi} +23 -35
  85. data/sorbet/rbi/gems/{rails@6.1.0.alpha-d80c18a391e33552ae2d943e68af56946f883f65.rbi → rails@7.0.0.alpha-d612542336d9a61381311c95a27d801bb4094779.rbi} +1 -1
  86. data/sorbet/rbi/gems/{railties@6.1.0.alpha-d80c18a391e33552ae2d943e68af56946f883f65.rbi → railties@7.0.0.alpha-d612542336d9a61381311c95a27d801bb4094779.rbi} +132 -121
  87. data/sorbet/rbi/gems/{rake@13.0.1.rbi → rake@13.0.3.rbi} +16 -20
  88. data/sorbet/rbi/gems/regexp_parser@2.1.1.rbi +8 -0
  89. data/sorbet/rbi/gems/rubocop-ast@1.4.1.rbi +8 -0
  90. data/sorbet/rbi/gems/{rubocop-performance@1.5.2.rbi → rubocop-performance@1.10.2.rbi} +1 -1
  91. data/sorbet/rbi/gems/{rubocop-shopify@1.0.2.rbi → rubocop-shopify@2.0.1.rbi} +1 -1
  92. data/sorbet/rbi/gems/{rubocop-sorbet@0.3.7.rbi → rubocop-sorbet@0.6.1.rbi} +1 -1
  93. data/sorbet/rbi/gems/{rubocop@0.82.0.rbi → rubocop@1.12.0.rbi} +1 -1
  94. data/sorbet/rbi/gems/{ruby-progressbar@1.10.1.rbi → ruby-progressbar@1.11.0.rbi} +1 -1
  95. data/sorbet/rbi/gems/spoom@1.1.0.rbi +1061 -0
  96. data/sorbet/rbi/gems/{spring@2.1.0.rbi → spring@2.1.1.rbi} +7 -7
  97. data/sorbet/rbi/gems/{sprockets-rails@3.2.1.rbi → sprockets-rails@3.2.2.rbi} +88 -68
  98. data/sorbet/rbi/gems/{sprockets@4.0.0.rbi → sprockets@4.0.2.rbi} +8 -7
  99. data/sorbet/rbi/gems/{tapioca@0.4.5.rbi → tapioca@0.4.19.rbi} +109 -24
  100. data/sorbet/rbi/gems/{thor@1.0.1.rbi → thor@1.1.0.rbi} +16 -15
  101. data/sorbet/rbi/gems/{tzinfo@2.0.2.rbi → tzinfo@2.0.4.rbi} +21 -2
  102. data/sorbet/rbi/gems/{unicode-display_width@1.7.0.rbi → unicode-display_width@2.0.0.rbi} +1 -1
  103. data/sorbet/rbi/gems/{websocket-driver@0.7.1.rbi → websocket-driver@0.7.3.rbi} +29 -29
  104. data/sorbet/rbi/gems/{websocket-extensions@0.1.4.rbi → websocket-extensions@0.1.5.rbi} +2 -2
  105. data/sorbet/rbi/gems/zeitwerk@2.4.2.rbi +177 -0
  106. metadata +66 -58
  107. data/lib/packwerk/output_styles.rb +0 -41
  108. data/sorbet/rbi/gems/jaro_winkler@1.5.4.rbi +0 -8
  109. data/sorbet/rbi/gems/marcel@0.3.3.rbi +0 -30
  110. data/sorbet/rbi/gems/mimemagic@0.3.5.rbi +0 -47
  111. data/sorbet/rbi/gems/parlour@4.0.1.rbi +0 -561
  112. data/sorbet/rbi/gems/spoom@1.0.4.rbi +0 -418
  113. data/sorbet/rbi/gems/zeitwerk@2.3.0.rbi +0 -8
  114. data/static/packwerk-check-demo.png +0 -0
  115. data/static/packwerk_check.gif +0 -0
  116. data/static/packwerk_check_violation.gif +0 -0
  117. data/static/packwerk_update.gif +0 -0
  118. data/static/packwerk_validate.gif +0 -0
@@ -19,6 +19,10 @@ module Packwerk
19
19
  def call(io:, file_path: "<unknown>")
20
20
  buffer = Parser::Source::Buffer.new(file_path)
21
21
  buffer.source = io.read
22
+ parse_buffer(buffer, file_path: file_path)
23
+ end
24
+
25
+ def parse_buffer(buffer, file_path:)
22
26
  parser = @parser_class.new(buffer, template_language: :html)
23
27
  to_ruby_ast(parser.ast, file_path)
24
28
  rescue EncodingError => e
@@ -26,9 +26,18 @@ module Packwerk
26
26
  when RUBY_REGEX
27
27
  @ruby_parser ||= Ruby.new
28
28
  when ERB_REGEX
29
- @erb_parser ||= Erb.new
29
+ @erb_parser ||= erb_parser_class.new
30
30
  end
31
31
  end
32
+
33
+ def erb_parser_class
34
+ @erb_parser_class ||= Erb
35
+ end
36
+
37
+ def erb_parser_class=(klass)
38
+ @erb_parser_class = klass
39
+ @erb_parser = nil
40
+ end
32
41
  end
33
42
  end
34
43
  end
@@ -1,4 +1,4 @@
1
- # typed: true
1
+ # typed: strict
2
2
  # frozen_string_literal: true
3
3
 
4
4
  require "packwerk/violation_type"
@@ -6,26 +6,34 @@ require "packwerk/checker"
6
6
 
7
7
  module Packwerk
8
8
  class PrivacyChecker
9
+ extend T::Sig
9
10
  include Checker
10
11
 
12
+ sig { override.returns(Packwerk::ViolationType) }
11
13
  def violation_type
12
14
  ViolationType::Privacy
13
15
  end
14
16
 
17
+ sig do
18
+ override
19
+ .params(reference: Packwerk::Reference, reference_lister: Packwerk::ReferenceLister)
20
+ .returns(T::Boolean)
21
+ end
15
22
  def invalid_reference?(reference, reference_lister)
16
- return if reference.constant.public?
23
+ return false if reference.constant.public?
17
24
 
18
25
  privacy_option = reference.constant.package.enforce_privacy
19
- return if enforcement_disabled?(privacy_option)
26
+ return false if enforcement_disabled?(privacy_option)
20
27
 
21
- return unless privacy_option == true ||
28
+ return false unless privacy_option == true ||
22
29
  explicitly_private_constant?(reference.constant, explicitly_private_constants: privacy_option)
23
30
 
24
- return if reference_lister.listed?(reference, violation_type: violation_type)
31
+ return false if reference_lister.listed?(reference, violation_type: violation_type)
25
32
 
26
33
  true
27
34
  end
28
35
 
36
+ sig { override.params(reference: Packwerk::Reference).returns(String) }
29
37
  def message_for(reference)
30
38
  source_desc = reference.source_package ? "'#{reference.source_package}'" : "here"
31
39
  "Privacy violation: '#{reference.constant.name}' is private to '#{reference.constant.package}' but " \
@@ -35,12 +43,22 @@ module Packwerk
35
43
 
36
44
  private
37
45
 
46
+ sig do
47
+ params(
48
+ constant: ConstantDiscovery::ConstantContext,
49
+ explicitly_private_constants: T::Array[String]
50
+ ).returns(T::Boolean)
51
+ end
38
52
  def explicitly_private_constant?(constant, explicitly_private_constants:)
39
53
  explicitly_private_constants.include?(constant.name) ||
40
54
  # nested constants
41
55
  explicitly_private_constants.any? { |epc| constant.name.start_with?(epc + "::") }
42
56
  end
43
57
 
58
+ sig do
59
+ params(privacy_option: T.nilable(T.any(T::Boolean, T::Array[String])))
60
+ .returns(T::Boolean)
61
+ end
44
62
  def enforcement_disabled?(privacy_option)
45
63
  [false, nil].include?(privacy_option)
46
64
  end
@@ -1,48 +1,49 @@
1
1
  # typed: true
2
2
  # frozen_string_literal: true
3
3
 
4
- require "active_support/inflector"
5
4
  require "constant_resolver"
6
5
 
7
6
  require "packwerk/association_inspector"
8
- require "packwerk/checking_deprecated_references"
9
7
  require "packwerk/constant_discovery"
10
8
  require "packwerk/const_node_inspector"
11
9
  require "packwerk/dependency_checker"
12
10
  require "packwerk/file_processor"
13
- require "packwerk/node_processor"
11
+ require "packwerk/inflector"
14
12
  require "packwerk/package_set"
15
13
  require "packwerk/privacy_checker"
16
14
  require "packwerk/reference_extractor"
15
+ require "packwerk/node_processor_factory"
17
16
 
18
17
  module Packwerk
19
18
  class RunContext
19
+ extend T::Sig
20
+
20
21
  attr_reader(
21
- :checkers,
22
- :constant_name_inspectors,
23
- :context_provider,
24
22
  :root_path,
25
- :file_processor,
26
- :node_processor_class,
27
- :reference_lister
23
+ :load_paths,
24
+ :package_paths,
25
+ :inflector,
26
+ :custom_associations,
27
+ :checker_classes,
28
28
  )
29
29
 
30
+ attr_accessor :reference_lister
31
+
30
32
  DEFAULT_CHECKERS = [
31
33
  ::Packwerk::DependencyChecker,
32
34
  ::Packwerk::PrivacyChecker,
33
35
  ]
34
36
 
35
37
  class << self
36
- def from_configuration(configuration, reference_lister: nil)
37
- default_reference_lister = reference_lister ||
38
- ::Packwerk::CheckingDeprecatedReferences.new(configuration.root_path)
38
+ def from_configuration(configuration, reference_lister:)
39
+ inflector = ::Packwerk::Inflector.from_file(configuration.inflections_file)
39
40
  new(
40
41
  root_path: configuration.root_path,
41
42
  load_paths: configuration.load_paths,
42
43
  package_paths: configuration.package_paths,
43
- inflector: ActiveSupport::Inflector,
44
+ inflector: inflector,
44
45
  custom_associations: configuration.custom_associations,
45
- reference_lister: default_reference_lister,
46
+ reference_lister: reference_lister,
46
47
  )
47
48
  end
48
49
  end
@@ -54,51 +55,73 @@ module Packwerk
54
55
  inflector: nil,
55
56
  custom_associations: [],
56
57
  checker_classes: DEFAULT_CHECKERS,
57
- node_processor_class: NodeProcessor,
58
- reference_lister: nil
58
+ reference_lister:
59
59
  )
60
- @root_path = File.expand_path(root_path)
60
+ @root_path = root_path
61
+ @load_paths = load_paths
62
+ @package_paths = package_paths
63
+ @inflector = inflector
64
+ @custom_associations = custom_associations
65
+ @checker_classes = checker_classes
66
+ @reference_lister = reference_lister
67
+ end
61
68
 
62
- resolver = ConstantResolver.new(
63
- root_path: @root_path,
64
- load_paths: load_paths,
65
- inflector: inflector,
66
- )
69
+ sig { params(file: String).returns(T::Array[T.nilable(::Packwerk::Offense)]) }
70
+ def process_file(file:)
71
+ file_processor.call(file)
72
+ end
73
+
74
+ private
75
+
76
+ sig { returns(FileProcessor) }
77
+ def file_processor
78
+ @file_processor ||= FileProcessor.new(node_processor_factory: node_processor_factory)
79
+ end
67
80
 
68
- package_set = ::Packwerk::PackageSet.load_all_from(@root_path, package_pathspec: package_paths)
81
+ sig { returns(NodeProcessorFactory) }
82
+ def node_processor_factory
83
+ NodeProcessorFactory.new(
84
+ context_provider: context_provider,
85
+ checkers: checkers,
86
+ root_path: root_path,
87
+ constant_name_inspectors: constant_name_inspectors,
88
+ reference_lister: reference_lister
89
+ )
90
+ end
69
91
 
70
- @context_provider = ::Packwerk::ConstantDiscovery.new(
92
+ sig { returns(ConstantDiscovery) }
93
+ def context_provider
94
+ ::Packwerk::ConstantDiscovery.new(
71
95
  constant_resolver: resolver,
72
96
  packages: package_set
73
97
  )
98
+ end
74
99
 
75
- @reference_lister = reference_lister || ::Packwerk::CheckingDeprecatedReferences.new(@root_path)
100
+ sig { returns(ConstantResolver) }
101
+ def resolver
102
+ ConstantResolver.new(
103
+ root_path: root_path,
104
+ load_paths: load_paths,
105
+ inflector: inflector,
106
+ )
107
+ end
76
108
 
77
- @checkers = checker_classes.map(&:new)
109
+ sig { returns(PackageSet) }
110
+ def package_set
111
+ ::Packwerk::PackageSet.load_all_from(root_path, package_pathspec: package_paths)
112
+ end
78
113
 
79
- @constant_name_inspectors = [
114
+ sig { returns(T::Array[Checker]) }
115
+ def checkers
116
+ checker_classes.map(&:new)
117
+ end
118
+
119
+ sig { returns(T::Array[ConstantNameInspector]) }
120
+ def constant_name_inspectors
121
+ [
80
122
  ::Packwerk::ConstNodeInspector.new,
81
123
  ::Packwerk::AssociationInspector.new(inflector: inflector, custom_associations: custom_associations),
82
124
  ]
83
-
84
- @node_processor_class = node_processor_class
85
- @file_processor = FileProcessor.new(run_context: self)
86
- end
87
-
88
- def node_processor_for(filename:, ast_node:)
89
- reference_extractor = ::Packwerk::ReferenceExtractor.new(
90
- context_provider: context_provider,
91
- constant_name_inspectors: constant_name_inspectors,
92
- root_node: ast_node,
93
- root_path: root_path,
94
- )
95
-
96
- node_processor_class.new(
97
- reference_extractor: reference_extractor,
98
- reference_lister: @reference_lister,
99
- filename: filename,
100
- checkers: checkers,
101
- )
102
125
  end
103
126
  end
104
127
  end
@@ -1,4 +1,4 @@
1
- # typed: ignore
1
+ # typed: false
2
2
  # frozen_string_literal: true
3
3
 
4
4
  require "packwerk/application_validator"
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
- # typed: ignore
2
+ # typed: false
3
3
 
4
4
  require "spring/commands"
5
5
 
@@ -1,51 +1,14 @@
1
1
  # typed: true
2
2
  # frozen_string_literal: true
3
3
 
4
- require "sorbet-runtime"
5
-
6
- require "packwerk/deprecated_references"
7
- require "packwerk/reference"
8
- require "packwerk/reference_lister"
9
- require "packwerk/violation_type"
4
+ require "packwerk/cache_deprecated_references"
10
5
 
11
6
  module Packwerk
12
- class UpdatingDeprecatedReferences
13
- extend T::Sig
14
- include ReferenceLister
15
-
16
- def initialize(root_path, deprecated_references = {})
17
- @root_path = root_path
18
- @deprecated_references = deprecated_references
19
- end
20
-
21
- sig do
22
- params(reference: Packwerk::Reference, violation_type: ViolationType)
23
- .returns(T::Boolean)
24
- .override
25
- end
26
- def listed?(reference, violation_type:)
27
- deprecated_references = deprecated_references_for(reference.source_package)
28
- deprecated_references.add_entries(reference, violation_type.serialize)
29
- true
30
- end
31
-
7
+ class UpdatingDeprecatedReferences < CacheDeprecatedReferences
32
8
  def dump_deprecated_references_files
33
9
  @deprecated_references.each do |_, deprecated_references_file|
34
10
  deprecated_references_file.dump
35
11
  end
36
12
  end
37
-
38
- private
39
-
40
- def deprecated_references_for(package)
41
- @deprecated_references[package] ||= Packwerk::DeprecatedReferences.new(
42
- package,
43
- deprecated_references_file_for(package),
44
- )
45
- end
46
-
47
- def deprecated_references_file_for(package)
48
- File.join(@root_path, package.name, "deprecated_references.yml")
49
- end
50
13
  end
51
14
  end
@@ -2,5 +2,5 @@
2
2
  # frozen_string_literal: true
3
3
 
4
4
  module Packwerk
5
- VERSION = "1.0.1"
5
+ VERSION = "1.1.3"
6
6
  end
data/library.yml CHANGED
@@ -3,4 +3,4 @@ name: Packwerk
3
3
  stewards:
4
4
  - "@Shopify/kernel-architecture-patterns"
5
5
  slack_channels:
6
- - architecture-patterns
6
+ - code-foundations
data/packwerk.gemspec CHANGED
@@ -34,7 +34,7 @@ Gem::Specification.new do |spec|
34
34
  spec.executables << "packwerk"
35
35
 
36
36
  spec.files = Dir.chdir(__dir__) do
37
- %x(git ls-files -z).split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
37
+ %x(git ls-files -z).split("\x0").reject { |f| f.match(%r{^(test|spec|features|static)/}) }
38
38
  end
39
39
  spec.require_paths = %w(lib)
40
40
 
data/service.yml CHANGED
@@ -1,6 +1,6 @@
1
1
  # https://services.shopify.io/services/packwerk/production
2
2
  org_line: Kernel
3
- owners: Shopify/kernel-architecture-patterns
3
+ owners: Shopify/core-stewardship
4
4
  classification: library
5
5
  slack_channels:
6
- - architecture-patterns
6
+ - core-stewardship
data/shipit.rubygems.yml CHANGED
@@ -1 +1,5 @@
1
- # default configs
1
+ dependencies:
2
+ override: []
3
+ deploy:
4
+ override:
5
+ - release-gem packwerk.gemspec rake release
@@ -1,6 +1,6 @@
1
1
  # DO NOT EDIT MANUALLY
2
2
  # This is an autogenerated file for types exported from the `actioncable` gem.
3
- # Please instead update this file by running `dev typecheck update`.
3
+ # Please instead update this file by running `bin/tapioca sync`.
4
4
 
5
5
  # typed: true
6
6
 
@@ -49,12 +49,12 @@ class ActionCable::Channel::Base
49
49
  def _unsubscribe_callbacks; end
50
50
  def connection; end
51
51
  def identifier; end
52
- def logger(*args, &block); end
52
+ def logger(*_arg0, &_arg1); end
53
53
  def params; end
54
54
  def perform_action(data); end
55
- def periodic_timers=(_); end
55
+ def periodic_timers=(_arg0); end
56
56
  def rescue_handlers; end
57
- def rescue_handlers=(_); end
57
+ def rescue_handlers=(_arg0); end
58
58
  def rescue_handlers?; end
59
59
  def subscribe_to_channel; end
60
60
  def unsubscribe_from_channel; end
@@ -107,8 +107,8 @@ module ActionCable::Channel::Broadcasting
107
107
 
108
108
  mixes_in_class_methods(::ActionCable::Channel::Broadcasting::ClassMethods)
109
109
 
110
- def broadcast_to(*args, &block); end
111
- def broadcasting_for(*args, &block); end
110
+ def broadcast_to(*_arg0, &_arg1); end
111
+ def broadcasting_for(*_arg0, &_arg1); end
112
112
  end
113
113
 
114
114
  module ActionCable::Channel::Broadcasting::ClassMethods
@@ -139,7 +139,7 @@ module ActionCable::Channel::Naming
139
139
 
140
140
  mixes_in_class_methods(::ActionCable::Channel::Naming::ClassMethods)
141
141
 
142
- def channel_name(*args, &block); end
142
+ def channel_name(*_arg0, &_arg1); end
143
143
  end
144
144
 
145
145
  module ActionCable::Channel::Naming::ClassMethods
@@ -167,13 +167,13 @@ end
167
167
  module ActionCable::Channel::Streams
168
168
  extend(::ActiveSupport::Concern)
169
169
 
170
- def pubsub(*args, &block); end
170
+ def pubsub(*_arg0, &_arg1); end
171
171
  def stop_all_streams; end
172
172
  def stop_stream_for(model); end
173
173
  def stop_stream_from(broadcasting); end
174
174
  def stream_for(model, callback = T.unsafe(nil), coder: T.unsafe(nil), &block); end
175
175
  def stream_from(broadcasting, callback = T.unsafe(nil), coder: T.unsafe(nil), &block); end
176
- def stream_or_reject_for(record); end
176
+ def stream_or_reject_for(model); end
177
177
 
178
178
  private
179
179
 
@@ -194,7 +194,7 @@ class ActionCable::Channel::TestCase < ::ActiveSupport::TestCase
194
194
  extend(::ActionCable::Channel::TestCase::Behavior::ClassMethods)
195
195
 
196
196
  def _channel_class; end
197
- def _channel_class=(_); end
197
+ def _channel_class=(_arg0); end
198
198
  def _channel_class?; end
199
199
  def connection; end
200
200
  def subscription; end
@@ -264,9 +264,9 @@ class ActionCable::Connection::Base
264
264
  def close(reason: T.unsafe(nil), reconnect: T.unsafe(nil)); end
265
265
  def dispatch_websocket_message(websocket_message); end
266
266
  def env; end
267
- def event_loop(*args, &block); end
267
+ def event_loop(*_arg0, &_arg1); end
268
268
  def identifiers; end
269
- def identifiers=(_); end
269
+ def identifiers=(_arg0); end
270
270
  def identifiers?; end
271
271
  def logger; end
272
272
  def on_close(reason, code); end
@@ -275,10 +275,10 @@ class ActionCable::Connection::Base
275
275
  def on_open; end
276
276
  def process; end
277
277
  def protocol; end
278
- def pubsub(*args, &block); end
278
+ def pubsub(*_arg0, &_arg1); end
279
279
  def receive(websocket_message); end
280
280
  def rescue_handlers; end
281
- def rescue_handlers=(_); end
281
+ def rescue_handlers=(_arg0); end
282
282
  def rescue_handlers?; end
283
283
  def send_async(method, *arguments); end
284
284
  def server; end
@@ -438,7 +438,7 @@ class ActionCable::Connection::Subscriptions
438
438
  def add(data); end
439
439
  def execute_command(data); end
440
440
  def identifiers; end
441
- def logger(*args, &block); end
441
+ def logger(*_arg0, &_arg1); end
442
442
  def perform_action(data); end
443
443
  def remove(data); end
444
444
  def remove_subscription(subscription); end
@@ -477,7 +477,7 @@ class ActionCable::Connection::TestCase < ::ActiveSupport::TestCase
477
477
  extend(::ActionCable::Connection::TestCase::Behavior::ClassMethods)
478
478
 
479
479
  def _connection_class; end
480
- def _connection_class=(_); end
480
+ def _connection_class=(_arg0); end
481
481
  def _connection_class?; end
482
482
  def connection; end
483
483
 
@@ -556,7 +556,7 @@ class ActionCable::RemoteConnections::RemoteConnection
556
556
 
557
557
  def disconnect; end
558
558
  def identifiers; end
559
- def identifiers=(_); end
559
+ def identifiers=(_arg0); end
560
560
  def identifiers?; end
561
561
 
562
562
  protected
@@ -593,7 +593,7 @@ class ActionCable::Server::Base
593
593
  def connection_identifiers; end
594
594
  def disconnect(identifiers); end
595
595
  def event_loop; end
596
- def logger(*args, &block); end
596
+ def logger(*_arg0, &_arg1); end
597
597
  def mutex; end
598
598
  def pubsub; end
599
599
  def remote_connections; end
@@ -625,26 +625,26 @@ class ActionCable::Server::Configuration
625
625
  def initialize; end
626
626
 
627
627
  def allow_same_origin_as_host; end
628
- def allow_same_origin_as_host=(_); end
628
+ def allow_same_origin_as_host=(_arg0); end
629
629
  def allowed_request_origins; end
630
- def allowed_request_origins=(_); end
630
+ def allowed_request_origins=(_arg0); end
631
631
  def cable; end
632
- def cable=(_); end
632
+ def cable=(_arg0); end
633
633
  def connection_class; end
634
- def connection_class=(_); end
634
+ def connection_class=(_arg0); end
635
635
  def disable_request_forgery_protection; end
636
- def disable_request_forgery_protection=(_); end
636
+ def disable_request_forgery_protection=(_arg0); end
637
637
  def log_tags; end
638
- def log_tags=(_); end
638
+ def log_tags=(_arg0); end
639
639
  def logger; end
640
- def logger=(_); end
640
+ def logger=(_arg0); end
641
641
  def mount_path; end
642
- def mount_path=(_); end
642
+ def mount_path=(_arg0); end
643
643
  def pubsub_adapter; end
644
644
  def url; end
645
- def url=(_); end
645
+ def url=(_arg0); end
646
646
  def worker_pool_size; end
647
- def worker_pool_size=(_); end
647
+ def worker_pool_size=(_arg0); end
648
648
  end
649
649
 
650
650
  module ActionCable::Server::Connections
@@ -659,15 +659,29 @@ ActionCable::Server::Connections::BEAT_INTERVAL = T.let(T.unsafe(nil), Integer)
659
659
 
660
660
  class ActionCable::Server::Worker
661
661
  include(::ActiveSupport::Callbacks)
662
+ include(::ActionCable::Server::Worker::ActiveRecordConnectionManagement)
662
663
  extend(::ActiveSupport::Callbacks::ClassMethods)
663
664
  extend(::ActiveSupport::DescendantsTracker)
664
665
 
666
+ def initialize(max_size: T.unsafe(nil)); end
667
+
665
668
  def __callbacks; end
666
669
  def __callbacks?; end
667
670
  def _run_work_callbacks(&block); end
668
671
  def _work_callbacks; end
672
+ def async_exec(receiver, *args, connection:, &block); end
673
+ def async_invoke(receiver, method, *args, connection: T.unsafe(nil), &block); end
669
674
  def connection; end
670
675
  def connection=(obj); end
676
+ def executor; end
677
+ def halt; end
678
+ def invoke(receiver, method, *args, connection:, &block); end
679
+ def stopping?; end
680
+ def work(connection); end
681
+
682
+ private
683
+
684
+ def logger; end
671
685
 
672
686
  class << self
673
687
  def __callbacks; end
@@ -680,6 +694,12 @@ class ActionCable::Server::Worker
680
694
  end
681
695
  end
682
696
 
697
+ module ActionCable::Server::Worker::ActiveRecordConnectionManagement
698
+ extend(::ActiveSupport::Concern)
699
+
700
+ def with_database_connections; end
701
+ end
702
+
683
703
  module ActionCable::SubscriptionAdapter
684
704
  extend(::ActiveSupport::Autoload)
685
705
  end
@@ -738,8 +758,8 @@ module ActionCable::TestHelper
738
758
  def assert_broadcasts(stream, number, &block); end
739
759
  def assert_no_broadcasts(stream, &block); end
740
760
  def before_setup; end
741
- def broadcasts(*args, &block); end
742
- def clear_messages(*args, &block); end
761
+ def broadcasts(*_arg0, &_arg1); end
762
+ def clear_messages(*_arg0, &_arg1); end
743
763
  def pubsub_adapter; end
744
764
 
745
765
  private
@@ -766,7 +786,7 @@ module ActionCable::Channel::ChannelStub
766
786
  def start_periodic_timers; end
767
787
  def stop_all_streams; end
768
788
  def stop_periodic_timers; end
769
- def stream_from(broadcasting, *_); end
789
+ def stream_from(broadcasting, *_arg1); end
770
790
  def streams; end
771
791
  end
772
792
 
@@ -806,9 +826,9 @@ end
806
826
 
807
827
  class ActionCable::Connection::TestRequest < ::ActionDispatch::TestRequest
808
828
  def cookie_jar; end
809
- def cookie_jar=(_); end
829
+ def cookie_jar=(_arg0); end
810
830
  def session; end
811
- def session=(_); end
831
+ def session=(_arg0); end
812
832
  end
813
833
 
814
834
  class ActionCable::SubscriptionAdapter::Async < ::ActionCable::SubscriptionAdapter::Inline
@@ -821,12 +841,12 @@ end
821
841
  class ActionCable::SubscriptionAdapter::Async::AsyncSubscriberMap < ::ActionCable::SubscriptionAdapter::SubscriberMap
822
842
  def initialize(event_loop); end
823
843
 
824
- def add_subscriber(*_); end
825
- def invoke_callback(*_); end
844
+ def add_subscriber(*_arg0); end
845
+ def invoke_callback(*_arg0); end
826
846
  end
827
847
 
828
848
  class ActionCable::SubscriptionAdapter::Inline < ::ActionCable::SubscriptionAdapter::Base
829
- def initialize(*_); end
849
+ def initialize(*_arg0); end
830
850
 
831
851
  def broadcast(channel, payload); end
832
852
  def shutdown; end