rubocop-minitest 0.21.1 → 0.22.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 (91) hide show
  1. checksums.yaml +4 -4
  2. data/config/default.yml +5 -0
  3. data/lib/rubocop/cop/minitest/assert_match.rb +1 -1
  4. data/lib/rubocop/cop/minitest/assert_raises_with_regexp_argument.rb +36 -0
  5. data/lib/rubocop/cop/minitest_cops.rb +1 -0
  6. data/lib/rubocop/cop/mixin/argument_range_helper.rb +1 -0
  7. data/lib/rubocop/cop/mixin/in_delta_mixin.rb +1 -0
  8. data/lib/rubocop/cop/mixin/minitest_cop_rule.rb +11 -4
  9. data/lib/rubocop/cop/mixin/minitest_exploration_helpers.rb +1 -0
  10. data/lib/rubocop/cop/mixin/nil_assertion_handleable.rb +1 -0
  11. data/lib/rubocop/cop/mixin/predicate_assertion_handleable.rb +1 -0
  12. data/lib/rubocop/minitest/version.rb +1 -1
  13. metadata +4 -81
  14. data/.circleci/config.yml +0 -55
  15. data/.gitattributes +0 -1
  16. data/.github/FUNDING.yml +0 -7
  17. data/.github/ISSUE_TEMPLATE/bug_report.md +0 -43
  18. data/.github/ISSUE_TEMPLATE/feature_request.md +0 -20
  19. data/.github/PULL_REQUEST_TEMPLATE.md +0 -17
  20. data/.github/workflows/linting.yml +0 -15
  21. data/.github/workflows/spell_checking.yml +0 -33
  22. data/.gitignore +0 -61
  23. data/.rubocop.yml +0 -110
  24. data/.rubocop_todo.yml +0 -19
  25. data/.yamllint.yml +0 -9
  26. data/.yardopts +0 -3
  27. data/CHANGELOG.md +0 -336
  28. data/CONTRIBUTING.md +0 -69
  29. data/Gemfile +0 -16
  30. data/Rakefile +0 -56
  31. data/bin/console +0 -11
  32. data/bin/setup +0 -8
  33. data/codespell.txt +0 -0
  34. data/docs/antora.yml +0 -7
  35. data/docs/modules/ROOT/nav.adoc +0 -6
  36. data/docs/modules/ROOT/pages/cops.adoc +0 -56
  37. data/docs/modules/ROOT/pages/cops_minitest.adoc +0 -1450
  38. data/docs/modules/ROOT/pages/index.adoc +0 -5
  39. data/docs/modules/ROOT/pages/installation.adoc +0 -15
  40. data/docs/modules/ROOT/pages/usage.adoc +0 -32
  41. data/legacy-docs/cops.md +0 -23
  42. data/legacy-docs/cops_minitest.md +0 -448
  43. data/legacy-docs/index.md +0 -1
  44. data/legacy-docs/installation.md +0 -11
  45. data/legacy-docs/usage.md +0 -27
  46. data/mkdocs.yml +0 -13
  47. data/readthedocs.yml +0 -5
  48. data/relnotes/v0.1.0.md +0 -7
  49. data/relnotes/v0.10.0.md +0 -21
  50. data/relnotes/v0.10.1.md +0 -5
  51. data/relnotes/v0.10.2.md +0 -5
  52. data/relnotes/v0.10.3.md +0 -5
  53. data/relnotes/v0.11.0.md +0 -16
  54. data/relnotes/v0.11.1.md +0 -5
  55. data/relnotes/v0.12.0.md +0 -10
  56. data/relnotes/v0.12.1.md +0 -5
  57. data/relnotes/v0.13.0.md +0 -5
  58. data/relnotes/v0.14.0.md +0 -5
  59. data/relnotes/v0.15.0.md +0 -5
  60. data/relnotes/v0.15.1.md +0 -5
  61. data/relnotes/v0.15.2.md +0 -5
  62. data/relnotes/v0.16.0.md +0 -11
  63. data/relnotes/v0.17.0.md +0 -5
  64. data/relnotes/v0.17.1.md +0 -5
  65. data/relnotes/v0.17.2.md +0 -5
  66. data/relnotes/v0.18.0.md +0 -9
  67. data/relnotes/v0.19.0.md +0 -5
  68. data/relnotes/v0.19.1.md +0 -5
  69. data/relnotes/v0.2.0.md +0 -9
  70. data/relnotes/v0.2.1.md +0 -5
  71. data/relnotes/v0.20.0.md +0 -13
  72. data/relnotes/v0.20.1.md +0 -5
  73. data/relnotes/v0.21.0.md +0 -5
  74. data/relnotes/v0.21.1.md +0 -5
  75. data/relnotes/v0.3.0.md +0 -16
  76. data/relnotes/v0.4.0.md +0 -14
  77. data/relnotes/v0.4.1.md +0 -5
  78. data/relnotes/v0.5.0.md +0 -5
  79. data/relnotes/v0.5.1.md +0 -5
  80. data/relnotes/v0.6.0.md +0 -5
  81. data/relnotes/v0.6.1.md +0 -6
  82. data/relnotes/v0.6.2.md +0 -5
  83. data/relnotes/v0.7.0.md +0 -13
  84. data/relnotes/v0.8.0.md +0 -12
  85. data/relnotes/v0.8.1.md +0 -5
  86. data/relnotes/v0.9.0.md +0 -10
  87. data/rubocop-minitest.gemspec +0 -40
  88. data/tasks/changelog.rake +0 -34
  89. data/tasks/changelog.rb +0 -166
  90. data/tasks/cops_documentation.rake +0 -50
  91. data/tasks/cut_release.rake +0 -86
