packwerk 3.1.0 → 3.2.1

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 (130) hide show
  1. checksums.yaml +4 -4
  2. data/lib/packwerk/checker.rb +5 -5
  3. data/lib/packwerk/commands/check_command.rb +4 -2
  4. data/lib/packwerk/file_processor.rb +1 -1
  5. data/lib/packwerk/generators/templates/package.yml +2 -2
  6. data/lib/packwerk/offenses_formatter.rb +3 -3
  7. data/lib/packwerk/package_todo.rb +1 -4
  8. data/lib/packwerk/parsers/factory.rb +3 -3
  9. data/lib/packwerk/parsers/ruby.rb +9 -2
  10. data/lib/packwerk/reference_checking/checkers/dependency_checker.rb +3 -3
  11. data/lib/packwerk/reference_offense.rb +1 -1
  12. data/lib/packwerk/validator.rb +3 -3
  13. data/lib/packwerk/version.rb +1 -1
  14. data/sorbet/rbi/gems/actionpack@7.0.3.1.rbi +3280 -3450
  15. data/sorbet/rbi/gems/actionview@7.0.3.1.rbi +2322 -1782
  16. data/sorbet/rbi/gems/activesupport@7.0.3.1.rbi +2654 -3268
  17. data/sorbet/rbi/gems/ast@2.4.2.rbi +535 -6
  18. data/sorbet/rbi/gems/better_html@2.0.1.rbi +529 -0
  19. data/sorbet/rbi/gems/builder@3.2.4.rbi +4 -4
  20. data/sorbet/rbi/gems/byebug@11.1.3.rbi +32 -4
  21. data/sorbet/rbi/gems/concurrent-ruby@1.1.10.rbi +1750 -1840
  22. data/sorbet/rbi/gems/constant_resolver@0.2.0.rbi +15 -15
  23. data/sorbet/rbi/gems/crass@1.0.6.rbi +489 -5
  24. data/sorbet/rbi/gems/erubi@1.11.0.rbi +24 -21
  25. data/sorbet/rbi/gems/i18n@1.12.0.rbi +395 -395
  26. data/sorbet/rbi/gems/json@2.6.2.rbi +70 -77
  27. data/sorbet/rbi/gems/language_server-protocol@3.16.0.3.rbi +1 -1
  28. data/sorbet/rbi/gems/loofah@2.18.0.rbi +134 -134
  29. data/sorbet/rbi/gems/m@1.6.0.rbi +60 -60
  30. data/sorbet/rbi/gems/method_source@1.1.0.rbi +303 -0
  31. data/sorbet/rbi/gems/minitest-focus@1.3.1.rbi +22 -28
  32. data/sorbet/rbi/gems/minitest@5.16.2.rbi +384 -396
  33. data/sorbet/rbi/gems/mocha@1.14.0.rbi +589 -589
  34. data/sorbet/rbi/gems/netrc@0.11.0.rbi +37 -32
  35. data/sorbet/rbi/gems/{nokogiri@1.13.8.rbi → nokogiri@1.15.3.rbi} +1869 -1030
  36. data/sorbet/rbi/gems/{parallel@1.22.1.rbi → parallel@1.24.0.rbi} +85 -82
  37. data/sorbet/rbi/gems/{parser@3.2.2.0.rbi → parser@3.3.1.0.rbi} +1679 -1609
  38. data/sorbet/rbi/gems/prettier_print@0.1.0.rbi +1 -1
  39. data/sorbet/rbi/gems/prism@0.27.0.rbi +36983 -0
  40. data/sorbet/rbi/gems/{racc@1.6.0.rbi → racc@1.7.1.rbi} +42 -33
  41. data/sorbet/rbi/gems/rack-test@2.0.2.rbi +148 -338
  42. data/sorbet/rbi/gems/rack@2.2.4.rbi +1079 -1130
  43. data/sorbet/rbi/gems/rails-dom-testing@2.0.3.rbi +354 -22
  44. data/sorbet/rbi/gems/rails-html-sanitizer@1.4.3.rbi +113 -259
  45. data/sorbet/rbi/gems/railties@7.0.3.1.rbi +642 -638
  46. data/sorbet/rbi/gems/rainbow@3.1.1.rbi +109 -99
  47. data/sorbet/rbi/gems/rake@13.0.6.rbi +714 -599
  48. data/sorbet/rbi/gems/{rbi@0.0.15.rbi → rbi@0.1.12.rbi} +865 -801
  49. data/sorbet/rbi/gems/regexp_parser@2.5.0.rbi +853 -870
  50. data/sorbet/rbi/gems/rexml@3.2.5.rbi +480 -477
  51. data/sorbet/rbi/gems/rubocop-ast@1.21.0.rbi +1621 -1622
  52. data/sorbet/rbi/gems/rubocop-performance@1.14.3.rbi +507 -526
  53. data/sorbet/rbi/gems/rubocop-shopify@2.9.0.rbi +1 -1
  54. data/sorbet/rbi/gems/rubocop-sorbet@0.6.11.rbi +186 -203
  55. data/sorbet/rbi/gems/rubocop@1.34.1.rbi +8126 -8367
  56. data/sorbet/rbi/gems/{ruby-lsp@0.2.1.rbi → ruby-lsp@0.2.3.rbi} +2 -2
  57. data/sorbet/rbi/gems/ruby-progressbar@1.11.0.rbi +1235 -4
  58. data/sorbet/rbi/gems/smart_properties@1.17.0.rbi +90 -90
  59. data/sorbet/rbi/gems/spoom@1.3.2.rbi +4420 -0
  60. data/sorbet/rbi/gems/spring@4.0.0.rbi +104 -104
  61. data/sorbet/rbi/gems/syntax_tree@3.3.0.rbi +1 -1
  62. data/sorbet/rbi/gems/{tapioca@0.9.2.rbi → tapioca@0.13.3.rbi} +1596 -1253
  63. data/sorbet/rbi/gems/{thor@1.2.1.rbi → thor@1.3.1.rbi} +1047 -652
  64. data/sorbet/rbi/gems/tzinfo@2.0.5.rbi +531 -513
  65. data/sorbet/rbi/gems/unicode-display_width@2.2.0.rbi +13 -13
  66. data/sorbet/rbi/gems/{yard-sorbet@0.6.1.rbi → yard-sorbet@0.8.1.rbi} +132 -92
  67. data/sorbet/rbi/gems/{yard@0.9.28.rbi → yard@0.9.36.rbi} +3158 -3067
  68. data/sorbet/rbi/gems/zeitwerk@2.6.4.rbi +149 -145
  69. metadata +31 -74
  70. data/.github/ISSUE_TEMPLATE/bug_report.md +0 -27
  71. data/.github/pull_request_template.md +0 -28
  72. data/.github/workflows/ci.yml +0 -93
  73. data/.github/workflows/cla.yml +0 -22
  74. data/.gitignore +0 -13
  75. data/.rubocop.yml +0 -75
  76. data/.ruby-version +0 -1
  77. data/CODEOWNERS +0 -1
  78. data/CODE_OF_CONDUCT.md +0 -76
  79. data/CONTRIBUTING.md +0 -17
  80. data/Gemfile +0 -27
  81. data/Gemfile.lock +0 -206
  82. data/RESOLVING_VIOLATIONS.md +0 -76
  83. data/Rakefile +0 -22
  84. data/TROUBLESHOOT.md +0 -44
  85. data/UPGRADING.md +0 -66
  86. data/USAGE.md +0 -365
  87. data/bin/console +0 -15
  88. data/bin/m +0 -29
  89. data/bin/rake +0 -29
  90. data/bin/rubocop +0 -29
  91. data/bin/setup +0 -8
  92. data/bin/srb +0 -29
  93. data/bin/tapioca +0 -29
  94. data/dev.yml +0 -32
  95. data/docs/cohesion.png +0 -0
  96. data/gemfiles/Gemfile-rails-6-0 +0 -22
  97. data/gemfiles/Gemfile-rails-6-1 +0 -22
  98. data/packwerk.gemspec +0 -58
  99. data/shipit.rubygems.yml +0 -5
  100. data/sorbet/rbi/gems/actioncable@7.0.3.1.rbi +0 -2754
  101. data/sorbet/rbi/gems/actionmailbox@7.0.3.1.rbi +0 -1496
  102. data/sorbet/rbi/gems/actionmailer@7.0.3.1.rbi +0 -2362
  103. data/sorbet/rbi/gems/actiontext@7.0.3.1.rbi +0 -1569
  104. data/sorbet/rbi/gems/activejob@7.0.3.1.rbi +0 -2553
  105. data/sorbet/rbi/gems/activemodel@7.0.3.1.rbi +0 -5999
  106. data/sorbet/rbi/gems/activerecord@7.0.3.1.rbi +0 -37832
  107. data/sorbet/rbi/gems/activestorage@7.0.3.1.rbi +0 -2321
  108. data/sorbet/rbi/gems/better_html@1.0.16.rbi +0 -317
  109. data/sorbet/rbi/gems/coderay@1.1.3.rbi +0 -8
  110. data/sorbet/rbi/gems/diff-lcs@1.5.0.rbi +0 -1079
  111. data/sorbet/rbi/gems/digest@3.1.0.rbi +0 -189
  112. data/sorbet/rbi/gems/globalid@1.0.0.rbi +0 -572
  113. data/sorbet/rbi/gems/mail@2.7.1.rbi +0 -2490
  114. data/sorbet/rbi/gems/marcel@1.0.2.rbi +0 -220
  115. data/sorbet/rbi/gems/method_source@1.0.0.rbi +0 -76
  116. data/sorbet/rbi/gems/mini_mime@1.1.2.rbi +0 -170
  117. data/sorbet/rbi/gems/net-imap@0.2.3.rbi +0 -2147
  118. data/sorbet/rbi/gems/net-pop@0.1.1.rbi +0 -926
  119. data/sorbet/rbi/gems/net-protocol@0.1.3.rbi +0 -11
  120. data/sorbet/rbi/gems/net-smtp@0.3.1.rbi +0 -1108
  121. data/sorbet/rbi/gems/nio4r@2.5.8.rbi +0 -292
  122. data/sorbet/rbi/gems/pry@0.14.1.rbi +0 -8
  123. data/sorbet/rbi/gems/rails@7.0.3.1.rbi +0 -8
  124. data/sorbet/rbi/gems/spoom@1.1.11.rbi +0 -2181
  125. data/sorbet/rbi/gems/strscan@3.0.4.rbi +0 -8
  126. data/sorbet/rbi/gems/timeout@0.3.0.rbi +0 -142
  127. data/sorbet/rbi/gems/unparser@0.6.5.rbi +0 -4529
  128. data/sorbet/rbi/gems/webrick@1.7.0.rbi +0 -2582
  129. data/sorbet/rbi/gems/websocket-driver@0.7.5.rbi +0 -993
  130. data/sorbet/rbi/gems/websocket-extensions@0.1.5.rbi +0 -71
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: d72fbde4259baa5a5e7f8bc2ca4406d9bc6a835051efafefc23ef6ef3ae13f32
4
- data.tar.gz: 65bff304e2be348e16800b0d4f65ab33a1b5fb84ab15ba495e03904d099be4a0
3
+ metadata.gz: f8766d43b92fcc7bedad92604cde48e11433afdf474b21515f363b595c7fae23
4
+ data.tar.gz: 0d386a1d690b6c07d41a6d63b0907f38d57fffd87d2ab370ee580cbcd0826a17
5
5
  SHA512:
