rubocop-sane 0.2.0 → 0.3.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 9bdd1696e7b903bed1518dd449a1187a1551d877a5a479e7d53c4a04be014039
4
- data.tar.gz: ef30ea5fc869a96828e02253e41437bad4906f99f713c1b5919c58c9a7c27e80
3
+ metadata.gz: dd899cb79b69d5e80e9712f16cff748e59565061964ee199ee948413acadb4ae
4
+ data.tar.gz: d5199b3b74466a2ad62c7fc0b6c15633e3c07b3e4aa67a9465b65293c51917f3
5
5
  SHA512:
6
- metadata.gz: 9b108fd043e227b5d78526ac3f3a6b21b1e36701958ee2f9fc4537b98779bb380680cbd7d400282fba3a3f8b51dac4066033f299312bc3402df4f41fa49d54e2
7
- data.tar.gz: c87f908957513184b4c36e1b0f0ad1f2204a50f98525ab800c9d3313b0b1a00a22f12d93d22f704c9c6e36f30e84f6a3f9fd51fd353ece856d4aedd383ae68c8
6
+ metadata.gz: f0a243dbd2dab34f2907cf9dd18abf84226ff2cc70992ca7a84faa04a700c8be0c307b07767a7df073a5d52a05d4d21f3aa4868b9acb06c464d84c05a4723a46
7
+ data.tar.gz: 403df07bdb9611e535edf8aa868c84bd80c7c62c643380d7e9f1dfc0d2c4a102969c83a2f42ee0f7f7b0cf5f45ec235850de31a2e9cac3a03e91006aaa9e06c1
data/CHANGELOG.md CHANGED
@@ -1,5 +1,14 @@
1
1
  ## [Unreleased]
2
2
 
3
+ ## [0.3.0] - 2025-12-20
4
+
5
+ - Add `Sane/OutdatedComments` cop
6
+
7
+ ## [0.2.0] - 2025-12-20
8
+
9
+ - Add `Sane/NoMethodCallAfterEnd` cop
10
+ - Improve `Sane/EmptyLineBeforeComment` cop
11
+
3
12
  ## [0.1.0] - 2025-12-19
4
13
 
5
14
  - Initial release
data/config/default.yml CHANGED
@@ -31,3 +31,8 @@ Sane/NoMethodCallAfterEnd:
31
31
  Description: "Prohibits calling methods directly after `end`."
32
32
  Enabled: true
33
33
  VersionAdded: "0.1.0"
34
+
35
+ Sane/OutdatedComments:
36
+ Description: "Detects TODO/NOTE/FIXME comments with dates in the past."
37
+ Enabled: true
38
+ VersionAdded: "0.2.0"
@@ -0,0 +1,53 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "date"
4
+
5
+ module RuboCop
6
+ module Cop
7
+ module Sane
8
+ # Detects TODO/NOTE/FIXME comments with dates that are in the past.
9
+ #
10
+ # This cop helps ensure that dated comments are reviewed when their
11
+ # target date has passed.
12
+ #
13
+ # @example
14
+ # # bad (when date is in the past)
15
+ # # TODO[2024-01-01]: Remove this after migration
16
+ # # NOTE[2023-06-15]: Temporary workaround
17
+ # # FIXME[2024-03-01]: Fix this bug
18
+ #
19
+ # # good (when date is in the future or today)
20
+ # # TODO[2025-12-31]: Remove this after migration
21
+ #
22
+ class OutdatedComments < Base
23
+ COMMENT_PATTERN = /^#\s*(NOTE|TODO|FIXME)\[(\d{4}-\d{2}-\d{2})\]:/i
24
+ MSG = "Review or remove this outdated comment dated %<date>s"
25
+
26
+ def on_new_investigation
27
+ return unless processed_source.valid_syntax?
28
+
29
+ processed_source.comments.each do |comment|
30
+ check_comment(comment)
31
+ end
32
+ end
33
+
34
+ private
35
+
36
+ def check_comment(comment)
37
+ match = comment.text.match(COMMENT_PATTERN)
38
+ return unless match
39
+
40
+ date_str = match[2]
41
+ parsed_date = Date.parse(date_str)
42
+
43
+ return if parsed_date >= Date.today
44
+
45
+ message = format(MSG, date: date_str)
46
+ add_offense(comment.source_range, severity: :warning, message:)
47
+ rescue Date::Error
48
+ # Invalid date format, ignore
49
+ end
50
+ end
51
+ end
52
+ end
53
+ end
@@ -5,3 +5,4 @@ require_relative "sane/conditional_assignment_allow_ternary"
5
5
  require_relative "sane/empty_line_before_comment"
6
6
  require_relative "sane/empty_lines_around_multiline_block"
7
7
  require_relative "sane/no_method_call_after_end"
8
+ require_relative "sane/outdated_comments"
@@ -2,6 +2,6 @@
2
2
 
3
3
  module RuboCop
4
4
  module Sane
5
- VERSION = "0.2.0"
5
+ VERSION = "0.3.0"
6
6
  end
7
7
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rubocop-sane
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andrew Kodkod
@@ -67,6 +67,7 @@ files:
67
67
  - lib/rubocop/cop/sane/empty_line_before_comment.rb
68
68
  - lib/rubocop/cop/sane/empty_lines_around_multiline_block.rb
69
69
  - lib/rubocop/cop/sane/no_method_call_after_end.rb
70
+ - lib/rubocop/cop/sane/outdated_comments.rb
70
71
  - lib/rubocop/cop/sane_cops.rb
71
72
  - lib/rubocop/sane.rb
72
73
  - lib/rubocop/sane/plugin.rb