packwerk 1.0.0

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 (153) hide show
  1. checksums.yaml +7 -0
  2. data/.github/ISSUE_TEMPLATE/bug_report.md +27 -0
  3. data/.github/probots.yml +2 -0
  4. data/.github/pull_request_template.md +27 -0
  5. data/.github/workflows/ci.yml +50 -0
  6. data/.gitignore +12 -0
  7. data/.rubocop.yml +46 -0
  8. data/.ruby-version +1 -0
  9. data/CODEOWNERS +1 -0
  10. data/CODE_OF_CONDUCT.md +76 -0
  11. data/CONTRIBUTING.md +17 -0
  12. data/Gemfile +22 -0
  13. data/Gemfile.lock +236 -0
  14. data/LICENSE.md +7 -0
  15. data/README.md +73 -0
  16. data/Rakefile +13 -0
  17. data/TROUBLESHOOT.md +67 -0
  18. data/USAGE.md +250 -0
  19. data/bin/console +15 -0
  20. data/bin/setup +8 -0
  21. data/dev.yml +32 -0
  22. data/docs/cohesion.png +0 -0
  23. data/exe/packwerk +6 -0
  24. data/lib/packwerk.rb +44 -0
  25. data/lib/packwerk/application_validator.rb +343 -0
  26. data/lib/packwerk/association_inspector.rb +44 -0
  27. data/lib/packwerk/checking_deprecated_references.rb +40 -0
  28. data/lib/packwerk/cli.rb +238 -0
  29. data/lib/packwerk/configuration.rb +82 -0
  30. data/lib/packwerk/const_node_inspector.rb +44 -0
  31. data/lib/packwerk/constant_discovery.rb +60 -0
  32. data/lib/packwerk/constant_name_inspector.rb +22 -0
  33. data/lib/packwerk/dependency_checker.rb +28 -0
  34. data/lib/packwerk/deprecated_references.rb +92 -0
  35. data/lib/packwerk/file_processor.rb +43 -0
  36. data/lib/packwerk/files_for_processing.rb +67 -0
  37. data/lib/packwerk/formatters/progress_formatter.rb +46 -0
  38. data/lib/packwerk/generators/application_validation.rb +62 -0
  39. data/lib/packwerk/generators/configuration_file.rb +69 -0
  40. data/lib/packwerk/generators/inflections_file.rb +43 -0
  41. data/lib/packwerk/generators/root_package.rb +37 -0
  42. data/lib/packwerk/generators/templates/inflections.yml +6 -0
  43. data/lib/packwerk/generators/templates/package.yml +17 -0
  44. data/lib/packwerk/generators/templates/packwerk +23 -0
  45. data/lib/packwerk/generators/templates/packwerk.yml.erb +23 -0
  46. data/lib/packwerk/generators/templates/packwerk_validator_test.rb +11 -0
  47. data/lib/packwerk/graph.rb +74 -0
  48. data/lib/packwerk/inflections/custom.rb +33 -0
  49. data/lib/packwerk/inflections/default.rb +73 -0
  50. data/lib/packwerk/inflector.rb +41 -0
  51. data/lib/packwerk/node.rb +259 -0
  52. data/lib/packwerk/node_processor.rb +49 -0
  53. data/lib/packwerk/node_visitor.rb +22 -0
  54. data/lib/packwerk/offense.rb +44 -0
  55. data/lib/packwerk/output_styles.rb +41 -0
  56. data/lib/packwerk/package.rb +56 -0
  57. data/lib/packwerk/package_set.rb +59 -0
  58. data/lib/packwerk/parsed_constant_definitions.rb +62 -0
  59. data/lib/packwerk/parsers.rb +23 -0
  60. data/lib/packwerk/parsers/erb.rb +66 -0
  61. data/lib/packwerk/parsers/factory.rb +34 -0
  62. data/lib/packwerk/parsers/ruby.rb +42 -0
  63. data/lib/packwerk/privacy_checker.rb +45 -0
  64. data/lib/packwerk/reference.rb +6 -0
  65. data/lib/packwerk/reference_extractor.rb +81 -0
  66. data/lib/packwerk/reference_lister.rb +23 -0
  67. data/lib/packwerk/run_context.rb +103 -0
  68. data/lib/packwerk/sanity_checker.rb +10 -0
  69. data/lib/packwerk/spring_command.rb +28 -0
  70. data/lib/packwerk/updating_deprecated_references.rb +51 -0
  71. data/lib/packwerk/version.rb +6 -0
  72. data/lib/packwerk/violation_type.rb +13 -0
  73. data/library.yml +6 -0
  74. data/packwerk.gemspec +58 -0
  75. data/service.yml +6 -0
  76. data/shipit.rubygems.yml +1 -0
  77. data/sorbet/config +2 -0
  78. data/sorbet/rbi/gems/actioncable@6.1.0.alpha-d80c18a391e33552ae2d943e68af56946f883f65.rbi +840 -0
  79. data/sorbet/rbi/gems/actionmailbox@6.1.0.alpha-d80c18a391e33552ae2d943e68af56946f883f65.rbi +571 -0
  80. data/sorbet/rbi/gems/actionmailer@6.1.0.alpha-d80c18a391e33552ae2d943e68af56946f883f65.rbi +568 -0
  81. data/sorbet/rbi/gems/actionpack@6.1.0.alpha-d80c18a391e33552ae2d943e68af56946f883f65.rbi +5216 -0
  82. data/sorbet/rbi/gems/actiontext@6.1.0.alpha-d80c18a391e33552ae2d943e68af56946f883f65.rbi +663 -0
  83. data/sorbet/rbi/gems/actionview@6.1.0.alpha-d80c18a391e33552ae2d943e68af56946f883f65.rbi +2504 -0
  84. data/sorbet/rbi/gems/activejob@6.1.0.alpha-d80c18a391e33552ae2d943e68af56946f883f65.rbi +635 -0
  85. data/sorbet/rbi/gems/activemodel@6.1.0.alpha-d80c18a391e33552ae2d943e68af56946f883f65.rbi +1201 -0
  86. data/sorbet/rbi/gems/activerecord@6.1.0.alpha-d80c18a391e33552ae2d943e68af56946f883f65.rbi +8011 -0
  87. data/sorbet/rbi/gems/activestorage@6.1.0.alpha-d80c18a391e33552ae2d943e68af56946f883f65.rbi +904 -0
  88. data/sorbet/rbi/gems/activesupport@6.1.0.alpha-d80c18a391e33552ae2d943e68af56946f883f65.rbi +3888 -0
  89. data/sorbet/rbi/gems/ast@2.4.1.rbi +54 -0
  90. data/sorbet/rbi/gems/better_html@1.0.15.rbi +317 -0
  91. data/sorbet/rbi/gems/builder@3.2.4.rbi +8 -0
  92. data/sorbet/rbi/gems/byebug@11.1.3.rbi +8 -0
  93. data/sorbet/rbi/gems/coderay@1.1.3.rbi +8 -0
  94. data/sorbet/rbi/gems/colorize@0.8.1.rbi +40 -0
  95. data/sorbet/rbi/gems/commander@4.5.2.rbi +8 -0
  96. data/sorbet/rbi/gems/concurrent-ruby@1.1.6.rbi +1966 -0
  97. data/sorbet/rbi/gems/constant_resolver@0.1.5.rbi +26 -0
  98. data/sorbet/rbi/gems/crass@1.0.6.rbi +138 -0
  99. data/sorbet/rbi/gems/erubi@1.9.0.rbi +39 -0
  100. data/sorbet/rbi/gems/globalid@0.4.2.rbi +178 -0
  101. data/sorbet/rbi/gems/highline@2.0.3.rbi +8 -0
  102. data/sorbet/rbi/gems/html_tokenizer@0.0.7.rbi +46 -0
  103. data/sorbet/rbi/gems/i18n@1.8.2.rbi +633 -0
  104. data/sorbet/rbi/gems/jaro_winkler@1.5.4.rbi +8 -0
  105. data/sorbet/rbi/gems/loofah@2.5.0.rbi +272 -0
  106. data/sorbet/rbi/gems/m@1.5.1.rbi +108 -0
  107. data/sorbet/rbi/gems/mail@2.7.1.rbi +2490 -0
  108. data/sorbet/rbi/gems/marcel@0.3.3.rbi +30 -0
  109. data/sorbet/rbi/gems/method_source@1.0.0.rbi +76 -0
  110. data/sorbet/rbi/gems/mimemagic@0.3.5.rbi +47 -0
  111. data/sorbet/rbi/gems/mini_mime@1.0.2.rbi +71 -0
  112. data/sorbet/rbi/gems/mini_portile2@2.4.0.rbi +8 -0
  113. data/sorbet/rbi/gems/minitest@5.14.0.rbi +542 -0
  114. data/sorbet/rbi/gems/mocha@1.11.2.rbi +964 -0
  115. data/sorbet/rbi/gems/nio4r@2.5.2.rbi +89 -0
  116. data/sorbet/rbi/gems/nokogiri@1.10.9.rbi +1608 -0
  117. data/sorbet/rbi/gems/parallel@1.19.1.rbi +8 -0
  118. data/sorbet/rbi/gems/parlour@4.0.1.rbi +561 -0
  119. data/sorbet/rbi/gems/parser@2.7.1.4.rbi +1632 -0
  120. data/sorbet/rbi/gems/pry@0.13.1.rbi +8 -0
  121. data/sorbet/rbi/gems/rack-test@1.1.0.rbi +335 -0
  122. data/sorbet/rbi/gems/rack@2.2.2.rbi +1730 -0
  123. data/sorbet/rbi/gems/rails-dom-testing@2.0.3.rbi +123 -0
  124. data/sorbet/rbi/gems/rails-html-sanitizer@1.3.0.rbi +213 -0
  125. data/sorbet/rbi/gems/rails@6.1.0.alpha-d80c18a391e33552ae2d943e68af56946f883f65.rbi +8 -0
  126. data/sorbet/rbi/gems/railties@6.1.0.alpha-d80c18a391e33552ae2d943e68af56946f883f65.rbi +869 -0
  127. data/sorbet/rbi/gems/rainbow@3.0.0.rbi +155 -0
  128. data/sorbet/rbi/gems/rake@13.0.1.rbi +841 -0
  129. data/sorbet/rbi/gems/rexml@3.2.4.rbi +8 -0
  130. data/sorbet/rbi/gems/rubocop-performance@1.5.2.rbi +8 -0
  131. data/sorbet/rbi/gems/rubocop-shopify@1.0.2.rbi +8 -0
  132. data/sorbet/rbi/gems/rubocop-sorbet@0.3.7.rbi +8 -0
  133. data/sorbet/rbi/gems/rubocop@0.82.0.rbi +8 -0
  134. data/sorbet/rbi/gems/ruby-progressbar@1.10.1.rbi +8 -0
  135. data/sorbet/rbi/gems/smart_properties@1.15.0.rbi +168 -0
  136. data/sorbet/rbi/gems/spoom@1.0.4.rbi +418 -0
  137. data/sorbet/rbi/gems/spring@2.1.0.rbi +160 -0
  138. data/sorbet/rbi/gems/sprockets-rails@3.2.1.rbi +431 -0
  139. data/sorbet/rbi/gems/sprockets@4.0.0.rbi +1132 -0
  140. data/sorbet/rbi/gems/tapioca@0.4.5.rbi +518 -0
  141. data/sorbet/rbi/gems/thor@1.0.1.rbi +892 -0
  142. data/sorbet/rbi/gems/tzinfo@2.0.2.rbi +547 -0
  143. data/sorbet/rbi/gems/unicode-display_width@1.7.0.rbi +8 -0
  144. data/sorbet/rbi/gems/websocket-driver@0.7.1.rbi +438 -0
  145. data/sorbet/rbi/gems/websocket-extensions@0.1.4.rbi +71 -0
  146. data/sorbet/rbi/gems/zeitwerk@2.3.0.rbi +8 -0
  147. data/sorbet/tapioca/require.rb +25 -0
  148. data/static/packwerk-check-demo.png +0 -0
  149. data/static/packwerk_check.gif +0 -0
  150. data/static/packwerk_check_violation.gif +0 -0
  151. data/static/packwerk_update.gif +0 -0
  152. data/static/packwerk_validate.gif +0 -0
  153. metadata +341 -0
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: cdc39eaf91ef0f8f247cc31b54a3bb1680fcc0ddee4e9552f60a8c9bbdcf3410
4
+ data.tar.gz: d449d1c6484b490d79a6dd3d98b0cdc84bf2ffdae1aa0564544ee3aa1e592f12
5
+ SHA512:
6
+ metadata.gz: c1f2d61a18cb126e85e824e0bc6d2a5854e2dd7114717165fb71ae9a5765f719464c7b66177078c01a5601aca9e8500112f68d695594a650f03da62a0d3054a2
7
+ data.tar.gz: a674e776393ab5cc078ab21c9faefa554d54a85010bde8c40e47cb5bf6eed1b3e8e523cecce8f8673a0dfb606f455aac1ae3bb71b12acd7c5dfccffa2b645eda
@@ -0,0 +1,27 @@
1
+ ---
2
+ name: Bug / Issue Report
3
+ about: Create a report to help us improve
4
+ title: '[Bug Report]'
5
+ labels: bug
6
+ assignees: ''
7
+
8
+ ---
9
+
10
+ **Description**
11
+ A clear and concise description of what the bug/issue is.
12
+
13
+ **To Reproduce**
14
+ Steps to reproduce the behavior.
15
+
16
+ **Expected Behaviour**
17
+ A clear and concise description of what you expected to happen.
18
+
19
+ **Screenshots**
20
+ If applicable, add screenshots to help explain your problem.
21
+
22
+ **Version Information**
23
+ - Packwerk: [e.g. v0.1.7]
24
+ - Ruby [e.g. v1.7]
25
+
26
+ **Additional Context**
27
+ How have you tried to solve the issue? Add any other context about the problem here.
@@ -0,0 +1,2 @@
1
+ enabled:
2
+ - cla
@@ -0,0 +1,27 @@
1
+ ## What are you trying to accomplish?
2
+
3
+
4
+ ## What approach did you choose and why?
5
+
6
+
7
+ ## What should reviewers focus on?
8
+
9
+
10
+
11
+ ## Type of Change
12
+
13
+ - [ ] Bug fix (non-breaking change which fixes an issue)
14
+ - [ ] New feature (non-breaking change which adds functionality)
15
+ - [ ] Code refactor (non-breaking change that doesn't add functionality)
16
+ - [ ] Breaking change (fix or feature that would cause existing functionality to not work as expected)
17
+ - [ ] This change requires a documentation update
18
+
19
+ ### Additional Release Notes
20
+
21
+ Include any notes here to include in the release description. For example, if you selected "breaking change" above, leave notes on how users can transition to this version.
22
+
23
+ If no additional notes are necessary, delete this section or leave it unchanged.
24
+
25
+ ## Checklist
26
+
27
+ - [ ] It is safe to simply rollback this change.
@@ -0,0 +1,50 @@
1
+ name: CI
2
+
3
+ on: [push]
4
+
5
+ jobs:
6
+ build:
7
+ runs-on: ubuntu-latest
8
+ strategy:
9
+ matrix:
10
+ ruby:
11
+ - 2.6
12
+ - 2.7
13
+ name: Tests Ruby ${{ matrix.ruby }}
14
+ steps:
15
+ - uses: actions/checkout@v1
16
+ - name: Set up Ruby ${{ matrix.ruby }}
17
+ uses: actions/setup-ruby@v1
18
+ with:
19
+ ruby-version: ${{ matrix.ruby }}
20
+ - name: Run tests
21
+ run: |
22
+ gem install bundler
23
+ bundle install --jobs 4 --retry 3
24
+ bundle exec rake
25
+ lint:
26
+ runs-on: ubuntu-latest
27
+ steps:
28
+ - uses: actions/checkout@v1
29
+ - name: Set up Ruby 2.6
30
+ uses: actions/setup-ruby@v1
31
+ with:
32
+ ruby-version: 2.6.x
33
+ - name: Run style checks
34
+ run: |
35
+ gem install bundler
36
+ bundle install --jobs 4 --retry 3
37
+ bundle exec rubocop
38
+ static-type-checking:
39
+ runs-on: ubuntu-latest
40
+ steps:
41
+ - uses: actions/checkout@v1
42
+ - name: Set up Ruby 2.6
43
+ uses: actions/setup-ruby@v1
44
+ with:
45
+ ruby-version: 2.6.x
46
+ - name: Run static type checks
47
+ run: |
48
+ gem install bundler
49
+ bundle install --jobs 4 --retry 3
50
+ bundle exec srb tc
@@ -0,0 +1,12 @@
1
+ /.bundle/
2
+ /.yardoc
3
+ /_yardoc/
4
+ /coverage/
5
+ /doc/
6
+ /pkg/
7
+ /spec/reports/
8
+ /tmp/
9
+ /.bundle/
10
+ /tmp/
11
+ .rubocop-*
12
+ sorbet/rbi/hidden-definitions/errors.txt
@@ -0,0 +1,46 @@
1
+ inherit_gem:
2
+ rubocop-shopify: rubocop.yml
3
+
4
+ require:
5
+ - rubocop-performance
6
+ - rubocop-sorbet
7
+
8
+ AllCops:
9
+ TargetRubyVersion: 2.7
10
+ UseCache: true
11
+ CacheRootDirectory: tmp
12
+ Exclude:
13
+ - 'test/fixtures/**/*'
14
+
15
+ Lint/UnusedMethodArgument:
16
+ AllowUnusedKeywordArguments: true
17
+
18
+ Style/MethodCallWithArgsParentheses:
19
+ Enabled: true
20
+ IgnoreMacros: true
21
+ IgnoredMethods:
22
+ - require
23
+ - require_relative
24
+ - require_dependency
25
+ - yield
26
+ - raise
27
+ Exclude:
28
+ - Gemfile
29
+
30
+ Style/StringLiterals:
31
+ EnforcedStyle: double_quotes
32
+
33
+ Sorbet/ConstantsFromStrings:
34
+ Enabled: true
35
+
36
+ Sorbet/ForbidIncludeConstLiteral:
37
+ Enabled: true
38
+
39
+ Sorbet/ParametersOrderingInSignature:
40
+ Enabled: true
41
+
42
+ Sorbet/KeywordArgumentOrdering:
43
+ Enabled: true
44
+
45
+ Sorbet/ValidSigil:
46
+ Enabled: true
@@ -0,0 +1 @@
1
+ 2.6.6
@@ -0,0 +1 @@
1
+ * @Shopify/packwerk
@@ -0,0 +1,76 @@
1
+ # Contributor Covenant Code of Conduct
2
+
3
+ ## Our Pledge
4
+
5
+ In the interest of fostering an open and welcoming environment, we as
6
+ contributors and maintainers pledge to make participation in our project and
7
+ our community a harassment-free experience for everyone, regardless of age, body
8
+ size, disability, ethnicity, sex characteristics, gender identity and expression,
9
+ level of experience, education, socio-economic status, nationality, personal
10
+ appearance, race, religion, or sexual identity and orientation.
11
+
12
+ ## Our Standards
13
+
14
+ Examples of behavior that contributes to creating a positive environment
15
+ include:
16
+
17
+ * Using welcoming and inclusive language
18
+ * Being respectful of differing viewpoints and experiences
19
+ * Gracefully accepting constructive criticism
20
+ * Focusing on what is best for the community
21
+ * Showing empathy towards other community members
22
+
23
+ Examples of unacceptable behavior by participants include:
24
+
25
+ * The use of sexualized language or imagery and unwelcome sexual attention or
26
+ advances
27
+ * Trolling, insulting/derogatory comments, and personal or political attacks
28
+ * Public or private harassment
29
+ * Publishing others' private information, such as a physical or electronic
30
+ address, without explicit permission
31
+ * Other conduct which could reasonably be considered inappropriate in a
32
+ professional setting
33
+
34
+ ## Our Responsibilities
35
+
36
+ Project maintainers are responsible for clarifying the standards of acceptable
37
+ behavior and are expected to take appropriate and fair corrective action in
38
+ response to any instances of unacceptable behavior.
39
+
40
+ Project maintainers have the right and responsibility to remove, edit, or
41
+ reject comments, commits, code, wiki edits, issues, and other contributions
42
+ that are not aligned to this Code of Conduct, or to ban temporarily or
43
+ permanently any contributor for other behaviors that they deem inappropriate,
44
+ threatening, offensive, or harmful.
45
+
46
+ ## Scope
47
+
48
+ This Code of Conduct applies within all project spaces, and it also applies when
49
+ an individual is representing the project or its community in public spaces.
50
+ Examples of representing a project or community include using an official
51
+ project e-mail address, posting via an official social media account, or acting
52
+ as an appointed representative at an online or offline event. Representation of
53
+ a project may be further defined and clarified by project maintainers.
54
+
55
+ ## Enforcement
56
+
57
+ Instances of abusive, harassing, or otherwise unacceptable behavior may be
58
+ reported by contacting the project team at opensource@shopify.com. All
59
+ complaints will be reviewed and investigated and will result in a response that
60
+ is deemed necessary and appropriate to the circumstances. The project team is
61
+ obligated to maintain confidentiality with regard to the reporter of an incident.
62
+ Further details of specific enforcement policies may be posted separately.
63
+
64
+ Project maintainers who do not follow or enforce the Code of Conduct in good
65
+ faith may face temporary or permanent repercussions as determined by other
66
+ members of the project's leadership.
67
+
68
+ ## Attribution
69
+
70
+ This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4,
71
+ available at https://www.contributor-covenant.org/version/1/4/code-of-conduct.html
72
+
73
+ [homepage]: https://www.contributor-covenant.org
74
+
75
+ For answers to common questions about this code of conduct, see
76
+ https://www.contributor-covenant.org/faq
@@ -0,0 +1,17 @@
1
+ # Contributing
2
+
3
+ ## Issue reporting
4
+ * Check to make sure the same issue has not already been reported or fixed
5
+ * Open an issue with a descriptive title and summary
6
+ * Be clear and concise and provide as many details as possible (e.g. Ruby version, Packwerk version, etc.)
7
+ * Include relevant code, where necessary
8
+
9
+ ## Pull requests
10
+ * Read and understand our [Code of Conduct](https://github.com/Shopify/packwerk/blob/main/CODE_OF_CONDUCT.md)
11
+ * Make sure tests are added for any changes to the code
12
+ * [Squash related commits together](http://gitready.com/advanced/2009/02/10/squashing-commits-with-rebase.html)
13
+ * If the change includes any new keys to `packwerk.yml`, make sure that the [application validator](https://github.com/Shopify/packwerk/blob/1c711748b4a28b65220e2cefba764ffd8eb1a101/lib/packwerk/application_validator.rb#L116) is aligned with that change
14
+ * Open a pull request once the change is ready to be reviewed
15
+ * Be descriptive about the problem and reason about the proposed solution
16
+ * Include release notes describing the potential impact of the change in the pull request
17
+ * Make sure there has been at least one approval from Shopify before merging
data/Gemfile ADDED
@@ -0,0 +1,22 @@
1
+ # frozen_string_literal: true
2
+
3
+ source("https://rubygems.org")
4
+ git_source(:github) { |repo_name| "https://github.com/#{repo_name}.git" }
5
+
6
+ gemspec
7
+
8
+ # Specify the same dependency sources as the application Gemfile
9
+
10
+ gem("spring")
11
+ gem("rails", github: "rails/rails")
12
+ gem("constant_resolver", require: false)
13
+ gem("sorbet-runtime", require: false)
14
+ gem("rubocop-performance", require: false)
15
+ gem("rubocop-sorbet", require: false)
16
+ gem("mocha", require: false)
17
+ gem("rubocop-shopify", require: false)
18
+ gem("tapioca", require: false)
19
+
20
+ group :development do
21
+ gem("byebug", require: false)
22
+ end
@@ -0,0 +1,236 @@
1
+ GIT
2
+ remote: https://github.com/rails/rails.git
3
+ revision: d80c18a391e33552ae2d943e68af56946f883f65
4
+ specs:
5
+ actioncable (6.1.0.alpha)
6
+ actionpack (= 6.1.0.alpha)
7
+ activesupport (= 6.1.0.alpha)
8
+ nio4r (~> 2.0)
9
+ websocket-driver (>= 0.6.1)
10
+ actionmailbox (6.1.0.alpha)
11
+ actionpack (= 6.1.0.alpha)
12
+ activejob (= 6.1.0.alpha)
13
+ activerecord (= 6.1.0.alpha)
14
+ activestorage (= 6.1.0.alpha)
15
+ activesupport (= 6.1.0.alpha)
16
+ mail (>= 2.7.1)
17
+ actionmailer (6.1.0.alpha)
18
+ actionpack (= 6.1.0.alpha)
19
+ actionview (= 6.1.0.alpha)
20
+ activejob (= 6.1.0.alpha)
21
+ activesupport (= 6.1.0.alpha)
22
+ mail (~> 2.5, >= 2.5.4)
23
+ rails-dom-testing (~> 2.0)
24
+ actionpack (6.1.0.alpha)
25
+ actionview (= 6.1.0.alpha)
26
+ activesupport (= 6.1.0.alpha)
27
+ rack (~> 2.0, >= 2.0.9)
28
+ rack-test (>= 0.6.3)
29
+ rails-dom-testing (~> 2.0)
30
+ rails-html-sanitizer (~> 1.0, >= 1.2.0)
31
+ actiontext (6.1.0.alpha)
32
+ actionpack (= 6.1.0.alpha)
33
+ activerecord (= 6.1.0.alpha)
34
+ activestorage (= 6.1.0.alpha)
35
+ activesupport (= 6.1.0.alpha)
36
+ nokogiri (>= 1.8.5)
37
+ actionview (6.1.0.alpha)
38
+ activesupport (= 6.1.0.alpha)
39
+ builder (~> 3.1)
40
+ erubi (~> 1.4)
41
+ rails-dom-testing (~> 2.0)
42
+ rails-html-sanitizer (~> 1.1, >= 1.2.0)
43
+ activejob (6.1.0.alpha)
44
+ activesupport (= 6.1.0.alpha)
45
+ globalid (>= 0.3.6)
46
+ activemodel (6.1.0.alpha)
47
+ activesupport (= 6.1.0.alpha)
48
+ activerecord (6.1.0.alpha)
49
+ activemodel (= 6.1.0.alpha)
50
+ activesupport (= 6.1.0.alpha)
51
+ activestorage (6.1.0.alpha)
52
+ actionpack (= 6.1.0.alpha)
53
+ activejob (= 6.1.0.alpha)
54
+ activerecord (= 6.1.0.alpha)
55
+ activesupport (= 6.1.0.alpha)
56
+ marcel (~> 0.3.1)
57
+ activesupport (6.1.0.alpha)
58
+ concurrent-ruby (~> 1.0, >= 1.0.2)
59
+ i18n (>= 1.6, < 2)
60
+ minitest (~> 5.1)
61
+ tzinfo (~> 2.0)
62
+ zeitwerk (~> 2.3)
63
+ rails (6.1.0.alpha)
64
+ actioncable (= 6.1.0.alpha)
65
+ actionmailbox (= 6.1.0.alpha)
66
+ actionmailer (= 6.1.0.alpha)
67
+ actionpack (= 6.1.0.alpha)
68
+ actiontext (= 6.1.0.alpha)
69
+ actionview (= 6.1.0.alpha)
70
+ activejob (= 6.1.0.alpha)
71
+ activemodel (= 6.1.0.alpha)
72
+ activerecord (= 6.1.0.alpha)
73
+ activestorage (= 6.1.0.alpha)
74
+ activesupport (= 6.1.0.alpha)
75
+ bundler (>= 1.3.0)
76
+ railties (= 6.1.0.alpha)
77
+ sprockets-rails (>= 2.0.0)
78
+ railties (6.1.0.alpha)
79
+ actionpack (= 6.1.0.alpha)
80
+ activesupport (= 6.1.0.alpha)
81
+ method_source
82
+ rake (>= 0.8.7)
83
+ thor (~> 1.0)
84
+
85
+ PATH
86
+ remote: .
87
+ specs:
88
+ packwerk (1.0.0)
89
+ activesupport (>= 5.2)
90
+ ast
91
+ better_html
92
+ constant_resolver
93
+ parser
94
+ sorbet-runtime
95
+
96
+ GEM
97
+ remote: https://rubygems.org/
98
+ specs:
99
+ ast (2.4.1)
100
+ better_html (1.0.15)
101
+ actionview (>= 4.0)
102
+ activesupport (>= 4.0)
103
+ ast (~> 2.0)
104
+ erubi (~> 1.4)
105
+ html_tokenizer (~> 0.0.6)
106
+ parser (>= 2.4)
107
+ smart_properties
108
+ builder (3.2.4)
109
+ byebug (11.1.3)
110
+ coderay (1.1.3)
111
+ colorize (0.8.1)
112
+ commander (4.5.2)
113
+ highline (~> 2.0.0)
114
+ concurrent-ruby (1.1.6)
115
+ constant_resolver (0.1.5)
116
+ crass (1.0.6)
117
+ erubi (1.9.0)
118
+ globalid (0.4.2)
119
+ activesupport (>= 4.2.0)
120
+ highline (2.0.3)
121
+ html_tokenizer (0.0.7)
122
+ i18n (1.8.2)
123
+ concurrent-ruby (~> 1.0)
124
+ jaro_winkler (1.5.4)
125
+ loofah (2.5.0)
126
+ crass (~> 1.0.2)
127
+ nokogiri (>= 1.5.9)
128
+ m (1.5.1)
129
+ method_source (>= 0.6.7)
130
+ rake (>= 0.9.2.2)
131
+ mail (2.7.1)
132
+ mini_mime (>= 0.1.1)
133
+ marcel (0.3.3)
134
+ mimemagic (~> 0.3.2)
135
+ method_source (1.0.0)
136
+ mimemagic (0.3.5)
137
+ mini_mime (1.0.2)
138
+ mini_portile2 (2.4.0)
139
+ minitest (5.14.0)
140
+ mocha (1.11.2)
141
+ nio4r (2.5.2)
142
+ nokogiri (1.10.9)
143
+ mini_portile2 (~> 2.4.0)
144
+ parallel (1.19.1)
145
+ parlour (4.0.1)
146
+ commander (~> 4.5)
147
+ parser
148
+ rainbow (~> 3.0)
149
+ sorbet-runtime (>= 0.5)
150
+ parser (2.7.1.4)
151
+ ast (~> 2.4.1)
152
+ pry (0.13.1)
153
+ coderay (~> 1.1)
154
+ method_source (~> 1.0)
155
+ rack (2.2.2)
156
+ rack-test (1.1.0)
157
+ rack (>= 1.0, < 3)
158
+ rails-dom-testing (2.0.3)
159
+ activesupport (>= 4.2.0)
160
+ nokogiri (>= 1.6)
161
+ rails-html-sanitizer (1.3.0)
162
+ loofah (~> 2.3)
163
+ rainbow (3.0.0)
164
+ rake (13.0.1)
165
+ rexml (3.2.4)
166
+ rubocop (0.82.0)
167
+ jaro_winkler (~> 1.5.1)
168
+ parallel (~> 1.10)
169
+ parser (>= 2.7.0.1)
170
+ rainbow (>= 2.2.2, < 4.0)
171
+ rexml
172
+ ruby-progressbar (~> 1.7)
173
+ unicode-display_width (>= 1.4.0, < 2.0)
174
+ rubocop-performance (1.5.2)
175
+ rubocop (>= 0.71.0)
176
+ rubocop-shopify (1.0.2)
177
+ rubocop (~> 0.82.0)
178
+ rubocop-sorbet (0.3.7)
179
+ ruby-progressbar (1.10.1)
180
+ smart_properties (1.15.0)
181
+ sorbet (0.5.5898)
182
+ sorbet-static (= 0.5.5898)
183
+ sorbet-runtime (0.5.5898)
184
+ sorbet-static (0.5.5898-universal-darwin-19)
185
+ spoom (1.0.4)
186
+ colorize
187
+ sorbet (~> 0.5.5)
188
+ sorbet-runtime
189
+ thor (>= 0.19.2)
190
+ spring (2.1.0)
191
+ sprockets (4.0.0)
192
+ concurrent-ruby (~> 1.0)
193
+ rack (> 1, < 3)
194
+ sprockets-rails (3.2.1)
195
+ actionpack (>= 4.0)
196
+ activesupport (>= 4.0)
197
+ sprockets (>= 3.0.0)
198
+ tapioca (0.4.5)
199
+ parlour (>= 2.1.0)
200
+ pry (>= 0.12.2)
201
+ sorbet-runtime
202
+ sorbet-static (>= 0.4.4471)
203
+ spoom
204
+ thor (>= 0.19.2)
205
+ thor (1.0.1)
206
+ tzinfo (2.0.2)
207
+ concurrent-ruby (~> 1.0)
208
+ unicode-display_width (1.7.0)
209
+ websocket-driver (0.7.1)
210
+ websocket-extensions (>= 0.1.0)
211
+ websocket-extensions (0.1.4)
212
+ zeitwerk (2.3.0)
213
+
214
+ PLATFORMS
215
+ ruby
216
+ x86_64-darwin-19
217
+
218
+ DEPENDENCIES
219
+ bundler
220
+ byebug
221
+ constant_resolver
222
+ m
223
+ mocha
224
+ packwerk!
225
+ rails!
226
+ rake
227
+ rubocop-performance
228
+ rubocop-shopify
229
+ rubocop-sorbet
230
+ sorbet
231
+ sorbet-runtime
232
+ spring
233
+ tapioca
234
+
235
+ BUNDLED WITH
236
+ 2.1.4