6
- metadata.gz: e25488e4af51932d503d4120e458fe92bc4ae2945ca8009219e01f4f2e7756e0430a0d9a6176f01d864d55644f262a06fb88494234b43aae43ba254437d7fb49
7
- data.tar.gz: 2c821f3e11a16c52d84f7f4e68f01e788e95d5723fd77305f69e15aba07f5f1f81ea43e9c60b6c00ca4503df036eb2b3ea0e0ae1378f0c584d7252614064f9d9
6
+ metadata.gz: a64ccf65829b48691341b0abc09013213bd266ca9d2ec7a37fa1735856ae6b707d904ad75012c91bcd5a6d3ec4991ed6d7f1545140232d34f6d27452f5ac5a27
7
+ data.tar.gz: f231695cf34fc0fb109d70efcff6874d5268b70c4af80688813734448f5c3d1ee3a705dbe3ece0bbb156733585f581f941917ed43f1666bb58f9617932858e18
@@ -11,7 +11,7 @@ module Packwerk
11
11
  class << self
12
12
  extend T::Sig
13
13
 
14
- sig { params(base: Class).void }
14
+ sig { params(base: T::Class[T.anything]).void }
15
15
  def included(base)
16
16
  checkers << base
17
17
  end
@@ -34,9 +34,9 @@ module Packwerk
34
34
  require("packwerk/reference_checking/checkers/dependency_checker")
