Skip to content

Commit

Permalink
Use name(_end)_location helpers consistently
Browse files Browse the repository at this point in the history
  • Loading branch information
Sija committed Nov 12, 2023
1 parent be80de3 commit e103282
Show file tree
Hide file tree
Showing 12 changed files with 33 additions and 17 deletions.
2 changes: 1 addition & 1 deletion src/ameba/rule/lint/not_nil_after_no_bang.cr
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ module Ameba::Rule::Lint
return unless (obj = node.obj).is_a?(Crystal::Call)
return unless obj.name.in?(obj.block ? BLOCK_CALL_NAMES : CALL_NAMES)

return unless name_location = obj.name_location
return unless name_location = name_location(obj)
return unless name_location_end = name_end_location(obj)
return unless end_location = name_end_location(node)

Expand Down
4 changes: 2 additions & 2 deletions src/ameba/rule/lint/redundant_string_coercion.cr
Original file line number Diff line number Diff line change
Expand Up @@ -30,8 +30,8 @@ module Ameba::Rule::Lint
MSG = "Redundant use of `Object#to_s` in interpolation"

def test(source, node : Crystal::StringInterpolation)
string_coercion_nodes(node).each do |n|
issue_for n.name_location, n.end_location, MSG
string_coercion_nodes(node).each do |expr|
issue_for name_location(expr), expr.end_location, MSG
end
end

Expand Down
4 changes: 3 additions & 1 deletion src/ameba/rule/performance/any_after_filter.cr
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,8 @@ module Ameba::Rule::Performance
# - reject
# ```
class AnyAfterFilter < Base
include AST::Util

properties do
description "Identifies usage of `any?` calls that follow filters"
filter_names %w(select reject)
Expand All @@ -39,7 +41,7 @@ module Ameba::Rule::Performance
return unless obj.is_a?(Crystal::Call) && obj.block && node.block.nil?
return unless obj.name.in?(filter_names)

issue_for obj.name_location, node.name_end_location, MSG % obj.name
issue_for name_location(obj), name_end_location(node), MSG % obj.name
end
end
end
4 changes: 3 additions & 1 deletion src/ameba/rule/performance/compact_after_map.cr
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,8 @@ module Ameba::Rule::Performance
# Enabled: true
# ```
class CompactAfterMap < Base
include AST::Util

properties do
description "Identifies usage of `compact` calls that follow `map`"
end
Expand All @@ -37,7 +39,7 @@ module Ameba::Rule::Performance
return unless obj.is_a?(Crystal::Call) && obj.block
return unless obj.name == "map"

issue_for obj.name_location, node.name_end_location, MSG
issue_for name_location(obj), name_end_location(node), MSG
end
end
end
2 changes: 1 addition & 1 deletion src/ameba/rule/performance/excessive_allocations.cr
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@ module Ameba::Rule::Performance
return unless obj.args.empty? && obj.block.nil?
return unless method = call_names[obj.name]?

return unless name_location = obj.name_location
return unless name_location = name_location(obj)
return unless end_location = name_end_location(node)

msg = MSG % {method, obj.name}
Expand Down
4 changes: 3 additions & 1 deletion src/ameba/rule/performance/first_last_after_filter.cr
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,8 @@ module Ameba::Rule::Performance
# - select
# ```
class FirstLastAfterFilter < Base
include AST::Util

properties do
description "Identifies usage of `first/last/first?/last?` calls that follow filters"
filter_names %w(select)
Expand All @@ -47,7 +49,7 @@ module Ameba::Rule::Performance

message = node.name.includes?(CALL_NAMES.first) ? MSG : MSG_REVERSE

issue_for obj.name_location, node.name_end_location,
issue_for name_location(obj), name_end_location(node),
message % {obj.name, node.name}
end
end
Expand Down
4 changes: 3 additions & 1 deletion src/ameba/rule/performance/flatten_after_map.cr
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,8 @@ module Ameba::Rule::Performance
# Enabled: true
# ```
class FlattenAfterMap < Base
include AST::Util

properties do
description "Identifies usage of `flatten` calls that follow `map`"
end
Expand All @@ -37,7 +39,7 @@ module Ameba::Rule::Performance
return unless obj.is_a?(Crystal::Call) && obj.block
return unless obj.name == "map"