data/relnotes/v0.14.0.md DELETED
@@ -1,5 +0,0 @@
1
- ### New features
2
-
3
- * [#133](https://github.com/rubocop/rubocop-minitest/issues/133): Add new `Minitest/UnreachableAssertion` cop. ([@koic][])
4
-
5
- [@koic]: https://github.com/koic
data/relnotes/v0.15.0.md DELETED
@@ -1,5 +0,0 @@
1
- ### New features
2
-
3
- * [#140](https://github.com/rubocop/rubocop-minitest/issues/140): Make `Minitest/AssertNil` and `Minitest/RefuteNil` aware of `assert(obj.nil?)` and `refute(obj.nil?)`. ([@koic][])
4
-
5
- [@koic]: https://github.com/koic
data/relnotes/v0.15.1.md DELETED
@@ -1,5 +0,0 @@
1
- ### Bug fixes
2
-
3
- * [#143](https://github.com/rubocop/rubocop-minitest/issues/143): Fix an error for `Minitest/LiteralAsActualArgumentTest` when expected and actual arguments are literals. ([@koic][])
4
-
5
- [@koic]: https://github.com/koic
data/relnotes/v0.15.2.md DELETED
@@ -1,5 +0,0 @@
1
- ### Bug fixes
2
-
3
- * [#145](https://github.com/rubocop/rubocop-minitest/pull/145): Mark `Minitest/AssertEmptyLiteral` as safe autocorrection. ([@koic][])
4
-
5
- [@koic]: https://github.com/koic
data/relnotes/v0.16.0.md DELETED
@@ -1,11 +0,0 @@
1
- ### New features
2
-
3
- * [#147](https://github.com/rubocop/rubocop-minitest/issues/147): Add `EnforcedStyle` config parameter for `Minitest/GlobalExpectations`. ([@gi][])
4
-
5
- ### Bug fixes
6
-
7
- * [#142](https://github.com/rubocop/rubocop-minitest/issues/142): Fix `Minitest/GlobalExpectations` autocorrect when receiver is lambda. ([@gi][])
8
- * [#150](https://github.com/rubocop/rubocop-minitest/issues/150): Fix a false positive for `Minitest/AssertEmpty` and `RefuteEmpty` cops when using `empty` method with any arguments. ([@koic][])
9
-
10
- [@gi]: https://github.com/gi
11
- [@koic]: https://github.com/koic
data/relnotes/v0.17.0.md DELETED
@@ -1,5 +0,0 @@
1
- ### New features
2
-
3
- * [#155](https://github.com/rubocop/rubocop-minitest/issues/155): Provide `assert_offense`, `assert_correction`, and `assert_no_offenses` testing APIs for custom Minitest cop development. ([@koic][])
4
-
5
- [@koic]: https://github.com/koic
data/relnotes/v0.17.1.md DELETED
@@ -1,5 +0,0 @@
1
- ### Changes
2
-
3
- * [#158](https://github.com/rubocop/rubocop-minitest/pull/158): Make `Minitest/UnreachableAssertion` aware of `assert` and `refute` prefix methods. ([@koic][])
4
-
5
- [@koic]: https://github.com/koic
data/relnotes/v0.17.2.md DELETED
@@ -1,5 +0,0 @@
1
- ### Bug fixes
2
-
3
- * [#159](https://github.com/rubocop/rubocop-minitest/issues/159): Fix a false positive for `Minitest/UnreachableAssertion` when using only one assertion method in `assert_raises` block. ([@koic][])
4
-
5
- [@koic]: https://github.com/koic
data/relnotes/v0.18.0.md DELETED
@@ -1,9 +0,0 @@
1
- ### New features
2
-
3
- * [#161](https://github.com/rubocop/rubocop-minitest/pull/161): Add new `Minitest/AssertPredicate` and `Minitest/RefutePredicate` cops. ([@koic][])
4
-
5
- ### Changes
6
-
7
- * [#162](https://github.com/rubocop/rubocop-minitest/pull/162): Make `Minitest/AssertNil` (`Minitest/RefuteNil`) aware of `assert_predicate(obj, :nil?)` (`refute_predicate(obj, :nil?)`). ([@koic][])
8
-
9
- [@koic]: https://github.com/koic
data/relnotes/v0.19.0.md DELETED
@@ -1,5 +0,0 @@
1
- ### New features
2
-
3
- * [#164](https://github.com/rubocop/rubocop-minitest/pull/164): Add new `Minitest/DuplicateTestRun` cop. ([@ignacio-chiazzo][])
4
-
5
- [@ignacio-chiazzo]: https://github.com/ignacio-chiazzo
data/relnotes/v0.19.1.md DELETED
@@ -1,5 +0,0 @@
1
- ### Bug fixes
2
-
3
- * [#167](https://github.com/rubocop/rubocop-minitest/pull/167): Fix potential for valid Ruby code to be unparsable in `Minitest/DuplicateTestRun` cop. ([@gjtorikian][])
4
-
5
- [@gjtorikian]: https://github.com/gjtorikian
data/relnotes/v0.2.0.md DELETED
@@ -1,9 +0,0 @@
1
- ### New features
2
-
3
- * [#11](https://github.com/rubocop/rubocop-minitest/pull/11): Add new `Minitest/RefuteNil` cop. ([@tejasbubane ][])
4
- * [#8](https://github.com/rubocop/rubocop-minitest/pull/8): Add new `Minitest/AssertTruthy` cop. ([@abhaynikam ][])
5
- * [#9](https://github.com/rubocop/rubocop-minitest/pull/9): Add new `Minitest/AssertIncludes` cop. ([@abhaynikam ][])
6
- * [#10](https://github.com/rubocop/rubocop-minitest/pull/10): Add new `Minitest/AssertEmpty` cop. ([@abhaynikam ][])
7
-
8
- [@tejasbubane]: https://github.com/tejasbubane
9
- [@abhaynikam]: https://github.com/abhaynikam
data/relnotes/v0.2.1.md DELETED
@@ -1,5 +0,0 @@
1
- ### Bug fixes
2
-
3
- * [#13](https://github.com/rubocop/rubocop-minitest/issues/13): Fix the execution target specified in `Include` parameter. ([@koic][])
4
-
5
- [@koic]: https://github.com/koic
data/relnotes/v0.20.0.md DELETED
@@ -1,13 +0,0 @@
1
- ### New features
2
-
3
- * [#169](https://github.com/rubocop/rubocop-minitest/issues/169): Add new `Minitest/SkipEnsure` cop. ([@koic][])
4
-
5
- ### Bug fixes
6
-
7
- * [#172](https://github.com/rubocop/rubocop-minitest/issues/172): Fix a false positive for `Minitest/AssertPredicate` and `Minitest/RefutePredicate` when using numbered parameters. ([@koic][])
8
-
9
- ### Changes
10
-
11
- * [#168](https://github.com/rubocop/rubocop-minitest/pull/168): **(Compatibility)** Drop Ruby 2.5 support. ([@koic][])
12
-
13
- [@koic]: https://github.com/koic
data/relnotes/v0.20.1.md DELETED
@@ -1,5 +0,0 @@
1
- ### Bug fixes
2
-
3
- * [#175](https://github.com/rubocop/rubocop-minitest/pull/175): Fix raise error when using assert with block. ([@ippachi][])
4
-
5
- [@ippachi]: https://github.com/ippachi
data/relnotes/v0.21.0.md DELETED
@@ -1,5 +0,0 @@
1
- ### New features
2
-
3
- * [#109](https://github.com/rubocop/rubocop-minitest/issues/109): Add new `Minitest/AssertRaisesCompoundBody` cop. ([@fatkodima][])
4
-
5
- [@fatkodima]: https://github.com/fatkodima
data/relnotes/v0.21.1.md DELETED
@@ -1,5 +0,0 @@
1
- ### Bug fixes
2
-
3
- * [#178](https://github.com/rubocop/rubocop-minitest/pull/178): Fix incorrect documentation URLs when using `rubocop --show-docs-url`. ([@r7kamura][])
4
-
5
- [@r7kamura]: https://github.com/r7kamura
data/relnotes/v0.3.0.md DELETED
@@ -1,16 +0,0 @@
1
- ## 0.3.0 (2019-10-13)
2
-
3
- ### New features
4
-
5
- * [#15](https://github.com/rubocop/rubocop-minitest/pull/15): Add new `Minitest/RefuteIncludes` cop. ([@abhaynikam][])
6
- * [#18](https://github.com/rubocop/rubocop-minitest/pull/18): Add new `Minitest/RefuteFalse` cop. ([@duduribeiro][])
7
- * [#20](https://github.com/rubocop/rubocop-minitest/pull/20): Add new `Minitest/RefuteEmpty` cop. ([@abhaynikam][])
8
- * [#21](https://github.com/rubocop/rubocop-minitest/pull/21): Add new `Minitest/RefuteEqual` cop. ([@duduribeiro][])
9
- * [#27](https://github.com/rubocop/rubocop-minitest/pull/27): Add new `Minitest/AssertRespondTo` cop. ([@duduribeiro][])
10
-
11
- ### Bug fixes
12
-
13
- * [#19](https://github.com/rubocop/rubocop-minitest/pull/19): Fix a false negative for `Minitest/AssertIncludes` when using `include` method in arguments of `assert` method. ([@abhaynikam][])
14
-
15
- [@abhaynikam]: https://github.com/abhaynikam
16
- [@duduribeiro]: https://github.com/duduribeiro
data/relnotes/v0.4.0.md DELETED
@@ -1,14 +0,0 @@
1
- ### New features
2
-
3
- * [#29](https://github.com/rubocop/rubocop-minitest/pull/29): Add new `Minitest/RefuteRespondTo` cop. ([@herwinw][])
4
- * [#31](https://github.com/rubocop/rubocop-minitest/pull/31): Add new `Minitest/AssertEqual` cop. ([@herwinw][])
5
- * [#34](https://github.com/rubocop/rubocop-minitest/pull/34): Add new `Minitest/AssertInstanceOf` cop. ([@abhaynikam][])
6
- * [#35](https://github.com/rubocop/rubocop-minitest/pull/35): Add new `Minitest/RefuteInstanceOf` cop. ([@abhaynikam][])
7
-
8
- ### Bug fixes
9
-
10
- * [#25](https://github.com/rubocop/rubocop-minitest/issues/25): Add `Enabled: true` to `Minitest` department config to suppress `Warning: Minitest does not support Enabled parameter`. ([@koic][])
11
-
12
- [@herwinw]: https://github.com/herwinw
13
- [@abhaynikam]: https://github.com/abhaynikam
14
- [@koic]: https://github.com/koic
data/relnotes/v0.4.1.md DELETED
@@ -1,5 +0,0 @@
1
- ### Bug fixes
2
-
3
- * [#39](https://github.com/rubocop/rubocop-minitest/issues/39): Fix an incorrect autocorrect for `Minitest/AssertRespondTo` and `Minitest/RefuteRespondTo` when using assertion method calling `respond_to` with receiver omitted. ([@koic][])
4
-
5
- [@koic]: https://github.com/koic
data/relnotes/v0.5.0.md DELETED
@@ -1,5 +0,0 @@
1
- ### New features
2
-
3
- * [#32](https://github.com/rubocop/rubocop-minitest/issues/32): Add new `Minitest/AssertEmptyLiteral` cop. ([@tejasbubane][])
4
-
5
- [@tejasbubane]: https://github.com/tejasbubane
data/relnotes/v0.5.1.md DELETED
@@ -1,5 +0,0 @@
1
- ### Bug fixes
2
-
3
- * [#42](https://github.com/rubocop/rubocop-minitest/issues/42): Fix an incorrect autocorrect for some cops of `Minitest` department when using heredoc message. ([@koic][])
4
-
5
- [@koic]: https://github.com/koic
data/relnotes/v0.6.0.md DELETED
@@ -1,5 +0,0 @@
1
- ### New features
2
-
3
- * [#49](https://github.com/rubocop/rubocop-minitest/pull/49): New cops `AssertMatch` and `RefuteMatch` check for use of `assert_match`/`refute_match` instead of `assert(foo.match(bar))`/`refute(foo.match(bar))`. ([@fsateler][])
4
-
5
- [@fsateler]: https://github.com/fsateler
data/relnotes/v0.6.1.md DELETED
@@ -1,6 +0,0 @@
1
- ### Bug fixes
2
-
3
- * [#52](https://github.com/rubocop/rubocop-minitest/issues/52): Make `Minitest/RefuteFalse` cop aware of `assert(!test)`. ([@koic][])
4
- * [#52](https://github.com/rubocop/rubocop-minitest/issues/52): Fix a false negative for `Minitest/AssertIncludes` and `Minitest/RefuteIncludes` when an argument is enclosed in redundant parentheses. ([@koic][])
5
-
6
- [@koic]: https://github.com/koic
data/relnotes/v0.6.2.md DELETED
@@ -1,5 +0,0 @@
1
- ### Bug fixes
2
-
3
- * [#55](https://github.com/rubocop/rubocop-minitest/issues/55): Fix an error for `Minitest/AssertIncludes` when using local variable argument. ([@koic][])
4
-
5
- [@koic]: https://github.com/koic
data/relnotes/v0.7.0.md DELETED
@@ -1,13 +0,0 @@
1
- ### New features
2
-
3
- * [#60](https://github.com/rubocop/rubocop-minitest/issues/60): Add new cop `Minitest/GlobalExpectations` to check for deprecated global expectations. ([@tejasbubane][])
4
-
5
- ### Bug fixes
6
-
7
- * [#58](https://github.com/rubocop/rubocop-minitest/pull/58): Fix a false negative for `Minitest/AssertMatch` and `Minitest/RefuteMatch` when an argument is enclosed in redundant parentheses. ([@koic][])
8
- * [#59](https://github.com/rubocop/rubocop-minitest/pull/59): Fix a false negative for `Minitest/AssertRespondTo` and `Minitest/RefuteRespondTo` when an argument is enclosed in redundant parentheses. ([@koic][])
9
- * [#61](https://github.com/rubocop/rubocop-minitest/pull/61): Fix a false negative for `Minitest/AssertInstanceOf` and `Minitest/RefuteInstanceOf` when an argument is enclosed in redundant parentheses. ([@koic][])
10
- * [#62](https://github.com/rubocop/rubocop-minitest/pull/62): Fix a false negative for `Minitest/AssertEmpty` and `Minitest/RefuteEmpty` when an argument is enclosed in redundant parentheses. ([@koic][])
11
-
12
- [@tejasbubane]: https://github.com/tejasbubane
13
- [@koic]: https://github.com/koic
data/relnotes/v0.8.0.md DELETED
@@ -1,12 +0,0 @@
1
- ### New features
2
-
3
- * [#66](https://github.com/rubocop/rubocop-minitest/issues/66): Support all expectations of `Minitest::Expectations` for `Minitest/GlobalExpectations` cop. ([@koic][])
4
-
5
- ### Bug fixes
6
-
7
- * [#60](https://github.com/rubocop/rubocop-minitest/issues/60): Fix `Minitest/GlobalExpectations` autocorrection for chained methods. ([@tejasbubane][])
8
- * [#69](https://github.com/rubocop/rubocop-minitest/pull/69): Fix a false negative for `Minitest/GlobalExpectations` cop when using a variable or a hash index for receiver. ([@koic][])
9
- * [#71](https://github.com/rubocop/rubocop-minitest/pull/71): Fix a false negative for `Minitest/AssertEqual` when an argument is enclosed in redundant parentheses. ([@koic][])
10
-
11
- [@koic]: https://github.com/koic
12
- [@tejasbubane]: https://github.com/tejasbubane
data/relnotes/v0.8.1.md DELETED
@@ -1,5 +0,0 @@
1
- ### Bug fixes
2
-
3
- * [#72](https://github.com/rubocop/rubocop-minitest/pull/72): Fix some false negatives for `Minitest/GlobalExpectations`. ([@andrykonchin][])
4
-
5
- [@andrykonchin]: https://github.com/andrykonchin
data/relnotes/v0.9.0.md DELETED
@@ -1,10 +0,0 @@
1
- ### Bug fixes
2
-
3
- * [#75](https://github.com/rubocop/rubocop-minitest/issues/75): Fix a false negative for `Minitest/GlobalExpectations` when using global expectation methods with no arguments. ([@koic][])
4
-
5
- ### Changes
6
-
7
- * [#73](https://github.com/rubocop/rubocop-minitest/issues/73): The Minitest department works on file names end with `_test.rb` by default. ([@koic][])
8
- * [#77](https://github.com/rubocop/rubocop-minitest/pull/77): **(Compatibility)** Drop support for Ruby 2.3. ([@koic][])
9
-
10
- [@koic]: https://github.com/koic
@@ -1,40 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- lib = File.expand_path('lib', __dir__)
4
- $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
5
- require 'rubocop/minitest/version'
6
-
7
- Gem::Specification.new do |spec|
8
- spec.name = 'rubocop-minitest'
9
- spec.version = RuboCop::Minitest::Version::STRING
10
- spec.authors = ['Bozhidar Batsov', 'Jonas Arvidsson', 'Koichi ITO']
11
-
12
- spec.summary = 'Automatic Minitest code style checking tool.'
13
- spec.description = <<~DESCRIPTION
14
- Automatic Minitest code style checking tool.
15
- A RuboCop extension focused on enforcing Minitest best practices and coding conventions.
16
- DESCRIPTION
17
- spec.license = 'MIT'
18
-
19
- spec.required_ruby_version = '>= 2.6.0'
20
- spec.metadata = {
21
- 'homepage_uri' => 'https://docs.rubocop.org/rubocop-minitest/',
22
- 'changelog_uri' => 'https://github.com/rubocop/rubocop-minitest/blob/master/CHANGELOG.md',
23
- 'source_code_uri' => 'https://github.com/rubocop/rubocop-minitest',
24
- 'documentation_uri' => "https://docs.rubocop.org/rubocop-minitest/#{RuboCop::Minitest::Version.document_version}",
25
- 'bug_tracker_uri' => 'https://github.com/rubocop/rubocop-minitest/issues',
26
- 'rubygems_mfa_required' => 'true'
27
- }
28
-
29
- # Specify which files should be added to the gem when it is released.
30
- # The `git ls-files -z` loads the files in the RubyGem that have been added into git.
31
- spec.files = Dir.chdir(File.expand_path(__dir__)) do
32
- `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
33
- end
34
- spec.bindir = 'exe'
35
- spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
36
- spec.require_paths = ['lib']
37
-
38
- spec.add_runtime_dependency 'rubocop', '>= 0.90', '< 2.0'
39
- spec.add_development_dependency 'minitest', '~> 5.11'
40
- end
data/tasks/changelog.rake DELETED
@@ -1,34 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- autoload :Changelog, "#{__dir__}/changelog"
4
-
5
- namespace :changelog do
6
- %i[new fix change].each do |type|
7
- desc "Create a Changelog entry (#{type})"
8
- task type, [:id] do |_task, args|
9
- ref_type = :pull if args[:id]
10
- path = Changelog::Entry.new(type: type, ref_id: args[:id], ref_type: ref_type).write
11
- cmd = "git add #{path}"
12
- system cmd
13
- puts "Entry '#{path}' created and added to git index"
14
- end
15
- end
16
-
17
- desc 'Merge entries and delete them'
18
- task :merge do
19
- raise 'No entries!' unless Changelog.pending?
20
-
21
- Changelog.new.merge!.and_delete!
22
- cmd = "git commit -a -m 'Update Changelog'"
23
- puts cmd
24
- system cmd
25
- end
26
-
27
- task :check_clean do
28
- next unless Changelog.pending?
29
-
30
- puts '*** Pending changelog entries!'
31
- puts 'Do `bundle exec rake changelog:merge`'
32
- exit(1)
33
- end
34
- end
data/tasks/changelog.rb DELETED
@@ -1,166 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- if RUBY_VERSION < '2.6'
4
- puts 'Changelog utilities available only for Ruby 2.6+'
5
- exit(1)
6
- end
7
-
8
- # Changelog utility
9
- class Changelog
10
- ENTRIES_PATH = 'changelog/'
11
- FIRST_HEADER = /#{Regexp.escape("## master (unreleased)\n")}/m.freeze
12
- ENTRIES_PATH_TEMPLATE = "#{ENTRIES_PATH}%<type>s_%<name>s.md"
13
- TYPE_REGEXP = /#{Regexp.escape(ENTRIES_PATH)}([a-z]+)_/.freeze
14
- TYPE_TO_HEADER = { new: 'New features', fix: 'Bug fixes', change: 'Changes' }.freeze
15
- HEADER = /### (.*)/.freeze
16
- PATH = 'CHANGELOG.md'
17
- REF_URL = 'https://github.com/rubocop/rubocop-minitest'
18
- MAX_LENGTH = 40
19
- CONTRIBUTOR = '[@%<user>s]: https://github.com/%<user>s'
20
- SIGNATURE = Regexp.new(format(Regexp.escape('[@%<user>s][]'), user: '([\w-]+)'))
21
- EOF = "\n"
22
-
23
- # New entry
24
- Entry = Struct.new(:type, :body, :ref_type, :ref_id, :user, keyword_init: true) do
25
- def initialize(type:, body: last_commit_title, ref_type: nil, ref_id: nil, user: github_user)
26
- id, body = extract_id(body)
27
- ref_id ||= id || 'x'
28
- ref_type ||= id ? :issues : :pull
29
- super
30
- end
31
-
32
- def write
33
- FileUtils.mkdir_p(ENTRIES_PATH)
34
- File.write(path, content)
35
- path
36
- end
37
-
38
- def path
39
- format(ENTRIES_PATH_TEMPLATE, type: type, name: str_to_filename(body))
40
- end
41
-
42
- def content
43
- period = '.' unless body.end_with? '.'
44
- "* #{ref}: #{body}#{period} ([@#{user}][])\n"
45
- end
46
-
47
- def ref
48
- "[##{ref_id}](#{REF_URL}/#{ref_type}/#{ref_id})"
49
- end
50
-
51
- def last_commit_title
52
- `git log -1 --pretty=%B`.lines.first.chomp
53
- end
54
-
55
- def extract_id(body)
56
- /^\[Fix(?:es)? #(\d+)\] (.*)/.match(body)&.captures || [nil, body]
57
- end
58
-
59
- def str_to_filename(str)
60
- str
61
- .downcase
62
- .split
63
- .each { |s| s.gsub!(/\W/, '') }
64
- .reject(&:empty?)
65
- .inject do |result, word|
66
- s = "#{result}_#{word}"
67
- return result if s.length > MAX_LENGTH
68
-
69
- s
70
- end
71
- end
72
-
73
- def github_user
74
- user = `git config --global credential.username`.chomp
75
- warn 'Set your username with `git config --global credential.username "myusernamehere"`' if user.empty?
76
-
77
- user
78
- end
79
- end
80
- attr_reader :header, :rest
81
-
82
- def initialize(content: File.read(PATH), entries: Changelog.read_entries)
83
- require 'strscan'
84
-
85
- parse(content)
86
- @entries = entries
87
- end
88
-
89
- def and_delete!
90
- @entries.each_key { |path| File.delete(path) }
91
- end
92
-
93
- def merge!
94
- File.write(PATH, merge_content)
95
- self
96
- end
97
-
98
- def unreleased_content
99
- entry_map = parse_entries(@entries)
100
- merged_map = merge_entries(entry_map)
101
- merged_map.flat_map { |header, things| ["### #{header}\n", *things, ''] }.join("\n")
102
- end
103
-
104
- def merge_content
105
- merged_content = [@header, unreleased_content, @rest.chomp, *new_contributor_lines].join("\n")
106
-
107
- merged_content << EOF
108
- end
109
-
110
- def self.pending?
111
- entry_paths.any?
112
- end
113
-
114
- def self.entry_paths
115
- Dir["#{ENTRIES_PATH}*"]
116
- end
117
-
118
- def self.read_entries
119
- entry_paths.to_h { |path| [path, File.read(path)] }
120
- end
121
-
122
- def new_contributor_lines
123
- contributors
124
- .map { |user| format(CONTRIBUTOR, user: user) }
125
- .reject { |line| @rest.include?(line) }
126
- end
127
-
128
- def contributors
129
- contributors = @entries.values.flat_map do |entry|
130
- entry.match(/\. \((?<contributors>.+)\)\n/)[:contributors].split(',')
131
- end
132
-
133
- contributors.join.scan(SIGNATURE).flatten
134
- end
135
-
136
- private
137
-
138
- def merge_entries(entry_map)
139
- all = @unreleased.merge(entry_map) { |_k, v1, v2| v1.concat(v2) }
140
- canonical = TYPE_TO_HEADER.values.to_h { |v| [v, nil] }
141
- canonical.merge(all).compact
142
- end
143
-
144
- def parse(content)
145
- ss = StringScanner.new(content)
146
- @header = ss.scan_until(FIRST_HEADER)
147
- @unreleased = parse_release(ss.scan_until(/\n(?=## )/m))
148
- @rest = ss.rest
149
- end
150
-
151
- # @return [Hash<type, Array<String>]]
152
- def parse_release(unreleased)
153
- unreleased.lines.map(&:chomp).reject(&:empty?).slice_before(HEADER).to_h do |header, *entries|
154
- [HEADER.match(header)[1], entries]
155
- end
156
- end
157
-
158
- def parse_entries(path_content_map)
159
- changes = Hash.new { |h, k| h[k] = [] }
160
- path_content_map.each do |path, content|
161
- header = TYPE_TO_HEADER.fetch(TYPE_REGEXP.match(path)[1].to_sym)
162
- changes[header].concat(content.lines.map(&:chomp))
163
- end
164
- changes
165
- end
166
- end
@@ -1,50 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'yard'
4
- require 'rubocop'
5
- require 'rubocop-minitest'
6
- require 'rubocop/cops_documentation_generator'
7
-
8
- YARD::Rake::YardocTask.new(:yard_for_generate_documentation) do |task|
9
- task.files = ['lib/rubocop/cop/**/*.rb']
10
- task.options = ['--no-output']
11
- end
12
-
13
- task update_cops_documentation: :yard_for_generate_documentation do
14
- deps = ['Minitest']
15
-
16
- # NOTE: Update `<<next>>` version for docs/modules/ROOT/pages/cops_minitest.adoc
17
- # when running release tasks.
18
- RuboCop::Minitest::Inject.defaults!
19
-
20
- CopsDocumentationGenerator.new(departments: deps).call
21
- end
22
-
23
- desc 'Syntax check for the documentation comments'
24
- task documentation_syntax_check: :yard_for_generate_documentation do
25
- require 'parser/ruby31'
26
-
27
- ok = true
28
- YARD::Registry.load!
29
- cops = RuboCop::Cop::Registry.global
30
- cops.each do |cop|
31
- examples = YARD::Registry.all(:class).find do |code_object|
32
- next unless RuboCop::Cop::Badge.for(code_object.to_s) == cop.badge
33
-
34
- break code_object.tags('example')
35
- end
36
-
37
- examples.to_a.each do |example|
38
- buffer = Parser::Source::Buffer.new('<code>', 1)
39
- buffer.source = example.text
40
- parser = Parser::Ruby31.new(RuboCop::AST::Builder.new)
41
- parser.diagnostics.all_errors_are_fatal = true
42
- parser.parse(buffer)
43
- rescue Parser::SyntaxError => e
44
- path = example.object.file
45
- puts "#{path}: Syntax Error in an example. #{e}"
46
- ok = false
47
- end
48
- end
49
- abort unless ok
50
- end
@@ -1,86 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'bump'
4
-
5
- namespace :cut_release do
6
- %w[major minor patch pre].each do |release_type|
7
- desc "Cut a new #{release_type} release, create release notes and update documents."
8
- task release_type => 'changelog:check_clean' do
9
- run(release_type)
10
- end
11
- end
12
-
13
- def add_header_to_changelog(version)
14
- changelog = File.read('CHANGELOG.md')
15
- head, tail = changelog.split("## master (unreleased)\n\n", 2)
16
-
17
- File.open('CHANGELOG.md', 'w') do |f|
18
- f << head
19
- f << "## master (unreleased)\n\n"
20
- f << "## #{version} (#{Time.now.strftime('%F')})\n\n"
21
- f << tail
22
- end
23
- end
24
-
25
- def create_release_notes(version)
26
- release_notes = new_version_changes.strip
27
- contributor_links = user_links(release_notes)
28
-
29
- File.open("relnotes/v#{version}.md", 'w') do |file|
30
- file << release_notes
31
- file << "\n\n"
32
- file << contributor_links
33
- file << "\n"
34
- end
35
- end
36
-
37
- def update_antora_yml(new_version)
38
- antora_metadata = File.read('docs/antora.yml')
39
-
40
- File.open('docs/antora.yml', 'w') do |f|
41
- f << antora_metadata.sub('version: ~', "version: '#{version_sans_patch(new_version)}'")
42
- end
43
- end
44
-
45
- def version_sans_patch(version)
46
- version.split('.').take(2).join('.')
47
- end
48
-
49
- # Replace `<<next>>` (and variations) with version being cut.
50
- def update_cop_versions(_old_version, new_version)
51
- update_file('config/default.yml') do |default|
52
- default.gsub(/['"]?<<\s*next\s*>>['"]?/i, "'#{version_sans_patch(new_version)}'")
53
- end
54
- end
55
-
56
- def new_version_changes
57
- changelog = File.read('CHANGELOG.md')
58
- _, _, new_changes, _older_changes = changelog.split(/^## .*$/, 4)
59
- new_changes
60
- end
61
-
62
- def update_file(path)
63
- content = File.read(path)
64
- File.write(path, yield(content))
65
- end
66
-
67
- def user_links(text)
68
- names = text.scan(/\[@(\S+)\]\[\]/).map(&:first).uniq
69
- names.map { |name| "[@#{name}]: https://github.com/#{name}" }.join("\n")
70
- end
71
-
72
- def run(release_type)
73
- old_version = Bump::Bump.current
74
- Bump::Bump.run(release_type, commit: false, bundle: false, tag: false)
75
- new_version = Bump::Bump.current
76
-
77
- update_cop_versions(old_version, new_version)
78
- Rake::Task['update_cops_documentation'].invoke
79
-
80
- add_header_to_changelog(new_version)
81
- create_release_notes(new_version)
82
- update_antora_yml(new_version)
83
-
84
- puts "Changed version from #{old_version} to #{new_version}."
85
- end
86
- end