35
35
  end
36
36
 
37
- sig { returns(T::Array[Class]) }
37
+ sig { returns(T::Array[T::Class[T.anything]]) }
38
38
  def checkers
39
- @checkers ||= T.let([], T.nilable(T::Array[Class]))
39
+ @checkers ||= T.let([], T.nilable(T::Array[T::Class[T.anything]]))
40
40
  end
41
41
 
42
42
  sig { params(name: String).returns(Checker) }
@@ -51,8 +51,8 @@ module Packwerk
51
51
  sig { abstract.returns(String) }
52
52
  def violation_type; end
53
53
 
54
- sig { abstract.params(listed_offense: ReferenceOffense).returns(T::Boolean) }
55
- def strict_mode_violation?(listed_offense); end
54
+ sig { abstract.params(offense: ReferenceOffense).returns(T::Boolean) }
55
+ def strict_mode_violation?(offense); end
56
56
 
57
57
  sig { abstract.params(reference: Reference).returns(T::Boolean) }
58
58
  def invalid_reference?(reference); end
@@ -31,17 +31,19 @@ module Packwerk
31
31
  end
32
32
  offense_collection.add_offenses(all_offenses)
33
33
 
34
+ unlisted_strict_mode_violations = offense_collection.unlisted_strict_mode_violations
35
+
34
36
  messages = [
35
37
  offenses_formatter.show_offenses(offense_collection.outstanding_offenses),
36
38
  offenses_formatter.show_stale_violations(offense_collection, @files_for_processing.files),
37
- offenses_formatter.show_strict_mode_violations(offense_collection.strict_mode_violations),
39
+ offenses_formatter.show_strict_mode_violations(unlisted_strict_mode_violations),
38
40
  ]
