eager_eye 1.1.10 → 1.1.11

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: 28c53330ec88bd4b8125e357ad3d11bc3155e6425d7feef88ccf4fd8bec93123
4
- data.tar.gz: c671ff6c33dd1fef2a0be359452a195ecc5a72b27d534ca09d92c17f1928c89f
3
+ metadata.gz: 200f52cfc9b2d47ee338155372eded81c115c5c05578e6ff89e689f148fabac5
4
+ data.tar.gz: 3b236fff4d78662c30140b3e429d222defed03100b2c8d6928711886bd7c525a
5
5
  SHA512:
6
- metadata.gz: 75dd57d12d3b869f4ae9246130de9ae497ec6240f0f81adeaae1d7c2aaf48eed0f5d2626a62ba2f72a0b0adf8d207129322977c60639986881c1cd9fec91ecec
7
- data.tar.gz: 265a28c9086ae7a215f31f7295b9d48be4882b926718a70029678b7c46d80ef171c308060507670477385cb52fd8aba66d7fac0bc05c1da13cd246e3eab56ed9
6
+ metadata.gz: 8a09fbc10c6f944c9c42f31723dc0bf248eff29691a35fbc31f6a4e21836224225863eb625ac33e818a30b2e12b119831e02ec2f0d0689476e014a9ab0d5331e
7
+ data.tar.gz: 36dff575a0277abc141848a1866a057f31fcefe6fdecd861a32fcad7120167a56120f0ed8a507c9ff9fdcb4ac54be72be64a475ca0b5105574ace91e26618f8b
data/CHANGELOG.md CHANGED
@@ -7,6 +7,15 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [1.1.11] - 2026-01-13
11
+
12
+ ### Fixed
13
+
14
+ - **CustomMethodQuery False Positive** - Skip `count`, `sum`, `find` on safe collections
15
+ - `id.to_s.count` no longer flagged (scalar count)
16
+ - `array.count` no longer flagged inside iteration
17
+ - Expanded safe transform methods (`to_s`, `to_i`, `to_a`, `chars`, `bytes`)
18
+
10
19
  ## [1.1.10] - 2026-01-12
11
20
 
12
21
  ### Fixed
data/README.md CHANGED
@@ -10,7 +10,7 @@
10
10
 
11
11
  <p align="center">
12
12
  <a href="https://github.com/hamzagedikkaya/eager_eye/actions/workflows/main.yml"><img src="https://github.com/hamzagedikkaya/eager_eye/actions/workflows/main.yml/badge.svg" alt="CI"></a>
13
- <a href="https://rubygems.org/gems/eager_eye"><img src="https://img.shields.io/badge/gem-v1.1.10-red.svg" alt="Gem Version"></a>
13
+ <a href="https://rubygems.org/gems/eager_eye"><img src="https://img.shields.io/badge/gem-v1.1.11-red.svg" alt="Gem Version"></a>
14
14
  <a href="https://github.com/hamzagedikkaya/eager_eye"><img src="https://img.shields.io/badge/coverage-95%25-brightgreen.svg" alt="Coverage"></a>
15
15
  <a href="https://www.ruby-lang.org/"><img src="https://img.shields.io/badge/ruby-%3E%3D%203.1-ruby.svg" alt="Ruby"></a>
16
16
  <a href="https://opensource.org/licenses/MIT"><img src="https://img.shields.io/badge/License-MIT-yellow.svg" alt="License: MIT"></a>
@@ -5,10 +5,8 @@ module EagerEye
5
5
  class CustomMethodQuery < Base
6
6
  QUERY_METHODS = %i[where find_by find_by! exists? find first last take pluck ids count sum average minimum
7
7
  maximum].freeze
8
- ARRAY_METHODS = %i[first last take].freeze
9
- HASH_ARRAY_METHODS = %i[keys values].freeze
10
- STRING_ARRAY_METHODS = %i[split].freeze
11
- BRACKET_ARRAY_METHODS = %i[[]].freeze
8
+ SAFE_QUERY_METHODS = %i[first last take count sum find size length].freeze
9
+ SAFE_TRANSFORM_METHODS = %i[keys values split [] params sort pluck ids to_s to_a to_i chars bytes].freeze
12
10
  ITERATION_METHODS = %i[each map select find_all reject collect detect find_index flat_map].freeze
13
11
 
14
12
  def self.detector_name
@@ -67,9 +65,9 @@ module EagerEye
67
65
  end
68
66
 
69
67
  def skip_array_method?(node, block_var, is_array_collection)
70
- return true if receiver_ends_with_hash_array_method?(node.children[0])
68
+ return true if receiver_ends_with_safe_transform_method?(node.children[0])
71
69
 
72
- ARRAY_METHODS.include?(node.children[1]) &&
70
+ SAFE_QUERY_METHODS.include?(node.children[1]) &&
73
71
  is_array_collection && receiver_is_only_block_var?(node.children[0], block_var)
74
72
  end
75
73
 
@@ -113,18 +111,16 @@ module EagerEye
113
111
 
114
112
  def check_send_collection?(node, definitions)
115
113
  method_name = node.children[1]
116
- return true if %i[map select collect flat_map to_a uniq compact keys values split []
117
- params sort pluck ids].include?(method_name)
114
+ return true if %i[map select collect flat_map uniq compact].include?(method_name)
115
+ return true if SAFE_TRANSFORM_METHODS.include?(method_name)
118
116
 
119
117
  collection_is_array?(node.children[0], definitions)
120
118
  end
121
119
 
122
- def receiver_ends_with_hash_array_method?(node)
120
+ def receiver_ends_with_safe_transform_method?(node)
123
121
  return false unless node.is_a?(Parser::AST::Node) && node.type == :send
124
122
 
125
- HASH_ARRAY_METHODS.include?(node.children[1]) ||
126
- STRING_ARRAY_METHODS.include?(node.children[1]) ||
127
- BRACKET_ARRAY_METHODS.include?(node.children[1])
123
+ SAFE_TRANSFORM_METHODS.include?(node.children[1])
128
124
  end
129
125
 
130
126
  def add_issue(node)
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module EagerEye
4
- VERSION = "1.1.10"
4
+ VERSION = "1.1.11"
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: eager_eye
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.10
4
+ version: 1.1.11
5
5
  platform: ruby
6
6
  authors:
7
7
  - hamzagedikkaya
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2026-01-12 00:00:00.000000000 Z
11
+ date: 2026-01-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: ast