shard-ameba/src/ameba/rule/style/method_names.cr

63 lines
1.2 KiB
Crystal
Raw Normal View History

module Ameba::Rule::Style
2017-11-04 20:54:27 +00:00
# A rule that enforces method names to be in underscored case.
#
# For example, these are considered valid:
#
# ```
# class Person
# def first_name
# end
#
# def date_of_birth
# end
#
# def homepage_url
# end
# end
# ```
#
# And these are invalid method names:
#
# ```
# class Person
# def firstName
# end
#
# def date_of_Birth
# end
#
# def homepageURL
# end
# end
# ```
#
# YAML configuration example:
#
# ```
# Style/MethodNames:
# Enabled: true
# ```
2017-11-07 21:50:25 +00:00
struct MethodNames < Base
2017-11-22 06:44:29 +00:00
properties do
description "Enforces method names to be in underscored case"
2017-11-22 06:44:29 +00:00
end
MSG = "Method name should be underscore-cased: %s, not %s"
2017-11-04 20:54:27 +00:00
def test(source, node : Crystal::Def)
return if (expected = node.name.underscore) == node.name
line_number = node.location.try &.line_number
column_number = node.name_location.try &.column_number
return unless line_number && column_number
issue_for(
{line_number, column_number},
{line_number, column_number + node.name.size - 1},
MSG % {expected, node.name}
)
2017-11-04 20:54:27 +00:00
end
end
end