issue_for obj.name_location, node.name_end_location, MSG
issue_for name_location(obj), name_end_location(node), MSG
end
end
end
4 changes: 3 additions & 1 deletion src/ameba/rule/performance/map_instead_of_block.cr
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,8 @@ module Ameba::Rule::Performance
# Enabled: true
# ```
class MapInsteadOfBlock < Base
include AST::Util

properties do
description "Identifies usage of `sum/product` calls that follow `map`"
end
Expand All @@ -40,7 +42,7 @@ module Ameba::Rule::Performance
return unless obj.is_a?(Crystal::Call) && obj.block
return unless obj.name == MAP_NAME

issue_for obj.name_location, node.name_end_location,
issue_for name_location(obj), name_end_location(node),
MSG % {node.name, node.name}
end
end
Expand Down
8 changes: 5 additions & 3 deletions src/ameba/rule/performance/minmax_after_map.cr
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,8 @@ module Ameba::Rule::Performance
# Enabled: true
# ```
class MinMaxAfterMap < Base
include AST::Util

properties do
description "Identifies usage of `min/max/minmax` calls that follow `map`"
end
Expand All @@ -42,14 +44,14 @@ module Ameba::Rule::Performance
return unless (obj = node.obj) && obj.is_a?(Crystal::Call)
return unless obj.name == "map" && obj.block && obj.args.empty?

return unless name_location = obj.name_location
return unless end_location = node.name_end_location
return unless name_location = name_location(obj)
return unless end_location = name_end_location(node)

of_name = node.name.sub(/(.+?)(\?)?$/, "\\1_of\\2")
message = MSG % {of_name, node.name}

issue_for name_location, end_location, message do |corrector|
next unless node_name_location = node.name_location
next unless node_name_location = name_location(node)

# TODO: switching the order of the below calls breaks the corrector
corrector.replace(
Expand Down
4 changes: 3 additions & 1 deletion src/ameba/rule/performance/size_after_filter.cr
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,8 @@ module Ameba::Rule::Performance
# - reject
# ```
class SizeAfterFilter < Base
include AST::Util

properties do
description "Identifies usage of `size` calls that follow filter"
filter_names %w(select reject)
Expand All @@ -49,7 +51,7 @@ module Ameba::Rule::Performance
return unless obj.is_a?(Crystal::Call) && obj.block
return unless obj.name.in?(filter_names)

issue_for obj.name_location, node.name_end_location, MSG % obj.name
issue_for name_location(obj), name_end_location(node), MSG % obj.name
end
end
end
4 changes: 3 additions & 1 deletion src/ameba/rule/style/is_a_filter.cr
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,8 @@ module Ameba::Rule::Style
# - one?
# ```
class IsAFilter < Base
include AST::Util

properties do
description "Identifies usage of `is_a?/nil?` calls within filters"
filter_names %w(select reject any? all? none? one?)
Expand All @@ -54,7 +56,7 @@ module Ameba::Rule::Style

def test(source, node : Crystal::Call)
return unless node.name.in?(filter_names)
return unless filter_location = node.name_location
return unless filter_location = name_location(node)
return unless block = node.block
return unless (body = block.body).is_a?(Crystal::IsA)
return unless (path = body.const).is_a?(Crystal::Path)
Expand Down
6 changes: 3 additions & 3 deletions src/ameba/rule/style/verbose_block.cr
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ module Ameba::Rule::Style
CALL_PATTERN = "%s(%s&.%s)"

protected def same_location_lines?(a, b)
return unless a_location = a.name_location
return unless a_location = name_location(a)
return unless b_location = b.location

a_location.line_number == b_location.line_number
Expand Down Expand Up @@ -78,7 +78,7 @@ module Ameba::Rule::Style

protected def valid_line_length?(node, code)
if max_line_length = self.max_line_length
if location = node.name_location
if location = name_location(node)
final_line_length = location.column_number + code.size
return final_line_length <= max_line_length
end
Expand Down Expand Up @@ -203,7 +203,7 @@ module Ameba::Rule::Style
return unless valid_line_length?(call, call_code)
return unless valid_length?(call_code)

return unless location = call.name_location
return unless location = name_location(call)
return unless end_location = block.end_location

if call_code.includes?("{...}")
Expand Down

0 comments on commit e103282

Please sign in to comment.