39
41
 
40
42
  out.puts(messages.select(&:present?).join("\n") + "\n")
41
43
 
42
44
  offense_collection.outstanding_offenses.empty? &&
43
45
  !offense_collection.stale_violations?(@files_for_processing.files) &&
44
- offense_collection.strict_mode_violations.empty?
46
+ unlisted_strict_mode_violations.empty?
45
47
  end
46
48
 
47
49
  private
@@ -59,7 +59,7 @@ module Packwerk
59
59
  For now, you can add this file to `packwerk.yml` `exclude` list.
60
60
  Please file an issue and include this error message and stacktrace:
61
61
 
62
- #{e.message} #{e.backtrace}"
62
+ #{e.message} #{e.backtrace&.join("\n")}"
63
63
  MSG
64
64
 
65
65
  offense = Parsers::ParseResult.new(file: relative_file, message: message)
@@ -2,8 +2,8 @@
2
2
  # Please validate the configuration using `packwerk validate` (for Rails applications) or running the auto generated
3
3
  # test case (for non-Rails projects). You can then use `packwerk check` to check your code.
4
4
 
5
- # Turn on dependency checks for this package
6
- enforce_dependencies: true
5
+ # Change to `true` to turn on dependency checks for this package
6
+ enforce_dependencies: false
7
7
 
8
8
  # A list of this package's dependencies
9
9
  # Note that packages in this list require their own `package.yml` file
@@ -20,7 +20,7 @@ module Packwerk
20
20
  class << self
21
21
  extend T::Sig
22
22
 
23
- sig { params(base: Class).void }
23
+ sig { params(base: T::Class[T.anything]).void }
24
24
  def included(base)
25
25
  offenses_formatters << base
26
26
  end
@@ -43,9 +43,9 @@ module Packwerk
43
43
  require("packwerk/formatters/default_offenses_formatter")
44
44
  end
45
45
 
46
- sig { returns(T::Array[Class]) }
46
+ sig { returns(T::Array[T::Class[T.anything]]) }
47
47
  def offenses_formatters
48
- @offenses_formatters ||= T.let([], T.nilable(T::Array[Class]))
48
+ @offenses_formatters ||= T.let([], T.nilable(T::Array[T::Class[T.anything]]))
49
49
  end
50
50
 
51
51
  sig { params(name: String).returns(OffensesFormatter) }
@@ -113,10 +113,7 @@ module Packwerk
113
113
  sig { params(package: String, violations: Entry).returns(T::Boolean) }
114
114
  def stale_violation_for_package?(package, violations:)
115
115
  violations.any? do |constant_name, entries_for_constant|
116
- new_entries_violation_types = T.cast(
117
- new_entries.dig(package, constant_name, "violations"),
118
- T.nilable(T::Array[String]),
119
- )
116
+ new_entries_violation_types = new_entries.dig(package, constant_name, "violations")
120
117
  # If there are no NEW entries that match the old entries `for_files`,
121
118
  # new_entries is from the list of violations we get when we check this file.
122
119
  # If this list is empty, we also must have stale violations.
@@ -24,7 +24,7 @@ module Packwerk
24
24
  def initialize
25
25
  @ruby_parser = T.let(nil, T.nilable(ParserInterface))
26
26
  @erb_parser = T.let(nil, T.nilable(ParserInterface))
27
- @erb_parser_class = T.let(nil, T.nilable(Class))
27
+ @erb_parser_class = T.let(nil, T.nilable(T::Class[T.anything]))
28
28
  end
29
29
 
30
30
  sig { params(path: String).returns(T.nilable(ParserInterface)) }
@@ -37,12 +37,12 @@ module Packwerk
37
37
  end
38
38
  end
39
39
 
40
- sig { returns(Class) }
40
+ sig { returns(T::Class[T.anything]) }
41
41
  def erb_parser_class
42
42
  @erb_parser_class ||= Erb
43
43
  end
44
44
 
45
- sig { params(klass: T.nilable(Class)).void }
45
+ sig { params(klass: T.nilable(T::Class[T.anything])).void }
46
46
  def erb_parser_class=(klass)
47
47
  @erb_parser_class = klass
48
48
  @erb_parser = nil
@@ -2,7 +2,7 @@
2
2
  # frozen_string_literal: true
3
3
 
4
4
  require "parser"
5
- require "parser/current"
5
+ require "prism"
6
6
 
7
7
  module Packwerk
8
8
  module Parsers
@@ -11,7 +11,7 @@ module Packwerk
11
11
 
12
12
  include ParserInterface
13
13
 
14
- class RaiseExceptionsParser < Parser::CurrentRuby
14
+ class RaiseExceptionsParser < Prism::Translation::Parser
15
15
  extend T::Sig
16
16
 
17
17
  sig { params(builder: T.untyped).void }
@@ -19,6 +19,13 @@ module Packwerk
19
19
  super(builder)
20
20
  super.diagnostics.all_errors_are_fatal = true
21
21
  end
22
+
23
+ private
24
+
25
+ sig { params(error: Prism::ParseError).returns(T::Boolean) }
26
+ def valid_error?(error)
27
+ error.type != :invalid_yield
28
+ end
22
29
  end
23
30
 
24
31
  class TolerateInvalidUtf8Builder < Parser::Builders::Default
@@ -47,9 +47,9 @@ module Packwerk
47
47
  EOS
48
48
  end
49
49
 
50
- sig { override.params(listed_offense: ReferenceOffense).returns(T::Boolean) }
51
- def strict_mode_violation?(listed_offense)
52
- referencing_package = listed_offense.reference.package
50
+ sig { override.params(offense: ReferenceOffense).returns(T::Boolean) }
51
+ def strict_mode_violation?(offense)
52
+ referencing_package = offense.reference.package
53
53
  referencing_package.config["enforce_dependencies"] == "strict"
54
54
  end
55
55
 
@@ -23,7 +23,7 @@ module Packwerk
23
23
  .void
24
24
  end
25
25
  def initialize(reference:, violation_type:, message:, location: nil)
26
- super(file: reference.relative_path, message: message, location: location)
26
+ super(file: T.must(reference.relative_path), message: message, location: location)
27
27
  @reference = reference
28
28
  @violation_type = violation_type
29
29
  end
@@ -18,7 +18,7 @@ module Packwerk
18
18
  class << self
19
19
  extend T::Sig
20
20
 
21
- sig { params(base: Class).void }
21
+ sig { params(base: T::Class[T.anything]).void }
22
22
  def included(base)
23
23
  validators << base
24
24
  end
@@ -36,9 +36,9 @@ module Packwerk
36
36
  require("packwerk/validators/dependency_validator")
37
37
  end
38
38
 
39
- sig { returns(T::Array[Class]) }
39
+ sig { returns(T::Array[T::Class[T.anything]]) }
40
40
  def validators
41
- @validators ||= T.let([], T.nilable(T::Array[Class]))
41
+ @validators ||= T.let([], T.nilable(T::Array[T::Class[T.anything]]))
42
42
  end
43
43
  end
44
44
 
@@ -2,5 +2,5 @@
2
2
  # frozen_string_literal: true
3
3
 
4
4
  module Packwerk
5
- VERSION = "3.1.0"
5
+ VERSION = "3.2.1"
6
6
  end